0

ASP.NETを使用して PDF を生成するために itext.dll を使用しています。ドキュメントに次の形式のフッターが必要です。

    Page 1 of 6 

    HeaderFooter footer = new HeaderFooter(new Phrase("Page"), new Phrase(" of 6")); 
    footer.setBorder(Rectangle.NO_BORDER); 
    footer.setAlignment(Element.ALIGN_CENTER); 
    document.setFooter(footer); 

総ページ数をハードコーディングせずにこれは可能ですか? つまり、ドキュメントの総ページ数を取得する方法はありますか?

4

1 に答える 1

2

これを行うには(少なくとも)2つの方法があることがわかりました。

1 つは、フッターなしでドキュメントを作成し、その後、PdfStamper合計でページ番号をスタンプするために使用することです。しかし、スタンパー製品を出力するときにいくつかの問題が発生しMemoryStream、同時にストリームを閉じずにスタンパーを閉じる方法がないようです。

もう 1 つの方法は、合計ページ数を表す の 1 つのインスタンスを作成しPdfTemplate、それをすべてのページのフッターまたは必要な場所に追加することです。

次に、独自のPdfPageEventHelperクラスを使用して、テンプレートに総ページ数を入力できる OnCloseDocument メソッドを実装できます。

public override void OnCloseDocument(PdfWriter writer, Document document)
{
    PageCountTemplate.BeginText();
    PageCountTemplate.SetFontAndSize(HeaderFont.BaseFont, HeaderFont.Size);
    PageCountTemplate.ShowText((writer.CurrentPageNumber - 1).ToString());
    PageCountTemplate.EndText();
}

私も個人的OnOpenDocumentにテンプレートを作成し、OnEndPage各ページに書き込むために使用しています。

編集: Jan の質問に答えるにOnCloseDocumentは、ドキュメント全体が作成されたときに 1 回だけ呼び出されます。と呼ばれるときDoc.Close()、つまり。

于 2009-11-16T13:36:13.740 に答える