我知道这个问题已被问了一千次,但我还没有找到一个直截了当的答案.我对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
传递给事件的对象添加内容.此对象仅可用于只读目的.
如果您检查类中的OnEndPage()
方法MyHeaderFooterEvent
,您会看到我们DirectContent
从编写器获取,并且我们canvas
使用ShowTextAligned
方法向此添加内容.还有许多其他方法可以添加内容,但您明确要求最简单的方法.这种方式有其局限性,但很容易.
我使用了几个硬编码值:我用作页眉和页脚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将尝试尽快刷新页面内容.如果在添加内容后添加代码以添加页眉/页脚,则无法返回向已刷新到输出流的页面添加页眉和页脚.