使用FOP的XML到PDF返回一个空白页面

时间:2012-08-28 14:13:07

标签: java xml xslt apache-fop

我正在尝试使用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;

}

你对这个问题有什么看法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果你得到空输出,那么我认为你最终会遗漏:

pdfBytes = out.toByteArray();

如果您的输出不为空(如果您确实有上面的那样),那么您应该提供transformation.xsl的内容,这可能是一个问题。