为了账号安全,请及时绑定邮箱和手机立即绑定

JasperReport串联仅打印第一个报告

JasperReport串联仅打印第一个报告

潇潇雨雨 2023-07-28 15:10:02
我正在尝试使用 JasperReports 连接两个报告,我有一个包含来自报告“A”和报告“B”的两个 jasperPrint 的列表。问题是它只打印第一个报告,第二页是空的。我虽然问题出在报告“B”中,但如果我先打印报告“B”,我也会遇到同样的问题:打印报告“B”,而应该是报告“A”的第二页是空的。这是我的代码:public static InputStream generatePdfByteArrayFromJasper(List<InputStream> reportStreams, Collection dataSource, HashMap<String, Object> parameters)throws JRException {    List<JasperPrint> jasperPrints = new ArrayList<>();    JRDataSource datasource = new JRBeanCollectionDataSource(dataSource, true);    for (InputStream is : reportStreams) {        JasperPrint jasperPrint = JasperFillManager.fillReport(is, parameters, datasource);        jasperPrints.add(jasperPrint);    }    JRPdfExporter exporter = new JRPdfExporter();    ByteArrayOutputStream out = new ByteArrayOutputStream();    SimpleOutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(out);    SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();    configuration.setCreatingBatchModeBookmarks(true);    exporter.setConfiguration(configuration);    exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrints));    exporter.setExporterOutput(exporterOutput);    exporter.exportReport();    return new ByteArrayInputStream(out.toByteArray());}有人可以帮助我吗?谢谢!
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

不要对两个报表使用相同的数据源对象。数据源被第一个报告消耗,并且不会为第二个报告留下任何记录。


您应该做的是为每个报告创建数据源实例。对参数映射执行相同的操作是一个好主意,因为填充过程会将内置参数填充到映射中,并且存在第一个报告设置的参数最终用于第二个报告的风险。


所以代码看起来像这样:


public static InputStream generatePdfByteArrayFromJasper(List<InputStream> reportStreams, Collection dataSource, HashMap<String, Object> parameters)

throws JRException {

    List<JasperPrint> jasperPrints = new ArrayList<>();

    for (InputStream is : reportStreams) {

        JRDataSource datasource = new JRBeanCollectionDataSource(dataSource, true);

        HashMap<String, Object> reportParameters = new HashMap<>(parameters);

        JasperPrint jasperPrint = JasperFillManager.fillReport(is, reportParameters, datasource);

        jasperPrints.add(jasperPrint);

    }


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信