【问题标题】:Generating PDF from XML in Java using ApacheFOP使用 ApacheFOP 从 Java 中的 XML 生成 PDF
【发布时间】:2025-12-06 13:45:01
【问题描述】:

我正在尝试从 Java 对象生成动态 PDF 报告。我找不到很多这样的例子,所以我一直在关注这个例子:

http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleObj2PDF.java?view=markup

这段代码和我自己的唯一真正区别是我使用 JSON 转换和 XMLSerializer 生成 src(示例中的第 81 行)。

我遇到的问题是使用 Transformer。当我进行转换时(示例的第 87 行),我收到错误消息:

(Location of error unknown)org.apache.fop.fo.ValidationException: First element must be the fo:root formatting object. Found (Namespace URI: "", Local Name: "html") instead. Please make sure you're producing a valid XSL-FO document.

由于我不了解 Transformer,也找不到那种文档来告诉我它应该如何工作,我真的不知道转换在哪里崩溃。

非常感谢任何有关这种转换的经验,或了解我所缺少的任何东西。

【问题讨论】:

    标签: xml xslt pdf xsl-fo apache-fop


    【解决方案1】:

    Apache FOP 的输入是 XSL:FO。错误消息是说输入不是有效的 XSL:FO 文档,因为第一个(根)元素应该是“fo:root”,但找到了“html”。 FOP 不读取 HTML 输入。我建议以更小的步骤分解代码并保存中间文档以帮助您识别问题。步骤是:

    1. JSON 对象被序列化为 XML
    2. 使用 XSLT 将 XML 转换为 XSL:FO
    3. XSL:FO 使用 FOP 转换为 PDF。

    【讨论】:

      【解决方案2】:

      您需要按照本教程将您的 XML 转换为 XSL:FO。从那里,您将能够使用您已经提到的示例。

      http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/examples/embedding/java/embedding/ExampleXML2FO.java?view=markup

      【讨论】: