跳转至内容

WebObjects/Web 应用程序/开发/PDF 生成

来自维基教科书,开放世界中的开放书籍

您可能还想查看 返回文件 示例。

Zak Burke 的示例

[编辑 | 编辑源代码]

重要的是在“其他参数”列表中添加“-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()));
 }
[编辑 | 编辑源代码]
华夏公益教科书