iReport+jasperReport之CSV、XML数据源

时间:2024-03-22 19:00:58

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"】。

iReport+jasperReport之CSV、XML数据源"20000000001","bulktree1","man","21","1111111111","pcisv61"
iReport+jasperReport之CSV、XML数据源"20000000002","bulktree2","man","22","2222222222","pcisv62"
iReport+jasperReport之CSV、XML数据源"20000000003","bulktree3","man","23","3333333333","pcisv63"
iReport+jasperReport之CSV、XML数据源"20000000004","bulktree4","man","24","4444444444","pcisv64"
iReport+jasperReport之CSV、XML数据源"20000000005","bulktree5","man","25","5555555555","pcisv65"
iReport+jasperReport之CSV、XML数据源"20000000006","bulktree6","man","26","6666666666","pcisv66"
iReport+jasperReport之CSV、XML数据源"20000000007","bulktree7","man","27","7777777777","pcisv67"
iReport+jasperReport之CSV、XML数据源"20000000008","bulktree8","man","28","8888888888","pcisv68"
iReport+jasperReport之CSV、XML数据源"20000000009","bulktree9","man","29","9999999999","pcisv69"
下来我们看看jasperReport的API是怎么识别这些数据的,但是做这个之前我们还要指定数据到底是怎么对应的,定义String类型数组存放模板对应的列名和文本数据对应
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源String[] columNames = new String[] iReport+jasperReport之CSV、XML数据源"pid""name""sex""age""password",
iReport+jasperReport之CSV、XML数据源                
"department" }
;
识别这些数据并不难,下面这一句就可以搞定:
iReport+jasperReport之CSV、XML数据源JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
iReport+jasperReport之CSV、XML数据源                .getLocationInputStream(
"D:\\workspace\\Person.txt"));
我们怎么才能让它识别对应的列呢?查看API看看对应的set方法吧!
iReport+jasperReport之CSV、XML数据源// set record delimiter
iReport+jasperReport之CSV、XML数据源
        jrcsvDataScource.setRecordDelimiter("\r\n");
iReport+jasperReport之CSV、XML数据源        
// set columnName
iReport+jasperReport之CSV、XML数据源
        jrcsvDataScource.setColumnNames(columNames);
至此数据源就准备完了,jasperReport封装了底层的实现,简单吧!下来看看完整的代码:
iReport+jasperReport之CSV、XML数据源package org.bulktree.ireport.csvdata;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import java.util.HashMap;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperFillManager;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperPrint;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperReport;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.data.JRCsvDataSource;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.util.JRLoader;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import org.bulktree.ireport.ViewReport;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源
public class CSVDataSource iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源    
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
public static void main(String[] args) iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源        
try iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源            
new CSVDataSource().reportView();
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源        }
 catch (Exception e) iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源            
// TODO Auto-generated catch block
iReport+jasperReport之CSV、XML数据源
            e.printStackTrace();
iReport+jasperReport之CSV、XML数据源        }

iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
private void reportView() throws Exception iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源        JasperReport jasperReport 
= (JasperReport) JRLoader
iReport+jasperReport之CSV、XML数据源                .loadObject(
"D:\\workspace\\Person.jasper");
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源        JasperPrint jasperPrint 
= JasperFillManager.fillReport(jasperReport,
iReport+jasperReport之CSV、XML数据源                getReportParameter(), getDateSource());
iReport+jasperReport之CSV、XML数据源        
iReport+jasperReport之CSV、XML数据源        
new ViewReport().viewer(jasperPrint);
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
private HashMap getReportParameter() iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源        HashMap parameters 
= new HashMap();
iReport+jasperReport之CSV、XML数据源        parameters.put(
"reportTitle""laoshulin");
iReport+jasperReport之CSV、XML数据源        
return parameters;
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
private JRCsvDataSource getDateSource() throws Exception iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源        String[] columNames 
= new String[] iReport+jasperReport之CSV、XML数据源"pid""name""sex""age""password",
iReport+jasperReport之CSV、XML数据源                
"department" }
;
iReport+jasperReport之CSV、XML数据源        
// get csvdata
iReport+jasperReport之CSV、XML数据源
        JRCsvDataSource jrcsvDataScource = new JRCsvDataSource(JRLoader
iReport+jasperReport之CSV、XML数据源                .getLocationInputStream(
"D:\\workspace\\test\\src\\org\\bulktree\\ireport\\csvdata\\Person.txt"));
iReport+jasperReport之CSV、XML数据源        
// set record delimiter
iReport+jasperReport之CSV、XML数据源
        jrcsvDataScource.setRecordDelimiter("\r\n");
