2015-02-24 60 views
0

我有一个从Java EE应用程序启动的birt版本,当用户启动动作时,pdf生成在新窗口中启动,所有功能都运行良好,我想要做的更改如下:我想在我的服务器中保留相同的pdf,以便以后通过电子邮件发送。带有两个输出流的Birt版

PDFRenderOption pdfOptions = new PDFRenderOption(options); 
pdfOptions.setOutputFormat("pdf"); 
options.setSupportedImageFormats("JPG;BMP;PNG;JPEG"); 
pdfOptions.setOutputFileName(OUTPUT_LOCATION + "project/exportprojet.pdf"); 
pdfOptions.setOutputStream(response.getOutputStream()); 
runAndRenderTask.setRenderOption(pdfOptions); 

加入pdfOptions.setOutputFileName(OUTPUT_LOCATION + "project/exportprojet.pdf");后,生成的PDF和服务器库存,但什么工作之前没有工作了,一个新的窗口推出给用户,并不会显示PDF格式,它看起来像加线采取生成的PDF并通过防止它去向用户放入服务器

回答

0

的解决方案通过hvb作品提出的实现完美,下面我的旧代码所做的更改:

PDFRenderOption pdfOptions = new PDFRenderOption(options); 
String sUrlExportFile = OUTPUT_LOCATION + "projet/" + idProjetAGenerer + "/exportprojet.pdf"; 
pdfOptions.setOutputFormat("pdf"); 
options.setSupportedImageFormats("JPG;BMP;PNG;JPEG"); 
pdfOptions.setOutputFileName(sUrlExportFile); 
runAndRenderTask.setRenderOption(pdfOptions); 
runAndRenderTask.getAppContext().put(EngineConstants.APPCONTEXT_BIRT_VIEWER_HTTPSERVET_REQUEST, request); 
runAndRenderTask.run(); 
runAndRenderTask.close(); 
//copy the genereted file to response.getOutputStream() 
File f = new File(sUrlExportFile); 
InputStream inputStream = null; 
try { 
    inputStream = new FileInputStream(f); 
    IOUtils.copy(inputStream, response.getOutputStream()); 
} finally { 
    IOUtils.closeQuietly(inputStream); 
} 
2

同时使用setOutputFileNamesetOutputStream不支持。

但解决办法是显而易见的: 刚刚生成的PDF(使用setOutputFileName)文件系统,等到你RunAndRenderTask完成,然后将该文件的内容(二进制)复制到response.getOutputStream

+0

谢谢您的回复,我刚添加的实现你的建议代码行,谢谢验证我的修改,将您的答案标记为已接受:) – Nimpo 2015-02-27 11:23:07