【问题标题】:Export JasperReport to PDF OutputStream?将 JasperReport 导出为 PDF 输出流?
【发布时间】:2011-12-19 23:27:51
【问题描述】:

我正在编写一个非常简单的示例项目来熟悉 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")));

如何在OutputStream 中获取 PDF?

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

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

    享受。

    【讨论】:

    • 如果您只是想将报告输出到文件中,您可以使用exportReportToPdfFile 而无需自己处理输出流
    • 对,但是这种方式给了我最大的灵活性;我可以将输出流写入文件或通过网络或任何我想要的地方:)
    • 请注意,编译通常是一个多余的步骤。相反,软件应该使用.jasper 文件填写报告,而不是每次都重新编译.jrxml 文件。
    【解决方案2】:

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

    【讨论】:

    • 更好,因为多态
    • 5 年后,JRExportParameter 已被弃用,我添加了一个非弃用的answer
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多