iReport+jasperReport之CSV、XML数据源        
// set columnName
iReport+jasperReport之CSV、XML数据源
        jrcsvDataScource.setColumnNames(columNames);
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源        
return jrcsvDataScource;
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源}

iReport+jasperReport之CSV、XML数据源
还是这样的效果吧!^_^

iReport+jasperReport之CSV、XML数据源

        至于XML数据源也是很简单,通过读取xml文件获得数据
iReport+jasperReport之CSV、XML数据源Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
不同的是document会作为一个参数传递给报表,fillReport方法就不会出现第三个参数,完整代码如下:
iReport+jasperReport之CSV、XML数据源package org.bulktree.ireport.xmldata;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import java.util.HashMap;
iReport+jasperReport之CSV、XML数据源
import java.util.Locale;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JRException;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JRParameter;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperFillManager;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperPrint;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.JasperReport;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.util.JRLoader;
iReport+jasperReport之CSV、XML数据源
import net.sf.jasperreports.engine.util.JRXmlUtils;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源
import org.bulktree.ireport.ViewReport;
iReport+jasperReport之CSV、XML数据源
import org.w3c.dom.Document;
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源
public class XMLDataSource iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源    
private static final String JASPER_FILE_NAME = "D:\\workspace\\Person.jasper";
iReport+jasperReport之CSV、XML数据源    
private static final String XML_FILE_NAME = "D:\\workspace\\person.xml";
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
private void viewerReport() throws JRException iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源        JasperReport jasperReport 
= (JasperReport) JRLoader.loadObject(JASPER_FILE_NAME);
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源        JasperPrint jasperPrint 
= JasperFillManager.fillReport(jasperReport,
iReport+jasperReport之CSV、XML数据源                getReportParameter(XML_FILE_NAME));
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源        
new ViewReport().viewer(jasperPrint);
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
private HashMap getReportParameter(String xmlFileName) iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源        HashMap parameters 
= new HashMap();
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源        
try iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源            parameters.put(
"reportTitle""laoshulin");
iReport+jasperReport之CSV、XML数据源            Document document 
= JRXmlUtils.parse(JRLoader.getLocationInputStream(xmlFileName));
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源            parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT,
iReport+jasperReport之CSV、XML数据源                    document);
iReport+jasperReport之CSV、XML数据源            parameters.put(JRXPathQueryExecuterFactory.XML_DATE_PATTERN, 
"yyyy-MM-dd");
iReport+jasperReport之CSV、XML数据源            parameters.put(JRXPathQueryExecuterFactory.XML_NUMBER_PATTERN, 
"#,##0.##");
iReport+jasperReport之CSV、XML数据源            parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.CHINESE);
iReport+jasperReport之CSV、XML数据源            parameters.put(JRParameter.REPORT_LOCALE, Locale.CHINA);
iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源        }
 catch (JRException e) iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源            
// TODO Auto-generated catch block
iReport+jasperReport之CSV、XML数据源
            e.printStackTrace();
iReport+jasperReport之CSV、XML数据源        }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源        
return parameters;
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源
iReport+jasperReport之CSV、XML数据源iReport+jasperReport之CSV、XML数据源    
public static void main(String[] args) throws Exception iReport+jasperReport之CSV、XML数据源{
iReport+jasperReport之CSV、XML数据源        
new XMLDataSource().viewerReport();
iReport+jasperReport之CSV、XML数据源    }

iReport+jasperReport之CSV、XML数据源}

iReport+jasperReport之CSV、XML数据源
        预览效果就不看了吧!哈哈 都是一样的道理,现在看看jasperReport的API有多强大了吧!