簡體   English   中英

使用iText和apache velocity template(.vm)生成PDF文件

[英]Generate PDF files using iText and apache velocity template(.vm)

在Java中使用iText和Apache Velocity模板文件(.vm)生成PDF的一般工作流程是什么?

我有興趣知道以下步驟:解析模板文件,將Java對象置於上下文中以及執行生成pdf等的步驟。

我知道這是一個非常基本的問題。 但我無法在網上找到這種類型的單一例子。 我找到了XDocReport ,但我也有興趣了解其他替代方案。

請幫我一些示例項目鏈接或至少開始的步驟。

是的你可以。 這一切都取決於您希望PDF的復雜程度。

以下是基本功能的步驟

  1. 使用Apache Velocity模板文件(.vm)生成HTML文件。
  2. 使用com.itextpdf.text.html.simpleparser.HTMLWorker (不建議使用)將該HTML文件解析/轉換為PDF。
  3. 此外,您可以使用com.itextpdf.text.pdf.PdfCopy.PageStamp將內容(邊框,圖章,注釋,注釋等)添加到現有PDF。

還有com.itextpdf.tool.xml.XMLWorker用於更高級的HTML轉換(添加樣式表等)

直接用Java中的iText和Apache Velocity模板文件(.vm)生成PDF是不可能的,因為:

  • PDF是二進制格式,
  • Velocity生成純文本內容。

換句話說,Velocity無法生成PDF。

XDocReport能夠通過合並包含一些Velocity / Freemarker語法和Java上下文的docx / odt模板來生成docx / odt報告。 生成的docx / odt報告可以將其轉換為pdf / xhtml。

它的工作原理是因為docx / odt是一個包含幾個xml條目的zip。 如果解壓縮docx,您將看到word / document.xml。 在此條目中,您將看到使用MS Word鍵入的內容。 word / document.xml是純文本,因此在這種情況下可以使用Velocity。

這里是從使用Velocity的docx模板生成pdf的XDocReport過程:

  1. 加載docx模板。 此步驟包括解壓縮docx並將每個xml條目存儲在映射中(名稱條目作為鍵,字節數組作為值)。 例如,map包含一個帶有word / document.xml的鍵,以及該條目的xml內容作為值。
  2. 為每個xml條目循環,這些條目必須與Java上下文合並。 例如,使用Velocity將word / document.xml與Java上下文合並,並且merge的結果替換了map的word / document.xml值
  3. 通過壓縮地圖的每個條目來重建新的docx。

在這一步,我們有一個生成的docx(報告)。

為了將其轉換為另一種格式,XDocReport提供了基於Apache POI和iText的docx-to-pdf轉換器。 這里是將docx轉換為pdf的XDocReport過程:

  1. 使用Apache POI加載docx
  2. 循環POI的每個結構(XWPFParagraph等)以創建iText結構(iText Paragraph)。

請注意,XDocReport是模塊化的,您也可以使用其他轉換器。

首先,我們使用freemarker模板生成一個html文件,然后通過IItextRender將html渲染為pdf文件。最后,我們可以在瀏覽器中查看pdf文件,有一個非常有用的javascript工具叫做pdfjs。 也許你可以嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM