it网站建设免费的seo网站下载
目录
一、先安装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传参方法,,可以先移步打印效果,再看自己需要选择哦~~~~~~~~
一、先安装jasper的编写模板工具
主要有两个工具Jaspersoft Studio、iReport,个人推荐Jaspersoft Studio
1.安装JaspersoftStudio
- 链接:https://pan.baidu.com/s/1lCUsRZvqS5smmrdyzImUdA
- 提取码:7jd5
2.安装jasper的编写工具iReport Design
- 链接:https://pan.baidu.com/s/1jxTQPQCNmSBARhwJVVonZQ
- 提取码:s9t8
二、制作报表模板
1.打开Jaspersoft Studio软件,新建jasper report模板文件:File→new→Jasper Report
2.开始画表
我这里不涉及数据库数据打印,主要为Java传参List<Map<String,Object>>数据打印,在此提供两种方法
方法1:把传参数据作为List数据取值
- Parameters->Create Parameters, 重命名为dataList: 类型为java.util.List
- 我们想要获取的dataList数据为List类型,需循环获取数据,因此拖拽Text Field文本框到在Detail区域(关于Title,Page,Header,Colum Header等Band这里不多说啦)
- 双击Text Filed,Parameters→dataList→get(int),此时值为:$P{dataList}.get(int)
- 双击int;Variables→COLUMN_COUNT;因为报表的COLUMN_COUNT是从1开始所以需进行-1操作,此时值为:$P{dataList}.get( {$V{COLUMN_COUNT}-1} )
- 现在获取的是List的一条数据,但我们需要根据key获取HashMap数据,因此还需强制转换
- 最终值为:((HashMap) $P{dataList}.get({$V{COLUMN_COUNT}-1)).get("C1")
- 重复获取数据操作,最后点击
,最终界面如下:
方法2:把传参数据作为数据源来取值
这里为了区分新建模板TestMapList2.jrxml
- Parameters->Create Parameters, 重命名为dataList: 类型为net.sf.jasperreports.engine.data.JRMapCollectionDataSource
- 拖拽table
至detail区域中,然后一路next
- 双击table
- outline→Table→Create Column At The Begining,我这里是五列,所以重复操作五次
- 双击tableData,Fields→Create Field;这里的名称对应java传参数据Map中的key值
- 此时我们可以直接拖拽file至table的Detail行中;不嫌麻烦的,也可以拖拽Text Filed文本框至Detail再改值
- 保存,点击
,生成jasper文件,最终界面效果如下:
三、java传参
1、读取报表模板
方法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);
2、装载模板数据
针对制作报表方法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);}//设置paramtersmap.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);}//设置paramtersmap.put("tableData", new JRMapCollectionDataSource(dataList));JasperPrint jasperPrint = null;try {jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JREmptyDataSource());} catch (JRException e) {e.printStackTrace();}
3、打印pdf
方法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"));
四、打印效果
第一种报表打印效果:
第二种报表打印效果:
五、jrxml、java文件
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);}//设置paramtersmap.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>
TestJ2.java:第二种报表Java传参
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.type.WhenNoDataTypeEnum;
import net.sf.jasperreports.engine.util.JRLoader;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.*;public class TestJ2 {public static void main(String args[]) throws FileNotFoundException {// 读取jasper模板文件JasperReport jasperReport = null;try {FileInputStream is = new FileInputStream("C:\\Users\\qyl\\JaspersoftWorkspace\\MyReports\\TestMapList2.jasper");jasperReport = (JasperReport) JRLoader.loadObject(is);// 此行代码可解决部分打印空页问题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);}//设置paramtersmap.put("tableData", new JRMapCollectionDataSource(dataList));JasperPrint jasperPrint = null;try {jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JREmptyDataSource());// 生成PDF客户端JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream("D:\\test2.pdf"));} catch (JRException e) {e.printStackTrace();}}}
如果出现pdf打印,不显示中文问题,可以看看下一篇文章:
Jasper报表导出pdf中文不显示——Font "simsun" is not available to the JVM. See the Javadoc for more det,已解决