利用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>
相关推荐
本文将深入探讨如何使用JasperReport导出不同格式的文档,包括Html、Xls、PDF和DOC。 首先,让我们了解一下JasperReport的核心概念。JasperReport是一个基于Java的报告库,它允许开发人员设计和生成复杂的报表。...
- **导出格式(Export Formats)**: JasperReport支持多种导出格式,包括HTML、PDF、Excel(XLS或XLSX)、CSV、XML、RTF等,满足不同应用场景的需求。 **2. JasperReport报表设计** 使用iReport,我们可以创建一个...
### JasperReport 在 Web 项目中的操作步骤详解 ...通过以上步骤,你可以在Web项目中顺利地集成并使用JasperReport生成各种格式的报表。JasperReport的强大功能和灵活性使其成为Web开发中报表生成的理想选择。
5. **输出格式**:JasperReport 可以将报表导出为多种格式,例如 PDF、HTML、XLS(Excel)、CSV、RTF 和 XML。这使得报表可以在各种平台上查看和分发。 6. **报表参数**:参数可以用来传递动态数据到报表,比如用户...
4. **输出格式转换**:JasperReports支持多种输出格式,包括PDF、HTML、XLS(Excel)、CSV、RTF、XML、ODT、TXT等。开发者可以根据需求选择合适的导出格式,以满足不同应用场景。 5. **嵌入式和独立使用**:...
它支持多种数据源,包括数据库、XML文件、CSV文件等,能够生成PDF、HTML、XLS、RTF等多种格式的报表。在Java应用程序中,JasperReport通过一系列的jar包提供服务,这些jar包是其核心功能实现的基础。 1. **...
JasperReports支持多种导出格式,包括PDF、HTML、XLS、CSV、RTF、XML、ODT等。这使得报表可以在不同的平台上查看和打印。v6.3.0可能对某些导出格式的兼容性和质量进行了改进。 5. **JavaFlow组件** ...
JasperReport是一个开源的报表库,它可以生成各种静态和交互式的报告,包括PDF、HTML、XLS、CSV、RTF、ODT、XML和 Jasper本身格式的文档。在Struts2中,JasperReport通常被用来创建和呈现这些报告,以便用户可以预览...
在输出格式方面,JasperReports可以生成PDF、HTML、XLS、CSV、RTF、XML等多种格式的报表,满足不同应用场景的需求。例如,PDF适合打印,HTML适合在Web上展示,而XLS则便于Excel进行进一步的数据分析。 此外,...
它允许开发者设计、填充并导出各种类型的报表,如PDF、HTML、XLS、CSV、RTF等。在本压缩包"jasperreports-6.3.0-project.zip"中,包含的是JasperReports 6.3.0版本的相关源代码和资源文件,这为我们提供了深入学习和...
Jasper Reports是一个强大的Java开源报表工具,它能够生成丰富的内容,并将其展示在屏幕上、打印出来或者导出为PDF、HTML、RTF、XLS、CSV和XML等多种文件格式。其核心功能是通过报告模板(JRXML或程序化创建的模板)...
JasperReports是一款开源的报表工具,它能够根据预定义的模板生成多种格式的报表,如PDF、HTML、XML等,并且支持CSV、XLS、RTF等格式。JasperReports的主要特点包括: 1. **多格式支持**:除了基本的PDF、HTML、XML...
iReport 和 JasperReport 是一款强大的开源报表工具,广泛应用于Web应用开发中,支持多种数据源(如数据库、JavaBean等)以及多种输出格式(如HTML、PDF、XLS、RTF等)。本文将详细介绍如何在iReport中使用JavaBean...