我必须使用itextsharp库生成大量不同类型的文档,所有文档都有共同点,有些具有常见的标题,页面计数,我最初尝试的水印是具有不同的PdfPageEventHelper子类,例如WatermarkPdfPageEventHelper,OrderHeaderPdfPageEventHelper, PageNumberPdfPageEventHelper等并在必要时应用它们来组成文档,但是PageEvent实际上不是一个事件而只是一个IPdfEvent的实例,实现它的正确方法是什么?
答案 0 :(得分:1)
我是iText Java版的作者。我的回答可能不适用于C#端口。
页面事件可以累积:
writer.setPageEvent(watermarkevent);
writer.setPageEvent(headerevent);
writer.setPageEvent(footerevent);
在内部,创建了PdfPageEventForwarder
。此对象将确保按添加顺序触发每个事件。
如果要删除事件,只需执行以下操作:
writer.setPageEvent(null);
在您的情况下,您可以创建自己的PdfPageEventForwarder
个实例,创建不同的页面事件组合。
我很确定你可以在iTextSharp中做同样的事情,尽管类和方法名称可能略有不同。
答案 1 :(得分:0)
这是我在需要创建不同文档通用的自定义页脚时所做的。这个页脚只是一个多行页脚。
首先,创建自定义页脚:
public class CustomFooter : PdfPageEventHelper
{
private string[] _Phrases;
private Font _CustomFooterFont;
public string[] phrases
{
get { return _Phrases; }
set { _Phrases = value; }
}
public Font customFont {
get { return _CustomFooterFont; }
set { _CustomFooterFont = value; }
}
public override void OnEndPage(PdfWriter writer, iTextSharp.text.Document document)
{
base.OnEndPage(writer, document);
iTextSharp.text.Rectangle rect = writer.GetBoxSize("footer");
for (int i = 0; i < this.phrases.Length; i++)
{
Phrase currentPhrase;
currentPhrase = new Phrase(_Phrases[i], _CustomFooterFont);
ColumnText.ShowTextAligned(writer.DirectContent,
iTextSharp.text.Element.ALIGN_LEFT, currentPhrase,
rect.Left, rect.Bottom +20 - (i * 9), 0);
}
}
}
当需要其中一个页脚时,我会调用此函数:
public static CustomFooter getMultilineFooter(string[] Phrases)
{
CustomFooter result = new CustomFooter();
result.phrases = Phrases;
result.customFont = myCustomFooterFont;
result.customBoldFont = myCustomFooterBoldFont;
return result; }
之后,只需添加到文档中。希望这会有所帮助。