一、首先准备好报表所需的模版,模版采用IReport完成,在此不再赘述,模版路径:C:\cdetResource\jasper,包括report.jasper、report.jrxml两个文件。
二、准备好数据源文件,源文件采用XML格式文件,生产XML格式的文件方法不再赘述,XML文件路径:C:\cdetResource\xml,包括itemDetail.xml文件。XML的内容格式
为:"/ArrayList/AnalyItemDetail"。
三、导出
首先定义相关的全局变量:
//定义全局文件路径静态变量
private static final String ITEM_XML_PATH = "C:\\cdetResource\\xml\\itemDetail.xml";
private static final String REPORT_JASPER_PATH = "C:\\cdetResource\\jasper\\cdet.jasper";
private static final String PDF_REPORT_ORDER_PATH = "C:\\cdetResource\\report\\report.pdf";
private static final String DOC_REPORT_ORDER_PATH = "C:\\cdetResource\\report\\report.doc";
//XML数据文件的数据模式和层级静态变量
private static final String RECORD_PATH = "/ArrayList/AnalyItemDetail";
其次导出:
1、导出PDF格式
//定义数据源文件
File dsFile = new File(ITEM_XML_PATH);
//准备数据源
JRXmlDataSource jrxmlds = new JRXmlDataSource(dsFile,RECORD_PATH);
JasperReport report = (JasperReport)JRLoader.loadObjectFromLocation(REPORT_JASPER_PATH);
//直接将装填过程生成的文档导出到pdf格式
JasperRunManager.runReportToPdfFile(REPORT_JASPER_PATH, reportMap);
//填充报表
JasperPrint print = JasperFillManager.fillReport(report, reportMap, jrxmlds);
//导出PDF文件
JasperExportManager.exportReportToPdfFile(print,PDF_REPORT_ORDER_PATH);
2、导出RTF格式(DOC)
File dsFile = new File(ITEM_XML_PATH);
//准备数据源
JRXmlDataSource jrxmlds = new JRXmlDataSource(dsFile,RECORD_PATH);
JasperReport report = (JasperReport)JRLoader.loadObjectFromLocation(REPORT_JASPER_PATH);
//填充报表
JasperPrint print = JasperFillManager.fillReport(report, reportMap, jrxmlds);
JRExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new File(DOC_REPORT_ORDER_PATH));
//导出
exporter.exportReport();
最后打印:
//定义数据源文件
File dsFile = new File(ITEM_XML_PATH);
//准备数据源
JRXmlDataSource jrxmlds = new JRXmlDataSource(dsFile,RECORD_PATH);
JasperReport report = (JasperReport)JRLoader.loadObjectFromLocation(REPORT_JASPER_PATH);
//填充报表
JasperPrint print = JasperFillManager.fillReport(report, reportMap, jrxmlds);
JasperPrintManager.printReport(print, true);
注:这是非web工程的导出和打印,HTML、XML格式的报表跟此类似。
附:XML文件生成程序代码:
//将List转化成XML格式文件,作为报表的数据源
String encoding = "GB2312";
StringWriter outputWriter = new StringWriter();
outputWriter.write("<?xml version='"+1.0+"' encoding='"+encoding+"' ?>");
BeanWriter beanWriter = new BeanWriter(outputWriter);
beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
beanWriter.getBindingConfiguration().setMapIDs(false);
beanWriter.enablePrettyPrint();
try {
beanWriter.write(list);
} catch (IOException e1) {
e1.printStackTrace();
} catch (SAXException e1) {
e1.printStackTrace();
} catch (IntrospectionException e1) {
e1.printStackTrace();
}
String xmlFilePath=ITEM_XML_PATH;
File xmlFile=new File(xmlFilePath);
try {
if(!xmlFile.exists()){
xmlFile.createNewFile();
}
FileWriter fw = new FileWriter(xmlFilePath);
fw.write(outputWriter.toString().toCharArray());
fw.flush();
outputWriter.close();
} catch (IOException e1) {
e1.printStackTrace();
}