我必须使用 itextsharp 库生成大量不同类型的文档,它们都有共同点,有些有共同的标题、页数、水印必要时应用它们来编写文档,但 PageEvent 并不是真正的事件,而是只有一个 IPdfEvent 的实例,实现这一点的正确方法是什么?
问问题
926 次
2 回答
1
我是 iText 的 Java 版本的作者。我的回答可能不适用于 C# 端口。
页面事件可以是累积的:
writer.setPageEvent(watermarkevent);
writer.setPageEvent(headerevent);
writer.setPageEvent(footerevent);
在内部,PdfPageEventForwarder
创建了 a。该对象将确保每个事件按照您添加它们的顺序触发。
当你想删除事件时,你只需要这样做:
writer.setPageEvent(null);
在您的情况下,您可以创建自己的PdfPageEventForwarder
实例,创建不同的页面事件组合。
我很确定您可以在 iTextSharp 中做同样的事情,尽管类和方法名称可能略有不同。
于 2013-03-09T12:31:08.980 回答
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; }
之后,只需添加到文档中。希望这可以帮助。
于 2013-03-06T15:02:45.000 回答