这是在使用过程中遇到的问题以及解决办法。
一.在html报表中图片的显示问题。
问题归结为两类,一是jasper自己给你配置的图片用来对齐用的。于是可以用
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
来不让图片作为占位符来对其解决。这样对于普通的没有自己嵌入图片的报表很好用。
但是我们往往会把自己的图片,如从jfreechart生成的图片也嵌入到自己的报表中。于是我们不得不从新审视,解决图片显示的问题。jasper是通过一个servlet类来显示图片的。而且我们也要指定一些jasper自动使用的图片放在一定的路径中。下面说解决配置。
(1) 在web.xml中配置servlet。
<!-- 为导出html类型的报表图片而加如的servlet 暂时还没有用到 --> <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>
(2) 在导出报表的java代码中设置属性类似如下:
//设置允许输出图片相关
//注意这里的设置和web.xml中的ImageServlet相关--(net.sf.jasperreports.j2ee.servlets.ImageServlet)
//图片请求路径
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"servlets/image?image=");
exporter.setParameter(JRHtmlExporterParameter.SIZE_UNIT, "pt");
//设置去哪个目录找报表自动配置的图片
//在这里我把jasper源文件目录net\sf\jasperreports\engine\images中的图片都
//复制到了我的web content目录下的images/report中。
exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME, request
.getSession().getServletContext().getRealPath("images/report"));
//session attribute是必须设置的,否则自己插入到报表中的图片将不会显示
request.getSession().setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
注意最后那个session的设置,使得我们从jfreechart生成的报表图像也得以显示,这点至关重要。其他的说明在注视中已经很详细。
二.