【问题标题】:Image expression URL in Jasper ReportsJasper 报告中的图像表达式 URL
【发布时间】:2010-09-02 02:17:42
【问题描述】:

我想将图像嵌入到我的 JasperReports jrxml 文件中。我有这个目录结构。

Tomcat Root
 webapps
  reports
   -->images
    --> company_logo.jpg
   -->reports
    -->sample.jasper
   -->WEB-INF
    -->classes

我尝试这样做,认为这与我的报告上下文根相关

<image>
 <reportElement x="0" y="0" width="104" height="40"/>
 <imageExpression class="java.lang.String">
  <![CDATA["images/company_logo.jpg"]]>
 </imageExpression>
</image>

..这也是

<image>
 <reportElement x="0" y="0" width="104" height="40"/>
 <imageExpression class="java.lang.String">
  <![CDATA["/images/company_logo.jpg"]]>
 </imageExpression>
</image>

但它总是说从位置 JRLoader 加载字节时出错。

我尝试这样做并且它有效,但我有点困惑为什么我的前两次尝试没有。

这真的是您在 JasperReports 中嵌入图像的方式吗?您需要提供整个路径吗?我在想应该有一个相对的页面 东西。

<image>
 <reportElement x="0" y="0" width="104" height="40"/>
 <imageExpression class="java.lang.String">
  <![CDATA["http://localhost:8080/reports/images/company_logo.jpg"]]>
 </imageExpression>
</image>

我对正确的方法有点困惑。

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    &lt;![CDATA["../images/company_logo.jpg"]]&gt; 应该可以解决问题。该路径是相对于您的 .jasper 文件的。

    【讨论】:

    • 需要注意的是文件名和路径是区分大小写的!
    • 当 Spring 动态编译 Jasper 报告文件时,这对我不起作用。我不得不求助于here 描述的技术
    【解决方案2】:

    您需要创建一个字符串类型的参数,例如 CONTEXT,并从您的 JSP 发送 servlet 上下文:

    parameters.put("CONTEXT",this.getServletContext().getRealPath("/"));
    

    现在,在您的报告中使用参数:

    $P{CONTEXT}.toString()+"reports/images/logo.png"
    

    同样适用于子报表或其他网络资源,例如:

    $P{CONTEXT}.toString()+"reports/OrdenCompraAlmacen_Items.jasper"
    

    希望有用。

    【讨论】:

    • 像魅力一样工作!
    • 对我有用!!!谢谢!!即使我从数据库加载路径: hmParams.put("CONTEXT",pathReceta.getValor());然后我需要像这样添加一个额外的“/”:$P{CONTEXT}.toString()+"/reports/images/logo.png"
    【解决方案3】:

    使用.jrxml,当使用带图片的绝对路径时,在部署打包好的jar filr 时会得到:

    java.lang.IllegalArgumentException: name
    at sun.misc.URLClassPath$Loader.findResource(Unknown Source) ~[na:1.8.0_121]
    at sun.misc.URLClassPath.findResource(Unknown Source) ~[na:1.8.0_121]
    at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_121]
    at java.net.URLClassLoader$2.run(Unknown Source) ~[na:1.8.0_121]
    

    尝试将资源加载为:

    <imageExpression><![CDATA[this.getClass().getResourceAsStream("/img/mdg_logo.jpg")]]></imageExpression>
    

    【讨论】:

    • 对于master上面的表达就可以了,子报告怎么样
    【解决方案4】:

    有时最好使用 File.separtor:"ima" + File.separator + "logo.jpg"

    【讨论】:

      【解决方案5】:

      在jrxml的图像属性和相对图像路径上使用jasper报告IDE的图像表达式中的以下表达式

      相应地改变w.r.t路径

      getClass().getResource("META-INF/resources/webjars/Bank/themes/default/images/Logo.png").openStream()
      

      【讨论】:

        【解决方案6】:

        这样,路径是相对于您当前项目的工作目录的。 “。”表示当前工作目录。

        【讨论】:

          【解决方案7】:

          把你的图片放在下面的结构中:

          webapps
            reports
                -->reports
                    -->sample.jasper
           -->WEB-INF
                -->classes
                    -->images
                        --> company_logo.jpg
          
          <imageExpression class="java.lang.String">
              <![CDATA["company_logo.jpg"]]>
          </imageExpression>
          

          【讨论】:

          • 请用英文。 Stack Overflow 是一个英文网站。你可以去Area 51看看是否有你的语言的网站或提案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-26
          相关资源
          最近更新 更多