• JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白


    问题1: JasperReport打印出来的整个pdf文件为空白文件;
    问题2:JasperReport定义变量后打印PDF变量为null;

    问题1原因是因为缺少数据源JRDataSource

    JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());
    
    • 1

    如果你打印的jrxml文件单纯是一些文本,没有数据,那么你需要在fillReport 函数传入一个空的数据源,如果没有数据源生成的PDF就是空白的,如下图:
    在这里插入图片描述
    问题2原因是把field 和 parameter 搞混了,如果只是参数,那么你就定义成parameter,如果是数据信息就定义成字段即可;

    小提示:如果你需要将数据进行打印出来,那么定义成field,此时你的数据就是数据源:JRDataSource datasource = new JRBeanCollectionDataSource(dataList);

    最后附上相关源码:

    //主函数
    public static void main(String[] args){
    		String str = "/Documents/work/ccount_4.jrxml"; //jrxml文件地址
    		Map<String, Object> params = new HashMap<>();
    		params.put("tenantName","ccccccc");  //封装变量tenantName
    		pdfByJrxml(str,params); //PDF文件生成逻辑
    
    	}
    
    //Jasper生产PDF文件
    	public static String pdfByJrxml(String jrxmlPath, Map<String, Object> params) {
    		try {
    			InputStream resourceAsStream = new FileInputStream(jrxmlPath);
    			JasperDesign jasperDesign = JRXmlLoader.load(resourceAsStream);
    			JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    			//fillReport 重点是这个方法,如果没有数据,那么需要制定空的数据源,否则生成的PDF是空白的
    			JasperPrint jasperPrint =
    					JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());
    								byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
    			testWriteLocalFile(bytes); //将PDF文件输出到本地
    		} catch (Exception  e) {
    			logger.error("generate pdf error{}", e);
    		}
    	}
    	//本地生成PDF文件
    	public static void testWriteLocalFile(byte[] bytes){
    		BufferedOutputStream bos = null;
    		FileOutputStream fos = null;
    		File file;
    		String filePath = "/xxx/Documents/work/";
    		try {
    			File dir = new File(filePath);
    			if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在
    				dir.mkdirs();
    			}
    			file = new File(filePath+"d.pdf");
    			fos = new FileOutputStream(file);
    			bos = new BufferedOutputStream(fos);
    			bos.write(bytes);
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (bos != null) {
    				try {
    					bos.close();
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
    			}
    			if (fos != null) {
    				try {
    					fos.close();
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
    			}
    		}
    	}```
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
  • 相关阅读:
    几类单波束和多波束声呐的区别
    npm 清缓存
    JavaScript中获取对象属性的不同方法
    2022国赛正式题nfs 解题
    Java 编程问题:六、Java I/O 路径、文件、缓冲区、扫描和格式化
    Hyperledger Fabric部署与测试(Ubuntu)
    操作系统知识点梳理-进程线程
    声学回声消除原理
    电话号码的字母组合 C++ 回溯递归
    统信UOS操作系统aarch64 1060e版制作openssh 9.4p1 rpm包 —— 筑梦之路
  • 原文地址:https://blog.csdn.net/weixin_43012300/article/details/132619100