0

我必须使用 itextsharp 库生成大量不同类型的文档,它们都有共同点,有些有共同的标题、页数、水印必要时应用它们来编写文档,但 PageEvent 并不是真正的事件,而是只有一个 IPdfEvent 的实例,实现这一点的正确方法是什么?

4

2 回答 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 回答