23 Stimmen

iTextSharp Erstellen einer Fußzeile Seite # von #

Ich versuche, eine Fußzeile auf jeder der Seiten in einem PDF-Dokument mit iTextSharp im Format Seite # von # nach dem Tutorial auf den iText-Seiten und das Buch zu erstellen. Allerdings erhalte ich immer wieder eine Ausnahme bei cb.SetFontAndSize(helv, 12); - object reference not set to an object. Kann jemand das Problem sehen? Der Code ist unten.

Danke! Rob

public class MyPdfPageEventHelpPageNo : iTextSharp.text.pdf.PdfPageEventHelper
{
    protected PdfTemplate total;
    protected BaseFont helv;
    private bool settingFont = false;

    public override void OnOpenDocument(PdfWriter writer, Document document)
    {
        total = writer.DirectContent.CreateTemplate(100, 100);
        total.BoundingBox = new Rectangle(-20, -20, 100, 100);

        helv = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
    }

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        PdfContentByte cb = writer.DirectContent;
        cb.SaveState();
        string text = "Page " + writer.PageNumber + " of ";
        float textBase = document.Bottom - 20;
        float textSize = 12; //helv.GetWidthPoint(text, 12);
        cb.BeginText();
        cb.SetFontAndSize(helv, 12);
        if ((writer.PageNumber % 2) == 1)
        {
            cb.SetTextMatrix(document.Left, textBase);
            cb.ShowText(text);
            cb.EndText();
            cb.AddTemplate(total, document.Left + textSize, textBase);
        }
        else
        {
            float adjust = helv.GetWidthPoint("0", 12);
            cb.SetTextMatrix(document.Right - textSize - adjust, textBase);
            cb.ShowText(text);
            cb.EndText();
            cb.AddTemplate(total, document.Right - adjust, textBase);
        }
        cb.RestoreState();
    }

    public override void OnCloseDocument(PdfWriter writer, Document document)
    {
        total.BeginText();
        total.SetFontAndSize(helv, 12);
        total.SetTextMatrix(0, 0);
        int pageNumber = writer.PageNumber - 1;
        total.ShowText(Convert.ToString(pageNumber));
        total.EndText();
    }

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X