如何引入多个PdfPageEventHelper实例?

时间:2013-03-06 14:50:17

标签: .net itextsharp

我必须使用itextsharp库生成大量不同类型的文档,所有文档都有共同点,有些具有常见的标题,页面计数,我最初尝试的水印是具有不同的PdfPageEventHelper子类,例如WatermarkPdfPageEventHelper,OrderHeaderPdfPageEventHelper, PageNumberPdfPageEventHelper等并在必要时应用它们来组成文档,但是PageEvent实际上不是一个事件而只是一个IPdfEvent的实例,实现它的正确方法是什么?

2 个答案:

答案 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;        }

之后,只需添加到文档中。希望这会有所帮助。