项目里用到了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查询,填充报表。
比如一张表有一部分表头是不定的,那就可以在程序中追加表头定义,追加字段定义等。
分享到:
相关推荐
5. "Java_JasperReport"和"Jasper编程方式实现报表导出-企业应用-Java -JavaEye做最棒的软件开发交流社区.files":这部分内容可能涉及到JasperReport的Java编程接口,讲解如何通过编程方式与JasperReport交互,实现...
标题中的“ireport+jsp基于jasperReport 实现导出报表至web页面”是指使用iReport工具和JasperReport库,结合JavaServer Pages (JSP) 技术,来创建和展示动态报表,并能将这些报表导出到Web页面上供用户查看。...
然后在Java项目中引入jasperreports库,通过编程方式加载jrxml文件,指定数据源,执行填充操作,最后调用jasper提供的API将报表导出为所需格式。例如,以下是一个简单的示例: ```java // 加载jrxml文件 ...
本教程主要聚焦于使用JAVA和IREPORT来实现报表功能,包括PDF和EXCEL的生成。下面将详细介绍这两个技术及其结合使用的方法。 JAVA,全称Java编程语言,是一种广泛应用于服务器端开发的高级编程语言,具有跨平台、...
- **自定义逻辑:** 用户可以通过编程方式添加自定义逻辑,增强报表的复杂性和功能。 - **报表服务器:** 拥有自己的报表服务器,便于报表的管理和分发。 **3. JasperReport与水晶报表的对比:** - **开源与闭源:*...
1. **JasperReports组件**:JasperReports由多个组件组成,如JasperReport本身用于创建报表设计,JasperServer提供报表服务器功能,JasperExportManager用于导出报表,JasperFillManager用于填充报表,...
它支持多种数据源,包括数据库、CSV文件、JavaBeans等,并且可以将报表导出为PDF、HTML、Excel等多种格式。jasperreport的核心是基于XML的设计模板,这些模板可以通过ireport设计工具进行可视化编辑。 ireport是...
JSP(JavaServer Pages)是一种用于生成动态网页内容的技术,JasperReport可以将报表导出为JSP页面,便于在Web环境中展示。Java是一种广泛使用的编程语言,JasperReport和iReport都是用Java编写,因此运行这些工具...
iReport是专为JasperReports库和JasperReports Server打造的一款强大的报表可视化设计工具,它为用户提供了直观的图形化界面,使得非编程背景的人员也能轻松创建复杂的报表和图表。iReport 4.5.1是其一个稳定版本,...
它提供了一个WYSIWYG(所见即所得)的环境,允许开发者通过拖放方式添加表格、图表、文本等元素,实现报表的定制。iReport与Java的JasperReports库紧密集成,使得报表可以无缝地嵌入到Java应用程序中。 二、iReport...
通过编程方式生成报表实例,然后将其输出到HTTP响应流中。如果使用的是Java EE框架,如Spring MVC,可以创建一个控制器方法来处理报表的生成和下载请求。 九、最佳实践 在实际开发中,应遵循一些最佳实践,如合理...
总的来说,Java与iReport结合可以实现灵活、高效的报表系统。通过熟练掌握这两个工具,开发者能构建出满足各种需求的定制化报表,为企业决策提供有力支持。这个实例提供了实践这些概念的机会,对于学习和提升报表...
通过编程方式或在JRXML中设置`net.sf.jasperreports.export.xls.auto.fit`属性,可以控制在导出到Excel时是否自动调整列宽。 2. **多层分组**:JasperReport支持多级分组,这意味着可以按照多个字段对数据进行层次...
- `JasperExportManager`或其子类(如`JExcelApiExporter`、`JRHtmlExporter`)用于将报表导出为不同格式,如HTML、XLS或PDF。例如,`selectHtmlReport`方法会将报表输出为HTML,以便在网页上显示。 - 通过设置...
例如,可以将报表导出为PDF文件,或者直接在Web应用中显示报表。 ##### 4. 示例代码:JDBCConnection类 下面是一个简单的示例,展示了如何使用JDBCConnection类来获取数据库连接并传递给JasperReport使用。 ```...
总之,Jasper Server Rest客户端为Java开发者提供了一个强大且灵活的工具,使他们能够在Java应用程序中无缝集成JasperServer的功能,实现报表的自动化管理和执行。通过熟练掌握RESTful API的使用,开发者可以大大...
- **PDF、HTML、Excel等导出**: JasperReports可以将报表导出为多种格式,满足不同场景的需求。 - **动态交互**: 支持JavaScript和Ajax技术,实现Web环境下的动态报表,如筛选、排序和钻取。 5. **JasperReports ...
Servlet可能需要调用JasperFillManager来填充报表,JasperExportManager来导出报表,以及JasperPrint对象来存储报表的打印信息。 Applet与Servlet之间的通信通常通过HTTP请求完成,可能是GET或POST方式。Applet会...