Java 是否将JasperReport导出为PDF输出流?

Java 是否将JasperReport导出为PDF输出流?,java,jasper-reports,Java,Jasper Reports,为了熟悉Jasper Reports,我正在编写一个非常简单的示例项目。我想将已配置的报表导出为PDFOutputStream,但没有工厂方法: InputStream template = JasperReportsApplication.class .getResourceAsStream("/sampleReport.xml"); JasperReport report = JasperCompileManager.compileReport(template); JasperFi

为了熟悉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")));
InputStream模板=JasperReportsApplication.class
.getResourceAsStream(“/sampleReport.xml”);
JasperReport report=jaspecompilemanager.compileReport(模板);
JasperFillManager.fillReport(report,newhashmap());
//不,只有查克·泰斯塔。
//JasperExportManager.exportReportToPdfStream(报告,新文件outputstream(新文件(“/tmp/out.pdf”));

如何在
输出流中获取PDF?

好的,下面是它的工作原理
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));
//将JRXML模板作为流获取
InputStream模板=JasperReportsApplication.class
.getResourceAsStream(“/sampleReport.xml”);
//从流中编译报告
JasperReport report=jaspecompilemanager.compileReport(模板);
//将报告填写到打印对象中,以便导出。
JasperPrint print=JasperFillManager.fillReport(report,newhashmap());
//导出它!
File pdf=File.createTempFile(“output.”,“.pdf”);
导出报告topdfstream(打印,新文件输出流(pdf));

享受

您可以使用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();
您可以在此处找到更多出口商:

它们都应该接受一个输出流参数来控制报告的目的地

在最新版本中已弃用,这是一个未弃用的解决方案


如果您只是想将报告输出到一个文件中,您可以使用
exportreporttopfile
,而无需自行处理outputstream,但这种方式给了我最大的灵活性;我可以将输出流写入文件,也可以通过网络或任何我想要的地方:)注意,编译通常是多余的步骤。相反,软件应该使用
.jasper
文件填写报告,而不是每次都重新编译
.jrxml
文件。更好的是,因为在5年后,JRExportParameter已被弃用,我添加了一个非弃用参数
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();