JasperReport B/S Web应用

阅读更多
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;
  
/**
 *   
 * 

Web方式请求简单的JasperReport Servlet

* * 创建日期 2013-4-22
* @author longgangbai
* @version $Revision$ 2013-4-22 * @since 3.0.0 */ public class JasperReportServlet extends HttpServlet { private static final String CONTENTTYPE = "application/octet-stream"; /** * Constructor of the object. */ public JasperReportServlet() { super(); } /** * Destruction of the servlet.
*/ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } private static final long serialVersionUID = -2610486659053659764L; public JRDataSource createReportDataSource() { JRDataSource dataSource; Collection> reportRows = initializeMapArray(); dataSource = new JRMapCollectionDataSource(reportRows); return dataSource; } public Collection> initializeMapArray() { Collection> reportRows = new ArrayList>(); HashMap row1Map = new HashMap(); HashMap row2Map = new HashMap(); HashMap row3Map = new HashMap(); HashMap row4Map = new HashMap(); row1Map.put("tail_num", "N263Y"); row1Map.put("aircraft_serial", "T-11"); row1Map.put("aircraft_model", "39 ROSCOE TRNR RACER"); row1Map.put("engine_model", "R1830 SERIES"); row2Map.put("tail_num", "N4087X"); row2Map.put("aircraft_serial", "BA100-163"); row2Map.put("aircraft_model", "BRADLEY AEROBAT"); row2Map.put("engine_model", "R2800 SERIES"); row3Map.put("tail_num", "N43JE"); row3Map.put("aircraft_serial", "HAYABUSA 1"); row3Map.put("aircraft_model", "NAKAJIMA KI-43 IIIA"); row3Map.put("engine_model", "R1830 SERIES"); row4Map.put("tail_num", "N912S"); row4Map.put("aircraft_serial", "9973CC"); row4Map.put("aircraft_model", "PA18-150"); row4Map.put("engine_model", "R-1820 SER"); reportRows.add(row1Map); reportRows.add(row2Map); reportRows.add(row3Map); reportRows.add( row4Map); return reportRows; } /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.setHeader("pragma", "no-cache"); response.setHeader("cache-control", "no-cache"); response.setContentType("text/html;charset=utf-8"); PrintWriter pw = response.getWriter(); // 创建数据源 JRDataSource jrdatasource = createReportDataSource(); String reportFile = getServletConfig().getServletContext().getRealPath("/resources/data/AircraftReport.jrxml"); JasperReport jrt = JasperCompileManager.compileReport(reportFile);//编译报表格式 //填充报表数据生成JasperPrint对象 JasperPrint jasperPrint = JasperFillManager.fillReport(jrt, new HashMap(), jrdatasource); JRHtmlExporter exporter = new JRHtmlExporter(); // 设置打印报表的信息 request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, pw); // 设置不显示jasperreports报表中的线条 // 显示线条的设置的参数 exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, true); //制定图片请求的路径 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/images/px."); exporter.exportReport(); pw.flush(); pw.close(); } catch (JRException e) { e.printStackTrace(); } } }

 

在web请求JasperReport报表缺少图片

解决方案如下:

      在WebRoot目录添加images/px文件,px文件来源jasperreports-5.0.4\src\net\sf\jasperreports\engine\images目录下pixel.GIF修改为px.px

      在Servlet添加请求设置图片路径的代码:

// 显示线条的设置的参数
	        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, true);
	        //制定图片请求的路径
	        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/images/px.");
	    

 

 

 

你可能感兴趣的:(JasperReport,展示,导出,打印,Web容器整合)