簡體   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