日期:2014-05-17  浏览次数:21293 次

说下SPRING MVC与jasperreports整合
研究了下新版本的jasperreports,有些小问题,提供给大家,少走弯路
单独抽个jasper-view.xml,配置如下
<bean id="jasperReportsViewResolver"
          class="org.springframework.web.servlet.view.jasperreports.JasperReportsViewResolver">
        <property name="order" value="0"></property>
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView"/>
        <property name="prefix" value="/WEB-INF/jasper/"/>
        <property name="suffix" value=".jrxml"/>
        <property name="viewNames" value="rpt*"/>
        <property name="jdbcDataSource" ref="dataSource"/>
        <property name="exporterParameters">
            <map>
                <!-- Force bei allen UTF-8 -->
                <entry
                        key="net.sf.jasperreports.engine.JRExporterParameter.CHARACTER_ENCODING">
                    <value>utf-8</value>
                </entry>
                <!-- keine Images als Platzhalter in HTML-Seiten , vermeidet nullpx-Problem -->
                <entry key="net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN">
                    <value type="java.lang.Boolean">false</value>
                </entry>
                <entry key="net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IMAGES_URI">
                    <value type="java.lang.String">/html/image.jsp?image=</value>
                </entry>
                <entry key="net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IMAGES_DIR_NAME">
                    <value type="java.lang.String">D:\\work\\***\\web\\tmp</value>
                </entry>
                <entry key="net.sf.jasperreports.engine.export.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR">
                    <value type="java.lang.String">true</value>
                </entry>
            </map>
        </property>
    </bean>

配置几点说明下:
1、property order要设置下0,因为MVC,大家都会设置
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

这个配置会抢你的映射
2、写一个jsp文件,来读生成的报表图片,我的配置/html/image.jsp,网上抄一段
<%@ page import="java.io.*" %>
<%
    String imagePath = System.getProperty("***") + "/web/tmp";

    String name = request.getParameter("image");
    imagePath += "/" + name;

    response.reset();

    OutputStream output = response.getOutputStream();// 得到输出流

    response.setContentType("image/png");
//        ServletContext context = getServletContext();// 得到背景对象
    File f = new File(imagePath);

    InputStream imageIn = new FileInputStream(f);
    BufferedInputStream bis = new BufferedInputStream(imageIn);// 输入缓冲流
    BufferedOutputStream bos = new BufferedOutputStream(output);// 输出缓冲流
    byte data[] = new byte[4096];// 缓冲字节数
    int size = 0;
    size = bis.read(data);
    while (size != -1) {
        bos.write(data, 0, size);
        size = bis.read(data);
    }
    bis.close();
    bos.flush();// 清空输出缓冲流
    bos.close();
    output.close();
%>

3、设置图片生成地址,我这是tmp目录,需要绝对路径,那位能告诉怎么设置相对路径

配置就这些,Controller返回时,直接返回报表名称就可以了,现在spring直接编译jrxml,
网上一堆问报表图片生成问题,看来一直是老问题,以前用的很老的版本就是这样解决的。新版本与spring结合还是很简单,未深入研究,求赐教。
1 楼 macrotea 2011-09-25  
楼主对spring mvc 了解吗
有资料吗
能分享下吗