jasperreport实现Html、Pdf、Rtf、 Excel、Xml报表导出

1.数据源(JRDataSource)

import java.util.ArrayList;
import java.util.List;

import lbc.report.baseqry.QryData;
import lbc.report.bean.VioWritJycfjds;
import lbc.report.bean.base.BaseVioWritJycfjds;

import org.hibernate.Session;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

/**
 * @类名:ReportDataSource.java
 * @类功能描述: 产生报表填充需要使用的数据源
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class ReportDataSource implements JRDataSource {
  
  private int index = -1;
  private static QryData qryData=new QryData();
  private static List list=new ArrayList();
  
  static
  {
   String SQL="select * from VIO_WRIT_JYCFJDS";
   list=qryData.sqlQry(SQL, VioWritJycfjds.class);
  }
  p lic Object getFieldVal(JRField field) throws JRException {
   String fieldName=field.getName();
   
   if(fieldName.eq ls("bh"))
   {
    return ((VioWritJycfjds)list.get(index)).getId();
   }
   if(fieldName.eq ls("bt"))
   {
    return ((VioWritJycfjds)list.get(index)).getJybt();
   }
    
   if(fieldName.eq ls("sfjg") && (((VioWritJycfjds) list.get(index)).getJysfjg())!=null && (((VioWritJycfjds) list.get(index)).getJysfjg()).eq ls("1"))
   {
     return "\√";
   }
   
 }

 

2.JasperPrintWithJRDataSource类

import java.io.File;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
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.util.JRLoader;

/**
 * @类名:JasperPrintWithJRDataSource.java
 * @类功能描述: 使用报表模板及数据等生成JasperPrint
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */

/**
 * 使用报表模板及数据等生成JasperPrint
 * */
p lic class JasperPrintWithJRDataSource {
 
 /**传入的参数**/
 private Map params;
 
 /**jrxml文件**/
 private String jrxmlFilePath;
 
 /** 模板文件的地址**/
 private String reportFilePath;
 
 /**JRDataSource**/
 private JRDataSource dataSource;

 p lic JRDataSource getDataSource() {
  return dataSource;
 }

 p lic void setDataSource(JRDataSource dataSource) {
  this.dataSource = dataSource;
 }

 p lic String getJrxmlFilePath() {
  return jrxmlFilePath;
 }

 p lic void setJrxmlFilePath(String jrxmlFilePath) {
  this.jrxmlFilePath = jrxmlFilePath;
 }

 p lic Map getParams() {
  return params;
 }

 p lic void setParams(Map params) {
  this.params = params;
 }

 p lic String getReportFilePath() {
  return reportFilePath;
 }

 p lic void setReportFilePath(String reportFilePath) throws Exception {
  
  if(reportFilePath==null || !reportFilePath.endsWith(".jasper"))
   throw new Exception("传入的模板文件格式不对,请传入以.jasper为后缀的文件!");
  this.reportFilePath = reportFilePath;
 }
 
 p lic JasperPrintWithJRDataSource () {
  
  super();
 }
 
 p lic JasperPrintWithJRDataSource(String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  if(jrxmlFilePath==null || !jrxmlFilePath.endsWith(".jrxml"))
   throw new Exception("模板文件格式不对,请传入以.jrxml为后缀的文件!");
  
  if(dataSource==null)
   throw new Exception("dataSource不应当为null!");
  this.setJrxmlFilePath(jrxmlFilePath);
  this.setReportFilePath(reportFilePath);
  this.setParams(params);
  this.setDataSource(dataSource);
 }
 
 /**
  * 取得JasperPrint
  */
 
 p lic JasperPrint getJasperPrint() throws Exception {
  
  //编译成.Jasper文件
  JasperCompileManager.compileReportToFile(this.jrxmlFilePath);
  
  File reportFile=new File(this.reportFilePath);
  if(!reportFile.exists())
   throw new Exception("传入的模板文件不存在!");
  
  try {
   
   //LOAD 编译好的模板
   JasperReport jasperReport=(JasperReport) JRLoader.loadObject(reportFile.getPath());
   //进行数据填充
   JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, this.params, this.dataSource);
   return jasperPrint;
  } catch (JRException jre) {
   jre.printStackTrace();
   throw new Exception("数据填充发生错误,请检查数据库源和用来填充的参数map是否有误!");
  }
 }
}

 

