ireport+struts2集成开发总结一: 解决HTML图片背景不能显示的问题

来源:互联网 发布:大学生网络情感障碍 编辑:程序博客网 时间:2024/05/22 09:47


最近进行了一系列报表的开发,有HTML、报表、条形码标签打印等等,在开发过程中遇到了一些问题,现在我把这些问题总结下来分享给大家。

HTML图片背景不显示这个问题,网上有很多解决方法。有的是改JAR文件源码、有的则是自己建立一个IMAGE文件夹。 可我觉得,以上方法代价太大,特别是自己增加IMAGE文件夹并放入PX.GIF文件的方法,如果以后开发带图表的报表,IMAGE文件夹里怎么增加图片?所以显然是不可取的。 由于笔者所做项目代码比较繁杂,也没有统一对Action请求加入.action或.do后缀,依靠过滤器来达到目地的解决方案对楼主也是不可取的。

怎么解决这个问题呢? 我们先从原理上分析: 从struts2报的错上可以看出, Struts2是把背景图片PX当做ACTION了。知道这个原理,一般来说能想到3种解决方案:方案一.从struts2的拦截器上下功夫,不再拦截一切, 如web.xml中的 /.*配置。 方案 二.既然struts2把PX图片当成请求,我们就逆向思维, 在生成HTML时,设置export属性禁用图片,这样就不会冲突了。 属性设置关键代码为:

JRHtmlExporter exporter = new JRHtmlExporter();exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);

方案三:也是我最推崇并使用的方案。 建立一个空ACTION, 做为PX请求的中转, 最后再返回图片地址。 这样做充分利用了JAR的源码,我们只是针对冲突做了个简单的中转而已。代码如下:

在sturts2.xml文件中加入以下代码:

<package name="servlets" extends="struts-default" namespace="/servlets">    <action name="image" class="com.main.action.ServletTempAction" method="jasperreportImg">    <result>/servlets/image</result>    </action></package><result name="printBillByIreport" type="jasper"><param name="location">/jasperTemplate/billFormatStyleFive.jasper</param><param name="dataSource">printDataList</param><param name="format">HTML</param><param name="imageServletUrl"><![CDATA[/servlets/image?image=]]></param><param name="documentHeader">bill_no2</param></result>


增加临时中转action,代码如下:

public class ServletTempAction extends ActionSupport{/** *  */private static final long serialVersionUID = 6218836747053969789L;/** * jasperreport中的图片servlet * @return */public String jasperreportImg(){return SUCCESS;}} 


 在web.xml中加入image的servlet声明:

<servlet-name>ImageServlet</servlet-name><servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class></servlet><servlet-mapping><servlet-name>ImageServlet</servlet-name><url-pattern>/servlets/image</url-pattern></servlet-mapping>

如此设置后,就会发现HTML背景图片不显示问题彻底解决了。 希望对大家有用

原创粉丝点击