2011-12-19 5 views
21

Я пишу довольно простой пример проекта для ознакомления с отчетами Jasper. Я хотел бы экспортировать отчет я сконфигурированный в 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"))); 

Как я могу получить PDF в качестве OutputStream?

ответ

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' без обработки выходных данных самостоятельно –

+0

Правильно, но этот способ дает мне максимальную гибкость; Я могу написать выходной поток в файл или по сети или где угодно: –

+1

Обратите внимание, что компиляция * обычно * является излишним шагом. Вместо этого программное обеспечение должно заполнять отчет, используя файл '.jasper', а не перекомпилировать файл' .jrxml' каждый раз. –

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

Лучше, потому что полиморфный –

+1

Через 5 лет JRExportParameter устарел, я добавил не устаревший [ответ] (http://stackoverflow.com/a/35916470/5292302) –

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(); 
Смежные вопросы