重案六组5之无法放弃:Jasper编程方式实现报表导出
来源:百度文库 编辑:中财网 时间:2024/05/15 11:22:26
项目里用到了jasperreport,平时都是用ireport来设计好报表模板直接使用就好了,但是碰到动态表头等情况就比较麻烦了,而且有些报表可能仅是针对一个数据表或者说一个实体对象的操作,对于这种报表一个个设计JRXML也比较麻烦,尝试了一下编程的方式来生成报表,只是个简单的测试。在网上找一些资料发现纯编程来写报表的相关内容很少,也是看了相关的API后才写了个例子。
ReportProcess.java是一个简单的用来构造、编译并导出报表的类。
Java代码
CsvDataSource.java是摘自JASER例子里的一个数据源实现,有现成的做例子的时候就拿来用了,用这个比较简单,不用写数据库那一堆。
Java代码
Data.csv里的数据。
Java代码
结果大致是这个样子。
Java代码
这里就是个实验性的代码,但至少可以知道,我们可以通过一些手段来编程处理JASPER的报表。可以写得更完善一些,动态获取表头个数与内容,写QUERY查询,填充报表。
比如一张表有一部分表头是不定的,那就可以在程序中追加表头定义,追加字段定义等。
ReportProcess.java是一个简单的用来构造、编译并导出报表的类。
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);
- }
- }
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 headersJRDesignStaticText staticText = new JRDesignStaticText();staticText.setText(headers[i]);staticText.setFontSize(16);staticText.setHeight(30);staticText.setWidth(50);staticText.setX(50 * i);columnHeader.addElement(staticText);// define fieldsJRDesignField field = new JRDesignField();field.setName(headers[i]);field.setValueClass(String.class);design.addField(field);// add text fields for displaying fieldsJRDesignTextField 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例子里的一个数据源实现,有现成的做例子的时候就拿来用了,用这个比较简单,不用写数据库那一堆。
Java代码
- 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;
- }
- }
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里的数据。
Java代码
- jim,12,male,basketball
- lily,13,female,dancing
- david,23,male,swimming
- su,23,female,running
jim,12,male,basketballlily,13,female,dancingdavid,23,male,swimmingsu,23,female,running
结果大致是这个样子。
Java代码
- test report
- name age gender like
- jim 12 male basketb
- lily 13 female dancing
- david 23 male swimmi
- su 23 female running
test reportname age gender likejim 12 male basketblily 13 female dancingdavid 23 male swimmisu 23 female running
这里就是个实验性的代码,但至少可以知道,我们可以通过一些手段来编程处理JASPER的报表。可以写得更完善一些,动态获取表头个数与内容,写QUERY查询,填充报表。
比如一张表有一部分表头是不定的,那就可以在程序中追加表头定义,追加字段定义等。
命令行方式测试机器硬件并导出报表
命令行方式测试机器硬件并导出报表
金碟导出报表问题
报表编程求教
web标准怎样实现报表
如何用DMO方式实现SQLServer的数据同步备份?(用C编程
怎样把access中的报表,导出成word文挡?
java实现串口编程
FDDI的编程实现
编程实现这个问题。
用编程实现排列
编程实现题
如何编程可以实现。
编程实现窗口半透明
编程实现网页快照
编程如何实现
特洛伊木马的实现方式
NAT有几种实现方式?
VB.NET怎样实现导入导出文本文件
怎样编程实现宽带连接
如何编程实现QQ登陆?
怎样编程实现p2p 服务器
编程实现停等协议
怎么样用编程实现视频剪辑