【发布时间】:2020-01-21 14:41:46
【问题描述】:
我正在尝试用一个简单的表格创建一个 pdf 文件。我已经将所有表数据提前计算到 Map<String, List<String>> 中,其中键是表列,相应的列表是将填充每个列单元格的值。我已关注此example,但我似乎无法正确初始化打印报告所需的 JRDataSource,因为我无法理解它期望接收的内容。似乎有几个类实现了JRMapArrayDataSource 或JRMapCollectionDataSource 之类的接口,但它们需要一个数组或一个集合。我已经尝试将我的地图转换为其中之一,但这不起作用,因为它无法知道每一列的内容。遵循我的代码。任何有关如何构建它的线索将不胜感激。
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");
}
【问题讨论】:
标签: java jasper-reports dynamic-jasper