JasperReports制作报表——Java传参List,Map数据导出pdf

目录

一、先安装jasper的编写模板工具

二、制作报表模板

1.打开Jaspersoft Studio软件,新建jasper report模板文件:File→new→Jasper Report

2.开始画表

方法1:把传参数据作为List数据取值

方法2:把传参数据作为数据源来取值

三、java传参

1、读取报表模板

 2、装载模板数据

3、打印pdf 

 四、打印效果

五、jrxml、java文件


我这里不涉及数据库数据打印,主要为Java传参List>数据打印,在此提供两种画报表的方法及其对应的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

JasperReports制作报表——Java传参List,Map数据导出pdf_第1张图片

JasperReports制作报表——Java传参List,Map数据导出pdf_第2张图片

2.开始画表

我这里不涉及数据库数据打印,主要为Java传参List>数据打印,在此提供两种方法

方法1:把传参数据作为List数据取值

  • Parameters->Create Parameters, 重命名为dataList: 类型为java.util.List

JasperReports制作报表——Java传参List,Map数据导出pdf_第3张图片

  • 我们想要获取的dataList数据为List类型,需循环获取数据,因此拖拽Text Field文本框到在Detail区域(关于Title,Page,Header,Colum Header等Band这里不多说啦)
    • 双击Text Filed,Parameters→dataList→get(int),此时值为:$P{dataList}.get(int)
    • JasperReports制作报表——Java传参List,Map数据导出pdf_第4张图片
    • 双击int;Variables→COLUMN_COUNT;因为报表的COLUMN_COUNT是从1开始所以需进行-1操作,此时值为:$P{dataList}.get( {$V{COLUMN_COUNT}-1} )
    • JasperReports制作报表——Java传参List,Map数据导出pdf_第5张图片
    • 现在获取的是List的一条数据,但我们需要根据key获取HashMap数据,因此还需强制转换
    • 最终值为:((HashMap) $P{dataList}.get({$V{COLUMN_COUNT}-1)).get("C1")
  • 重复获取数据操作,最后点击,最终界面如下:
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第6张图片

 

 

方法2:把传参数据作为数据源来取值

这里为了区分新建模板TestMapList2.jrxml

  • Parameters->Create Parameters, 重命名为dataList: 类型为net.sf.jasperreports.engine.data.JRMapCollectionDataSource
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第7张图片
  • 拖拽table至detail区域中,然后一路next
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第8张图片
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第9张图片
  •  
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第10张图片
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第11张图片
  • 双击table
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第12张图片
  • outline→Table→Create Column At The Begining,我这里是五列,所以重复操作五次
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第13张图片
  • 双击tableData,Fields→Create Field;这里的名称对应java传参数据Map中的key值
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第14张图片
  • 此时我们可以直接拖拽file至table的Detail行中;不嫌麻烦的,也可以拖拽Text Filed文本框至Detail再改值
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第15张图片
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第16张图片
  • 保存,点击,生成jasper文件,最终界面效果如下:
  • JasperReports制作报表——Java传参List,Map数据导出pdf_第17张图片

 

三、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 map=new HashMap();       
        List> dataList = new ArrayList>();
        for (int i = 0; i < 4; i++) {
            Map rowMap1 = new HashMap();
            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 map=new HashMap();
        List> dataList = new ArrayList>();
        for (int i = 0; i < 4; i++) {
            Map rowMap1 = new HashMap();
            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();
        }

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"));

 四、打印效果

第一种报表打印效果:

JasperReports制作报表——Java传参List,Map数据导出pdf_第18张图片

第二种报表打印效果:

JasperReports制作报表——Java传参List,Map数据导出pdf_第19张图片

 

五、jrxml、java文件

TestMapList.jrxml:第一种报表文件




	
	
	
	
	
		
			
		
		
		
		
		
		
	
	
	
		
	
	
		
	
	
		<band height="79" splitType="Stretch"/>
	
	
		
	
	
		
	
	
		
			
				
					
					
					
					
					
					
				
				
					
						
					
					
						
						
						
						
						
						
							
								
								
									
								
								
							
						
					
					
						
						
						
						
						
						
							
								
								
									
								
								
							
						
					
					
						
						
						
						
						
						
							
								
								
									
								
								
							
						
					
					
						
						
						
						
						
						
							
								
								
									
								
								
							
						
					
					
						
						
						
						
						
						
							
								
								
									
								
								
							
						
					
				
			
		
	
	
		
	
	
		
	
	
		
	

 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 map = new HashMap();
        List> dataList = new ArrayList>();
        for (int i = 0; i < 4; i++) {
            Map rowMap1 = new HashMap();
            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());
            // 生成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,已解决

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)