4

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

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

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

我遇到的问题是使用变压器。当我进行转换时(示例的第 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,也找不到那种文档来告诉我它应该如何工作,我真的不知道转换在哪里崩溃。

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

4

2 回答 2

6

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

  1. JSON 对象被序列化为 XML
  2. XML 使用 XSLT 转换为 XSL:FO
  3. XSL:FO 使用 FOP 转换为 PDF。
于 2012-06-15T09:04:54.267 回答
2

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

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

于 2012-06-15T20:35:32.733 回答