頁面事件(iText 5)與事件處理程式和渲染器(iText 7)

在 iText 5 中,我們引入了頁面事件的概念,允許開發人員在開啟文件,開啟新頁面,頁面結束以及文件關閉時新增特定行為。

在文件中,我們非常清楚地表明禁止onStartPage() 方法中新增內容; 內容只能在 onEndPage() 方法中新增。我們還非常清楚地表明,傳遞給頁面事件方法的 Document 物件用於只讀目的。即使在 onEndPage() 方法中也禁止使用 document.add()

不幸的是,許多開發人員完全忽略了文件,這導致了以下問題:

我記不清有多少次激動,因為另一位開發者釋出了這些問題的副本。人們常常想知道他們為什麼會得到一個嚴厲的答案,但是他們並沒有意識到他們這方面的最小努力會拯救每個人,包括他們自己,有充足的時間。所有這些問題都可以通過說“閱讀(你知道哪個)手冊”來回答。

另一種選擇是對 iText 進行徹底檢查,以避免出現這類問題。

由於 iText 的有機增長,頁面事件類也擴充套件了與頁面事件無關的功能。它包含通用塊功能,它註冊了段落的開頭和結尾,依此類推。

我們在 iText 7 中修復了什麼:

我們刪除了頁面事件功能。

對於關於頁面的所有事件,我們現在實現 IEventHandler 介面,並且我們使用 addEventHandler 將此處理程式作為 PdfDocumentEvent 新增到 PdfDocument。在示例中,我們使用了 END_PAGE 事件,但我們也可以使用 START_PAGE 事件。無論你是在開始還是在結尾新增內容,都無關緊要。你可以在處理事件中閱讀更多相關資訊 ; 設定檢視器首選項和編寫器屬性 ,這是 iText 7:Building Blocks教程中的第 7 章。

我們改進了構建塊,因為我們使它們更加層次化(參見開始之前:類和介面概述 ,即 iText 7:Building Blocks教程的介紹)。我們還引入了一組 Renderer 類,每個構建塊一個,我們允許開發人員調整這些渲染器,以便構建塊在渲染時顯示不同的行為。例如,請參閱新增 AbstractElement 物件(第 1 部分)中的渲染器示例,該示例是 iText 7:Building Blocks教程中的第 7 章。

這些更改簡化了那些不想(想)瞭解 PDF 和 iText 的開發人員的功能,同時為那些不怕深入研究 iText 程式碼建立者的開發人員提供了豐富的靈活性。PDF 完全按照他們想要的方式。

想知道更多?獲得免費電子書!