jquick-pdf 矩形树图实战:六个我踩过的坑,最后一个差点让报告返工
摘要(meta description):矩形树图把业务板块占比画成一堆面积方块,比环形图省版面、比表格直观,但集成环节的坑一个不少:数值体系用错、flex 布局失效、SVG 贴边、说明面板拉高页高,每一个都会让成品报告看起来"哪里不对"。本文以 jquick-pdf 矩形树图为例,按现象→原因→修复代码的格式拆六个实际踩过的坑,全部对着官方 Demo 源码验证过,附完整 Java 源码与模板(jquick-pdfx 4.7.0+,Apache-2.0)。
标签:jquick-pdf、Java PDF、报表开发、矩形树图
官网示例:
- FORMULAS 示例页:https://www.jquick.org/jquick-pdf/demo/13_treemap/
- github 地址:https://github.com/paohaijiao/jquick-pdf
真实渲染效果预览
以下为上述代码 + 模板真实运行生成的 PDF 首屏预览(由 jquick-pdf 渲染输出,非示意图):

六个坑,每个都带修复代码
矩形树图(Treemap)把层级占比翻译成面积:板块越大格子越大,二级业务在大格里继续切分。数据表达能力没问题,问题全出在集成的细节上。本篇素材是官方 Demo JQuickCreditReport13TreemapTest,蓝灰主题评级报告,输出 D:\test\creditreport\13_treemap.pdf。下面按我实际踩中的顺序,一个坑一节。(效果预览图 alt:jquick-pdf 矩形树图信用评级报告 PDF,蓝灰主题,业务板块面积占比图居中、评级说明双栏铺底)
坑一:数值体系拿错——这里是绝对值,不是占比
JTreeMapNode root = new JTreeMapNode("业务总览", 1000);
JTreeMapNode product = new JTreeMapNode("软件产品", 400);
JTreeMapNode service = new JTreeMapNode("技术服务", 250);
第一眼很容易按"树图传占比"的直觉写 0.4、0.25——这份 Demo 传的全是绝对值:根 1000,四大板块 400/250/200/150,加和正好 1000。二级也严格满足加和关系:软件产品下面 240+160=400,云服务下面 140+60=200。父子数值自洽,面积换算才和板块占比一致。
修复办法:建树前把每层加和验一遍,一行循环的事。如果源头数据是占比(0.40、0.25……),先乘回总量再喂给 JTreeMapNode,或者统一放大成整数,别把两种体系混在一棵树里——混着传的结果是"某块格子面积和它下面子块面积之和不对应",图能画出来,但和财务表里的数字对不上账。
坑二:配置挂错入口,图出不来
TreeMapOption treemapOption = new TreeMapOption();
treemapOption.setRoot(root);
JOption option = new JOption();
option.setTreemapOption(treemapOption);
option.title("业务板块矩形树图");
String svg = JChartRendererFactory.renderChart(JChartType.TREEMAP, option);
这里有两步,跳过任何一步都白搭:树要先进 TreeMapOption 的 setRoot(),配置对象再通过 option.setTreemapOption() 挂上 JOption。我把 JTreeMapNode 直接塞给 JOption 的通用接口试过,编译不报错但渲染不出预期图形;renderChart 的类型参数也别照其他图表的大小写习惯写,这里的枚举名是全大写 TREEMAP,照抄 Demo 最省事。
坑三:flex 没开,双栏全部退化成单栏
JPdfConfig config = new JPdfConfig();
// 开启 flex 行布局:图表与其右侧的指标说明面板在宽度允许时并排,而不是换行堆叠。
config.getLayoutConfig().setFlexLayout(true);
源码注释把话说得很直白:不开 flex 行布局,模板里所有 display:flex 的地方都按块级元素换行堆叠。这份模板受影响的有三处——抬头里标题和编号卡的左右分布、图表下说明面板的左右双栏、以及图表本身的摆放。症状很典型:PDF 生成不报错,但页高凭空多出三四厘米,说明面板孤零零掉在图下面。修复就一行,setFlexLayout(true),但每次新建 config 都要记得,这是矩形树图、以及任何带左右布局模板的通用前置条件。
坑四:SVG 不包一层居中容器,图贴左
<div style="textAlignment:center">
<svg style="width:500px;height:400px">${svg}</svg>
</div>
这份 Demo 的 SVG 给到了 500px 宽,比版心两侧的内容都宽,直接裸放在外层 div 里会靠左贴边,右边空出一大条。修复是包一层 textAlignment:center 的容器让整块图居中。顺带说宽度的选择:500×400 接近正方形,树图格子横向切分居多,宽度给足格子里的二级文字才放得下——企业管理软件、行业解决方案这些五六个字的标签,格子太窄就会被挤掉。
坑五:说明面板单列铺开,页高失控
<div style="display:flex; justifyContent:space-between; marginTop:10px">
<div style="width:290px">
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'财务状况(90分): '</span>'营收稳定增长'
</div>
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'经营能力(95分): '</span>'客户留存率高'
</div>
</div>
<div style="width:290px">
<!-- 偿债能力(85分) / 发展潜力(92分) -->
</div>
</div>
四条评分说明,这份 Demo 拆成两个 290px 的竖栏并排。我最初写成四行单列,每行 marginBottom:4px 叠上去,图表下面多出一截松散的文字区,整个报告的下半页失衡。修复就是上面这版:两个定宽 div 各装两条,space-between 拉开。文字说明超过四条时每栏装三条也成立,但单栏竖排尽量不要——评级报告页高是有预算的,图表 400px 加上表头表格,留给说明区的高度撑不起四行以上的单列。
坑六:结论卡丢了左肩线,整页压不住
<div style="marginBottom:14px; backgroundColor:#eceff1; borderRadius:4px; padding:16px; borderLeft:4px solid #78909C">
<h2 style="color:#37474F; fontSize:13; bold:true; marginBottom:8px">'综合评价'</h2>
<p style="textAlignment:justify; fontSize:11">'……信用评级为AAA级,展望稳定。'</p>
</div>
整页蓝灰都是浅色调,综合评价卡用 #eceff1 浅灰底、borderRadius:4px 小圆角,本身存在感偏弱,AAA 结论滚进去就平了。Demo 的处理是在左肩压一根 4px 的 #78909C 蓝灰竖线:底部一块浅底卡片,靠左边缘这条深线立住轮廓,视线从上往下扫到页尾能被它拦一下。这行 borderLeft 删掉做对比试验,卡片明显发飘——结论区的"压舱石"就是这根线。
选型判断:什么时候让面积说话
矩形树图不是万金油,它的强项集中在两个特征同时出现的场景:类目多和有层级。四条业务线加八个子业务,总共十二块数据,画成饼图类图表外环文字就挤了,画成树图只是十二块面积块,随便摆;而且树图感知的是面积大小,人眼对面积差的分辨天然不如对角度差敏感——这听着是缺点,但在报表场景反而是优点:面积图不会诱导读者精确比较"到底大多少",读者只会得出"软件产品明显是主力、其他业务零头"这类量级判断,而评级报告要的正是量级结论,不是小数点后两位的竞赛。
反过来,类目只有三四个、或者数据没有层级结构时,树图的大方块会显得空旷,格子之间留白多、信息密度低,不如简单图表直接。这份 Demo 十二块数据的规模是树图的舒适区,数据量级往上或往下浮动太多,先想清楚是不是真的需要面积编码。
抬头排版:标题和编号挤一行之后
这份模板的抬头有个值得单独说的取舍:#37474F 深蓝灰底色块里,h1 标题和报告编号卡通过 display:flex; justifyContent:space-between; alignItems:center 挤在同一行——左边 20 号白字大标题,右边 260px 宽的右对齐小字卡装编号和日期两行 9 号灰字。省下的纵向空间让给了抬头下面独立一行的评估机构信息(#607d8b、10 号、贴在色块外),机构名得到比编号更高的视觉位置,符合"先看谁评的、再核对编号"的阅读顺序。
alignItems:center 在这行布局里不是可有可无:大标题行高和小字卡两行的总高差着十几像素,不居中对齐的话右侧两行小字会吊在标题上沿,色块内上下留白失衡。这份抬头没有元信息三卡、没有渐变色带,深色块加单行双栏,是评级报告版式里最轻的一种抬头形态,适合内容多、需要给正文省高度的页面。
信息表与财务表:蓝灰系的两套线框
企业信息表用 160px 标签列,标签格垫 #eceff1 加粗,所有行只画 borderBottom:1px solid #cfd8dc 一条底线,六行信息纵向贯通没有竖线——比全边框表轻一档,配合浅灰主题不显重。历年财务表换成 #546E7A 中蓝灰实底表头,数据行同样只有底线,奇偶行用 #f4f6f7 做斑马纹,增长率列照例 #2e7d32 绿色加粗收尾。两套表的线框逻辑一致:深底表头定入口,浅底线走数据,颜色全部压在蓝灰档里,把页面上唯一的彩色留给图表和增长率。
复现清单
- 依赖
io.github.paohaijiao:jquick-pdfx:4.7.0+(Apache-2.0 协议); JTreeMapNode建树,每层子节点数值加和等于父节点;TreeMapOption.setRoot()→JOption.setTreemapOption()→JChartType.TREEMAP渲染 SVG;JPdfConfig开setFlexLayout(true),否则三处双栏全部堆叠;- SVG 外包
textAlignment:center容器,宽度给到 500px 保标签可读; - 说明面板双栏 290px 并排,综合评价卡左肩 4px 竖线压轮廓;
- 输出验证
D:\test\creditreport\13_treemap.pdf。
完整源码附录
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Copyright (c) [2025-2099] Martin (goudingcheng@gmail.com)
*/
package com.github.paohaijiao.biz.report;
import com.github.paohaijiao.JOption;
import com.github.paohaijiao.config.JPdfConfig;
import com.github.paohaijiao.demo.constant.JQuickConstant;
import com.github.paohaijiao.enums.JChartType;
import com.github.paohaijiao.executor.JQuickPdfFactory;
import com.github.paohaijiao.factory.JChartRendererFactory;
import com.github.paohaijiao.treemap.JTreeMapNode;
import com.github.paohaijiao.treemap.TreeMapOption;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 统一信用报告 —— 风格 13:矩形树图(蓝灰)
*
* <p>以 {@code report/credit_report_13_treemap.txt} 为模板,把矩形树图渲染成 SVG 后
* 绑定到模板中的 {@code ${svg}} 占位符,输出到 {@code D:\test\creditreport\13_treemap.pdf}。</p>
*
* @author Martin
* @version 1.0.0
*/
public class JQuickCreditReport13TreemapTest {
public static final String path = JQuickConstant.path;
@Test
public void report13Treemap() throws IOException {
JTreeMapNode root = new JTreeMapNode("业务总览", 1000);
JTreeMapNode product = new JTreeMapNode("软件产品", 400);
JTreeMapNode service = new JTreeMapNode("技术服务", 250);
JTreeMapNode cloud = new JTreeMapNode("云服务", 200);
JTreeMapNode other = new JTreeMapNode("其他业务", 150);
product.addChild(new JTreeMapNode("企业管理软件", 240));
product.addChild(new JTreeMapNode("行业解决方案", 160));
service.addChild(new JTreeMapNode("实施服务", 130));
service.addChild(new JTreeMapNode("运维服务", 120));
cloud.addChild(new JTreeMapNode("公有云", 140));
cloud.addChild(new JTreeMapNode("私有云", 60));
other.addChild(new JTreeMapNode("培训", 80));
other.addChild(new JTreeMapNode("硬件", 70));
root.addChild(product);
root.addChild(service);
root.addChild(cloud);
root.addChild(other);
TreeMapOption treemapOption = new TreeMapOption();
treemapOption.setRoot(root);
JOption option = new JOption();
option.setTreemapOption(treemapOption);
option.title("业务板块矩形树图");
String svg = JChartRendererFactory.renderChart(JChartType.TREEMAP, option);
File dir = new File(path + "creditreport");
if (!dir.exists()) {
dir.mkdirs();
}
FileOutputStream fileOutputStream = new FileOutputStream(path + "creditreport/13_treemap.pdf");
JPdfConfig config = new JPdfConfig();
// 开启 flex 行布局:图表与其右侧的指标说明面板在宽度允许时并排,而不是换行堆叠。
config.getLayoutConfig().setFlexLayout(true);
JQuickPdfFactory factory = new JQuickPdfFactory(config);
factory.bind("svg", svg);
byte[] bytes = factory.executeResource("report/credit_report_13_treemap.txt");
fileOutputStream.write(bytes);
fileOutputStream.close();
}
}
<pdf>
<body>
<div style="backgroundColor:#37474F; padding:14px; marginBottom:6px">
<div style="display:flex; justifyContent:space-between; alignItems:center">
<h1 style="color:white; fontSize:20; bold:true">'企业信用评级报告'</h1>
<div style="width:260px; textAlignment:right">
<p style="color:#cfd8dc; fontSize:9; textAlignment:right; margin:1px">'报告编号: CR-2023-08975'</p>
<p style="color:#cfd8dc; fontSize:9; textAlignment:right; margin:1px">'评估日期: 2023年11月15日'</p>
</div>
</div>
</div>
<p style="color:#607d8b; fontSize:10; marginBottom:14px">'评估机构: 四川省企业信用评估中心'</p>
<div style="marginBottom:14px">
<h2 style="color:#37474F; fontSize:14; bold:true; marginBottom:8px">'四川省泡海椒科技有限公司'</h2>
<table style="width:600px; fontSize:10">
<tr>
<td style="width:160px; padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'统一信用代码'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'91110108MA01XX1234'</td>
</tr>
<tr>
<td style="padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'成立日期'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'2018年5月20日'</td>
</tr>
<tr>
<td style="padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'注册资本'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'1000万元人民币'</td>
</tr>
<tr>
<td style="padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'法定代表人'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'泡海椒'</td>
</tr>
<tr>
<td style="padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'所属行业'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'软件和信息技术服务业'</td>
</tr>
<tr>
<td style="padding:6px; backgroundColor:#eceff1; bold:true; borderBottom:1px solid #cfd8dc">'企业规模'</td>
<td style="padding:6px; borderBottom:1px solid #cfd8dc">'中型(150-200人)'</td>
</tr>
</table>
</div>
<div style="marginBottom:14px">
<h2 style="color:#546E7A; fontSize:13; bold:true; marginBottom:10px">'历年财务数据(单位:万元)'</h2>
<table style="width:600px; fontSize:10">
<tr>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'财务指标'</th>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'2020年'</th>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'2021年'</th>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'2022年'</th>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'2023年'</th>
<th style="backgroundColor:#546E7A; color:white; padding:6px; textAlignment:center">'增长率'</th>
</tr>
<tr>
<td style="padding:5px; bold:true; borderBottom:1px solid #cfd8dc">'营业收入'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'8,560'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'12,340'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'18,920'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'25,680'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc; color:#2e7d32; bold:true">'+44.2%'</td>
</tr>
<tr>
<td style="padding:5px; bold:true; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'净利润'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'1,240'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'2,150'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'3,890'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'5,420'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc; color:#2e7d32; bold:true">'+63.8%'</td>
</tr>
<tr>
<td style="padding:5px; bold:true; borderBottom:1px solid #cfd8dc">'总资产'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'15,800'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'22,450'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'31,200'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'42,800'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc; color:#2e7d32; bold:true">'+39.5%'</td>
</tr>
<tr>
<td style="padding:5px; bold:true; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'净资产'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'9,200'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'13,800'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'19,500'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc">'26,400'</td>
<td style="padding:5px; textAlignment:right; backgroundColor:#f4f6f7; borderBottom:1px solid #cfd8dc; color:#2e7d32; bold:true">'+42.1%'</td>
</tr>
<tr>
<td style="padding:5px; bold:true; borderBottom:1px solid #cfd8dc">'毛利率'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'42.5%'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'45.8%'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'48.2%'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc">'51.6%'</td>
<td style="padding:5px; textAlignment:right; borderBottom:1px solid #cfd8dc; color:#2e7d32; bold:true">'+9.1%'</td>
</tr>
</table>
</div>
<div style="marginBottom:14px">
<h2 style="color:#546E7A; fontSize:13; bold:true; marginBottom:10px">'关键经营指标'</h2>
<div style="display:flex; flexWrap:wrap">
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'营收增长率'</p>
<p style="fontSize:10; color:#455a64">'连续三年保持40%以上增长,2023年达到25,680万元'</p>
</div>
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'利润率提升'</p>
<p style="fontSize:10; color:#455a64">'净利率从14.5%提升至21.1%,盈利能力显著增强'</p>
</div>
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'研发投入'</p>
<p style="fontSize:10; color:#455a64">'研发费用年均增长38.9%,占营收比例达13.3%'</p>
</div>
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'人才结构'</p>
<p style="fontSize:10; color:#455a64">'技术研发人员占比42%,硕士以上学历占35%'</p>
</div>
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'客户质量'</p>
<p style="fontSize:10; color:#455a64">'服务15家上市公司,客户续约率92%,大客户满意度4.8/5.0'</p>
</div>
<div style="width:290px; margin:4px; padding:10px; backgroundColor:#eceff1; borderRadius:4px; borderLeft:3px solid #78909C">
<p style="bold:true; color:#37474F; fontSize:11; marginBottom:4px">'资产质量'</p>
<p style="fontSize:10; color:#455a64">'资产负债率维持在38%左右,流动比率2.8,偿债能力良好'</p>
</div>
</div>
</div>
<div style="marginBottom:14px">
<h2 style="color:#546E7A; fontSize:13; bold:true; marginBottom:10px">'业务板块矩形树图'</h2>
<div style="textAlignment:center">
<svg style="width:500px;height:400px">${svg}</svg>
</div>
<div style="display:flex; justifyContent:space-between; marginTop:10px">
<div style="width:290px">
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'财务状况(90分): '</span>
'营收稳定增长'
</div>
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'经营能力(95分): '</span>
'客户留存率高'
</div>
</div>
<div style="width:290px">
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'偿债能力(85分): '</span>
'负债率合理'
</div>
<div style="fontSize:10; color:#37474F; marginBottom:4px">
<span style="bold:true">'发展潜力(92分): '</span>
'研发投入增加'
</div>
</div>
</div>
</div>
<div style="marginBottom:14px; backgroundColor:#eceff1; borderRadius:4px; padding:16px; borderLeft:4px solid #78909C">
<h2 style="color:#37474F; fontSize:13; bold:true; marginBottom:8px">'综合评价'</h2>
<p style="textAlignment:justify; fontSize:11">
'四川省泡海椒科技有限公司作为国家级高新技术企业和专精特新"小巨人"企业,在云计算和大数据领域表现出色。公司财务状况健康,经营能力突出,技术创新能力强,具备良好的发展潜力。信用评级为AAA级,展望稳定。'
</p>
</div>
<div style="marginTop:12px">
<p style="fontSize:9; color:#90a4ae">'本报告依据公开信息和专业评估模型生成,仅供参考 | 报告生成时间: 2025年09月06日'</p>
<p style="fontSize:9; color:#90a4ae">'© 2023 企业信用评估中心 版权所有 | 认证编号: CE-2023-001'</p>
</div>
</body>
</pdf>