【问题标题】:Header and Footer in ITextSharpITextSharp 中的页眉和页脚
【发布时间】:2015-12-27 19:56:20
【问题描述】:

我知道这个问题已经被问了一千次,但我还没有找到一个直截了当的答案。我对 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!");
    }

我对如何添加页眉和页脚进行了大量研究,但它们都与复杂的页面事件有关。有没有更简单的方法?如果没有,你能一步一步地引导我完成这个过程吗?我真的很感激你们能提供的任何帮助。谢谢!

【问题讨论】:

  • 你必须使用页面事件。但它们并不复杂。
  • 你能快速指导我完成这个过程吗?
  • @Bruno 的回答让您满意吗?我不知道如何更好地解释它。

标签: c# itextsharp


【解决方案1】:

您正在像这样创建您的Document

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

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

官方网站有大量示例和全面的问答部分。所有示例和答案都已标记。如果你点击header标签,你会发现很多例子。

正如 cmets 中其他人已经指出的那样,您需要创建一个 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() 方法,您会看到我们从作者那里获得了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。 iTextSharp 将尝试尽快刷新页面的内容。如果您在添加内容之后添加代码以添加页眉/页脚,则无法返回为已刷新到输出流的页面添加页眉和页脚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 2015-03-04
    • 2011-05-07
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多