繁体   English   中英

JasperReport 如何从地图初始化 JRDataSource <string, list<string> &gt;</string,>

[英]JasperReport How to initialize a JRDataSource from a Map<String, List<String>>

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

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

}

我通过将数据重组为行集合来解决此案例的问题。 因此,我不得不将其转换为List<Map<String, String>>而不是Map<String, List<String>> ,其中列表中的每个映射都涉及表中的一行,并且映射的列名称为行的键和列值作为值。 然后我用

JRDataSource dataSource = new JRBeanCollectionDataSource(tableData);

创建 JRDataSource。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM