ireport制作报表的流程:

首先,我们用ireport设计报表的样式,通过编译生成.jasper文件,为java做准备。

其次,我们在java中定义report公共类,来解析.jasper文件。

最后,通过流输出到页面显示。

1.用ireport设计简单报表:在这里我们选用ireport3.0,因为3.0比较稳定。

1.1,首先,新建一个报表文件,如下图:有title、pageHeader、columnHeader......等等栏。

java中erp项目面试内容 java做erp_java中erp项目面试内容

1.2,title栏是用来放置标题的;pageHeader栏是放副标题和日期等;columnHeader栏是放表头的;detail栏是放详细信息(向下遍历数据显示);summary栏是放置图和交叉报表的;左下角的文件结构有“参数”、“字段”和变量,参数是用来定义一些静态文本的,可以通过后台进行传值,字段是定义VO的属性,变量是用来参与运算的;

    1.2.1首先我们来定义一个参数叫做title,选择参数--->"添加"----->parameter,如下图:

java中erp项目面试内容 java做erp_数据库_02

 

在弹出的对话框的参数名中输入title后点击确定,然后将title参数拖拽到title栏中,如下图:

java中erp项目面试内容 java做erp_数据库_03

在这里我们可以设置title的字体、大小和位置等。

1.2.2用同样的方法我们建立两个字段:username和password:

java中erp项目面试内容 java做erp_Boo_04

 

分别拖拽到detail栏中,并调整大小、位置和边界:

java中erp项目面试内容 java做erp_List_05

接下来我们可在对于的列上加上表头:点击工具栏的“T”静态文本,在columnHeader栏中画出:

java中erp项目面试内容 java做erp_java中erp项目面试内容_06

以上一个简单的报表就画好了,我们点击工具栏的“执行报表”按钮,编译成.jasper文件。

1.3,接下来我们定义java类Reports.java:

