使用ApacheFOP从Java生成PDF

时间:2012-06-13 21:04:04

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

我正在尝试从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.

由于我没有对变形金刚的了解,并且无法找到那种文档来告诉我它应该如何工作,我真的不知道变形在哪里发生。< / p>

非常感谢任何有关此类转换的经验,或了解我所缺少的任何内容。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

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