3.导出HTML格式报表

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.jsp.JspWriter;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

/**
 * @类名:HTMLExport.java
 * @类功能描述: 利用报表生成HTML格式报表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */

/*
 * 利用报表生成HTML格式报表
 */
p lic class HTMLExport {
 
 /*
  * 导出报表
  */
 
p lic void export(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {
   
   response.reset();
   response.setContentType("text/html; charset=GBK");
   PrintWriter writer=response.getWriter();
   
   try {
    JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
    // 使用JRHtmlExporter导出Html格式
    JRHtmlExporter exporter=new JRHtmlExporter();
    reqst.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, writer);
    //报表边框图片设置"report/image?image=",report为你的报表及PX图片所在目录
    //exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "report/image?image=");
    //报表边框图片设置 IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE,不使用图片
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
    exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
    //导出
    exporter.exportReport();
   } catch (Exception e) {
    e.printStackTrace();
    throw new Exception("导出HTML格式报表时发生错误!");
   }finally{
    if(writer!=null)
    {
     try {
      writer.close();
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
   }
   
  } catch (IOException ioe) {
   ioe.printStackTrace();
  }
  throw new Exception("使用JRHtmlExporter导出Html格式时发生错误!");
 }

 

4.导出Pdf报表

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletReqst;
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.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;

/**
 * @类名:PdfExport.java
 * @类功能描述: 导出PDF报表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class PDFExport {
 
 p lic void exportToPDF(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception
 {
    try{
          response.reset();

          response.setContentType("application/pdf;charset=GBK");
           //得到jasperPrint对象
     JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
           JRPdfExporter pdfexporter = new JRPdfExporter();
           pdfexporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
           //设置输出流
           pdfexporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
           //如果保存到硬盘用下面语句
           //pdfexporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "c:\\mypdf.pdf");
     pdfexporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.FALSE);
     pdfexporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
     pdfexporter.exportReport();
     System.out.println("Done!");
 }catch(IOException e){
  e.printStackTrace();
    }

 }
}

 

5.导出RTF报表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRRtfExporter;

/**
 * @类名:RTFExport.java
 * @类功能描述:导出RTF报表 
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class RTFExport {
 
 p lic void exportToRtf(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRRtfExporter rtfExporter=new JRRtfExporter();
   rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   //设置导出文件名
   rtfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "c://myrtf.rtf");
   rtfExporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GB2312");
   rtfExporter.exportReport();
   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

 

6.导出XML报表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRXmlExporter;

/**
 * @类名:XMLExport.java
 * @类功能描述: 导出XML报表
 * @author lbc

 * @version v1.0.0.1
 * @see 
 */
p lic class XMLExport {
 
 p lic void exportToXml(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception  {
  
  try {
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRXmlExporter xmlExporter=new JRXmlExporter();
   xmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
   xmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
   xmlExporter.exportReport();
   response.setContentType("text/xml");
   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

由于在浏览器中打开Xml时,在页面设置里需进行内容类型的设置,因此最好在JSP页面中加上如下代码:

 

7.导出Excel报表

import java.io.IOException;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

/**
 * @类名:EXCELExport.java
 * @类功能描述: 导出Excel报表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class EXCELExport {
 
 p lic void exportToExcel(HttpServletReqst reqst,HttpServletResponse response,String jrxmlFilePath,String reportFilePath,Map params,JRDataSource dataSource) throws Exception {
  
  try {

   response.reset();
   response.setContentType("application/vnd.ms-excel;charset=GBK");
   JasperPrint jasperPrint=new JasperPrintWithJRDataSourceNew(jrxmlFilePath,reportFilePath,params,dataSource).getJasperPrint();
   JRXlsExporter jrXlsExporter=new JRXlsExporter();
   jrXlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
   // 设置输出流
   jrXlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,response.getOutputStream());
   jrXlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);
   jrXlsExporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GB2312");
   jrXlsExporter.exportReport();

   System.out.println("Done!");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

由于在浏览器中打开Excel时,在页面设置里需进行内容类型的设置,因此最好在JSP页面中加上如下代码:

 

8.ACTION调用,导出报表

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletReqst;
import javax.servlet.http.HttpServletResponse;

import lbc.report.report.EXCELExport;
import lbc.report.report.HTMLExportNew;
import lbc.report.report.PDFExport;
import lbc.report.report.RTFExport;
import lbc.report.report.ReportDataSource;
import lbc.report.report.XMLExport;

import net.sf.jasperreports.engine.JRDataSource;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;


/**
 * @类名:jycfjdsAction.java
 * @类功能描述: ACTION调用,导出报表
 * @author lbc
 * @version v1.0.0.1
 * @see 
 */
p lic class jycfjdsAction extends DispatchAction {
 
 p lic ActionForward loadReport(ActionMapping mapping, ActionForm form,
   HttpServletReqst reqst, HttpServletResponse response) throws Exception {

  Map params = new HashMap();
  JRDataSource dataSource = new ReportDataSource();
  //导出HTML报表
  HTMLExportNew htmExportNew=new HTMLExportNew();
  htmExportNew.export(reqst,response,reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 导出PDF报表
  //PDFExport pdfExport=new PDFExport();
  //pdfExport.exportToPDF(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"),reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
        //导出EXCEL报表
  //EXCELExport excelExport=new EXCELExport();
  //excelExport.exportToExcel(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 导出XML报表
  //XMLExport xmlExport=new XMLExport();
  //xmlExport.exportToXml(reqst, response, reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  // 导出RTF报表
  //RTFExport rtfExport=new RTFExport();
  //rtfExport.exportToRtf(reqst, response,reqst.getRealPath("/report/jycfjds.jrxml"), reqst.getRealPath("/report/jycfjds.jasper"), params, dataSource);
  
  return null;
 }
}

 

9.调用JSP页面导出报表



< a href="mailto:%@page" >%@page import="lbc.report.baseqry.QryData"%<
< a href="mailto:%@page" >%@page import="java.util.List"%<
< a href="mailto:%@page" >%@page import="java.util.ArrayList"%<
< a href="mailto:%@page" >%@page import="lbc.report.report.ReportDataSource"%<
< a href="mailto:%@page" >%@page import="java.util.HashMap"%<
< a href="mailto:%@page" >%@page import="java.util.Map"%<
< a href="mailto:%@page" >%@page import="lbc.report.report.HTMLExportNew"%<
< a href="mailto:%@page" >%@page import="lbc.re

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JasperReport是一个强大的报表生成工具,支持生成多种格式的报表,包括PDFExcel、Word等。下面是使用JasperReport生成Excel报表的简单步骤: 1. 创建报表模板:使用JasperStudio创建报表模板,选择Excel作为输出格式,并设计报表布局和样式。 2. 定义数据源:定义报表所需的数据源,可以是数据库、XML文件等。 3. 编写Java代码:使用Java代码调用JasperReport API,读取数据源并将数据填充到报表模板中,最终生成Excel报表。 下面是一个简单的示例代码: ```java // 加载报表模板 JasperReport jasperReport = JasperCompileManager.compileReport("report.jrxml"); // 定义数据源 JRDataSource dataSource = new JREmptyDataSource(); // 填充数据并生成Excel报表 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource); JRXlsxExporter exporter = new JRXlsxExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("report.xlsx")); SimpleXlsxReportConfiguration configuration = new SimpleXlsxReportConfiguration(); configuration.setOnePagePerSheet(true); exporter.setConfiguration(configuration); exporter.exportReport(); ``` 在这个示例中,我们首先加载报表模板,然后定义一个空的数据源。接下来,使用JasperFillManager将数据源填充到报表模板中,并生成一个JasperPrint对象。最后,我们使用JRXlsxExporter将JasperPrint对象导出Excel文件。在导出Excel文件时,我们可以通过SimpleXlsxReportConfiguration设置导出选项,例如每页一个工作表等。 需要注意的是,JasperReport生成Excel报表的效果可能不如专业的Excel工具,例如Microsoft Excel或LibreOffice Calc。如果需要生成复杂的Excel报表,建议使用专业的Excel工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值