import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;import net.sf.jasperreports.engine.JRException;
 import net.sf.jasperreports.engine.JRExporterParameter;
 import net.sf.jasperreports.engine.JasperFillManager;
 import net.sf.jasperreports.engine.JasperPrint;
 import net.sf.jasperreports.engine.JasperReport;
 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
 import net.sf.jasperreports.engine.export.JExcelApiExporter;
 import net.sf.jasperreports.engine.export.JRHtmlExporter;
 import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
 import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
 import net.sf.jasperreports.engine.util.JRLoader;public class Reports {
  /**//*
   * 生成HTML报表显示
   */
  public void selectHtmlReport(List list,HttpServletResponse response,String url,Map map){
   response.setContentType("text/html;charset=utf-8");
   File reportFile = new File(url);
   JasperReport jasperReport = null;
   try {
    jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
   } catch (JRException e) {
    e.printStackTrace();
   }
   
   JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);
   JasperPrint jasperPrint = null;
   try {
    jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);
   } catch (JRException e) {
    e.printStackTrace();
   }
   JRHtmlExporter exporter = new JRHtmlExporter();
   PrintWriter out = null;
   try {
    out = response.getWriter();
   } catch (IOException e) {
    e.printStackTrace();
   }
   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
   exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
   exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
   try {
    exporter.exportReport();
   } catch (JRException e) {
    e.printStackTrace();
   }
  }
  /**//*
   * 导出EXCEL报表
   */
  public void selectExcelReport(List list,HttpServletResponse response,String url,Map map,String reportName){
   
   try{
    //加载jasper文件
    File reportFile = new File(url);
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
    
    //装载数据
    JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);
    
    //构造jasperPrint对象
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, jrbean);
    
       //输出流
    ByteArrayOutputStream oStream = new ByteArrayOutputStream();
    
    //构造输出对象
    JExcelApiExporter exporter = new JExcelApiExporter();
       exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"./p_w_picpath?p_w_picpath=");
       exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
       exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
       exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
       exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
       exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
       exporter.exportReport();
       
       //excel文件名
       String fileName = reportName + ".xls";
       response.reset();
       response.setHeader("Content-Disposition", "p_w_upload;filename=\"" + URLEncoder.encode(fileName,"utf-8") + "\"");
    //写输出流
       byte[] bytes = oStream.toByteArray();
       if(bytes != null && bytes.length > 0) {
       response.setContentType("application/vnd.ms-excel;charset=utf-8");
       response.setContentLength(bytes.length); 
       ServletOutputStream ouputStream = response.getOutputStream(); 
       ouputStream.write(bytes,0,bytes.length); 
       ouputStream.flush(); 
       ouputStream.close();
      }else{
      }
   }catch(Exception ex){
    ex.printStackTrace();
      } 
  }
  /**
   * 功能:生成默认图形报表的处理方法
   * 方法名:selectHtmlReport
   * @param List list 数据集
   * @param HttpServletResponse response
   * @param HttpServletRequest request 
   * @param String url 解析的报表文件
   * @param Map map 报表用的参数
   * @author 郭洪治  2010-03-15
   * @return void
   */
  public void selectHtmlReport(List list,HttpServletResponse response,HttpServletRequest request,String url,Map map){
   response.setContentType("text/html;charset=utf-8");
   File reportFile = new File(url);
   JasperReport jasperReport = null;
   try {
    jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
   } catch (JRException e) {
    e.printStackTrace();
   }
   JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);
   JasperPrint jasperPrint = null;
   //设置报表图形默认存放物理目录
   String outPutDir = request.getSession().getServletContext().getRealPath("/")+"/reportimg/";
   //加载图形报表的相对目录
   String sourceDir = request.getContextPath()+"/reportimg/";
   try {
    File file = new File(outPutDir);
    //判断此目录是否存在
    if(!file.exists()){
     file.mkdir();
    }
    jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);
   } catch (JRException e) {
    e.printStackTrace();
   }
   JRHtmlExporter exporter = new JRHtmlExporter();
   PrintWriter out = null;
   try {
    out = response.getWriter();
   } catch (IOException e) {
    e.printStackTrace();
   }
   
   exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,outPutDir);
   exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,sourceDir);
   exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
   exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
   exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
   try {
    exporter.exportReport();
   } catch (JRException e) {
    e.printStackTrace();
   }
  }
  /**
   * 功能:生成指定目录图形报表查询的处理方法
   * @param List list 数据集
   * @param HttpServletResponse response
   * @param HttpServletRequest request 
   * @param String url 解析的报表文件
   * @param Map map 报表用的参数
   * @param String imgDir 图形生成的目录
   * @author 郭洪治2010-01-20
   * @return void
   */
  public void selectHtmlReport(List list,HttpServletResponse response,HttpServletRequest request,String url,Map map,String imgDir){
   response.setContentType("text/html;charset=utf-8");
   File reportFile = new File(url);
   JasperReport jasperReport = null;
   //生成图形目录
   String outPutDir = request.getSession().getServletContext().getRealPath("/")+"/"+imgDir;
   //图形源目录
   String sourceDir = request.getContextPath()+"/"+imgDir;
   try {
    jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
   } catch (JRException e) {
    e.printStackTrace();
   }
   
   JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(list);
   JasperPrint jasperPrint = null;
   try {
    jasperPrint = JasperFillManager.fillReport(jasperReport,map,jrbean);
   } catch (JRException e) {
    e.printStackTrace();
   }
   JRHtmlExporter exporter = new JRHtmlExporter();
   PrintWriter out = null;
   try {
    out = response.getWriter();
   } catch (IOException e) {
    e.printStackTrace();
   }
   //设置图片存入的物理目录
   exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,outPutDir);
   //设置图片显示的目录
   exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,sourceDir);
   //生成图片到目录
   exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE);
   exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
   exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
   exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
   try {
    exporter.exportReport();
   } catch (JRException e) {
    e.printStackTrace();
   }
  }
  /**
   * 功能:导出多sheet报表的处理方法
   * 方法名:selectAllExcelReport
   * @param List list 数据集
   * @param HttpServletResponse response
   * @param String url 解析的报表文件
   * @param String reportName 生成excel保存的名字
   * @author 郭洪治
   * 创建时间:Nov 3, 2009 2:08:31 PM
   */
  @SuppressWarnings("unchecked")
  public void selectAllExcelReport(List list,HttpServletResponse response,String url,String reportName){
   try{
    //加载jasper文件
    File reportFile = new File(url);
    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
    List jasperPrintList = new ArrayList(); 
    
    int listSize = list.size();
    String sheetNamesArray[] = new String[listSize];
    for(int i = 0; i < listSize; i++){
     Map eachMap = (Map)list.get(i);
     List eachList = (List)eachMap.get("ls");
     sheetNamesArray[i] = (String)eachMap.get("title");
     //装载数据
     JRBeanCollectionDataSource jrbean = new JRBeanCollectionDataSource(eachList);
     //构造jasperPrint对象
     JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, eachMap, jrbean);
     jasperPrintList.add(jasperPrint);
    }
    
       //输出流
    ByteArrayOutputStream oStream = new ByteArrayOutputStream();
    
    //构造输出对象
    JExcelApiExporter exporter = new JExcelApiExporter();
       exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"./p_w_picpath?p_w_picpath=");
       exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
       exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
       exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); // 删除记录最下面的空行
       exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);// 删除多余的ColumnHeader
       exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);// 显示边框
       exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, sheetNamesArray);
       exporter.exportReport();
       
    //写输出流
       byte[] bytes = oStream.toByteArray();
       if(bytes != null && bytes.length > 0) {
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setContentLength(bytes.length); 
        //excel文件名
        String fileName = reportName + ".xls";
        response.setHeader("Content-Disposition", "p_w_upload;filename=\"" + URLEncoder.encode(fileName,"utf-8") + "\"");
        ServletOutputStream ouputStream = response.getOutputStream(); 
        ouputStream.write(bytes,0,bytes.length); 
        ouputStream.flush(); 
        ouputStream.close();
      }
   }catch(Exception ex){
    ex.printStackTrace();
      } 
  }
 }


1.4,在action中调用:

Map<String,String> parameters = new HashMap<String,String>();//定义参数map
 parameters.put("title", "我的报表"); //添加参数
String url = “WEB-INF/report/test.jasper";//定义报表文件路径
Reports report = new Reports();//创建报表类对象
report.selectHtmlReport(list, response, url, parameters);//调用生成表方法

其中list是从数据库中查询的值,放的是VO对象,VO对象的属性和.jasper报表文件中定义的字段要一一对应。

在这里VO类的定义略。

导出报表调用的方法:report.selectExcelReport(list, response, url, parameters );

 


转载于:https://blog.51cto.com/guohongzhi521/376933