最近正在做一個基於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