我正在尝试使用Apache FOP将xml文件转换为pdf文件,但我只收到一个空白页面,这是我的代码:
protected byte[] buildPDF(byte[] xml) throws IOException {
FileOutputStream fos;
byte[] pdfBytes = null;
try{
// Setup input and output files
File xmlfile = new File(MULTIMEDIA_PATH + File.separator + "xml/report.xml");
File xsltfile = new File(MULTIMEDIA_PATH + File.separator + "xml/transformation.xsl");
fos = new FileOutputStream(xmlfile);
fos.write(xml);
fos.close();
// Step 1: Construct a FopFactory
FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
// Step 2: Setup output stream
OutputStream out = new BufferedOutputStream(new FileOutputStream((MULTIMEDIA_PATH + File.separator + "xml/result.pdf")));
try {
// Step 3: Construct FOP with desired output format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
// Step 4: Setup JAXP using identity transformer
Source xslt = new StreamSource(xsltfile);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(xslt);
// Step 5: Setup input and output for XSLT transformation
Source src = new StreamSource(xmlfile);
Result res = new SAXResult(fop.getDefaultHandler());
// Step 6: Start XSLT transformation and FOP processing
transformer.transform(src, res);
} finally {
out.close();
}
} catch (Exception e) {
e.printStackTrace(System.err);
System.exit(-1);
}
return pdfBytes;
}
你对这个问题有什么看法吗?
谢谢!
答案 0 :(得分:0)
如果你得到空输出,那么我认为你最终会遗漏:
pdfBytes = out.toByteArray();
如果您的输出不为空(如果您确实有上面的那样),那么您应该提供transformation.xsl的内容,这可能是一个问题。