2010-04-08 28 views
10

Điều này thật lạ, tôi hiện đang sử dụng iTextSharp và tôi muốn thêm Đầu trang & Chân trang vào tệp PDF của tôi. Trong tất cả các ví dụ, chúng chỉ cần tạo một đối tượng HeaderFooter() mới. Tuy nhiên, tôi có thư viện iTextSharp tất cả được nhập nhưng HeaderFooter không được định nghĩa. Tôi đã sử dụng Reflector để xem liệu tôi có thể tìm ra nơi ở của lớp và thiếu sót của nó không ?!iTextSharp thiếu lớp HeaderFooter

Có ai biết điều gì đã xảy ra với lớp học này không?

Trả lời

12

Hầu hết các ví dụ đều đề cập đến phiên bản trước đó của iTextSharp. Đối với phiên bản 5+ của iTextSharp (mà tôi cho rằng bạn đang sử dụng) thuộc tính/đối tượng HeaderFooter đã bị loại bỏ.

Xem http://itextpdf.com/history/?branch=50&node=500 (dòng cuối cùng)

Để thêm Headers/Footers bây giờ bạn phải sử dụng PageEvents. Các mã sau đây chứng tỏ làm thế nào để làm điều này trong VB. Về cơ bản, bạn phải kế thừa lớp PageEventsHelper và xem sự kiện OnStartPage - sau đó thêm mã của bạn nếu cần.

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 

Ban đầu, nó trông giống như nhiều công việc hơn nhưng có xu hướng bạn có thể thêm vào đầu trang/chân trang của mình hơn là văn bản thuần túy. Bây giờ bạn có thể dễ dàng thêm bất cứ điều gì mà Tài liệu sẽ hỗ trợ.

+0

Đó là một bài đăng rất hữu ích. Nhưng tôi đã thêm một đoạn rất lớn và nó sẽ mất khoảng 2-3 trang trước khi tôi viết một mã cho 'Newpage()'. Sau đó, tiêu đề sẽ không được áp dụng cho tất cả các trang. làm thế nào để xử lý trường hợp như vậy. Cảm ơn trước – suryakiran

+0

Đã lâu rồi kể từ khi tôi chơi với iTextSharp nhưng tôi nghĩ bạn sẽ thấy tiêu đề của mình sẽ được áp dụng cho tất cả các trang. Với ví dụ của tôi ở trên tôi đang buộc một trang mới với pdfDoc.NewPage() nhưng nếu bạn thêm một đoạn kéo dài nhiều hơn một trang, một trang mới được tạo tự động cho bạn bởi iTextSharp khiến OnStartPage được kích hoạt. – CResults

+1

Không. Tôi vừa thử, nó không làm việc cho tôi. Nhưng thú vị, tôi thấy rằng 'OnEndPage (PdfWriter writer, Document document) 'được kích hoạt bất cứ khi nào trang được kết thúc nhưng không phải' OnStartPage (PdfWriter writer, Document document) 'khi một trang được tạo tự động. Có vẻ như có sự thay đổi mã từ OnStartPage thành OnEndPage. – suryakiran

Các vấn đề liên quan