我有一个包含 5 个固定列的 CSV/Excel 报告,我想添加更多列,具体取决于输入。每个报告生成可能需要不同数量的列。
jrxml 方法已经完成,所以我的问题是 - 我可以在 jrxml 中添加动态列吗?
如果不是,那么使用编码的正确方法是什么?例子
注意:我不喜欢使用动态 Jasper 库
我有一个包含 5 个固定列的 CSV/Excel 报告,我想添加更多列,具体取决于输入。每个报告生成可能需要不同数量的列。
jrxml 方法已经完成,所以我的问题是 - 我可以在 jrxml 中添加动态列吗?
如果不是,那么使用编码的正确方法是什么?例子
注意:我不喜欢使用动态 Jasper 库
我认为您的目的可以通过使用动态创建报告设计和布局的DynamicJasper来最好地实现。这将允许您在生成报告之前自定义报告。
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;
}