2016-10-25 16 views
2

私は現在iTextを初めて使っています。段落と次の表の間の改ページを防ぐ方法

テーブル 'タイトル'を印刷してから、テーブル自体を印刷したいと考えています。何が起こっているのは、データによっては、ページの下に表のタイトルが表示され、次のページで表が開始されることがあります。

テーブルのタイトルとテーブルを一緒に保ちたい、つまりタイトルの後にテーブルを開始する余地がない場合は、両方を次のページに移動します。

現在、段落オブジェクトを作成し、その後にPDFTableオブジェクトを追加してタイトルを追加しています。私は現時点で何をしているのかを基本的に以下に示すいくつかのサンプルコードをタップしています:

// Add a table title 
Paragraph tableTitle = new Paragraph(); 
tableTitle .setAlignment(1); 
tableTitle .add("This is my table title"); 
tableTitle .setSpacingAfter(12); 
try { 
    document.add(tableTitle); 
} catch (DocumentException e) { 
    throw new ReportingException("Couldn't add section title", e); 
} 

// Now add the table 
PDFTable currentTable = new PdfPTable(3); 
// add the headers and data to the table etc... 
: 
: 

すべての参考になります。

おかげ

答えて

1

あなたはiTextのに新しく追加されたとして、私はあなたがPdfPTableを使用することを見るので、それは私はあなたがiTextの5を、使用していることを知っているiTextの5とiTextの7で開始していないのがベストでしょう。

iText 7は以前のバージョンと互換性がありません。 iText 5は、何度も何度も知られている多くの既知の技術的問題を解決するために、最初から書き直されました。あなたはiTextを初めてお使いになるので、それはあなたにとって重要ではありません。バージョン5から7に移行する必要のある古いコードはありません。

iText 7の使用方法の詳細については、 iText 7: Building BlocksチュートリアルChapter 4には、setKeepWithNext()メソッドがあります。このチュートリアルでは、この方法は、その章の最初の段落の同じページに章のタイトルを維持するために使用されます。

BufferedReader br = new BufferedReader(new FileReader(SRC)); 
String line; 
Div div = new Div(); 
while ((line = br.readLine()) != null) { 
    document.add(new Paragraph(line) 
     .setFont(bold).setFontSize(12) 
     .setMarginBottom(0) 
     .setKeepWithNext(true)); 
    div = new Div() 
     .setFont(font).setFontSize(11) 
     .setMarginBottom(18); 
    while ((line = br.readLine()) != null) { 
     div.add(
      new Paragraph(line) 
       .setMarginBottom(0) 
       .setFirstLineIndent(36) 
     ); 
     if (line.isEmpty()) { 
      document.add(div); 
      break; 
     } 
    } 
} 
document.add(div); 

あなたはiTextの5を使用して主張する場合は、回避策を使用しますが、その可能性コードが複雑になります。回避策にはColumnTextを使用することができます(コードの行数は大幅に増加します)。表タイトルをヘッダー行として追加します(ただし、表が異なるページに分散されている場合はタイトルが繰り返されます)。テーブルを "一緒に保持"されている(しかし、結合されたオブジェクトにどれだけのデータが格納されているかに応じて常に動作するとは限りません)。

関連する問題