WebObjects/Web 应用程序/开发/PDF 生成
外观
您可能还想查看 返回文件 示例。
重要的是在“其他参数”列表中添加“-Djava.awt.headless=true”以抑制运行 WOBootstrap 的控制台窗口,该窗口会尝试弹出并随后无法关闭,这似乎阻止了线程返回,从而导致应用程序挂起。
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()));
}