Sto cercando di creare un piè di pagina su ciascuna delle pagine in un documento PDF utilizzando iTextSharp nel formato Pagina # di # seguendo il tutorial sulle pagine di iText e sul libro. Anche se continuo a ricevere un'eccezione su cb.SetFontAndSize (helv, 12); - il riferimento all'oggetto non è impostato su un oggetto. Qualcuno può vedere il problema? Il codice è sottoiTextSharp Creazione di una pagina di piè di pagina # di #
Grazie, 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();
}
}
Is onDocumentLoad realtà sempre chiamato prima OnPageEnd? – Lazarus
quando si passa attraverso il codice, viene definita helv correttamente? – Geoff
Stavo guardando troppo in profondità e ho mancato l'ovvio, hai ragione, OnOpenDocument non viene chiamato così in helper OnEndPage non è nulla. L'ho rintracciato in uno stupido errore mentre stavo costruendo l'evento della pagina troppo tardi nel mio processo principale. Grazie per il tuo aiuto. –