将JasperReport导出为PDF OutputStream?

34

我正在编写一个相当简单的示例项目,以熟悉Jasper Reports。我想将我配置过的报表导出到PDF OutputStream,但是没有对应的工厂方法:

InputStream template = JasperReportsApplication.class
    .getResourceAsStream("/sampleReport.xml");
JasperReport report = JasperCompileManager.compileReport(template);
JasperFillManager.fillReport(report, new HashMap<String, String>());
// nope, just chuck testa.  
//JasperExportManager.exportReportToPdfStream(report, new FileOutputStream(new File("/tmp/out.pdf")));

我如何将PDF文件输出到OutputStream中?

3个回答

44

好的,这是它的工作原理:JasperFillManager 实际上返回一个 JasperPrint 对象,因此:

// get the JRXML template as a stream
InputStream template = JasperReportsApplication.class
    .getResourceAsStream("/sampleReport.xml");
// compile the report from the stream
JasperReport report = JasperCompileManager.compileReport(template);
// fill out the report into a print object, ready for export. 
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, String>());
// export it!
File pdf = File.createTempFile("output.", ".pdf");
JasperExportManager.exportReportToPdfStream(print, new FileOutputStream(pdf));

祝你愉快。


4
如果你只是想将报告输出到文件中,你可以使用exportReportToPdfFile而不需要自己处理输出流。 - Rangi Lin
1
没错,但这种方式给了我最大的灵活性;我可以将输出流写入文件、网络或任何我想要的地方 :) - Naftuli Kay
4
请注意,编译通常是一个多余的步骤。相反,软件应该使用“.jasper”文件来填写报告,而不是每次重新编译“.jrxml”文件。 - Dave Jarvis

18

JRExporterParameter 在最新版本中已被弃用,这是一个未被弃用的解决方案,参考自@stevemac的回答

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputStream));
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setMetadataAuthor("Petter");  //why not set some config as we like
exporter.setConfiguration(configuration);
exporter.exportReport();

17

您可以使用JRExporter将填充好的报表导出到不同的流和格式中。

JRExporter exporter = null;

exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();

请注意还有其他的导出器:

exporter = new JRRtfExporter();
exporter = new JRHtmlExporter();

你可以在这里找到更多可用的导出器: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRExporter.html

它们都应该接受一个OUTPUT_STREAM参数来控制报表目的地。


更好,因为多态。 - AA.
4
经过5年的时间,JRExportParameter已被弃用,我添加了一个未弃用的答案 - Petter Friberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接