Oliver Charlet wrote:
I too have a problem embedding fop in my application.
The standard procedure in case of trouble with an embedded
FOP is:
- Run the transformation from the command line in order
to generate a FO file. This ensures the transformation is
ok.
- Run the produced FO file from the command line and see
whether it produces the desired PDF. This ensures that
the FO is correct and that you didn't hit any FOP bugs.
- Put som code into your application which runs the FO
file through FOP, *without* the transformation. This
way you'll see whether you have problems with the
FO setup in the embedding and whether you can reference
ell external ressources (fonts, graphics etc.)
- Try to run the transfomation *without* the formatting
step. The code is a one-liner :)
TransformerFactory.newInstance().newTransformer(
new StreamSource(new File("foo.xsl"))).transform(
new StreamSource(new File("foo.xml")),
new StreamResult(new File("foo.fo")));
This will catch problems with the XSLT processor setup
and access to ressources referenced during the transformation
(DTD and external entities in the original XML, ressources
accessed with document(), extensions etc.)
- Run FOP+XSLT embedded as the final step.
> the following code (used inside a servlet) produces a zero byte pdf-file.
> xmlFile and xslFile hold an absolute Path to the input-files.
...
> It seems to me, that the generation is not started at all.
Common problems:
1. If you have a DOCTYPE declaration referring to an external
DTD in your original XML or a PI linking the document to an
XSchema, either remove it or check whether the ressources are
still accessible.
2. Close the PDF file explicitely, or flush it:
driver.render(parser, inputHandler.getInputSource());
fout.close();
The Java runtime closes files upon garbage collecting them,
and this wont happen as long as the Driver object is
refereced somewhere.
HTH
J.Pietschmann