2015-02-24 59 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