Generating PDF from XML in Java using ApacheFOP

Belizzle picture Belizzle · Jun 13, 2012 · Viewed 16.9k times · Source

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.

Answer

Alex Giotis picture Alex Giotis · Jun 15, 2012

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.