ITextSharp中的页眉和页脚

我知道这个问题已被问了一千次,但我还没有找到一个直截了当的答案。 我对ITextSharp比较陌生,所以请解释好像你和一个小孩说话。 如何在我正在创建的文档中添加一个简单的文本页眉和页脚?

我正在使用以下代码创建一个简单的pdf文档:

void Button1Click(object sender, EventArgs e) { Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(@"File Path", FileMode.Create)); doc.Open(); Paragraph par1 = new Paragraph("Hello World!"); doc.Add(par1); //Code to add header/footer doc.Close(); MessageBox.Show("Your PDF has been created!"); } 

我已经做了很多关于如何添加页眉和页脚的研究,但它们都与复杂的页面事件有关。 有没有更简单的方法? 如果没有,你能一步一步地完成整个过程吗? 我非常感谢你们所能给予的任何帮助。 谢谢!

您正在创建这样的Document

 Document doc = new Document(iTextSharp.text.PageSize.LEDGER, 10, 10, 42, 35); 

这意味着您有42个用户单位的上边距和35个用户单位的下边距。 您可以使用此边距在页面事件中添加额外内容。

官方网站有很多例子和全面的问答部分。 所有示例和答案都被标记。 如果单击标题标记,可以找到大量示例。

正如评论中其他人已经指出的那样,您需要创建一个PdfPageEvent实现。 最简单的方法是扩展PdfPageEventHelper类。

 class MyHeaderFooterEvent : PdfPageEventHelper { Font FONT = new Font(Font.FontFamily.HELVETICA, 18, Font.BOLD); public override void OnEndPage(PdfWriter writer, Document document) { PdfContentByte canvas = writer.DirectContent; ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Header", FONT), 10, 810, 0 ); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Footer", FONT), 10, 10, 0 ); } } 

重要的是要知道:

  • 禁止在OnStartPage()事件中添加内容。 在iTextSharp移动到新页面之前将所有内容添加到页面时添加页眉和页脚。 更具体地说:在OnEndPage()事件中添加内容。
  • 禁止向传递给事件的Document对象添加内容。 此对象仅可用于只读目的。

如果检查MyHeaderFooterEvent类中的OnEndPage()方法,您会看到我们从MyHeaderFooterEvent获取DirectContent ,并且我们使用ShowTextAligned方法向此canvas添加内容。 还有许多其他方法可以添加内容,但您明确要求最简单的方法。 这种方式有其局限性,但很容易。

我使用了几个硬编码值:我使用10作为页眉和页脚的x值。 那是因为您定义了10个用户单位的左边距。 页眉和页脚与您要添加到页面的实际内容保持对齐。 我使用810作为标题的y值,因为您正在创建一个顶部边距为42的A4页面。页面的顶部y坐标是842.顶部边距的顶部y坐标是842 – 42 = 800。我添加了10个用户单元,这样您的标题就不会粘贴到实际内容上。 页面的底部y坐标在您的情况下为0,边距的底部y坐标在35中。我使用10作为页脚的基线。

您创建了wri并在创建此PdfWriter实例后立即打开了Document实例。 要使页面事件生效,您应该在打开Document之前添加以下链接:

 wri.PageEvent = new MyHeaderFooterEvent(); 

现在每次主进程完成页面时都会调用OnEndPage()方法。

重要提示:您添加了//Code to add header/footer在不正确的位置//Code to add header/footer 。 iTextSharp将尝试尽快刷新页面内容。 如果在添加内容添加代码以添加页眉/页脚,则无法返回向已刷新到输出流的页面添加页眉和页脚。