2011-12-19 179 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();