开发工具
jasperreport5.6.0
基本原理
根据jasperreport的生命周期,jrxml---->jasperreport---->jasperprint---->目标文件,使用API生成文件。
我选择的方式,根据jrxml生成文件,生成过程中不产生磁盘文件,文件都在内存中,如果在磁盘上生成中间文件,需要考虑线程安全问题。
导出xlsx文件样例
System.out.println(System.getProperty("user.dir")); String sourceFileName = "D:/MyReport.jrxml"; //jasper文件 JasperReport jasperReport = JasperCompileManager.compileReport(sourceFileName); Map<String,Object> params = new HashMap<String,Object>(); List<ReportVO<MoneyIntoInfo>> beanCollection = CustomerReportFactoryBean.getMoneyIntoList(); JRDataSource dataSource = new JRBeanCollectionDataSource(beanCollection, true); //print文件 JasperPrint print = JasperFillManager.fillReport(jasperReport, params, dataSource); //如果只注明文件名字,默认会生成在user.dir String fileName = "asfdsf1.xlsx"; JRXlsxExporter exporter = new JRXlsxExporter(); //设置输入项 ExporterInput exporterInput = new SimpleExporterInput(print); exporter.setExporterInput(exporterInput); //设置输出项 OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(fileName); exporter.setExporterOutput(exporterOutput); exporter.exportReport();
导出docx
导出docx与xlsx非常相似,只要把导出器替换为docx导出器即可
JRDocxExporter exporter=new JRDocxExporter();
web工程,页面中导出文件
日常应用中,需要在页面中导出文件,只需要将导出器的输出源设置为response.getOuputStream(),并且设置响应头的content-type和content-disposition。
注意:文件名字需要进行URL编码以符合application-x-www-form-urlencoded规定。
关健代码
String generateFileName = "我的文件.xlsx"; response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(generateFileName,"utf8"));
OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput( response.getOutputStream());
MyReport.jrxml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="jasper_report_template" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <queryString> <![CDATA[]]> </queryString> <field name="country" class="java.lang.String"> <fieldDescription><![CDATA[country]]></fieldDescription> </field> <field name="name" class="java.lang.String"> <fieldDescription><![CDATA[name]]></fieldDescription> </field> <columnHeader> <band height="23"> <staticText> <reportElement mode="Opaque" x="0" y="3" width="535" height="15" backcolor="#70A9A9" /> <box> <bottomPen lineWidth="1.0" lineColor="#CCCCCC" /> </box> <textElement /> <text><![CDATA[]]> </text> </staticText> <staticText> <reportElement x="414" y="3" width="121" height="15" /> <textElement textAlignment="Center" verticalAlignment="Middle"> <font isBold="true" /> </textElement> <text><![CDATA[Country]]></text> </staticText> <staticText> <reportElement x="0" y="3" width="136" height="15" /> <textElement textAlignment="Center" verticalAlignment="Middle"> <font isBold="true" /> </textElement> <text><![CDATA[Name]]></text> </staticText> </band> </columnHeader> <detail> <band height="16"> <staticText> <reportElement mode="Opaque" x="0" y="0" width="535" height="14" backcolor="#E5ECF9" /> <box> <bottomPen lineWidth="0.25" lineColor="#CCCCCC" /> </box> <textElement /> <text><![CDATA[]]> </text> </staticText> <textField> <reportElement x="414" y="0" width="121" height="15" /> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="9" /> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$F{country}]]> </textFieldExpression> </textField> <textField> <reportElement x="0" y="0" width="136" height="15" /> <textElement textAlignment="Center" verticalAlignment="Middle" /> <textFieldExpression class="java.lang.String"> <![CDATA[$F{name}]]> </textFieldExpression> </textField> </band> </detail> </jasperReport>