项目里用到了jasperreport,平时都是用ireport来设计好报表模板直接使用就好了,但是碰到动态表头等情况就比较麻烦了,而且有些报表可能仅是针对一个数据表或者说一个实体对象的操作,对于这种报表一个个设计JRXML也比较麻烦,尝试了一下编程的方式来生成报表,只是个简单的测试。在网上找一些资料发现纯编程来写报表的相关内容很少,也是看了相关的API后才写了个例子。
ReportProcess.java是一个简单的用来构造、编译并导出报表的类。
package jasper.test;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JasperDesign;
public class ReportProcess {
public static void main(String[] args) {
try {
JasperReport jp = getJasperReport();
InputStream in = new FileInputStream(
"src/test/java/jasper/test/Data.csv");// 换成自己目录
CsvDataSource csvDataSource = new CsvDataSource(
new InputStreamReader(in));
in.close();
JasperPrint jpr = JasperFillManager.fillReport(jp, null,
csvDataSource);
JasperExportManager.exportReportToHtmlFile(jpr, "c:/test.html");// 写的时候随便指定了个查看的目录
} catch (Exception e) {
e.printStackTrace();
}
}
public static JasperReport getJasperReport() throws JRException {
JasperDesign design = new JasperDesign();
design.setName("testReport");
JRDesignBand title = new JRDesignBand();
title.setHeight(50);
JRDesignStaticText titleText = new JRDesignStaticText();
titleText.setText("test report");
titleText.setX(230);
titleText.setFontSize(20);
titleText.setHeight(50);
titleText.setWidth(100);
title.addElement(titleText);
design.setTitle(title);
String[] headers = { "name", "age", "gender", "like" };
JRDesignBand columnHeader = new JRDesignBand();
columnHeader.setHeight(30);
JRDesignBand detail = new JRDesignBand();
detail.setHeight(30);
for (int i = 0; i < headers.length; i++) {
// add column headers
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setText(headers[i]);
staticText.setFontSize(16);
staticText.setHeight(30);
staticText.setWidth(50);
staticText.setX(50 * i);
columnHeader.addElement(staticText);
// define fields
JRDesignField field = new JRDesignField();
field.setName(headers[i]);
field.setValueClass(String.class);
design.addField(field);
// add text fields for displaying fields
JRDesignTextField textField = new JRDesignTextField();
JRDesignExpression expression = new JRDesignExpression();
expression.setText("$F{" + headers[i] + "}");
expression.setValueClass(String.class);
textField.setExpression(expression);
textField.setFontSize(14);
textField.setHeight(30);
textField.setWidth(50);
textField.setX(50 * i);
detail.addElement(textField);
}
design.setColumnHeader(columnHeader);
design.setDetail(detail);
return JasperCompileManager.compileReport(design);
}
}
CsvDataSource.java是摘自JASER例子里的一个数据源实现,有现成的做例子的时候就拿来用了,用这个比较简单,不用写数据库那一堆。
package jasper.test;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;
import au.com.bytecode.opencsv.CSVReader;
/**
*
* 这个类摘自JASPER带的一个例子里的CSV数据源实现。
*
*/
public class CsvDataSource implements JRRewindableDataSource {
private CSVReader csvReader;
private List rows;
private int currentRowIndex = -1;
private int currentColIndex = 0;
private int totalRows;
public CsvDataSource(Reader reader) {
try {
csvReader = new CSVReader(reader);
rows = csvReader.readAll();
totalRows = rows.size();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean next() throws JRException {
boolean retVal = true;
currentRowIndex++;
currentColIndex = 0;
if (currentRowIndex >= totalRows) {
retVal = false;
}
return retVal;
}
public Object getFieldValue(JRField arg0) throws JRException {
String value = null;
String[] currentRow = (String[]) rows.get(currentRowIndex);
value = currentRow[currentColIndex];
currentColIndex++;
return value;
}
public void moveFirst() throws JRException {
currentRowIndex = 0;
currentColIndex = 0;
}
}
Data.csv里的数据。
jim,12,male,basketball
lily,13,female,dancing
david,23,male,swimming
su,23,female,running
结果大致是这个样子。
test report
name age gender like
jim 12 male basketb
lily 13 female dancing
david 23 male swimmi
su 23 female running
这里就是个实验性的代码,但至少可以知道,我们可以通过一些手段来编程处理JASPER的报表。可以写得更完善一些,动态获取表头个数与内容,写QUERY查询,填充报表。
比如一张表有一部分表头是不定的,那就可以在程序中追加表头定义,追加字段定义等。
分享到:
相关推荐
NULL 博文链接:https://qdjinxin.iteye.com/blog/350194
该项目是selenium+chromedrive 基于google 开发的,用来jasperserver在测试环境,导出上版所用的包
jasper很多报表 ,其中包括 普通报表,分组报表,自定义报表,图形报表,以及 图形表格混合的报表
jasper+ireport+jfreechart导出html.excel.word.pdf,两种数据方式:数据库,list.图片路径完美解决,附带所有jar包,部署可用
jasper外国软件但是免费就要用,导出中文费劲,网上介绍很多升级iText包也没好使后,找的对于初学者来说很开心解决办法,zip里附加了字体文件和导出后的jar
jasper ireport 生成 报表,导入直接运行,不必修改任何配置
博文“Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表”对应工程的源码,原文地址见:http://blog.csdn.net/neareast/article/details/12030475
Dynamic+Jasper+Mysql连接生成报表示例
ireport+jasper报表,报表时项目中不可缺少的模块,我把前辈的东西拿来修改了一下终于实现了自定义报表。希望对大家有帮助,由于资源分不多了,因此3分就当做是辛苦分吧,代码详尽,数据库字段自己定义,有问题联系...
spring MVC Web应用中集成Jasper报表工具。教程涵盖的技术点有:报表自定义数据源的使用;报表渲染、呈现的配置与实现;iReport报表设计器的使用(报表模板设计)等。
jasper报表(odoo)
springboot整合JasperReport实现报表功能文章所需的全部资源
jasperReports-6.5.1使用Jaspersoft Studio生成的jasper模板导出pdf,docx,ppt,xls,xlsx; 包括多模板导出pdf,docx,ppt; 基于java web项目,response导出,有问题可以给我留言.
内含需要的全部jar,注意.jrxml language 选Java 。可以实现简单报表的生成。如有不足,多多交流,谢谢。
在本教程中,我们将学习如何在一个简单的spring MVC Web应用中集成Jasper报表工具。教程涵盖的技术点有:报表自定义数据源的使用;报表渲染、呈现的配置与实现;iReport报表设计器的使用(报表模板设计)等。
Jasper报表制作小技巧
一般 在 Jaspersoft Studio 中进行报表的设计, 进行报表的设计, 导出 为.jrxml或.jasper格式 ,然后在 ,然后在 java中进行数据 中进行数据 填充 和报表 展示导出。 展示导出。 本文档 是基于 是基于 以下 版本:...
基于Jasper的报表管理平台设计与实现论文.doc
jasperreport 6.4.1报表动态列,以及生成导出html,可直接导入到eclipse中进行运行,包含一个完整的demo
Jasper Report 报表的使用步骤,及基本的应用详细描述