如何在 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
您的目录路径当然会有所不同。
此时,您可以在两个环境中引用相同的样式。另请参阅:
我想找到使 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
您的目录路径当然会有所不同。
此时,您可以在两个环境中引用相同的样式。另请参阅: