带有两个输出流的 Birt 版本
Birt edition with two output streams
我有一个从 Java EE 应用程序启动的 birt 版本,当用户启动操作时,pdf 生成会在新的 window 中启动,一切正常,我想更改make 是这样的:我想在我的服务器中保留相同的 pdf,以便稍后通过电子邮件发送。
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生成并存储在服务器中,但之前的工作不再工作,向用户启动新的window,pdf不显示,看起来添加的行采用了生成的 pdf 并通过阻止它发送给用户来放入服务器
不支持同时使用setOutputFileName
和setOutputStream
。
但解决方案很明显:
只需将 PDF 生成到文件系统(使用 setOutputFileName
),等到 RunAndRenderTask
完成,然后将文件的内容(二进制)复制到 response.getOutputStream
.
提出的解决方案的实施完美无缺,对我的旧代码进行了更改:
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);
}
我有一个从 Java EE 应用程序启动的 birt 版本,当用户启动操作时,pdf 生成会在新的 window 中启动,一切正常,我想更改make 是这样的:我想在我的服务器中保留相同的 pdf,以便稍后通过电子邮件发送。
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生成并存储在服务器中,但之前的工作不再工作,向用户启动新的window,pdf不显示,看起来添加的行采用了生成的 pdf 并通过阻止它发送给用户来放入服务器
不支持同时使用setOutputFileName
和setOutputStream
。
但解决方案很明显:
只需将 PDF 生成到文件系统(使用 setOutputFileName
),等到 RunAndRenderTask
完成,然后将文件的内容(二进制)复制到 response.getOutputStream
.
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);
}