java+ireport应用

ireport制作报表的流程:

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

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

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

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

1.1,香港虚拟主机,首先,新建一个报表文件,如下图:有title、pageHeader、columnHeader……等等栏。

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

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

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

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

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

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

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

以上一个简单的报表就画好了,我们点击工具栏的“执行报表”按钮,编译成.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,"./image?image="); 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", "attachment;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,"./image?image="); 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", "attachment;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 );

本文出自 “紫晶幻治” 博客,谢绝转载!

,香港服务器那段雨骤风狂。人生之旅本就是风雨兼程,是要说曾经拥有,

java+ireport应用

相关文章:

你感兴趣的文章:

标签云: