【发布时间】:2011-10-08 19:40:21
【问题描述】:
JasperReport 要求(默认情况下)图像位于“WEB-INF/classes/”中。我想在 PDF 和普通 JSP 页面之间共享图像。我宁愿不要用垃圾图像文件弄乱类路径。如何强制 JR 为图像使用不同的位置?
【问题讨论】:
标签: java image spring properties jasper-reports
JasperReport 要求(默认情况下)图像位于“WEB-INF/classes/”中。我想在 PDF 和普通 JSP 页面之间共享图像。我宁愿不要用垃圾图像文件弄乱类路径。如何强制 JR 为图像使用不同的位置?
【问题讨论】:
标签: java image spring properties jasper-reports
经过进一步检查,我似乎无法在任何地方为图像设置“位置”,但我确实发现您可以指定图像 1 的 3 种方式:
【讨论】:
在我的书Indispensable 中,我建议创建以下报告参数:
"/reports/"
$P{ROOT_DIR} + "images/"
$P{ROOT_DIR} + "styles/"
$P{ROOT_DIR} + "subreports/"
$P{SUBREPORT_DIR} + "common/"
这允许图像目录相对于ROOT_DIR 路径。它还允许您动态更改ROOT_DIR。参数必须按照它们的相对顺序声明。
在你的情况下,使用绝对路径:
"/home/user/"
$P{ROOT_DIR} + "Pictures/"
请注意,操作系统、目录结构、环境之间的更改(例如,从 JasperReports 和 JSF 迁移到 JasperReports Server)等等,无需修改报告即可完成。 (嗯,JasperReports Server 需要进行一些修改。)
【讨论】:
按照@Dave 的建议,我将基本目录拆分为一个参数并给它一个默认值。这样我可以指定绝对路径、类路径或 url。以下是相关代码:
控制器:
modelMap.put("ROOT_DIR", "/srv/images/");
-或者-
modelMap.put("ROOT_DIR", "http://site.com/images/");
jrxml 文件:
<parameter name="ROOT_DIR" class="java.lang.String">
<defaultValueExpression><![CDATA["/home/user/Pictures/"]]></defaultValueExpression>
</parameter>
...
<imageExpression class="java.lang.String">
<![CDATA[$P{ROOT_DIR}+"leaf_banner_red.png"]]>
</imageExpression>
【讨论】: