2012-11-20 168 views
0

我想將一段文本添加到PDF文件的每個頁面。 This answer in SO工作正常。但是,文本被添加到頁面的頂部。我想將我的文本添加到每個頁面的底部。我該怎麼做呢?iText - 將內容添加到現有頁面的底部

這裏是代碼的相關部分。

while (iteratorPDFReader.hasNext()) { 
     PdfReader pdfReader = iteratorPDFReader.next(); 

     // Create a new page in the target for each source page. 
     while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { 
      document.newPage(); 
      pageOfCurrentReaderPDF++; 
      currentPageNumber++; 
      page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); 
      cb.addTemplate(page, 0, 0); 

      document.add(new Paragraph("My Text here")); //As per the SO answer 

     } 
     pageOfCurrentReaderPDF = 0; 
    } 

的代碼,它接受一個文件夾中,它讀取PDF文件並將它們合併成一個單一的文件中的部分功能。所以,我想在上面的循環中添加文本,而不是再次迭代文件。

回答

2

查看iText in Action第二版的chapter 6,特別是第6.4.1小節:連接和分割PDF文檔。

清單6。22,ConcatenateStamp.java,向您展示瞭如何從多個其他PDF頁面副本(在您的案例:所有頁面)創建一個PDF;樣本額外增加了一個新的「Y的頁面X」頁腳;這演示瞭如何在合併源文件時在頁面上的給定位置添加內容。

+0

示例中的ColumnText.showTextAligned行給我一個空指針錯誤。任何想法爲什麼? – janenz00

+0

這個例子不應該失敗。我一到辦公室就會檢查一下。你是按照現在的樣子去嘗試,還是已經將它調整到了用例中?在後一種情況下:如何? – mkl

+0

我剛剛運行了該示例(使用最新版本的iText以及來自iText in Action的樣本,第二版),並且它完美無瑕地執行。因此,你運行它的方式肯定有問題。 – mkl

0

也許this可能有助於在這裏......我懷疑你想要做的事像下面這樣:

cb.addTemplate(page, 0, 0); 

document.add(new Paragraph("My Text here")); 
document.setFooter(new HeaderFooter("Footnote goes here")); 
} 
pageOfCurrentReaderPDF = 0; 
+0

該技術自2005年以來沒有記錄在案。它在2006年編寫的書中被故意省略,功能從2008年或2009年的iText中刪除。 –

+0

是的,我的jar沒有HeaderFooter類。 – janenz00

+1

@BrunoLowagie鏈接的文件有你的技術,但我提出的片段似乎更清晰。 – hd1

5

如果要自動將內容添加到每一個頁面,你需要一個頁面事件。 這在我的書「iText in Action - Second Edition」的第5章中有解釋。 如果您沒有該書的副本,可以查閱示例here。 您也可以通過查找關鍵字Header/Footer找到解決方案。

你所指的例子看起來並不正確。當然,您可以使用「兩遍」,一個用於創建內容,另一個用於添加頁眉或頁腳,但建議的解決方案與推薦的解決方案不同:http://itextpdf.com/examples/iia.php?id=118

您正在複製您的問題中的錯誤:爲什麼你會將剛剛創建的文檔導入到新文檔中,從而拋棄已添加到該文檔中的所有可能的交互性?這只是沒有意義。這個答案得到了許多回應,令人難以置信。我是iText的原始開發人員,我對這個答案並不滿意!

就你而言,可能不需要先在內存中創建文檔,然後再添加頁腳。請看http://itextpdf.com/examples/iia.php?id=104

您需要創建一個PdfPageEvent實現(例如使用PdfPageEventHelper),並且您需要實現onEndPage()方法。

記錄在案注意事項:

  • 不要使用onStartPage()添加內容,
  • 不要傳遞給頁面事件Document對象添加任何東西,
  • 除非你指定不同的頁面大小,左下角的座標爲x = 0; y = 0。添加頁腳時需要考慮這一點。頁腳的y值低於標題的y值。

欲瞭解更多信息:請查閱我的書。

+0

感謝您的詳細解答!我不擁有這本書,但我一直在提及這些例子。我上面粘貼的代碼是由示例代碼構成的。正如我所解釋的,我有幾個文件需要附加一些內容(每個頁面不同),然後合併爲一個PDF。這裏是整個函數的pastebin http://pastebin.com/Xn8JzrAz它使用的資源是否超過它應該的? – janenz00

+1

這是奇怪的代碼。請閱讀http://www.manning.com/lowagie2/samplechapter6.pdf獲取完整的概述,解釋如何正確連接PDF。在你的代碼中,你扔掉了原始文檔中存在的所有可能的交互性(鏈接,註釋,...)。 p188上的示例(標題爲「使用PdfCopy添加內容」)以更好的方式解決了問題。 –

+0

;)好吧,當我發佈它作爲答案時,@BrunoLowagie也引用了最符合他評論要求的樣本... – mkl

相關問題