iTextライブラリを使用して動的にPDFファイルを作成しました。PDF のページにヘッダーとフッターを追加したいと思います。このために、特定のコードを追加しました。
document.addHeader("My Header Title", "My Header Details");
しかし、私の PDF のページでは、このヘッダーを設定できませんでした。私が知らない問題は何ですか、それに関連するアイデアがあれば、あなたの考えを共有してください.
iTextライブラリを使用して動的にPDFファイルを作成しました。PDF のページにヘッダーとフッターを追加したいと思います。このために、特定のコードを追加しました。
document.addHeader("My Header Title", "My Header Details");
しかし、私の PDF のページでは、このヘッダーを設定できませんでした。私が知らない問題は何ですか、それに関連するアイデアがあれば、あなたの考えを共有してください.
最初に、この質問の受け入れられた回答を参照してください。
その答えは非常に役に立ちます(そしてそれは私を助けました)。
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#に変換しただけです。ただし、私が行ったように、必要に応じてこれをカスタマイズできます。
そのように追加できます
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);