当前位置 博文首页 > yeliner的博客:JasperReports制作报表——Java传参List,Map数据
目录
一、先安装jasper的编写模板工具
二、制作报表模板
1.打开Jaspersoft Studio软件,新建jasper report模板文件:File→new→Jasper Report
2.开始画表
方法1:把传参数据作为List数据取值
方法2:把传参数据作为数据源来取值
三、java传参
1、读取报表模板
?2、装载模板数据
3、打印pdf?
?四、打印效果
五、jrxml、java文件
我这里不涉及数据库数据打印,主要为Java传参List<Map<String,Object>>数据打印,在此提供两种画报表的方法及其对应的Java传参方法,,可以先移步打印效果,再看自己需要选择哦~~~~~~~~
?
主要有两个工具Jaspersoft Studio、iReport,个人推荐Jaspersoft Studio
1.安装JaspersoftStudio
2.安装jasper的编写工具iReport Design
我这里不涉及数据库数据打印,主要为Java传参List<Map<String,Object>>数据打印,在此提供两种方法
?
?
这里为了区分新建模板TestMapList2.jrxml
?
方法1:读取jrxml文件
String jrxml ="C:\Users\qyl\JaspersoftWorkspace\MyReports\TestMapList.jrxml";
JasperReport report = JasperCompileManager.compileReport(jrxml);
方法2:读取jasper文件
FileInputStream is = new FileInputStream("C:\\Users\\qyl\\JaspersoftWorkspace\\MyReports\\TestMapList.jasper");
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
针对制作报表方法1:
// 设置模板数据
Map<String,Object> map=new HashMap<String,Object>();
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 4; i++) {
Map<String, Object> rowMap1 = new HashMap<String, Object>();
rowMap1.put("C1", "第:" + i + "行1列");
rowMap1.put("C2", "第:" + i + "行1列");
rowMap1.put("C3", "第:" + i + "行1列");
rowMap1.put("C4", "第:" + i + "行1列");
rowMap1.put("C5", "第:" + i + "行1列");
dataList.add(rowMap1);
}
//设置paramters
map.put("dataList",dataList);
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(dataList));
} catch (JRException e) {
e.printStackTrace();
}
针对制作报表方法2:
// 读取jasper模板文件
JasperReport jasperReport = null;
try {
String jrxml ="C:\\Users\\qyl\\JaspersoftWorkspace\\MyReports\\TestMapList2.jrxml";
jasperReport = JasperCompileManager.compileReport(jrxml);
// 此行代码可解决部分打印空页问题
jasperReport.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);
} catch (JRException e) {
e.printStackTrace();
}
// 设置模板数据
Map<String,Object> map=new HashMap<String,Object>();
List<Map<String, ?>> dataList = new ArrayList<Map<String, ?>>();
for (int i = 0; i < 4; i++) {
Map<String, Object> rowMap1 = new HashMap<String, Object>();
rowMap1.put("C1", "第:" + i + "行1列");
rowMap1.put("C2", "第:" + i + "行1列");
rowMap1.put("C3", "第:" + i + "行1列");
rowMap1.put("C4", "第:" + i + "行1列");
rowMap1.put("C5", "第:" + i + "行1列");
dataList.add(rowMap1);
}
//设置paramters
map.put("tableData", new JRMapCollectionDataSource(dataList));
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JREmptyDataSource());
} catch (JRException e) {
e.printStackTrace();
}
方法1:
JRPdfExporter exporter = new JRPdfExporter();
try {
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, new FileOutputStream("D:\\test1.pdf"));
exporter.exportReport();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
方法2:
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream("D:\\test1.pdf"));
第一种报表打印效果:
第二种报表打印效果:
?
TestMapList.jrxml:第一种报表文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<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="TestMapList" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f5219bfe-d727-4d61-bc48-ac691f75bf56">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="FontsStyle" pattern="" fontName="simsun" fontSize="16"/>
<parameter name="dataList" class="java.util.List"/>
<queryString>
<![CDATA[]]>
</queryString>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="81" splitType="Stretch">
<staticText>
<reportElement key="" style="FontsStyle" x="210" y="30" width="100" height="30" uuid="d1b38129-cb40-4c32-9bfd-e642493cf447"/>
<text><![CDATA[Method1]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement style="FontsStyle" x="23" y="10" width="100" height="30" uuid="571918b7-5e2d-43a8-96af-d6d4d9ecc236"/>
<textFieldExpression><![CDATA[((HashMap) $P{dataList}.get($V{COLUMN_COUNT}-1)).get("C1")]]></textFieldExpression>
</textField>
<textField>
<reportElement style="FontsStyle" x="123" y="10" width="100" height="30" uuid="55f088f9-1e9a-40eb-b966-ee971fc2f860"/>
<textFieldExpression><![CDATA[((HashMap) $P{dataList}.get( $V{COLUMN_COUNT}-1)).get("C2")]]></textFieldExpression>
</textField>
<textField>
<reportElement style="FontsStyle" x="223" y="10" width="100" height="30" uuid="5e20a771-7317-45f1-80b7-23e67a4ccaec"/>
<textFieldExpression><![CDATA[((HashMap) $P{dataList}.get( $V{COLUMN_COUNT}-1)).get("C3")]]></textFieldExpression>
</textField>
<textField>
<reportElement style="FontsStyle" x="323" y="10" width="100" height="30" uuid="46c1bed0-c983-4c70-812a-d78864856e8a"/>
<textFieldExpression><![CDATA[((HashMap) $P{dataList}.get($V{COLUMN_COUNT}-1)).get("C4")]]></textFieldExpression>
</textField>
<textField>
<reportElement style="FontsStyle" x="423" y="10" width="77" height="30" uuid="f8f216db-0668-44c8-a7b2-04baa49587d6"/>
<textFieldExpression><![CDATA[((HashMap) $P{dataList}.get( $V{COLUMN_COUNT}-1)).get("C5")]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
TestJ.java:第一种报表传参方法
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.type.WhenNoDataTypeEnum;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestJ {
public static void main(String args[]) throws FileNotFoundException {
// 读取jasper模板文件
JasperReport jasperReport = null;
try {
String jrxml ="C:\\Users\\qyl\\JaspersoftWorkspace\\MyReports\\TestMapList.jrxml";
jasperReport = JasperCompileManager.compileReport(jrxml);
// 此行代码可解决部分打印空页问题
jasperReport.setWhenNoDataType(WhenNoDataTypeEnum.ALL_SECTIONS_NO_DETAIL);
} catch (JRException e) {
e.printStackTrace();
}
Map<String, Object> map = new HashMap<String, Object>();
// 设置模板数据
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 4; i++) {
Map<String, Object> rowMap1 = new HashMap<String, Object>();
rowMap1.put("C1", "第:" + i + "行1列");
rowMap1.put("C2", "第:" + i + "行1列");
rowMap1.put("C3", "第:" + i + "行1列");
rowMap1.put("C4", "第:" + i + "行1列");
rowMap1.put("C5", "第:" + i + "行1列");
dataList.add(rowMap1);
}
//设置paramters
map.put("dataList", dataList);
JasperPrint jasperPrint = null;
try {
jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(dataList));
// 生成PDF客户端
JRPdfExporter exporter = new JRPdfExporter();
try {
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, new FileOutputStream("D:\\test1.pdf"));
exporter.exportReport();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
} catch (JRException e) {
e.printStackTrace();
}
}
}
TestMapList2.jrxml:第二种报表文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<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="TestMapList2" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="829526aa-68b5-46ce-8066-5de7152978fd">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="tableData" uuid="4226918e-1ff9-4408-8de4-2e76c71c7fee">
<queryString>
<![CDATA[]]>
</queryString>
<field name="C1" class="java.lang.String"/>
<field name="C2" class="java.lang.String"/>
<field name="C3" class="java.lang.String"/>
<field name="C4" class="java.lang.String"/>
<field name="C5" class="java.lang.String"/>
</subDataset>
<parameter name="tableData" class="net.sf.jasperreports.engine.data.JRMapCollectionDataSource"/>
<queryString>
<![CDATA[]]>
</queryString>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="250" splitType="Stretch">
<componentElement>
<reportElement x="0" y="20" width="560" height="190" uuid="b79910ab-8363-47db-ac2f-9bb8a932a533">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
<property name="com.jaspersoft.studio.components.autoresize.proportional" value="true"/>
<property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/>
</reportElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="tableData" uuid="382413b4-1492-4bb3-8bd9-b10289f44de8">
<dataSourceExpression><![CDATA[$P{tableData}]]></dataSourceExpression>
</datasetRun>
<jr:column width="114" uuid="98a7c929-3c58-4269-8684-51ded050445c">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1"/>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TH" height="30">
<textField>
<reportElement x="0" y="0" width="114" height="30" uuid="8d8a878d-aa9b-4b73-a2e9-15ee880b5950"/>
<textElement>
<font fontName="simsun" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{C1}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="113" uuid="ea717f32-35e7-4638-afa2-2d8b2883678b">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/>
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1"/>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TH" height="30">
<textField>
<reportElement x="0" y="0" width="113" height="30" uuid="43d9e140-235c-4abe-b44b-c438ca6a3e54"/>
<textElement>
<font fontName="simsun" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{C2}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="112" uuid="965df076-9fa3-4941-8018-2a4dbd774f75">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column3"/>
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1"/>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TH" height="30">
<textField>
<reportElement x="0" y="0" width="112" height="30" uuid="eafd6247-d55c-4eff-b075-56d5ece9166c"/>
<textElement>
<font fontName="simsun" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{C3}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="112" uuid="0815bc67-2a15-42a2-8c08-3f01a4f6732f">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column4"/>
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1"/>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TH" height="30">
<textField>
<reportElement x="0" y="0" width="112" height="30" uuid="5ffc3f54-fca1-4281-ae16-628d720c2264"/>
<textElement>
<font fontName="simsun" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{C4}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="109" uuid="2dfe81ed-17d2-4148-adfc-82906bbfdaf0">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column5"/>
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1"/>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TH" height="30">
<textField>
<reportElement x="0" y="0" width="109" height="30" uuid="a9b88f88-40a0-417f-92d0-c3d6ccb5a0e6"/>
<textElement>
<font fontName="simsun" size="10"/>
</textElement>
<textFieldExpression><![CDATA[$F{C5}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>