JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat

本文主要是介绍JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录【知识星球】

1.1、错误描述

1.2、解决方案


1.1、错误描述

最近在工作中,使用JasperReports报表比较多一些,有次线上环境里面运行报错,查看报错日志,如下所示:

net.sf.jasperreports.engine.JRException: Byte data not found at: xxxx.png.\r\n\tat 
net.sf.jasperreports.repo.RepositoryUtil.getBytesFromLocation(RepositoryUtil.java:215)\r\n\tat 
net.sf.jasperreports.renderers.util.RendererUtil.getNonLazyRenderable(RendererUtil.java:179)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:512)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:437)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:383)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:548)\r\n\tat 
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2613)\r\n\tat 
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:836)\r\n\tat 
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:275)\r\n\tat 
net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:119)\r\n\tat 
net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:622)\r\n\tat 
net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:433)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:162)\r\n\tat 
net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:145)\r\n\tat 
net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:758)\r\n\tat 
net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:1074)\r\n\tat 

从报错日志里面,可以大概看出是在调用fillReport()方法,填充报表数据的时候,读取不到xxx.png图片所导致的报错。于是我就是使用Jasper Studio报表工具打开jasper模板文件,然后查看里面是否有使用Image图片组件的地方,果然是有使用Image图片组件。

一开始我以为是图片名称使用了中文所导致的,于是我就先修改图片名称为英文字母,将重新编译之后的jasper模板文件发到服务器上运行,发现还是一样的报错,到这里,基本上就可以排除是中文名称的问题了。

既然不是图片名称的问题,那就还有一种情况了,那就是图片的路径写的不对,于是我查看图片的路径地址,居然是直接写了一个图片名称,我就去服务器上查看图片保存在哪个目录下,发现图片是保存在【report/xxx/xxx.png】的路径,改成这个路径之后,重新运行就不报错了。

最终,找到的原因是:jasper模板文件中使用了Image图片组件,但是这个图片的路径地址不完整,直接写了一个图片名称,在服务器上运行时候,需要写完整的路径地址。

1.2、解决方案

修改jasper模板文件中的图片路径地址,要加上完整的路径,例如:你的报表模板是放在服务器上的report/demo目录下面,并且图片也放在这个目录下,那么你就要写完整的图片路径地址:"report/demo/java.png"。

到此,JasperReports渲染报表文件时候,读取图片报错问题就解决啦。

这篇关于JasperReports渲染报表文件时候,读取图片报错:Byte data not found at:xxx.png.\r\n\tat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/652888

相关文章

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输