Apache FOP converts XML to PDF (and other formats) with the help of XSL-FO stylesheets. So if you already have XSLT stylesheets for a transformation to HTML, it may not be a lot of work to derive some XSL-FO stylesheets from those.
FOP is actually the stylesheets that take XML markup files and convert them to their PDF equivalents. I use Xalan to run FOP, but there are other projects that can do so as well.
In Linux, there's a wealth of text and graphics conversion tools, such as enscript. You'd probably want to create some sort of XML markup conversion such as XML-to-postscript and then pass the results on to another tool in the chain. Docbook is an XML markup format typically processed by OpenJADE, for example.
Customer surveys are for companies who didn't pay proper attention to begin with.
Originally posted by Tim Holloway: FOP is actually the stylesheets that take XML markup files and convert them to their PDF equivalents. I use Xalan to run FOP, but there are other projects that can do so as well.
Uh, I think you confused something here.
XSL-T is the stylesheet format that takes XML files and converts them to some other format (though not PDF).
Xalan is Apache's XSL-T processor.
XSL-FO is a page description language.
FOP is Apache's XSL-FO processor, which can create PDF from an XSL-FO file.
A typical process to generate PDF from some arbitrary XML is to use XSL-T to transform the information to XSL-FO, and then rendering the XSL-FO to PDF.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
I personally can't stand XSL-FO - but I just did a project with a similar requirement and I used iText (http://www.lowagie.com/iText/). If you have an existing PDF you can add fields to it then convert your source XML into the XFDF format for your fields and it will fill in the appropriate fields.