1

我有一个包含 5 个固定列的 CSV/Excel 报告,我想添加更多列,具体取决于输入。每个报告生成可能需要不同数量的列。

jrxml 方法已经完成,所以我的问题是 - 我可以在 jrxml 中添加动态列吗?

如果不是,那么使用编码的正确方法是什么?例子

注意:我不喜欢使用动态 Jasper 库

4

2 回答 2

1

我认为您的目的可以通过使用动态创建报告设计和布局的DynamicJasper来最好地实现。这将允许您在生成报告之前自定义报告。

于 2013-05-18T10:00:20.563 回答
0

DynamicJasper 非常适合生成具有动态列数的报告。这是我使用 JRBeanCollectionDataSource 用于 N 列和 M 行来创建 pdf 文件的代码。

private List<DynaBean> convertDynaBListFrom2DAry(Object[][] ary2D, int width, int height){
    logger.info("Converting report array to dynamic bean as, we have dynamic number of columns");
    DynaProperty[] props = new DynaProperty[width];
    for (int p=0; p < width; p++) {
        DynaProperty dp = new DynaProperty("property"+p);
        props[p] = dp;
    }
    List<DynaBean> dynaBeans = new ArrayList<>(height);
    for (Object[] objects : ary2D) {
        MutableDynaClass dc = new LazyDynaClass("Row", null, props);
        try {
            DynaBean row =  dc.newInstance();
            for (int c=0 ; c < width ; c++ ) {
                Object obj = objects[c];
                if(obj == null) {
                    obj = new String("");
                }else if(obj.equals("null")) {
                    obj = new String("");
                }else if(obj.equals("NaN")){ 
                    obj = new String("");
                }
                row.set("property"+c, obj);
            }

            dynaBeans.add(row);

        } catch (IllegalAccessException e) {
            logger.error("Exception ",e);
        } catch (InstantiationException e) {
            logger.error("Exception ",e);
        }
    }
    return dynaBeans;
}
于 2019-02-05T10:30:55.797 回答