`
yiweifeng
  • 浏览: 10041 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
文章分类
社区版块
存档分类
最新评论

JasperReport导出各种格式rtf,xls,pdf等

阅读更多
利用Ireport和JasperReport实现导出RTF文件 花了差不多一个星期,终于把任务算完成了,总算松了一口气。在这个过程中,遇过不少的弯路,现在把整个过程重温一遍,对一个技术人员来时,不断的积累总结十分重要。 我用的Ireport的版本是iReport-1.3.0, 要得到它们最新的版本,可以到下边的地址下载: iRport: http://ireport.sourceforge.net Jasperreport: http://jasperreports.sourceforge.net 安装就不用说了,但是要理解Ireport和JasperReport的关系十分重要,Ireport是设计报表的图形界面,在Ireport里新建一个报表是以.jrxml的形式保存的,而最终要用到的是将.jrxml的文件编译为.jsper的文件。.jasper文件就是JaserReport需要调用的报表模版,JasperReport的强大功能就在于它能将.jasper转化为各种文件的格式,如xls,rtf,pdf等等最常用的文件格式。 要将.jsper文件应用在项目中,首先要做几样准备工作: 1.将安装好的Ireport,找到它下面的lib目录,再把jasperreports-1.3.0.jar这个包复制出来(这个包是JasperReport导出的关键),然后将这个包导入到需要应用的项目中,然后在eclipse中重新构建整个项目,这是最关键的第一步。 2.如果导出出现乱码的问题,需要引入iText亚洲语言包, 可以在 http://www.lowagie.com/iText/ 查看关于iText的相关信息,包括源代码,文档. 3.设计好报表,将报表编译为.jsper文件,这些文件在iReport的安装路径下,很容易找到。 现在万事俱备,只欠东风了。我在开始写程序的的时候,在网上找了好些代码,而导出的过程中用到的类JRRtfExporter的源代码也踩过,并且发现了http://www.koders.com这个非常好的网站,这是开源项目的必备,在上面基本上很多类的源码也能查到。 接着自己封装了一个JasperReport类,而这个类可以实现导出各种格式的文件,代码如下: package common.ireport; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.export.*; import net.sf.jasperreports.engine.export.JRRtfExporter; import java.util.List; import java.io.*; import com.log.Logger; /** * IReport+JasperReport导出报表类接口 *

Title: 导出报表类

*

Description:

*

Copyright: Copyright (c) 2007

* * CES * * @author 野谷子 * @version 1.0.2007.02.14 */ public class JasperReport { private Logger logger = new Logger("common.ireport.JasperReport"); /** Creates a new instance of MyReport */ public JasperReport() { } /* * 导出单个报表为rtf或word * @param JasperPrint,OutputStream * @ 页面设置response.setContentType("application/msword"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.doc"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportToRTF(JasperPrint jasperPrint,OutputStream out){ JRRtfExporter rtfExporter = new JRRtfExporter(); rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); try { rtfExporter.exportReport(); logger.debug("Genertate the RTF report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the RTF report file ERROR!"); } } /* * 导出多个报表为rtf或word * @param List,OutputStream * @ 页面设置response.setContentType("application/msword"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.doc"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportListToRTF(List jasperPrints,OutputStream out){ JRRtfExporter rtfExporter = new JRRtfExporter(); rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrints); rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); try { rtfExporter.exportReport(); logger.debug("Genertate the mutiply RTF report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the mutiply RTF report file ERROR!"); } } /* * 导出单个报表为PDF * @param JasperPrint,OutputStream * @ 页面设置response.setContentType("application/pdf"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.pdf"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportToPDF(JasperPrint jasperPrint,OutputStream out){ JRPdfExporter pdfExporter = new JRPdfExporter(); pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); try { pdfExporter.exportReport(); logger.debug("Genertate the PDF report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the PDF report file ERROR!"); } } /* * 导出单个报表为XLS * @param JasperPrint,OutputStream * @ 页面设置response.setContentType("application/vnd.ms-excel"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.xls"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportToXLS(JasperPrint jasperPrint,OutputStream out){ JRXlsExporter xlsExporter = new JRXlsExporter(); xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE); try { xlsExporter.exportReport(); logger.debug("Genertate the XLS report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the XLS report file ERROR!"); } } /* * 导出单个报表为HTML * @param JasperPrint,OutputStream * @ 页面设置response.setContentType("text/html"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.html"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportToHTML(JasperPrint jasperPrint,OutputStream out){ JRHtmlExporter htmlExporter = new JRHtmlExporter(); htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); htmlExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); htmlExporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE); htmlExporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.FALSE); try { htmlExporter.exportReport(); logger.debug("Genertate the HTML report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the HTML report file ERROR!"); } } /* * 导出单个报表为CSV * @param JasperPrint,OutputStream */ public void exportReportToCSV(JasperPrint jasperPrint,OutputStream out){ JRCsvExporter csvExporter = new JRCsvExporter(); csvExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); csvExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); try { csvExporter.exportReport(); logger.debug("Genertate the CSV report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the CSV report file ERROR!"); } } /* * 导出单个报表为TXT * @param JasperPrint,OutputStream * @ 页面设置response.setContentType("text/html"); * @ 页面设置response.setHeader("Content-disposition","attachment;filename=fileName.txt"); * @ 页面设置response.setContentLength(bytes.length); */ public void exportReportToTXT(JasperPrint jasperPrint,OutputStream out){ JRTextExporter txtExporter = new JRTextExporter(); txtExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); txtExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out); txtExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, new Integer(80)); txtExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, new Integer(25)); try { txtExporter.exportReport(); logger.debug("Genertate the TXT report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the TXT report file ERROR!"); } } /* * 导出单个报表为XML * @param JasperPrint,OutputStream */ public void exportReportToXML(JasperPrint jasperPrint,OutputStream out){ try { JasperExportManager.exportReportToXmlStream(jasperPrint, out); logger.debug("Genertate the XML report ok! :" + out); } catch (JRException e) { e.printStackTrace(); logger.error("Generate the XML report file ERROR!"); } } } 然后写了一个Control类用于封装.jasper文件,并获取其对象,代码如下: package common.ireport; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.export.*; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.util.*; import net.sf.jasperreports.view.*; import java.util.*; import java.util.List; import java.sql.*; import java.io.*; import java.net.URL; /** * 导出报表控制类 *

Title: 导出报表控制类

*

Description:

*

Copyright: Copyright (c) 2007

* * CES * * @author 野谷子 * @version 1.0.2007.02.14 */ public class JsperReportControl { private Logger logger = new Logger("common.ireport.JsperReportControl"); private Query query = new Query(); //定义报表模版路径 private String PREFIX = "/ireportFile/"; //定义后缀名 private String SUFFIX = ".jasper"; public JsperReportControl() { } /* * 取得报表模版的对象 * 单个参数的情况 * @param 报表名称:strFileName * @param 参数名称:strParamName * @param 参数值:strParamValue * @return JasperPrint */ public JasperPrint getJsperPrint(String strFileName,String strParamName,String strParamValue) throws SQLException{ JasperPrint jasperPrint = null; String strJasper = this.getClassPath()+PREFIX + strFileName + SUFFIX; Map params = new HashMap(); params.put(strParamName,strParamValue); //定义数据源连接对象 Connection conn = null; query.createConnection(CommonManage.CONN); conn = query.getConnection(); try { //用JasperFillManager类导入.jasper文件,参数和数据源 jasperPrint = JasperFillManager.fillReport(strJasper, params, conn); try{ if(conn==null){ conn.close(); } }catch(SQLException sqle){ logger.error("关闭数据库连接错误"+sqle); } }catch(Exception e){ logger.error("getJsperPrint(String strFileName,String strParamName,String strParamValue) Error"+e); } return jasperPrint; } /** * 在类中取得当前文件所在的相对路径与绝对路径 * * @return String */ public String getClassPath(){ String strClassName = getClass().getName(); String strPackageName = ""; String strURL = ""; if(getClass().getPackage() != null) { strPackageName = getClass().getPackage().getName(); } //System.out.println("ClassName:" + strClassName); //System.out.println("PackageName:" + strPackageName); String strClassFileName = ""; if(!"".equals(strPackageName)) { strClassFileName = strClassName.substring(strPackageName.length() + 1,strClassName.length()); } else { strClassFileName = strClassName; } //System.out.println("ClassFileName:" + strClassFileName); String strTempName = strClassFileName+".class"; try { URL url = null; url = getClass().getResource(strClassFileName + ".class"); strURL = url.toString(); System.out.println(strURL); logger.info("strURL="+strURL); } catch(Exception ex) { ex.printStackTrace(); } //取.jasper文件的绝对路径 strURL= strURL.substring("file:".length(),strURL.length()-strTempName.length()); System.out.println("strURL="+strURL); return strURL; } } 期间在取绝对路径时出现了问题,在本机测试可以通过,但放在服务器上报错,原因是本机是windows系统,而服务器是linux系统,到现在我觉得最大的原因是getClass().getResource()这个方法在linux系统上取不到资源的位置而报错。 最后就是所写的jsp页面了,代码如下: 结尾:在本机测试通过了,但放于服务器出现了错误:Can't connect to X11 window server using ':0.0' as the value of the DISPLAY 而在windows系统中却能正确运行,原因是程序调用了图形界面的功能,而windows很好的支持图形界面,linux却不能很好的支持,需要修改linux中的DISPLAY的变量: 下面有几种方法: 1. 对于tomcat服务器:找到脚本:catalina.sh, 在/usr/local/tomcat/bin/catalina.sh中修改为 JAVA_OPTS="-Djava.awt.headless=true"或者CATALINA_OPTS="-Djava.awt.headless=true" echo "Using CATALINA_BASE: $CATALINA_BASE" echo "Using CATALINA_HOME: $CATALINA_HOME" echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR" echo "Using RUNJAVA: $_RUNJAVA" echo "Using JAVA_OPTS: $JAVA_OPTS" 2.对于服务器中oracle自带的JSP server,找到jserv.properties这个配置文件,在上面添加: wrapper.env=DISPLAY=<servername>:0 3.或者用root身份执行一下xhost +命令, 第一种情况:DISPLAY在远程数据库中没有正确定义,需要: set DISPLAY=localComputer:0 export DISPLAY(取决于shell的不同而命令不同) 第二种情况:图形界面的功能不能在远程登陆的用户中定义和使用,需要: 使用oracle用户登录xwindow: 应用xhost +命令 终于写完了,因为刚开始的时候我在网上找资料发现有用的、系统的资料少之又少,而且JasperReport的文档又是收费的,现在写我的过程出来希望能给想应用JasperReport的仁兄参考下。</servername>
分享到:
评论
1 楼 niweiwei 2011-01-11  
能不能整一个完整的代码上了,看着太费劲了

相关推荐

    jasperreport导出Html xls PDF doc 格式文档源代码

    本文将深入探讨如何使用JasperReport导出不同格式的文档,包括Html、Xls、PDF和DOC。 首先,让我们了解一下JasperReport的核心概念。JasperReport是一个基于Java的报告库,它允许开发人员设计和生成复杂的报表。...

    jasperreport教程

    - **导出格式(Export Formats)**: JasperReport支持多种导出格式,包括HTML、PDF、Excel(XLS或XLSX)、CSV、XML、RTF等,满足不同应用场景的需求。 **2. JasperReport报表设计** 使用iReport,我们可以创建一个...

    jasperreport的操作步骤

    ### JasperReport 在 Web 项目中的操作步骤详解 ...通过以上步骤,你可以在Web项目中顺利地集成并使用JasperReport生成各种格式的报表。JasperReport的强大功能和灵活性使其成为Web开发中报表生成的理想选择。

    jasperreport完整的jar包

    5. **输出格式**:JasperReport 可以将报表导出为多种格式,例如 PDF、HTML、XLS(Excel)、CSV、RTF 和 XML。这使得报表可以在各种平台上查看和分发。 6. **报表参数**:参数可以用来传递动态数据到报表,比如用户...

    jasperReport jar包

    4. **输出格式转换**:JasperReports支持多种输出格式,包括PDF、HTML、XLS(Excel)、CSV、RTF、XML、ODT、TXT等。开发者可以根据需求选择合适的导出格式,以满足不同应用场景。 5. **嵌入式和独立使用**:...

    jasper 常用jar包

    它支持多种数据源,包括数据库、XML文件、CSV文件等,能够生成PDF、HTML、XLS、RTF等多种格式的报表。在Java应用程序中,JasperReport通过一系列的jar包提供服务,这些jar包是其核心功能实现的基础。 1. **...

    jasperreports-javaflow-6.3.0.7z_JASPERREPORT_

    JasperReports支持多种导出格式,包括PDF、HTML、XLS、CSV、RTF、XML、ODT等。这使得报表可以在不同的平台上查看和打印。v6.3.0可能对某些导出格式的兼容性和质量进行了改进。 5. **JavaFlow组件** ...

    Struts2实现打印功能依赖的jar包

    JasperReport是一个开源的报表库,它可以生成各种静态和交互式的报告,包括PDF、HTML、XLS、CSV、RTF、ODT、XML和 Jasper本身格式的文档。在Struts2中,JasperReport通常被用来创建和呈现这些报告,以便用户可以预览...

    JasperReports 报表类库v3.5.zip

    在输出格式方面,JasperReports可以生成PDF、HTML、XLS、CSV、RTF、XML等多种格式的报表,满足不同应用场景的需求。例如,PDF适合打印,HTML适合在Web上展示,而XLS则便于Excel进行进一步的数据分析。 此外,...

    jasperreports-6.3.0-project.zip

    它允许开发者设计、填充并导出各种类型的报表,如PDF、HTML、XLS、CSV、RTF等。在本压缩包"jasperreports-6.3.0-project.zip"中,包含的是JasperReports 6.3.0版本的相关源代码和资源文件,这为我们提供了深入学习和...

    Jasper Reports Session

    Jasper Reports是一个强大的Java开源报表工具,它能够生成丰富的内容,并将其展示在屏幕上、打印出来或者导出为PDF、HTML、RTF、XLS、CSV和XML等多种文件格式。其核心功能是通过报告模板(JRXML或程序化创建的模板)...

    JasperReports+iReport在eclipse中的使用

    JasperReports是一款开源的报表工具,它能够根据预定义的模板生成多种格式的报表,如PDF、HTML、XML等,并且支持CSV、XLS、RTF等格式。JasperReports的主要特点包括: 1. **多格式支持**:除了基本的PDF、HTML、XML...

    ireportjasperreport开源报表中使用javabean作为数据源的详细实.docx

    iReport 和 JasperReport 是一款强大的开源报表工具,广泛应用于Web应用开发中,支持多种数据源(如数据库、JavaBean等)以及多种输出格式(如HTML、PDF、XLS、RTF等)。本文将详细介绍如何在iReport中使用JavaBean...

Global site tag (gtag.js) - Google Analytics