【问题标题】:Jasper Reports: How to combine two report streams into one PDF output?Jasper Reports:如何将两个报告流合并为一个 PDF 输出?
【发布时间】:2016-01-28 08:45:48
【问题描述】:

我有这段代码,它一次只根据给定条件生成一个 Jasper 报告到 PDF。但是如果我想将两个 Jaspers 合并到一个 PDF 文件中怎么办? (即 PDF 输出应该是 LoadTagR2R.jasper + LoadTagR2RLandscape.jasper -- 这将是一个包含多个页面的 PDF 输出流)

        if (fullHalfTag.equalsIgnoreCase("Y")){ //Read FULL_HALF_TAG value (if FULL_HALF_TAG == 'Y')
            logger.debug("Printing FULL tag...");
            reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/LoadTagR2RLandscape.jasper");

        } else {
            logger.debug("Printing HALF tag...");
            reportStream = getServletConfig().getServletContext().getResourceAsStream("/reports/LoadTagR2R.jasper");

        }

        //Report parameters
        Map parameters = new HashMap();
        parameters.put("PLT_NO", pltNo);
        parameters.put("TICKET_NO", ticketNo);

          try {

             Connection conn = ConnectionUtils.getConnection();

             JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream, parameters, conn);
             response.setContentType("application/pdf");

             servletOutputStream.flush();
             servletOutputStream.close();

我已尝试合并两个输入流,如下所示,但没有成功。想法?

        new java.io.SequenceInputStream(s1, s2).

【问题讨论】:

  • 但我需要在 JasperRunManager.runReportToPdfStream 生成 PDF 之前在流级别进行合并。

标签: java pdf jasper-reports inputstream


【解决方案1】:

这是执行此操作的旧方法:

JasperPrint jasperPrint1 = JasperFillManager.fillReport(reportStream1,  parameters, conn);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(reportStream2,  parameters, conn);

List<JasperPrint> list = new ArrayList<JasperPrint>();
list.add(jasperPrint1);
list.add(jasperPrint2);

JRPdfExporter exporter = new JRPdfExporter();

exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, list);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,servletOutputStream); 
exporter.exportReport();

编辑:

JasperReports 6.1.1 API JRPdfExporterParameter.JASPER_PRINT_LISTJRPdfExporterParameter.OUTPUT_STREAM不推荐使用添加新方法。

替换:

exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, list);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,servletOutputStream);

exporter.setExporterInput(SimpleExporterInput.getInstance(list));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(servletOutputStream));

【讨论】:

  • 谢谢,但这给了我一个例外:java.lang.ClassCastException: net.sf.jasperreports.export.SimpleWriterExporterOutput 与 net.sf.jasperreports.export.OutputStreamExporterOutput 不兼容
  • 使用 SimpleOutputStreamExporterOutput(如编辑后的帖子)
猜你喜欢
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2017-10-14
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多