2010-04-08 4 views
10

Questo è strano, attualmente sto usando iTextSharp e voglio aggiungere un'intestazione & Piè di pagina ai miei PDF. In tutti gli esempi, semplicemente creano un nuovo oggetto HeaderFooter(). Tuttavia, ho importato tutte le librerie iTextSharp ma HeaderFooter non è definito. Ho usato Reflector per vedere se riesco a scoprire dove si trova la classe e la sua mancanza ?!iTextSharp manca la classe HeaderFooter

Qualcuno sa cosa è successo a questa classe?

risposta

12

La maggior parte degli esempi si riferisce a una versione precedente di iTextSharp. Per la versione 5+ di iTextSharp (che presumo tu stia utilizzando) la proprietà/oggetto HeaderFooter è stata rimossa.

Vedi http://itextpdf.com/history/?branch=50&node=500 (ultima riga)

Per aggiungere intestazioni/piè di pagina ora è necessario utilizzare PageEvents. Il seguente codice mostra come eseguire ciò in VB. In pratica devi ereditare la classe PageEventsHelper e guardare l'evento OnStartPage, quindi aggiungere il codice se necessario.

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 

Sembra inizialmente come più lavoro, ma ha la testa che si può aggiungere di più per l'intestazione/piè di pagina di solo testo. Ad esempio, ora puoi aggiungere facilmente tutto ciò che Document supporta.

+0

Questo è stato un post molto utile. Ma ho aggiunto un paragrafo che è molto grande e ci vorranno circa 2-3 pagine prima di scrivere un codice per 'Newpage()'. Quindi l'intestazione non verrà applicata per tutte le pagine. come gestire tale caso. Grazie in anticipo – suryakiran

+0

È da un po 'che non gioco con iTextSharp, ma penso che troverai che la tua intestazione sarà applicata a tutte le pagine. Con il mio esempio sopra sto forzando una nuova pagina con pdfDoc.NewPage() ma se aggiungi un paragrafo che si estende su più di una pagina viene creata automaticamente una nuova pagina per te da iTextSharp che causa l'attivazione di OnStartPage. – CResults

+1

No. Ho appena provato, non funziona per me. Ma interessante, ho trovato che 'OnEndPage (PdfWriter writer, Document document)' viene attivato ogni volta che la pagina è terminata ma non 'OnStartPage (PdfWriter writer, Document document)' quando una pagina viene creata automaticamente. Sembra che ci dovrebbe essere un cambiamento nel codice da OnStartPage a OnEndPage. – suryakiran