【问题标题】:Spring JasperReports Images LocationSpring JasperReports 图片位置
【发布时间】:2011-10-08 19:40:21
【问题描述】:

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

【问题讨论】:

    标签: java image spring properties jasper-reports


    【解决方案1】:

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

    • 类路径:“image.png”
    • 绝对:“/home/user/Pictures/image.png”
    • 网址:“https://encrypted.google.com/images/logos/ssl_ps_logo.png”

    【讨论】:

      【解决方案2】:

      在我的书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/"

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

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

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

      请注意,操作系统、目录结构、环境之间的更改(例如,从 JasperReports 和 JSF 迁移到 JasperReports Server)等等,无需修改报告即可完成。 (嗯,JasperReports Server 需要进行一些修改。)

      【讨论】:

        【解决方案3】:

        按照@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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-12
          • 2013-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          相关资源
          最近更新 更多