Jasper Reports中的图像表达式URL

时间:2010-09-02 02:17:42

标签: jasper-reports

我想将图像嵌入到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>

我对正确的方法感到有些困惑。

7 个答案:

答案 0 :(得分:29)

<![CDATA["../images/company_logo.jpg"]]>应该做到这一点。该路径相对于.jasper文件。

答案 1 :(得分:11)

您需要创建一个String类型的PARAMETER,例如 CONTEXT ,并从您的JSP发送servlet上下文:

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

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

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

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

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

我希望它很有用。

答案 2 :(得分:5)

使用 .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>

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

相应改变w.r.t路径

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

答案 5 :(得分:0)

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

答案 6 :(得分:-2)

将您的照片放在以下结构中:

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

<imageExpression class="java.lang.String">
    <![CDATA["company_logo.jpg"]]>
</imageExpression>