我有5个固定列的CSV / Excel报表,我要添加更多的列,这取决于输入。每个报告生成可能需要不同的列数。
该JRXML方法做,所以我的问题是 - 我可以在JRXML添加动态列?
如果不是,什么是与编码做正确的方法是什么? example
注:我不喜欢使用动态碧玉库
我觉得你的目的可以通过使用其DynamicJasper的上飞创建报表的设计和布局,从而实现最佳。这将让你产生之前定制的报告。
是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;
}