411 REFERENCE · Wikibooks
WebObjects/Web Applications/Development/PDF Generation
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Overview
You might want to also review the Returning a File example.
Zak Burke's Example
It is important to add "-Djava.awt.headless=true" to the "Additional Arguments" list to suppress a console window running WOBootstrap that will try to pop up and then fail to close, which seems to prevent the thread from returning, which causes the app to hang.
private ByteArrayOutputStream pdf()
{
// binary container for PDF
ByteArrayOutputStream out = null;
try
{
// assume these exist
String xsl, xml;
TransformerFactory transformerFactory = TransformerFactory.newInstance();
// configure FOP, apache's XML->PDF transformer
Fop fop = new Fop(MimeConstants.MIME_PDF);
out = new ByteArrayOutputStream();
fop.setOutputStream(out);
// configure XSLT transformer
Source xsltSrc = new StreamSource(new StringReader(xsl));
Transformer transformer = transformerFactory.newTransformer(xsltSrc);
// pipe XSL transformation through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
// grab XML input stream
Source src = new StreamSource(new StringReader(xml));
// Start the transformation and rendering process
transformer.transform(src, res);
}
catch (Exception e)
{
// actually, catch the following, one by one:
// TransformerConfigurationException
// FOPException
// TransformerFactoryConfigurationError
// TransformerException
}
return out;
}
public void appendToResponse(WOResponse response, WOContext context)
{
ByteArrayOutputStream out = pdf();
// without data, show the PDF page, which is just an error message.
if (out == null)
super.appendToResponse(response, context);
// assume this exists
String filename;
response.setHeader("application/pdf", "Content-Type");
response.setHeader("" + out.size() + "", "Content-Length");
response.setHeader("attachment;filename=" + filename, "Content-Disposition");
response.setContent(new NSData(out.toByteArray()));
}
Related Links
FyTek Exe/DLL PDF Libraries
Big Faceless Organization - Java PDF Library & Report Generator
Java PDF Libraries
Apache FOP
Deirdre Saoirse Moen's FOP Example
JClass
Etymon PJ
PDFLib
PD4ML
iText
Hugi Karlmenn's iText Example
WebPDF Reports
XSL:FO Examples
ReportMill