gpt4 book ai didi

java - JasperReport串联仅打印第一个报告

转载 作者:行者123 更新时间:2023-12-02 09:31:38 24 4
gpt4 key购买 nike

我正在尝试使用 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());
}

有人可以帮助我吗?谢谢!

最佳答案

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

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

所以代码看起来像这样:

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

关于java - JasperReport串联仅打印第一个报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com