如何在DynamicReports和JasperReports

时间:2016-07-28 14:57:14

标签: java jasper-reports dynamic-reports

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

现在我无法解决风格问题。我在Template类中创建了样式,字体等,并将其用于DynamicReports。经过一番魔术之后:

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

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

.setDetailEvenRowStyle(Template.evenIntensivStyle)

正在使用动态,但是jasper忽略了。

所以,问题是:

我可以为动态和碧玉使用相同的样式,结构清晰,没有不必要的"魔法"。 我更喜欢像* .css样式这样的解决方案,但任何帮助都会受到赞赏。

1 个答案:

答案 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

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

此时,您可以在两种环境中引用相同的样式。另见: