4

iTextライブラリを使用して動的にPDFファイルを作成しました。PDF のページにヘッダーフッターを追加したいと思います。このために、特定のコードを追加しました。

document.addHeader("My Header Title", "My Header Details");

しかし、私の PDF のページでは、このヘッダーを設定できませんでした。私が知らない問題は何ですか、それに関連するアイデアがあれば、あなたの考えを共有してください.

4

4 に答える 4

2

最初に、この質問の受け入れられた回答を参照してください。
その答えは非常に役に立ちます(そしてそれは私を助けました)。
C#でプログラミングしている場合に備えて、これは同じ受け入れられた答えですが、C#バージョンです

/// <summary>
/// Inner class to add a header and a footer.
/// </summary>
internal class HeaderFooter : PdfPageEventHelper
{
    private Phrase[] header = new Phrase[2];
    private int pageNumber;

    public override void OnOpenDocument(PdfWriter writer, Document document)
    {
        header[0] = new Phrase("Smares in Header");
    }

    public override void OnChapter(PdfWriter writer, Document document, float paragraphPosition, Paragraph title)
    {
        header[1] = new Phrase(title.Content);
        pageNumber = 1;
    }

    public override void OnStartPage(PdfWriter writer, Document document)
    {
        pageNumber++;
    }

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        Rectangle rect = writer.GetBoxSize("art");
        switch (writer.PageNumber % 2)
        {
            case 0:
                ColumnText.ShowTextAligned(writer.DirectContent,
                        Element.ALIGN_RIGHT, header[0],
                        rect.Right, rect.Top, 0);
                break;
            case 1:
                ColumnText.ShowTextAligned(writer.DirectContent,
                        Element.ALIGN_LEFT, header[1],
                        rect.Left, rect.Top, 0);
                break;
        }

        ColumnText.ShowTextAligned(writer.DirectContent,
                Element.ALIGN_CENTER, new Phrase(String.Format("page {0}", pageNumber)),
                (rect.Left + rect.Right) / 2, rect.Bottom - 18, 0);
    }
}

イベントの登録は次のようになります。

using (MemoryStream ms = new MemoryStream())
{
    using (Document doc = new Document(PageSize.A4, -30, -30, 45, 45))
    {
        using (PdfWriter writer = PdfWriter.GetInstance(doc, ms))
        {
             HeaderFooter ev = new HeaderFooter();
             writer.SetBoxSize("art", new Rectangle(36, 54, 559, 788));
             writer.PageEvent = ev;

             // continue your code here 
        }
    }
}

注:これは、受け入れられた回答をJavaからC#に変換しただけです。ただし、私が行ったように、必要に応じてこれをカスタマイズできます。

于 2016-06-23T09:56:33.383 に答える
-3

そのように追加できます

HeaderFooter header = new HeaderFooter(new Phrase("Add Header Part Here"), false);  
HeaderFooter footer = new HeaderFooter(new Phrase("Add Footer Here"), new Phrase("."));  

document.setHeader(header);  
document.setFooter(footer); 
于 2013-06-20T13:24:56.017 に答える