【发布时间】:2020-02-25 19:44:53
【问题描述】:
我对 Dynamic-Jasper 还很陌生,但由于工作原因,我不得不在我们已经实现的解决方案中添加一个新功能。
我的问题
目标是在报表中添加一个列,该列仅由基于某些信息的背景色组成。我设法做到了,但是在测试时我偶然发现了一个问题。虽然我在 html 和 pdf 视图中的所有列都有正确的颜色,但 Excel 只为最后一种颜色的字段着色。
在调试时我注意到,相同颜色的字段具有相同的 templateId,但是虽然所有视图运行的代码大多相同,但 Excel 显示不同的行为并且在所有字段中具有相同的 ID。
我在其中操作模板的代码
for(JRPrintElement elemt : jasperPrint.getPages().get(0).getElements()) {
if(elemt instanceof JRTemplatePrintText) {
JRTemplatePrintText text = (JRTemplatePrintText) elemt;
(...)
if (text.getFullText().startsWith("COLOR_IDENTIFIER")) {
String marker = text.getFullText().substring(text.getFullText().indexOf('#') + 1);
text.setText("ID = " + ((JRTemplatePrintText) elemt).getTemplate().getId());
int rgb = TypeConverter.string2int(Integer.parseInt(marker, 16) + "", 0);
((JRTemplatePrintText) elemt).getTemplate().setBackcolor(new Color(rgb));
}
}
}
临时结论
相同的样式在背景中使用相同的对象,而 JR-Excel 导出通过将相同的对象分配给我在那里操作的所有字段来搞砸一些事情。如果有人知道我的错误或潜在的解决方案来改变不同的东西以产生相同的结果,请告诉我。
我之前尝试过的不同之处在于尝试在 Jasper 调用的评估方法中设置字段。在该方法中,我们分配每个字段的文本值。它包含一个带有 JRFillFields 的地图,但不幸的是,地图实现拒绝访问它们,只是重新调整了它们的值。地图由dj提供,无法切换。
编辑
我们正在使用 JasperReports 6.7.1
【问题讨论】:
-
不清楚您使用的是什么库。您使用的是 DynamicReports API 或 DynamicJasper API 还是本机 JasperReports API?
-
不幸的是,我目前无法访问代码。我明天更新。如果我不得不猜测,我会根据类名说 JasperReports
标签: java jasper-reports export-to-excel