当前位置: 首页 > news >正文

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

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

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

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

如果你打印的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");  //封装变量tenantNamepdfByJrxml(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();}}}}```
http://www.lryc.cn/news/156400.html

相关文章:

  • Python 及 Pycharm 的安装 2023.8
  • java中的线程中断
  • 【跟小嘉学 Rust 编程】二十三、Cargo 使用指南
  • R Removing package报错(as ‘lib’ is unspecified)
  • 金融信创,软件规划需关注自主安全及生态建设
  • 无重叠区间【贪心算法】
  • nlp系列(7)实体识别(Bert)pytorch
  • Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)
  • uniapp微信小程序隐私保护引导新规
  • 超图嵌入论文阅读2:超图神经网络
  • 安全运营中心(SOC)技术框架
  • 并行和并发的区别
  • GPT转换工具:轻松将MBR转换为GPT磁盘
  • 大模型参数高效微调技术原理综述(二)-BitFit、Prefix Tuning、Prompt Tuning
  • 将conda环境打包成docker步骤
  • C# 获取Json对象中指定属性的值
  • 【LeetCode】202. 快乐数 - hash表 / 快慢指针
  • 什么是多态性?如何在面向对象编程中实现多态性?
  • 【目标检测】理论篇(3)YOLOv5实现
  • IDEA爪哇操作数据库
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(七)-基于误差的反向传播
  • C++ 异常处理——学习记录007
  • 【BIM+GIS】“BIM+”是什么? “BIM+”技术详解
  • Flink算子如何限流
  • 垃圾分代收集的过程是怎样的?
  • NPM 常用命令(四)
  • Anaconda虚拟环境下导入opencv
  • Linux设备驱动程序
  • mybatis <if>标签判断“0“不生效
  • 企业数据的存储形式与方案选择