Spring JasperReports图像位置

时间:2011-07-19 19:03:24

标签: java image spring properties jasper-reports

JasperReport要求(默认情况下)图像位于“WEB-INF / classes /”中。我想在PDF和普通的JSP页面之间共享图像。我宁愿不用垃圾图像文件弄乱classpath。如何强制JR使用不同的图像位置?

3 个答案:

答案 0 :(得分:4)

在我的书Indispensable中,我建议您创建以下报告参数:

  • ROOT_DIR - "/reports/"
  • IMAGE_DIR - $P{ROOT_DIR} + "images/"
  • STYLE_DIR - $P{ROOT_DIR} + "styles/"
  • SUBREPORT_DIR - $P{ROOT_DIR} + "subreports/"
  • COMMON_DIR - $P{SUBREPORT_DIR} + "common/"

这允许images目录相对于ROOT_DIR路径。它还允许您动态更改ROOT_DIR。参数必须按相对顺序声明。

在您的情况下,使用绝对路径:

  • ROOT_DIR - "/home/user/"
  • IMAGE_DIR - $P{ROOT_DIR} + "Pictures/"

请注意,可以在不必修改报告的情况下完成操作系统,目录结构,环境(例如,从JasperReports& JSF迁移到JasperReports服务器)等之间的更改。 (好吧,JasperReports Server需要进行一些修改。)

答案 1 :(得分:2)

按照@ Dave的建议,我将基本目录拆分为一个参数并给它一个默认值。这样我就可以指定绝对路径,类路径或URL。以下是相关的代码:

控制器:

modelMap.put("ROOT_DIR", "/srv/images/");

-Or -

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>

答案 2 :(得分:1)

经过进一步检查,似乎我无法在任何地方设置图像的“位置”,但我确实发现您可以指定图像中的3种方式之一:

  • Classpath:“image.png”
  • 绝对:“/ home / user / Picts / image.png”
  • 网址:“https://encrypted.google.com/images/logos/ssl_ps_logo.png”