`
longgangbai
  • 浏览: 7308953 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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;
  
/**
 *   
 * <p>Web方式请求简单的JasperReport Servlet  <p>
 *
 * 创建日期 2013-4-22<br>
 * @author  longgangbai<br>
 * @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. <br> 
     */  
    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<Map<String, ?>> reportRows = initializeMapArray();
        dataSource = new JRMapCollectionDataSource(reportRows);
        return dataSource;
    }
    public Collection<Map<String, ?>> initializeMapArray() {
        Collection<Map<String, ?>> reportRows = new ArrayList<Map<String, ?>>();
        HashMap<String, Object> row1Map = new HashMap<String, Object>();
        HashMap<String, Object> row2Map = new HashMap<String, Object>();
        HashMap<String, Object> row3Map = new HashMap<String, Object>();
        HashMap<String, Object> row4Map = new HashMap<String, Object>();
        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. <br> 
     * 
     * 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<String, Object>(), 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报表设计总结

    在B/S环境下,通常需要将报表集成到Web应用中。为此,需要在WEB-INF/lib目录下添加必要的依赖库,如Apache Commons库、iText、JasperReports库等。此外,安装和使用iReport工具可以方便地创建和预览.jasper文件,它...

    原创:iReport&JasperReport开发手记(一) List报表开发与发布

    在B/S架构的应用程序开发中,报表处理一直是重要的组成部分。传统的处理方式包括生成CSV文件供用户下载后再行编辑,这种方式不仅效率低下且用户体验不佳。另一种方式是采用商业化的报表工具如水晶报表或润乾报表,但...

    A基于J2EE的Web报表系统的设计与实现.pdf

    4. **Struts框架**:Struts是J2EE平台上的一个MVC(Model-View-Controller)框架,用于简化Web应用的开发。在报表系统中,Struts框架负责协调表现层、业务逻辑层和数据访问层的交互,提供了一种结构化的方式来管理...

    java程序论文,毕业设计,含代码

    STRUTS是一种MVC(模型-视图-控制器)框架,它为Java Web应用程序提供了结构化的开发框架,帮助开发者组织和管理业务逻辑,使得代码更易维护和测试。 JDBC(Java Database Connectivity)是Java语言访问数据库的...

    java常用网址,可能已经过期了

    - **知识点**:介绍了Chrome浏览器开发者工具的使用方法,帮助开发者调试Web应用。 21. **CSDN 下载 - Java 图形界面开发资源** - [http://download.csdn.net/album/detail/1013/2]...

    报表设计基础及JasperReort,JFreeChart简明教程.doc

    报表应用程序的设计需要考虑用户如何自定义报表内容,如何展示报表(如 Web 展示或导出为 Excel),以及应用程序的整体架构(如桌面应用、C/S 或 B/S 架构)。 【总结】 报表设计是企业信息系统中的关键组成部分,...

    JFreeChart教程

    - 报表的具体应用涉及用户交互、报表展现方式(如Web、Excel)以及系统架构(如桌面、C/S、B/S)。 3. **JFreeChart使用** - JFreeChart提供了一系列的类和方法来创建和定制图表,如`CategoryDataset`用于创建...

    JasperReort,JFreeChart简明教程

    3. **系统架构**:报表应用程序可以是桌面应用、C/S架构或B/S架构,根据实际需求选择合适的技术栈。 总结来说,JasperReport和JFreeChart是Java平台上进行报表设计和图形化展示的重要工具。通过这两款工具,开发者...

    JFreechart

    - **具体应用**:包括用户自定义数据内容、报表展示方式(如Web、Excel)以及系统架构(如桌面应用、C/S、B/S)。 总结,JFreeChart是一个强大的图表库,它为Java应用程序提供了丰富的图表类型和自定义选项。结合...

Global site tag (gtag.js) - Google Analytics