2010-04-08 95 views
10

這很奇怪,我目前正在使用iTextSharp,並且我想爲我的PDF添加頁眉&頁腳。在所有的例子中,他們只是創建一個新的HeaderFooter()對象。但是,我有iTextSharp庫全部導入,但HeaderFooter未定義。我使用了Reflector來查看我是否能夠找出這個班級的位置以及它的遺失情況?iTextSharp缺少HeaderFooter類

有人知道這個班發生了什麼嗎?

回答

12

大多數示例都指向早期版本的iTextSharp。對於iTextSharp的版本5+(我假設你正在使用),HeaderFooter屬性/對象已被刪除。

http://itextpdf.com/history/?branch=50&node=500(最後一行)

要添加頁眉/頁腳現在你必須使用PageEvents。以下代碼演示瞭如何在VB中執行此操作。您基本上必須繼承PageEventsHelper類並觀察OnStartPage事件 - 然後根據需要添加您的代碼。

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 

它看起來像更多的工作,但有一個好處,你可以添加更多的頭/腳,而不僅僅是純文本。現在您可以輕鬆添加文檔將支持的任何內容。

+0

這是一個非常有用的帖子。但是我添加了一個非常大的段落,在爲'Newpage()'編寫代碼之前,需要大約2-3頁。然後標題將不會應用於所有頁面。如何處理這種情況。在此先感謝 – suryakiran 2011-04-12 11:27:31

+0

自從我玩過iTextSharp已經有一段時間了,但我認爲您會發現您的頁眉將應用於所有頁面。通過上面的示例,我使用pdfDoc.NewPage()強制創建一個新頁面,但如果添加一個跨越多個頁面的段落,iTextSharp會自動爲您創建一個新頁面,從而導致OnStartPage被觸發。 – CResults 2011-04-12 11:33:28

+1

沒有。我剛剛嘗試過,它不適合我。但有趣的是,我發現當頁面結束時會觸發'OnEndPage(PdfWriter writer,Document document)',而當頁面自動創建時,不會觸發'OnStartPage(PdfWriter writer,Document document)'。似乎應該從OnStartPage到OnEndPage中的代碼發生更改。 – suryakiran 2011-04-13 05:25:19