ireport+jasperreport 報表html顯示

最近正在做一個基於J2EE的Web項目,使用IReport與JasperReport作爲Web報表的解決方案,在使用Html報表形式進行打印時出現如下問題。(同樣的問題使用了不同的解決方法)
    一.問題描述:使用JasperReport生成Html報表後,數據顯示正確,但各種線條顯示不出來
           產生原因:在生成HTML頁面時JRHtmlExporterParameter.IMAGES_URI參數設置不正確,主要是圖片的路徑問題。由JasperReport生成Html時,那些線條是一個名稱爲px像素的圖片,是內置在jasperreports包中的,在IE顯示時以圖片的形式顯示
           解決辦法:查閱了網絡許多資料,照其方法測試均未解決。無奈之下,查看JasperReport的源代碼才搞定。
          1、在web.xml中添加如下配置:

                   <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、在調用程序中增加如下代碼:

             exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath()+"/servlets/image?image=");

             全部調用程序如下:

             <%@ page contentType="application/pdf;charset=GB2312"%>
             <%@ page import="net.sf.jasperreports.engine.*" %>
             <%@ page import="net.sf.jasperreports.engine.util.*" %>
             <%@ page import="net.sf.jasperreports.engine.export.*" %>
             <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
             <%@ page import="java.util.*" %>
             <%@ page import="java.io.*" %>
             <%@ page import="java.sql.*" %>
      <%
                //   "/reports/test.jasper"是ireport編譯後的報表文件
                
File reportFile = new File(application.getRealPath("/reports/test.jasper"));
                 if(!reportFile.exists())
                      throw new JRRuntimeException("報表繪製失敗,找不到報表配置文件!");
                JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
              
                String url ="jdbc:jtds:sqlserver://127.0.0.1/test";
                Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
                Connection conn = DriverManager.getConnection(url,"sa", "");
                //null爲無參數傳入
                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, conn);
          
               JRHtmlExporter exporter = new JRHtmlExporter();
               StringBuffer sbuffer = new StringBuffer();

               session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

               exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
               exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
               exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath()+"/servlets/image?image=");

               exporter.exportReport();

 

          //如果是pdf輸出的話,可以用下面的代碼

/*

             JRPdfExporter exporter = new JRPdfExporter();
             exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
             exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
             exporter.exportReport();

*/


%>

         3、執行你的代碼,完工!

   二. 問題描述:使用JasperReport生成Html報表後,使用IE打印時報表的各種線條無法打印出來
           產生原因:和上例一樣,由JasperReport生成Html時,那些線條是一個名稱爲px像素的圖片,是內置在jasperreports包中的,在IE顯示時以圖片的形式顯示,打印時瀏覽器無法打印這些圖片。
           解決辦法:通過設置IE選項,使其可以打印背景顏色和圖像,方法:工具 --internet選項 --高級 --打印 --打印背景顏色和圖像,重新預覽即可顯示出各種線條。

 

轉自:http://hi.baidu.com/ecgql/blog/item/a66d8d4501175c348694737d.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章