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


最近进行了一系列报表的开发,有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背景图片不显示问题彻底解决了。 希望对大家有用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值