更新积木报表2.0.0注意事项

积木报表导出数据量太大报错 ‌性能问题‌:‌当数据量非常大时,‌积木报表在导出过程中可能会遇到性能瓶颈,‌导致导出过程缓慢甚至失败。‌解决这一问题的方法包括优化SQL查询、‌调整分页大小、‌使用更适合处理大量数据的库(‌如阿里巴巴的EasyExcel)‌进行导出,‌或者采用异步处理的方式来避免接口超时1。‌内存溢出‌:‌如果报表工具或其依赖的库不支持流式(‌分批)‌导出,‌大量数据的处理可能会导致内存溢出。‌数据处理方式‌:‌如果待导出的数据包含特殊字符,‌如英文双引号或等号,‌这可能导致JSON反序列化报错。 阅读详情

一、导出接口变更

导出接口由原来的/jmreport/exportPdfStream更新为/jmreport/exportReport。具体见官方文档;

1、旧接口springboot实现报表生成并存储pdf文件

public String exportPdf(@RequestParam(name = "id", required = true) String id, @RequestParam(name = "excelConfigId", required = true)String excelConfigId, @RequestParam(name = "rootPath", required = true)String rootPath,@RequestParam(name = "url") String url) {
        // 1、创建url路径 RestUtil.getBaseUrl():你的地址
        String url = RestUtil.getBaseUrl() + "/jmreport/exportPdfStream";
        Map<String, Object> map = new HashMap<>();
        JSONObject object = new JSONObject();
        // 2、此处为示例,需要传递api和sql的正确参数值
        object.put("id", id); //积木报表中sql的传参
        map.put("excelConfigId", excelConfigId); //积木报表id
        map.put("queryParam", object);
        HTTPHeaders headers = new HttpHeaders);
        headers.add("Content-Type", "application/JSON;charset=UTF-8");
        HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, headers);
        String filePath = "";
        try {
        	// 3、调用积木报表接口
            Resource apiResult = restTemplateConfig.restTemplateHttps().postForObject(url, httpEntity, Resource.class);
            // 4、拿到流
            InputStream inputStream = apiResult.getInputStream();
            byte[] bytes = IOUtils.toByteArray(inputStream);
            String s = "data:application/pdf;base64," + Base64.getEncoder().encodeToString(bytes);
            ByteArrayInputStream stream = null;
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] bt = decoder.decodeBuffer(s);
            stream = new ByteArrayInputStream(bt);
            // 5、存储到minio中
            filePath = MinioUtil.upload(stream,rootPath+"/"+id+".pdf");
            // 6、关闭流
            inputStream.close();
        } catch (RestClientException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return filePath;

2、新接口实现

public String exportYbSbPdf(@RequestParam(name = "batchId", required = true) String batchId, @RequestParam(name = "communityId", required = true) String communityId, @RequestParam(name = "excelConfigId", required = true)String excelConfigId, @RequestParam(name = "rootPath", required = true)String rootPath,@RequestParam(name = "url", required = true)String url) {
        String filePath = "";
        try {
            // 查询参数
            JSONObject queryParam = new JSONObject();
            queryParam.put("batchId", batchId);
            queryParam.put("communityId", communityId);
            // 请求参数
            Map<String, Object> exportParams = new HashMap<>();
            exportParams.put("reportId", excelConfigId);
            exportParams.put("exportType", "pdf");
            exportParams.put("queryParam", queryParam);
            Map<String,Object> map = new HashMap<>();
            List<Map<String, Object>> list = new ArrayList<>();
            list.add(exportParams);
            map.put("exportParams", JSONObject.toJSONString(list));
            // 请求头
            HTTPHeaders headers = new HttpHeaders);
            headers.add("Content-Type", "application/JSON;charset=UTF-8");
            HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, headers);
            url = "你的地址/jmreport/exportReport" + "?token="+((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getHeader("X-Access-Token")+"&exportParams=" + UriEncoder.encode(JSONObject.toJSONString(list));
            ResponseEntity<byte[]> responseEntity = restTemplateConfig.restTemplateHttps().getForEntity(url, byte[].class, httpEntity);

            if (responseEntity.getStatusCode().is2xxSuccessful()) {
                byte[] body = responseEntity.getBody();
                if (body == null || body.length == 0) {
                    throw new RuntimeException("导出内容为空");
                }

                ByteArrayInputStream inputStream = new ByteArrayInputStream(body);
                byte[] bytes = IOUtils.toByteArray(inputStream);
                String s = "data:application/pdf;base64," + Base64.getEncoder().encodeToString(bytes);
                ByteArrayInputStream stream = null;
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] bt = decoder.decodeBuffer(s);
                stream = new ByteArrayInputStream(bt);
                filePath = MinioUtil.upload(stream,rootPath+"/"+batchId+"_"+communityId+".pdf");
                inputStream.close();
            } else {
                throw new RuntimeException("导出失败,HTTP状态码:" + responseEntity.getStatusCode());
            }
        } catch (RestClientException | IOException e) {
            e.printStackTrace();
            throw new RuntimeException("调用报表导出接口失败:" + e.getMessage());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return filePath;
    }

二、积木报表导出pdf出现第一个下面出现大量空白

先说结论:此问题是由于"自动换行"导致的。给单元格设置自动换行其实就是允许单元格根据内容自动调整高度,那么打印时会有以下问题:

  • 单元格自动换行导致当前页面高度超出1页纸了,打印时会将该单元格调整至下一页打印,那么当前页的尾部就会出现部分空白区域:
    在这里插入图片描述

三、积木报表中sql解析后数据类型不正确会导致数据无法预览

解决方案:非必要不填数据类型即可。

四、自我反思

1、升级版本时候要认真阅读升级日志及注意事项;
2、及时查询“调用接口”是否更改;
3、对于上述②③问题,我首先着手通过查看源码以寻求解决方案,最后碰巧解决;因为对于积木报表还是以官方文档为主寻找解决方式。

别再乱用表达式了!手把手教你排查并修复JeecgBoot积木报表1.7.8的AviatorScript注入漏洞 本文详细解析了JeecgBoot积木报表1.7.8版本中的AviatorScript表达式注入漏洞,提供了从漏洞原理到企业级防护体系的全面解决方案。通过实战案例和代码示例,指导开发者如何排查、修复漏洞,并构建多层次的安全防护机制,确保报表系统的数据安全。 阅读详情

相关推荐

手把手教你复现jeect-boot积木报表RCE漏洞(CVE-2023-4450)及修复方案

本文详细解析了Jeecg-Boot积木报表模块中的RCE漏洞(CVE-2023-4450),包括漏洞原理、复现步骤及修复方案。通过`queryFieldBySql`接口的不安全Freemarker模板解析,攻击者可实现远程代码执行。文章提供了实验室环境搭建、漏洞复现全流程及深度防御措施,帮助开发者及时修复漏洞并提升系统安全性。

weixin_29325007的博客 326

关于分页

想简单总结下写一个比较通用的分页的方法,虽然很简单,但还是值得一写的 我想要写一个通用的分页程序,最主要要包含三个部分:     1:一个分页的javabean文件,这个文件最主要要包含几个属性,pageNumber(第几页),totalCount(记录的总数),pageSize(一页多少条记录,默认10条),data(查询出的数据,一般为List)     2:dao层关于分页的

dongpoyezi的专栏 555

Godot积木编程插件:零代码游戏开发入门与实现原理

可视化编程通过图形化界面封装编程逻辑和API调用,降低了编程的入门门槛。其核心原理是将代表不同功能的图形模块(积木)通过拖拽、拼接的方式组合成逻辑流程图,再通过编译器或解释器将其转换为可执行的代码。这项技术的价值在于将抽象的语法和算法转化为直观的视觉操作,极大地提升了原型构建、逻辑梳理和教育演示的效率。在游戏开发、教育科技和快速原型设计等应用场景中,它成为连接创意与实现的有效工具。本文以Godot游戏引擎为例,深入探讨了如何设计并实现一个类似Scratch的积木编程插件,详细解析了其编辑器扩展、积木编译与动

weixin_30520015的博客 404

积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路(优化前一万多导出失败,优化后支持百万级跨库表导出,已开源)

原积木导出有两种导出,直接导出和大数据导出(大数据导出是做了优化去掉了一些样式之类的,性能更好)实测中发现原积木大数据导出性能:1万条数据导出耗时30秒,1.5万条耗时1.5分钟导出失败,数据超过一万条后经常导出失败,还会导致容器实例探活失败/内存撑爆重启异步+自实现导出功能优化方案导出性能:34.6万条数据一次导出耗时2.5分钟,导出时快速返回空数据文件,避免页面死等不可用,导出后的表格是在线OSS的文件URL直接每个人都可以快速下载,可随时多次下载。

HumorChen的博客 3949

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

抓包工具(五)2025版 Burp Suite Professional的下载、安装、使用

ACGkaka的博客 2万+

微信公众号数据采集实战:历史文章、互动数据与评论详情全解析

本文提供了一套完整的微信公众号数据采集实战方案,详细解析了如何通过接口调用获取公众号的历史文章列表、单篇文章的互动数据以及详细的用户评论。文章从环境准备、核心参数解析到分页逻辑、批量处理和异常处理,提供了可运行的Python代码示例,旨在帮助开发者高效、稳定地构建自动化采集工具,用于竞品分析、内容研究和舆情监控。

u5v6w7的博客 1598

JeecgBoot代码审计

如果var3不为空,但执行@Sql("select status,share_token,last_update_time,term_of_validity from jimu_report_share where share_token = :shareToken")时查不出相应数据,且路由不是以/jmreport/view开头,就会走到下面的true。即使我们用于构造jwt的用户名密码存在于数据库中如mysql,但是这个用户没有登录过,那么Redis缓存中没有相关数据,也无法通过校验。

好记性不如烂笔头 4539

YOLOv11旋转目标检测详解:从原理到实战的全面指南

本文介绍了YOLOv11旋转目标检测技术的核心概念、架构设计与应用场景。传统目标检测使用水平边界框(AABB)存在背景噪声大、定位精度低等问题,而旋转边界框(OBB)通过引入角度参数显著提升了检测精度,在遥感、OCR、工业质检等领域具有独特优势。YOLOv11-OBB采用改进的多尺度检测层、CSPDarknet53骨干网络和双通道角度输出机制,在保持实时性的同时实现精确的旋转目标检测。实验表明,该方法在DOTA数据集上达到81.3%的mAP,相比传统方法提升显著,特别适合处理具有旋转特性或高宽比悬殊的目标。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 301

HVV前沿 | 积木报表组件(Jeecg-Boot)权限绕过漏洞分析

网宿安全演武实验室监测到JeecgBoot JimuReport 1.7.8版本及之前版本存在安全漏洞(网宿评分:高危)

WangsuSecurity的博客 2740

如何用python自己复现worldquant brain中的回测结果

本文介绍了在Python中复现WorldQuant Brain平台上alpha 101因子1和4的回测框架构建要点。重点分析了Brain平台的策略设置:使用TOP 3000高流动性股票(可用中证1000/2000替代);delay=1表示t日信号在t+1日开盘调仓;详细解释了market/sector/industry/subindustry四级中性化方法;说明了decay参数控制持仓权重线性衰减;以及TRUNCATION参数限制单股仓位风险。文章还探讨了不同调仓时点的实现差异,为自主构建量化回测系统提供了

夏之微风的博客 735

儿童启蒙教育APP

pinyinList.add(createPinyin("a", "啊,像阿姨的阿", R.raw.pinyin_a));pinyinList.add(createPinyin("i", "衣,像衣服的衣", R.raw.pinyin_i));pinyinList.add(createPinyin("u", "乌,像乌鸦的乌", R.raw.pinyin_u));pinyinList.add(createPinyin("ü", "鱼,像小鱼的鱼", R.raw.pinyin_v));-- 固定竖屏 -->

寒寒豆豆软件公司的博客 167

积木报表:一键导出 Word,让报表办公更高效

积木报表1.9.6+版本推出Word导出功能,实现一键导出报表为Word文档。该功能支持定时导出、后台运行,保持良好格式,适用于企业报表、财务分析等多种场景。使用简单三步:设计-预览-导出,需引入字体依赖包确保显示正常。当前版本对冻结单元格、背景图片等部分功能有限制。这一功能提升了报表办公效率,让数据可视化成果更便捷地应用于文档编辑和分享。

JEECG官方博客 876

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 766

积木报表(JimuReport)常见问题解析与解决方案

积木报表(JimuReport)常见问题解析与解决方案 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专业”的产品理...

gitblog_01411的博客 1744

基于FPGA的数字信号处理(17)--定点运算的实现实例(饱和Saturate与四舍五入Round)

基于FPGA的数字信号处理(17)--定点运算的实现实例(饱和Saturate与四舍五入Round)

孤独的单刀 2960

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JeecgBoot项目中积木报表静态资源CDN缓存优化方案

JeecgBoot项目中积木报表静态资源CDN缓存优化方案 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专业”的产...

gitblog_01406的博客 690

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JeecgBoot积木报表大屏1.9.4版本升级问题分析与解决方案

JeecgBoot积木报表大屏1.9.4版本升级问题分析与解决方案 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专...

gitblog_01416的博客 611

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【限时免费】 JimuReport积木报表技术文档

JimuReport积木报表技术文档 【免费下载链接】jimureport 「数据可视化工具:报表、大屏、仪表盘」积木报表是一款类Excel操作风格,在线拖拽设计的报表工具和和数据可视化产品。功能涵盖: 报表设计、大屏设计、打印设计、图形报表、仪表盘门户设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表...

gitblog_01414的博客 638

JimuReport积木报表AI助手:一句话生成报表,报表开发进入对话时代!

AI报表就是“说人话就能出报表”,不需要懂SQL、不需要会拖拽设计器,一句话描述需求,AI自动生成完整报表。JimuReport积木报表的AI能力已覆盖报表开发的完整生命周期,接入门槛极低,支持主流大模型,一段YAML就能打通。报表开发,正式进入对话时代。

web3times的博客 55

JeecgBoot项目War包部署问题分析与解决方案

JeecgBoot项目War包部署问题分析与解决方案 【免费下载链接】JeecgBoot ????企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让...

gitblog_01428的博客 804

JeecgBoot报表系统中ECharts图表导出导入问题解析

在企业级报表系统开发中,ECharts图表的数据可视化展示已成为标配功能。然而,当涉及到图表的导出与导入时,开发者往往会遇到各种棘手问题: - 图表导出后样式丢失或变形 - 大数据量导出时性能瓶颈 - 导入时数据格式不兼容 - 动态图表在导出时无法正确渲染 积木报表(JimuReport)作为一款专业的开源报表工具,针对这些痛点提供了完善的解决方案。本文将深入解析ECharts图表在Jeecg...

gitblog_01427的博客 497

【免费下载】 STC51单片机积木式图形化中文编程软件

STC51单片机积木式图形化中文编程软件 【下载地址】STC51单片机积木式图形化中文编程软件 本仓库提供了一个专为STC51单片机设计的积木式图形化中文编程软件,该软件不仅支持C语言代码的自动生成,还具备电路仿真功能。无论是初学者还是进阶者,都能通过此工具轻松入门51单片机编程,并快速生成C代码框架模板。软件采用C#编...

gitblog_09726的博客 1725

JeecgBoot JimuReport报表配置导入问题分析与解决方案

还在为报表配置的迁移和导入问题头疼吗?当你精心设计的报表模板需要从一个环境迁移到另一个环境时,是否遇到过配置丢失、数据源连接失败、权限配置混乱等问题?积木报表(JimuReport)作为一款优秀的开源报表工具,在实际使用中确实会遇到各种配置导入的挑战。 本文将为你全面解析JimuReport报表配置导入的常见问题,并提供一套完整的解决方案,让你轻松应对报表迁移的各种场景。 ## 读完本文你能得...

gitblog_01409的博客 412

北京大学Tensorflow2.0笔记

激活函数 目前很少用这个激活函数,因为在深度神经网络中更新参数时需要从输出层到输入层逐层进行链式求导,而sigmoid函数倒数值为0-0.25之间,链式求导需要多层导数连续相乘,会出现多个0-0.25之间的连续相乘,结果趋于零,产生梯度消失,无法进行参数更新 使用中应避免负数特征进入RELU函数,否则会导致神经元死亡 过拟合的解决方法:L1正则化和L2正则化 ...

fengLying的博客 970

Prompt工程化:四段式架构与五块积木构建稳定AI交互体系

在人工智能应用开发中,大语言模型(LLM)的交互设计正成为关键技术环节。其核心原理是通过结构化指令(Prompt)引导模型生成符合预期的输出,这本质上是一种人机协作的接口设计。从技术价值看,良好的Prompt架构能显著提升模型输出的稳定性、可解释性和可复用性,降低调试成本。在实际应用场景中,无论是智能客服、代码生成还是数据分析,都需要系统化的Prompt设计方法。本文聚焦Prompt架构设计,通过System Prompt四段式结构定义AI角色与规则,结合五块积木模型实现复杂任务的模块化构建,为AI工程化实

cqwmy840702的博客 301
上一篇: 软考高项-各年选择错题
下一篇: Spring AI
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值