我想在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)
我对正确的方法感到有点困惑.
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)
我希望它有用.
使用.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)