4

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

我有兴趣了解以下步骤:解析模板文件、将 Java 对象放在上下文中以及生成 pdf 等要执行的步骤。

我知道这是一个非常基本的问题。但我什至在网上找不到这种类型的一个例子。我找到了 XDocReport,但我也有兴趣了解其他替代方案。

请帮助我提供一些示例项目链接或至少入门步骤。

4

3 回答 3

5

是的你可以。这完全取决于您希望 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 转换(添加样式表等)

于 2014-02-19T18:05:44.323 回答
4

无法直接在 Java 中使用 iText 和 Apache Velocity 模板文件 (.vm) 生成 PDF,因为:

  • PDF是二进制格式,
  • Velocity 生成纯文本内容。

换句话说,Velocity 无法生成 PDF。

XDocReport 能够通过将包含一些 Velocity/Freemarker 语法的 docx/odt 模板与 Java 上下文合并来生成 docx/odt 报告。生成的 docx/odt 报告可以转换为 pdf/xhtml。

它之所以有效,是因为 docx/odt 是一个包含多个 xml 条目的 zip。如果您解压缩 docx,您将看到 word/document.xml。在此条目中,您将看到您使用 MS Word 键入的内容。word/document.xml 是纯文本,因此在这种情况下可以使用 Velocity。

这里是 XDocReport 从使用 Velocity 的 docx 模板生成 pdf 的过程:

  1. 加载 docx 模板。此步骤包括解压缩 docx 并将每个 xml 条目存储在映射中(名称条目作为键,字节数组作为值)。例如 map 包含一个带有 word/document.xml 的键和这个条目的 xml 内容作为值。
  2. 循环每个必须与 Java 上下文合并的 xml 条目。例如 word/document.xml 使用 Velocity 与 Java 上下文合并,合并的结果替换 map 的 word/document.xml 值
  3. 通过压缩地图的每个条目来重建一个新的 docx。

在这一步,我们有一个生成的 docx(报告)。

为了将其转换为另一种格式,XDocReport 提供了一个基于 Apache POI 和 iText 的 docx 到 pdf 转换器。这是将 docx 转换为 pdf 的 XDocReport 过程:

  1. 使用 Apache POI 加载 docx
  2. 循环为每个 POI 结构(XWPFParagraph 等)创建 iText 结构(iText 段落)。

请注意,XDocReport 是模块化的,您也可以使用其他转换器。

于 2014-02-18T21:55:46.863 回答
0

首先,我们使用freemarker模板生成html文件,然后通过IItextRender将html渲染成pdf文件。最后,我们可以在浏览器中查看pdf文件,有一个非常有用的javascript工具叫pdfjs。也许你可以试试。

于 2017-09-19T08:41:09.457 回答