与碧玉报告动态列

问题描述 投票:1回答:2

我有5个固定列的CSV / Excel报表,我要添加更多的列,这取决于输入。每个报告生成可能需要不同的列数。

该JRXML方法做,所以我的问题是 - 我可以在JRXML添加动态列?

如果不是,什么是与编码做正确的方法是什么? example

注:我不喜欢使用动态碧玉库

java excel csv jasper-reports
2个回答
1
投票

我觉得你的目的可以通过使用其DynamicJasper的上飞创建报表的设计和布局,从而实现最佳。这将让你产生之前定制的报告。


0
投票

是DynamicJasper的完美生成具有列的动态数量的报告。下面是我用于列的我N多行和M个使用JRBeanCollectionDataSource创建一个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;
}
© www.soinside.com 2019 - 2024. All rights reserved.