2010-04-08 11 views
10

Esto es raro, actualmente estoy usando iTextSharp y quiero añadir un Encabezado y pie & a mis archivos PDF. En todos los ejemplos, simplemente crean un nuevo objeto HeaderFooter(). Sin embargo, tengo todas las bibliotecas de iTextSharp importadas, pero el HeaderFooter no está definido. He usado Reflector para ver si puedo averiguar dónde está la clase y me falta.iTextSharp falta clase HeaderFooter

¿Alguien sabe qué ha sido de esta clase?

Respuesta

12

mayoría de los ejemplos se refieren a una versión anterior de iTextSharp. Para la versión 5+ de iTextSharp (que supongo que está utilizando), se ha eliminado la propiedad/el objeto HeaderFooter.

Ver http://itextpdf.com/history/?branch=50&node=500 (última línea)

Para agregar un encabezado/pie ahora se debe utilizar PageEvents. El siguiente código demuestra cómo hacer esto en VB. Básicamente, debe heredar la clase PageEventsHelper y observar el evento OnStartPage, luego agregue su código según sea necesario.

Imports iTextSharp.text.pdf 
Imports iTextSharp.text 
Imports System.IO 
Module Module1 
    Sub Main() 
     Dim pdfDoc As New Document() 
     Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream("tryme2.pdf", FileMode.Create)) 
     Dim ev As New itsEvents 
     pdfWrite.PageEvent = ev 
     pdfDoc.Open() 
     pdfDoc.Add(New Paragraph("Hello World")) 
     pdfDoc.NewPage() 
     pdfDoc.Add(New Paragraph("Hello World Again")) 
     pdfDoc.Close() 
    End Sub 
End Module 

Public Class itsEvents 
    Inherits PdfPageEventHelper 
    Public Overrides Sub OnStartPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document) 
     Dim ch As New Chunk("This is my Stack Overflow Header on page " & writer.PageNumber) 
     document.Add(ch) 
    End Sub 
End Class 

En un principio parece más trabajo, pero tiene el aspecto positivo que se puede agregar más a su encabezado/pie de sólo texto sin formato. Ahora puede, por ejemplo, agregar fácilmente cualquier cosa que soporte el documento.

+0

Esa fue una publicación muy útil. Pero he agregado un párrafo que es muy grande y tomará alrededor de 2-3 páginas antes de escribir un código para 'Newpage()'. Entonces, el encabezado no se aplicará a todas las páginas. cómo manejar tal caso. Gracias de antemano – suryakiran

+0

Ha pasado un tiempo desde que jugué con iTextSharp, pero creo que verá que su encabezado se aplicará a todas las páginas. Con mi ejemplo anterior, estoy forzando una nueva página con pdfDoc.NewPage(), pero si agrega un párrafo que abarca más de una página, iTextSharp creará automáticamente una página nueva que hará que se active OnStartPage. – CResults

+1

No. Lo he intentado, no funciona para mí. Pero interesante, encontré que 'OnEndPage (escritor PdfWriter, documento de documento) 'se activa cada vez que la página finaliza, pero no' OnStartPage (escritor PdfWriter, documento de documento) 'cuando una página se crea automáticamente. Parece que debería haber un cambio en el código de OnStartPage a OnEndPage. – suryakiran