Jasper Reports中的图像表达式URL

Mar*_*ada 22 jasper-reports

我想在JasperReports jrxml文件中嵌入一个图像.我有这个目录结构.

Tomcat Root
 webapps
  reports
   -->images
    --> company_logo.jpg
   -->reports
    -->sample.jasper
   -->WEB-INF
    -->classes
Run Code Online (Sandbox Code Playgroud)

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

<image>
 <reportElement x="0" y="0" width="104" height="40"/>
 <imageExpression class="java.lang.String">
  <![CDATA["images/company_logo.jpg"]]>
 </imageExpression>
</image>
Run Code Online (Sandbox Code Playgroud)

..这也是

<image>
 <reportElement x="0" y="0" width="104" height="40"/>
 <imageExpression class="java.lang.String">
  <![CDATA["/images/company_logo.jpg"]]>
 </imageExpression>
</image>
Run Code Online (Sandbox Code Playgroud)

但它总是说从位置加载字节时出错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>
Run Code Online (Sandbox Code Playgroud)

我对正确的方法感到有点困惑.

Gio*_*sas 30

<![CDATA["../images/company_logo.jpg"]]>应该做的伎俩.该路径相对于.jasper文件.


Man*_*tan 13

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

parameters.put("CONTEXT",this.getServletContext().getRealPath("/"));
Run Code Online (Sandbox Code Playgroud)

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

$P{CONTEXT}.toString()+"reports/images/logo.png"
Run Code Online (Sandbox Code Playgroud)

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

$P{CONTEXT}.toString()+"reports/OrdenCompraAlmacen_Items.jasper"
Run Code Online (Sandbox Code Playgroud)

我希望它有用.


pdo*_*ide 7

使用.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]
Run Code Online (Sandbox Code Playgroud)

尝试将资源加载为:

<imageExpression><![CDATA[this.getClass().getResourceAsStream("/img/mdg_logo.jpg")]]></imageExpression>
Run Code Online (Sandbox Code Playgroud)