2012-08-28 67 views
1

我想要使用Apache FOP来转换XML文件为PDF文件,但我只收到一个空白页空白页,这是我的代码:XML到PDF使用FOP返回

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

如果您收到空输出,那么我认为你在最后像丢失:

pdfBytes = out.toByteArray(); 

如果您的输出不为空(如果你有以上),那么你应该提供的内容transformation.xsl可能有问题。

+0

我out.pdf文件是一个空白页面,但如果我使用氧气进行转换,所有工作正常。我认为问题出在代码中。 P.S. pdfBytes为空,因为首先我希望PDF生成工作正常。 –

+0

你有一些静态文本或只有基于report.xml的动态? U是否使用与Oxygen相同的FOP版本(我不知道这个应用程序,只是读它与在FOP内建)?也许你当地的FOP conf是不正确的?任何日志输出(警告,错误来自FOP)? –