我正在尝试使用Apache Library FOP创建PDF文档。它运行良好,但我必须创建一个临时文件来存储中间文件(test.fop)。
这是我的功能:
@RequestMapping(value = "/pdf")
public void showPdfReport(OutputStream pdfOutStream) throws Exception
{
// Setup
FopFactory fopFactory = FopFactory.newInstance();
TransformerFactory factory = TransformerFactory.newInstance();
// Transformation XML to XML-FO
StreamSource xsltSource = new StreamSource(servletContext.getResourceAsStream("resources/xsl/pdfTemplate.fo"));
Transformer transformer = factory.newTransformer(xsltSource);
OutputStream fopOutStream = new BufferedOutputStream(new FileOutputStream(new File(
"C:/Temp/tests/test.fop")));
StreamSource xmlSource = new StreamSource(servletContext.getResourceAsStream("resources/xsl/test.xml"));
StreamResult fopResult = new StreamResult(fopOutStream);
transformer.transform(xmlSource, fopResult);
// Transformation XSL-FO to PDF
Source fopSrc = new StreamSource(new File("C:/Temp/tests/test.fop"));
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, pdfOutStream);
Result res = new SAXResult(fop.getDefaultHandler());
transformer = factory.newTransformer();
transformer.transform(fopSrc, res);
}
是否可以将test.fop存储在流或任何缓冲区而不是文件中?
答案 0 :(得分:1)
FOP网站上有一个example来解释这一点。从XSLT转换发出的SAX事件直接输入FOP。在文件或内存中没有缓冲。
答案 1 :(得分:0)
当然,您可以将任何Reader或InputStream传递给StreamSource constructor
例如,您可以使用StringReader或ByteArrayInputStream。