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

这篇具有很好参考价值的文章主要介绍了JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

如果你打印的jrxml文件单纯是一些文本,没有数据,那么你需要在fillReport 函数传入一个空的数据源,如果没有数据源生成的PDF就是空白的,如下图:
JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白,pdf,jasper,java
问题2原因是把field 和 parameter 搞混了,如果只是参数,那么你就定义成parameter,如果是数据信息就定义成字段即可;

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

最后附上相关源码:文章来源地址https://www.toymoban.com/news/detail-690887.html

//主函数
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();
				}
			}
		}
	}```

到了这里,关于JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue 项目中实现pdf预览 pdf打印 pdf下载

    在Vue项目中实现PDF预览、打印和下载可以通过以下步骤来实现: 安装pdf.js pdf.js是一个JavaScript库,可以用于在Web上渲染PDF文件。 可以使用npm安装pdf.js,命令如下: npm install pdfjs-dist --save 创建一个PDF组件 在Vue项目中,可以创建一个PDF组件,用于显示PDF文件。 可以使用pdf.js提供

    2024年02月13日
    浏览(46)
  • 【PDF密码】PDF文件不能打印,为什么?

    正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功能按钮以及打印按钮都是灰色的状态,那就证

    2024年02月13日
    浏览(41)
  • 批量打印-----jsPDF将图片转为pdf,并合并pdf

    安装依赖并引入 注意一、 使用jspdf将图片(jpg/jpeg/png/bmp)转pdf(记为pdfA),得到的pdf(pdfA)和需要合并的pdf(记为pdfB)类型不一致,需要将pdfA转为pdfB类型,才能合并,使用arraybuffer转,具体如下 注意二、 jspdf 可转pdf的图片类型有jpg、jpeg、png、bpm, 不支持 tif 和 tiff 图片类

    2024年02月13日
    浏览(35)
  • java静默打印PDF(可实现生产环境下服务器写入PDF模板,然后调用客户端打印机打印)

    需求 写这个的原因主要是因为当时项目中的打印功能是用户打印标签时,每次点击打印是通过把PDF文件下载到客户端浏览器,然后需要通过浏览器去点击打印机实现打印,就非常麻烦,每次都步骤非常复杂,而且每次参数都要重新设置。于是就想着怎么通过java实现自己调用

    2024年02月13日
    浏览(32)
  • 获取PDF流;打印报告

    思路:触发打印报告事件时,第一步需要先获取PDF流;第二部需要走打印接口。 (1)获取PDF流,拿到流先判断下; (2)成功获取到正确的pdf流后,再走打印接口,流作为打印接口的参数         因为我们会在打印成功后再做一些其他的业务操作,所以这里将打印功能封装

    2024年02月13日
    浏览(21)
  • JS打印、导出PDF

    这种方式打印的pdf比较高清,且分页不会截断文字和图片,背景图片是会被截断的 1.直接打印 直接调用浏览器的打印功能,打印整个页面 2.打印指定区域 通过开始标记、结束标记来打印,打印局部页面 注意 :1.如果你要打印的区域中包含vue赋值对象,那你的开始结束标志符

    2024年02月15日
    浏览(36)
  • 使用VBA打印PDF文件

    使用VBA打印工作表和工作簿文件都很容易实现,但是有时需要使用VBA打印已经保存在本机的其他文件,例如PDF文件格式的账单,如果这个PDF并非由Excel生成的那么就无法使用前述方法实现。 调用Windows的Shell命令可以实现打印PDF文件。 示例代码如下。 【代码解析】 第1~9行代码

    2024年02月05日
    浏览(43)
  • 通过Dynamo批量打印PDF图纸

    最近有小伙伴留言,希望写一篇关于批量打印PDF图纸的教程,于是呢,这次就简单介绍一下批量打印pdf。   首先我在我的Dynamo节点库里简单搜了一下,发现打印pdf的节点挺多的,方式大同小异,我继续选Orchid节点包里的来介绍吧,用着比较习惯。   于是我们定位到Orchid→C

    2024年02月22日
    浏览(26)
  • vue局部打印多页面pdf

    html打印程pdf,使用的官方提供的window.print() 打印的样式 @media print {} 缺点: 只能打一个页面 有点:不会刷新 缺点: 替换时页面会刷新,保存不了状态 有点:可以打印多页面 缺点: 安排多余的页面 有点:可以打印多页面 全选复制 另存为print.js main.js内挂载(注意引入路径是你刚刚保存

    2024年02月12日
    浏览(25)
  • 前端打印、生成PDF的那些事

    最近项目中经常做到前端打印、生成PDF功能这篇文章主要是记录下遇到的问题、以及实现方案 html2canvas npm i html2canvas yarn add html2canvas jspdf npm i jspdf yarn add jspdf print-js npm i print-js yarn add print-js 这个功能我们使用到print-js库来实现 使用上述的方式就能解决打印内容被截断的问题了

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包