Generating PDF from XML in Java using ApacheFOP

心已入冬 提交于 2019-12-23 12:45:15

问题


I am trying to generate on-the-fly PDF reports from Java objects. I have not been able to find many examples of this, so I have been following this example:

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

The only real difference between this code and my own is that I generate src (line 81 in the example) using JSON conversion and an XMLSerializer.

The problem I run into is using the Transformer. When I do the transform (line 87 of the example), I receive the error message:

(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.

Since I don't have visibility into the Transformer, and haven't been able to find the kind of documentation to tell me how it is supposed to work, I don't really know where the transformation is breaking down.

Any experience with this kind of conversion, or understand of whatever it is I'm missing is greatly appreciated.


回答1:


The input of Apache FOP is XSL:FO. The error message is saying that the input is not a valid XSL:FO document because the first (root) element is expected to be "fo:root" but "html" was found. FOP does not read HTML input. I suggest to break down the code in smaller steps and save the intermediate documents to help you identify the problem. The steps are:

  1. JSON object is serialized to XML
  2. XML is transformed using an XSLT to XSL:FO
  3. XSL:FO is transformed using FOP to PDF.



回答2:


You need to follow this tutorial in order to transform your XML to XSL:FO. From there, you will be able to use the example you already mentioned.

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



来源:https://stackoverflow.com/questions/11023265/generating-pdf-from-xml-in-java-using-apachefop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!