0

itextsharp ライブラリを使用して大量のさまざまな種類のドキュメントを生成する必要があります。すべてに共通点があり、一部には共通のヘッダー、ページ数、透かしがあります。たとえば、 WatermarkPdfPageEventHelper 、 OrderHeaderPdfPageEventHelper 、 PageNumberPdfPageEventHelper など、さまざまな PdfPageEventHelper サブクラスを持つことでした。ドキュメントを構成するために必要なときにそれらを適用しますが、 PageEvent は実際にはイベントではなく、1 つの IPdfEvent のみのインスタンスです。これを実装する正しい方法は何ですか?

4

2 に答える 2

1

私は iText の Java バージョンの作成者です。私の答えは、C# ポートには当てはまらないかもしれません。

ページ イベントは累積できます。

writer.setPageEvent(watermarkevent);
writer.setPageEvent(headerevent);
writer.setPageEvent(footerevent);

内部的に aPdfPageEventForwarderが作成されます。このオブジェクトは、各イベントが追加した順序で確実にトリガーされるようにします。

イベントを削除したい場合は、次のようにするだけです。

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 に答える