使用Jaspersoft显示table,十分详细

背景

最近在公司做打印工作台的功能模块,前期基本都是打印一些条形码、文字、logo等,做到中期,需要显示表格,这可让我犯了愁,没搞过呀,先去看下官方文档。好,无获而归。百度、google很多博文也都写的不清不楚,然后只能随便看一篇博文来作为参考。一下踩了不少坑,但不一一阐述。直说步骤,方便以后回来查看。

准备工作

工具:Jaspersoft Studio

1.首先是制作相关的jrxml,直接贴文件,稍候详述。




	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
		
		
	
	
	
	
	
	
		
	
	
		
			
				
				
					
				
				
			
			
				
				
					
				
			
			
				
				
					
				
				
			
			
				
				
					
				
				
					
				
				
			
			
				
					
					
				
				
					
						
					
					
						
						
							
								
								
								
							
						
						
							
								
								
								
							
						
					
					
						
						
							
								
								
								
							
						
						
							
								
								
								
							
						
					
					
						
						
							
								
								
								
							
						
						
							
								
								
								
							
						
					
					
						
						
							
								
								
								
							
						
						
							
								
								
								
							
						
					
					
						
						
							
								
								
								
							
						
						
							
								
								
								
							
						
					
				
			
		
	

可能有点乱,看一下效果图。

使用Jaspersoft显示table,十分详细_第1张图片

细节部分不描述了,直说表格设计这部分。

首先是设计表格,对应行头和cell的内容。如下图.

使用Jaspersoft显示table,十分详细_第2张图片

2.为表格设置数据源,数据源名字为DS,而数据源是使用javabean传进来的。对应字段productList,然后新建的数据源使用传递进来的数据。如图.

使用Jaspersoft显示table,十分详细_第3张图片

3.为②中新建的数据源设置要使用的字段Fields,如图.

使用Jaspersoft显示table,十分详细_第4张图片

4.至此,模板设计完毕,接下来是java代码封装数据传递给模板。这里主要是使用到了

使用Jaspersoft显示table,十分详细_第5张图片

使用这个类来装载我们的数据,注意它的构造函数只能是列表。所以我们把表格数据包装到List里面,最后再调其构造函数即可。话不多说,上代码:

@Data
public class QualityInspectionProductDataSource implements Serializable {
    private String barCode;
    private String date;
    private String area;
    private JRBeanCollectionDataSource productList;
}
@Data
public class QualityInspectionProduct implements Serializable {
    private Integer storageId;
    private String qualityInspectionCode;
    private String productCode;
    private String propertyCode;
    private String productName;
    private String quantity;
    private String area;
    private String rack;
}
QualityInspectionProductDataSource dataSource = new QualityInspectionProductDataSource();
        dataSource.setBarCode(qualityInspectionCode);
        dataSource.setDate(nowStr);
        dataSource.setArea(qualityInspectionProducts.get(0).getArea());
        dataSource.setProductList(new JRBeanCollectionDataSource(qualityInspectionProducts));

由于productList是一个集合,不能以list的方式传递进去,不然jasper无法解析,同理需要将其转换为JRBeanCollectionDataSource传递进去。最后就是将dataSource作为数据源传递解析,最后的实现步骤为

//根据参数填充模板
        @Cleanup InputStream is = new ByteArrayInputStream(templateFile);
        JasperDesign jasperDesign;
        jasperDesign = JRXmlLoader.load(is);
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource((Collection) params.remove("_list_"));
        //导出结果文件
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource);
        return JasperExportManager.exportReportToPdf(jasperPrint);

 

 

 

最后切记,里面装载数据的使用到的bean,其属性都要小写开头,不然会报找不到该属性的错误。我查了好久才发现。

你可能感兴趣的:(使用Jaspersoft显示table,十分详细)