gpt4 book ai didi

java - JasperReport 如何从 Map> 初始化 JRDataSource

转载 作者:行者123 更新时间:2023-12-02 09:05:32 27 4
gpt4 key购买 nike

我正在尝试使用简单的表格创建一个 pdf 文件。我已将前面的所有表数据计算为 Map<String, List<String>>其中键是表列,相应的列表是将填充每个列单元格的值。我已经关注了这个example但我似乎无法正确初始化打印报告所需的 JRDataSource,因为我无法理解它期望收到的内容。似乎有几个类实现了像JRMapArrayDataSource这样的接口(interface)或JRMapCollectionDataSource但那些需要一个数组或一个集合。我已经尝试将我的 map 转换为其中之一,但这行不通,因为这样它就无法知道每一列的内容。遵循我的代码。任何有关如何构建此结构的线索将不胜感激。

public void buildReport(Map<String, List<String>> tableData) throws Exception {
drb = new DynamicReportBuilder();

List<AbstractColumn> columns = new ArrayList<>();

tableData.keySet().forEach(key-> {
AbstractColumn column = ColumnBuilder.getNew()
.setColumnProperty(key, String.class.getName()).setTitle(key.toUpperCase()).setWidth(85).build();

columns.add(column);
});

columns.forEach(column -> drb.addColumn(column));

DynamicReport dynamicReport = drb.build();

JasperReport jasperReport = DynamicJasperHelper.generateJasperReport(dynamicReport,
new ClassicLayoutManager(),
params);

//JRDataSource dataSource = new JRBeanCollectionDataSource(SortUtils.sortCollection(Arrays.asList(tableData.values()), dynamicReport.getColumns()));
JRDataSource dataSource = new JRMapArrayDataSource(tableData); // this is wrong since it expects java.lang.Object

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);

exportReport(jasperPrint, System.getProperty("user.dir")+ urlJasper + "reports/medical-report.pdf");

}

最佳答案

我通过将数据重组为行集合解决了这种情况的问题。所以不要有 Map<String, List<String>>我必须将其转换为 List<Map<String, String>>其中列表中的每个映射都涉及表中的一行,并且映射将列名称作为键,将行的列值作为值。然后我用了

JRDataSource dataSource = new JRBeanCollectionDataSource(tableData);

创建 JRDataSource。

关于java - JasperReport 如何从 Map<String, List<String>> 初始化 JRDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843512/

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