2011-12-19 145 views
21

我正在写一个非常简单的示例项目来熟悉Jasper Reports。我想汇出我已经配置到PDF OutputStream的报告,但有没有它的工厂方法:将JasperReport导出为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"))); 

我怎样才能在OutputStream的PDF?

回答

28

好的,这是它的工作原理。 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)); 

享受。

+2

如果你只是想输出报告到一个文件一个解决方案,您可以用' exportReportToPdfFile'而无需自己处理输出流 – 2011-12-20 01:56:05

+0

没错,但这种方式给了我最大的灵活性;我可以将输出流写入文件或通过网络或我想要的任何地方:) – 2011-12-20 02:27:25

+1

请注意,编译*通常是一个多余的步骤。相反,软件应该使用'.jasper'文件填写报告,而不是每次重新编译'.jrxml'文件。 – 2016-10-02 08:50:59

16

您可以使用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参数来控制报告的目的地。

+0

更好,因为多态 – 2013-10-14 14:37:42

+1

5年后,JRExportParameter已被弃用,我添加了一个不被弃用的[答案](http://stackoverflow.com/a/35916470/5292302) – 2016-03-10 12:27:32

6

JRExporterParameter在最新版本过时,这是不可弃用的@stevemac answer

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();