如何在 DynamicReports 和 JasperReports 中获得相同的样式

How to get same styles in DynamicReports and JasperReports

我想找到使 dynamicReports 和 jasperReports 具有相同样式的最佳解决方案。我开始使用 dynamicReports,但我发现很难在那里创建不寻常的报告。在 iReport 图形生成器中做到这一点要容易得多。所以现在我有 50% 的报告在 Dynamic 上运行,50% 在 Jasper 上运行。

现在我无法解决样式问题。我在模板 class 中创建了样式、字体等并将其用于 DynamicReports。经过一些魔法之后:

.setName("cellCenterStyle");
template().setColumnStyle(cellStyle)

我能够将它们用于 jasper,但这不是一个完整的解决方案,因为某些选项仍然不起作用,例如:

.setDetailEvenRowStyle(Template.evenIntensivStyle)

正在使用 dynamic,但 jasper 忽略了 is。

所以,问题:

我可以为 dynamic 和 jasper 使用相同的样式,结构清晰,没有不必要的 "magic"。 我更喜欢像 *.css 样式 这样的解决方案,但我们将不胜感激。

使用参数引用样式文件的相对(或绝对)路径。例如,主报告可能包含:

<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 Library 调用的 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

您的目录路径当然会有所不同。


此时,您可以在两个环境中引用相同的样式。另请参阅: