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

问题1: JasperReport打印出来的整个pdf文件为空白文件;

问题2:JasperReport定义变量后打印PDF变量为null;

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

java 复制代码
JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());

如果你打印的jrxml文件单纯是一些文本,没有数据,那么你需要在fillReport 函数传入一个空的数据源,如果没有数据源生成的PDF就是空白的,如下图:

问题2原因是把field 和 parameter 搞混了,如果只是参数,那么你就定义成parameter,如果是数据信息就定义成字段即可;

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

最后附上相关源码:

java 复制代码
//主函数
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();
				}
			}
		}
	}```
相关推荐
golang学习记5 小时前
IDEA 2026.3 远程开发迎来重磅升级
java·ide·intellij-idea·远程开发
天天被压力5 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
敲代码的小小酥5 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
天天被压力5 小时前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
apcipot_rain5 小时前
C++转Java日记(02)
java·开发语言·c++
nice_lcj5205 小时前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
码农小河6615 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞18 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt18 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
黑马程序员毕设19 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言