我想为dynamicReports和jasperReports找到相同样式的最佳解决方案。我开始使用dynamicReports,但是我发现很难在那里创建不寻常的报告。在iReport图形构建器中,这样做要容易得多。所以现在我有50%的报告在Dynamic上运行,50%在Jasper上运行。
现在我无法解决风格问题。我在Template类中创建了样式,字体等,并将其用于DynamicReports。经过一番魔术之后:
.setName("cellCenterStyle");
template().setColumnStyle(cellStyle)
我能够将它们用于jasper,但这不是一个完整的解决方案,因为有些选项仍然不起作用,例如:
.setDetailEvenRowStyle(Template.evenIntensivStyle)
正在使用动态,但是jasper忽略了。
所以,问题是:
我可以为动态和碧玉使用相同的样式,结构清晰,没有不必要的"魔法"。 我更喜欢像* .css样式这样的解决方案,但任何帮助都会受到赞赏。
答案 0 :(得分:2)
使用参数引用样式文件的相对(或绝对)路径。例如,主报告可能包含:
<template><![CDATA[$P{P_REPORT_STYLES_PATH} + "FontStyle.jrtx"]]></template>
<parameter name="P_REPORT_BASE" class="java.lang.String">
<defaultValueExpression><![CDATA[""]]></defaultValueExpression>
</parameter>
<parameter name="P_REPORT_RESOURCES_PATH" class="java.lang.String">
<defaultValueExpression><![CDATA[$P{P_REPORT_BASE} + "resources/"]]></defaultValueExpression>
</parameter>
<parameter name="P_REPORT_STYLES_PATH" class="java.lang.String">
<defaultValueExpression><![CDATA[$P{P_REPORT_RESOURCES_PATH} + "styles/"]]></defaultValueExpression>
</parameter>
这允许iReport(或Jaspersoft Studio)中的报告引用报告样式的相对路径,例如:
resources/styles/FontStyle.jrtx
此路径相对于报告的.jasper
文件位置。
然后,在DynamicJasper中,您可以传入报表参数。 DynamicJasper中的API调用可能与以下JasperReports库调用的API调用不匹配,但它应该足够类似于实现以下内容:
reportParameters.put("P_REPORT_BASE", "/home/user/dev/reports/workspace");
JasperFillManager.fillReport(..., reportParameters, dataSource);
假设/home/user/dev/reports/workspace
是.jasper
文件的位置以及iReport / Jaspersoft Studio的工作空间位置,则DynamicJasper和报表开发环境都将查找并使用相同的样式文件。
在此示例中,样式文件的完整路径为:
/home/user/dev/reports/workspace/resources/styles/FontStyle.jrtx
您的目录路径当然会有所不同。
此时,您可以在两种环境中引用相同的样式。另见: