import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.jasperreports.engine.JRAbstractExporter; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; 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.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.JRPdfExporter; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.export.JRXmlExporter; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.j2ee.servlets.ImageServlet; /** * 使用jasperReport做报表时的工具支持类.有两个用途,生成jasperPrint对象,和设置导出时的session */ public class ReportUtils { private HttpServletRequest request; private HttpServletResponse response; private HttpSession session; /** * 在其它web环境下构造此工具类对象 * * @param request * request请求对象 */ public ReportUtils(HttpServletRequest request) { this.request = request; this.session = request.getSession(); } public ReportUtils(HttpServletResponse response) { this.response = response; } public ReportUtils(HttpServletRequest request, HttpServletResponse response) { this(request); this.response = response; } /** * 获得JasperPrint对象;自定义填充报表时的parameter和dataSource. 参数说明和动态表头的用法参考上一方法 * * @param filePath * @param parameter * @param dataSource * @param sizeGroup * @return */ public JasperPrint getJasperPrint(String filePath, Map parameter, JRDataSource dataSource) throws JRException { JasperReport jasperReport = null; try { jasperReport = (JasperReport) JRLoader.loadObject(filePath); return JasperFillManager.fillReport(jasperReport, parameter, dataSource); } catch (JRException e) { e.printStackTrace(); } return null; } /** * 通过传入List类型数据源获取JasperPrint实例 * * @param filePath * jasper路径 * @param parameter * @param list * @return * @throws JRException */ public JasperPrint getPrintWithBeanList(String filePath, Map parameter, List list) throws JRException { JRDataSource dataSource = new JRBeanCollectionDataSource(list); return getJasperPrint(filePath, parameter, dataSource); } /** * 传入类型,获取输出器 * * @param docType * @return */ public JRAbstractExporter getJRExporter(DocType docType) { JRAbstractExporter exporter = null; switch (docType) { case PDF: exporter = new JRPdfExporter(); break; case HTML: exporter = new JRHtmlExporter(); break; case XLS: exporter = new JExcelApiExporter(); break; case XML: exporter = new JRXmlExporter(); break; case RTF: exporter = new JRRtfExporter(); break; } return exporter; } public void setAttrToPage(JasperPrint jasperPrint, String report_fileName, String report_type) { session.setAttribute("REPORT_JASPERPRINT", jasperPrint); session.setAttribute("REPORT_FILENAME", report_fileName); session.setAttribute("REPORT_TYPE", report_type); } /** * 定义了报表输出类型,固定了可输出类型 * * @author Administrator * */ public static enum DocType { PDF, HTML, XLS, XML, RTF } /** * 编译报表模板文件jaxml,生成jasper二进制文件 * * @param jaxmlPath * @param jasperPath * @throws JRException */ public void complieJaxml(String jaxmlPath, String jasperPath) throws JRException { JasperCompileManager.compileReportToFile(jaxmlPath, jasperPath); } /** * 输出PDF 使用此方法,必须预先注入response * * @param jasperPath * @param params * @param sourceList * @param fileName * @throws JRException * @throws IOException * @throws ServletException */ public void servletExportPDF(String jasperPath, Map params, List sourceList, String fileName) throws JRException, IOException, ServletException { servletExportDocument(DocType.PDF, jasperPath, params, sourceList, fileName); } /** * 输出html静态页面,必须注入request和response * * @param jasperPath * @param params * @param sourceList * @param imageUrl * 报表文件使用的图片路径,比如 ../servlets/image?image= * @throws JRException * @throws IOException * @throws ServletException */ public void servletExportHTML(String jasperPath, Map params, List sourceList, String imageUrl) throws JRException, IOException, ServletException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); JRAbstractExporter exporter = getJRExporter(DocType.HTML); JasperPrint jasperPrint = getPrintWithBeanList(jasperPath, params, sourceList); session.setAttribute( ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); PrintWriter out = response.getWriter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageUrl); exporter.exportReport(); } /** * 输出Excel报表文件 * * @param jasperPath * @param params * @param sourceList * @param fileName * @throws JRException * @throws IOException * @throws ServletException */ public void servletExportExcel(String jasperPath, Map params, List sourceList, String fileName) throws JRException, IOException, ServletException { servletExportDocument(DocType.XLS, jasperPath, params, sourceList, fileName); // 要想获得更好的视觉效果,可以添加以下代码 // // 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);// 显示边框 } /** * 生成不同格式报表文档 * * @param docType * 文档类型 * @param jasperPath * @param params * @param sourceList * @param fileName * @throws JRException * @throws IOException * @throws ServletException */ public void servletExportDocument(DocType docType, String jasperPath, Map params, List sourceList, String fileName) throws JRException, IOException, ServletException { if (docType == DocType.HTML) { servletExportHTML(jasperPath, params, sourceList, fileName); return; } JRAbstractExporter exporter = getJRExporter(docType); // 获取后缀 String ext = docType.toString().toLowerCase(); if (!fileName.toLowerCase().endsWith(ext)) { fileName += "." + ext; } // 判断资源类型 String contentType = "application/"; if (ext.equals("xls")) { ext = "excel"; } else if (ext.equals("xml")) { contentType = "text/"; } contentType += ext; response.setContentType(contentType); response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); exporter.setParameter(JRExporterParameter.JASPER_PRINT, getPrintWithBeanList(jasperPath, params, sourceList)); OutputStream ouputStream = response.getOutputStream(); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); try { exporter.exportReport(); } catch (JRException e) { throw new ServletException(e); } finally { if (ouputStream != null) { try { ouputStream.close(); } catch (IOException ex) { } } } } }
iReport+jasperReport之CSV、XML数据源
jasperReport支持多种格式的数据源,CSV(Comma Separated values),是一种用来存储数据的纯文本,文件格式,通常用于电子表格或数据库软件。
规则
0 开头是不留空,以行为单位。
1 可含或不含列名,含列名则居文件第一行。
2 一行数据不垮行,无空行。
3 以半角符号,作分隔符,列为空也要表达其存在。
4 列内容如存在,,则用“”包含起来。
5 列内容如存在“”则用“”“”包含。
6 文件读写时引号,逗号操作规则互逆。
7 内码格式不限,可为ASCII、Unicode或者其他。
jasper文件和前面几篇用到的是一样的(person.jasper),准备数据的文本文件Person.txt其中文件的格式对应模板文件的字段【 "pid", "name", "sex", "age", "password", "department"】。
"20000000002","bulktree2","man","22","2222222222","pcisv62"
"20000000003","bulktree3","man","23","3333333333","pcisv63"
"20000000004","bulktree4","man","24","4444444444","pcisv64"
"20000000005","bulktree5","man","25","5555555555","pcisv65"
"20000000006","bulktree6","man","26","6666666666","pcisv66"
"20000000007","bulktree7","man","27","7777777777","pcisv67"
"20000000008","bulktree8","man","28","8888888888","pcisv68"
"20000000009","bulktree9","man","29","9999999999","pcisv69"
下来我们看看jasperReport的API是怎么识别这些数据的,但是做这个之前我们还要指定数据到底是怎么对应的,定义String类型数组存放模板对应的列名和文本数据对应
"department" };
识别这些数据并不难,下面这一句就可以搞定:
.getLocationInputStream("D:\\workspace\\Person.txt"));
我们怎么才能让它识别对应的列呢?查看API看看对应的set方法吧!
jrcsvDataScource.setRecordDelimiter("\r\n");
// set columnName
jrcsvDataScource.setColumnNames(columNames);
至此数据源就准备完了,jasperReport封装了底层的实现,简单吧!下来看看完整的代码:
import java.util.HashMap;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRCsvDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import org.bulktree.ireport.ViewReport;
public class CSVDataSource {
public static void main(String[] args) {
try {
new CSVDataSource().reportView();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void reportView() throws Exception {
JasperReport jasperReport = (JasperReport) JRLoader
.loadObject("D:\\workspace\\Person.jasper");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
getReportParameter(), getDateSource());
new ViewReport().viewer(jasperPrint);
}
private HashMap getReportParameter() {
HashMap parameters = new HashMap();
parameters.put("reportTitle", "laoshulin");
return parameters;
}
private JRCsvDataSource getDateSource() throws Exception {
String[] columNames = new String[] { "pid", "name", "sex", "age", "password",
"department" };
// get csvdata
JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
.getLocationInputStream("D:\\workspace\\test\\src\\org\\bulktree\\ireport\\csvdata\\Person.txt"));
// set record delimiter
jrcsvDataScource.setRecordDelimiter("\r\n");
// set columnName
jrcsvDataScource.setColumnNames(columNames);
return jrcsvDataScource;
}
}
还是这样的效果吧!^_^
至于XML数据源也是很简单,通过读取xml文件获得数据
不同的是document会作为一个参数传递给报表,fillReport方法就不会出现第三个参数,完整代码如下:
import java.util.HashMap;
import java.util.Locale;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.util.JRXmlUtils;
import org.bulktree.ireport.ViewReport;
import org.w3c.dom.Document;
public class XMLDataSource {
private static final String JASPER_FILE_NAME = "D:\\workspace\\Person.jasper";
private static final String XML_FILE_NAME = "D:\\workspace\\person.xml";
private void viewerReport() throws JRException {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(JASPER_FILE_NAME);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
getReportParameter(XML_FILE_NAME));
new ViewReport().viewer(jasperPrint);
}
private HashMap getReportParameter(String xmlFileName) {
HashMap parameters = new HashMap();
try {
parameters.put("reportTitle", "laoshulin");
Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT,
document);
parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, "yyyy-MM-dd");
parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, "#,##0.##");
parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.CHINESE);
parameters.put(JRParameter.REPORT_LOCALE, Locale.CHINA);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return parameters;
}
public static void main(String[] args) throws Exception {
new XMLDataSource().viewerReport();
}
}
预览效果就不看了吧!哈哈 都是一样的道理,现在看看jasperReport的API有多强大了吧!
相关推荐
`iReport`是一款开源的Java报表设计工具,它允许开发者创建复杂的报表布局,并能够导出为多种格式,如PDF和DOC(Word)。本文将详细介绍如何使用`iReport`来导出PDF和Word文档。 首先,`iReport`是JasperReports库...
iReport是一个报表设计工具,可以用来创建复杂的报表,并且可以将报表导出为多种格式,包括PDF和HTML。下面,我们将详细讲解iReport导出报表为PDF所涉及的关键点。 1. iReport报表设计: iReport报表设计过程中,...
5. 设置导出选项:在iReport中,可以预览报表并设置导出格式,如Excel或PDF。每个格式可能有不同的导出参数,比如在Excel中,你可以控制行列的样式、合并单元格等;在PDF中,你可以调整页面大小、字体和颜色。 代码...
iReport是一款功能强大的开源报表设计工具,它允许用户创建复杂的报告,并支持导出到多种格式,包括Excel。本篇将详细讲解如何在iReport 5.1.0版本中导出包含Excel公式的报表,以求和公式为例。 首先,我们需要理解...
在ireport中,我们可以定义两种不同类型的导出格式,通过设置jasperReport的导出参数,使得用户可以选择导出为PDF或Excel格式。 4. **子报表**: 子报表是报表设计中的一个重要概念,它允许在一个报表中嵌套另一个...
总的来说,"jasper+ireport+jfreechart导出html.excel.word.pdf"这个主题涵盖了报表设计、数据绑定、图表生成以及多种格式导出的关键技术。通过学习和应用这些工具,开发者可以构建出高效、直观的数据呈现系统,满足...
"ireport+springMVC 报表导出pdf excel"这个主题聚焦于如何利用iReport工具和SpringMVC框架来实现报表的PDF和Excel格式导出功能。下面我们将深入探讨这两个技术以及它们在报表生成中的应用。 首先,iReport是一款...
在Java开发中,IReport是一款常用的报表设计工具,它可以与JasperReports库配合,用于创建复杂的报告并导出成各种格式,包括Excel。本篇文章将详细介绍如何使用IReport和Java代码来导出Jasper文件为Excel。 首先,...
java+ireport 例子 导出html以及pdf 可以直接运行,使用的是mysql数据库 DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(10) DEFAULT NULL, `...
IReport是一款基于Java的开源报表设计工具,它允许开发者创建复杂的报告模板,然后用JasperReports库来生成PDF、HTML、Excel等多种格式的报表。在导出Excel报表时,如果包含图片,可能会遇到图片在单元格中被拉伸或...
在IT行业中,报表生成是数据分析和展示的重要环节,而iReport作为一款强大的JasperReports设计工具,被广泛用于创建PDF、HTML、Excel等格式的报表。然而,在处理中文字符时,用户可能会遇到一些问题,特别是在导出...
它支持多种数据源(如数据库、XML等),并能够将数据以不同的格式(如 PDF、Excel、HTML 等)输出。 ### 二、Java 导出 Excel 文件 #### 1. 导入必要的库 为了实现 Java 中 IReport 的功能,需要导入以下相关类库...
2. **JasperReport 库**:iReport 是基于 JasperReport 库的,该库提供了生成报表的功能,支持多种输出格式,如 PDF、HTML、Excel 等。在 Java 项目中,我们需要引入 JasperReport 的相关依赖库(jars)。 3. **...
### Java调用iReport...此外,对于需要生成Excel或PDF格式的报告,只需对上述Java代码中的导出部分稍作调整即可。这种方法不仅提高了报表生成的效率,还大大简化了开发流程,非常适合于需要频繁生成报表的应用场景。
【标题】:“ireport利用jsp导出excel&pdf;报表源代码” 【描述】:“本人验证过的jsp代码,ireport导出pdf excel报表” 在Java Web开发中,生成各种类型的报表是常见的需求,例如用于数据分析、业务统计或者数据...
根据提供的信息,我们可以深入探讨如何使用iReport工具及其Java API来导出Excel文件,并进一步讨论相关的其他导出功能,如PDF、HTML和Word文档的生成。 ### iReport简介 iReport是一款开源报表设计工具,主要用来...
**IReport教程(Word版本)** IReport是一款强大的开源报表设计工具,它是JasperReports库的一部分,用于创建复杂的报表设计,这些设计可以被Java应用程序、Web应用或服务器平台使用。本教程将指导你如何利用...
4. **导出报表**:`JasperExportManager.exportReportToPdfFile()`, `JasperExportManager.exportReportToHtmlFile()` 和 `JasperExportManager.exportReportToXlsFile()` 分别用于导出报表为PDF、HTML和Excel格式。...
对于Word文档,虽然Ireport不直接支持,但可以通过先导出为PDF,然后借助其他工具转换为Word格式。 依赖库的列表如下: 1. **jasperreports-3.7.4.jar**:这是JasperReports库的核心,包含了报表设计、编译和渲染...
iReport则是JasperReports项目的一部分,是一款强大的报表设计工具,支持创建各种复杂的报表格式,如PDF、HTML、Excel、CSV等。用户可以通过拖拽方式设计报表布局,填充动态数据,非常适合在企业级应用中用于数据...