Estoy tratando de crear un pie de página en cada una de las páginas de un documento PDF utilizando iTextSharp en el formato Número de página de # siguiendo el tutorial en las páginas iText y el libro. Aunque recibo una excepción en cb.SetFontAndSize (helv, 12); - referencia de objeto no establecida en un objeto. ¿Alguien puede ver el problema? El código está abajo.iTextSharp Creación de un pie de página Número de página #
Gracias, 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();
}
}
Está onDocumentLoad consiguiendo realmente llama antes OnPageEnd? – Lazarus
cuando revisa el código, ¿está helv definido correctamente? – Geoff
Estaba mirando demasiado profundamente y pasé por alto lo obvio, ambos tienen razón, OnOpenDocument no se llama así que en OnEndPage helv no es nada. Lo remonté a un error tonto ya que estaba construyendo el evento de la página demasiado tarde en mi proceso principal. Gracias por su ayuda, chicos. –