私のpdfには、複数のヘッダーとフッターが必要です。ヘッダーでは、タイトルの見出しを左に、テキストを中央に配置します。
同様に、フッターでは、会社名を左側に、ページ番号を中央に、表の内容に関する情報を右側に印刷する必要があります。
非常に多くの投稿を見てきましたが、これを作成するための正しいアイデアが得られませんでした.誰かがサンプルコードスニペットで私を助けてください.Thank
ヘッダーとフッターは、「ページ イベント」を使用して追加する必要があります。例が必要な場合は、公式 Web サイトでヘッダー/フッターのキーワードを探してください。
PdfPageEventHelper
メソッドを拡張して実装するクラスを作成するだけonEndPage()
です。ドキュメントを読んだ人は、このメソッドを使用する際によくある間違いを犯すことはありませんがonStartPage()
、これを見落としている可能性があるため、これを追加の警告として追加します。
メソッドを使用して、クラスのインスタンスを PdfWriter オブジェクトに追加しますsetPageEvent()
。
「複数の」ヘッダーの意味を理解しているかどうかわかりません。ページ イベントの実装が複数ある場合は、setPageEvent()
メソッドを使用してそれらをすべて追加すると、すべてが実行されます。あるページ イベントの実装から別の実装に切り替える場合は、setPageEvent(null)
最初に使用する必要があります。
ヘッダーをページごとに異なるものにしたい場合は、ページ イベントの実装でメンバー変数を使用し、途中で変更してください。MovieHistory2という書籍の例では、ヘッダーのテキストがString
という名前の配列に格納されていheader
ます。
ヘッダーの位置は、ページ番号によって異なります。
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("art");
switch(writer.getPageNumber() % 2) {
case 0:
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, header[0],
rect.getRight(), rect.getTop(), 0);
break;
case 1:
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_LEFT, header[1],
rect.getLeft(), rect.getTop(), 0);
break;
}
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_CENTER, new Phrase(String.format("page %d", pagenumber)),
(rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
}
偶数ページ番号の場合、ヘッダーは右側に追加されます。左の奇数ページ番号の場合。ご覧のとおり、フッターは中央に配置されています。
ヘッダーテーブルについても言及しています。テーブルを使用する場合は、MovieCountries1の例をご覧ください。
あなたはこう言います:「私は非常に多くの投稿を見てきましたが、これを作成するための正しいアイデアが得られませんでした.」ドキュメント、具体的には「iText in Action — Second Edition」という本の第 5 章を読むことで、正しいアイデアを得ることができます。