【问题标题】:JasperReport How to initialize a JRDataSource from a Map<String, List<String>>JasperReport 如何从 Map<String, List<String>> 初始化 JRDataSource
【发布时间】:2020-01-21 14:41:46
【问题描述】:

我正在尝试用一个简单的表格创建一个 pdf 文件。我已经将所有表数据提前计算到 Map&lt;String, List&lt;String&gt;&gt; 中,其中键是表列,相应的列表是将填充每个列单元格的值。我已关注此example,但我似乎无法正确初始化打印报告所需的 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");

}

【问题讨论】:

    标签: java jasper-reports dynamic-jasper


    【解决方案1】:

    我通过将数据重组为一组行来解决此案例的问题。因此,我不得不将其转换为List&lt;Map&lt;String, String&gt;&gt;,而不是Map&lt;String, List&lt;String&gt;&gt;,其中列表中的每个映射都与表中的一行相关,并且映射将列名作为键,将行的列值作为值。然后我用了

    JRDataSource dataSource = new JRBeanCollectionDataSource(tableData);
    

    创建 JRDataSource。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 2022-11-02
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多