jquick-pdf 热力图实战:月度×业务线的二维经营数据怎么放进 PDF 信用评级报告
摘要(meta description) :月度数据按业务线拆开看,行式表格要翻半天,热力图用颜色深浅把二维矩阵一次铺开,哪条线哪个月冲高一眼定位。本文以 jquick-pdf 热力图为例,从模板第一行解剖到最后一行:渐变抬头内嵌三张元信息小卡、两列信息表、紫底财务表、图例双栏排布,每段讲清删改后的渲染变化;JHeatmap 的 Object 三元组、JCategoryAxis 双轴配置作注脚挂在图表区。附完整 Java 源码与 170 行模板(jquick-pdfx 4.7.0+,Apache-2.0)。
标签 :jquick-pdf、Java PDF、报表开发、热力图
二维交叉数据,热力图比表格省一半版面
评级报告里最占版面的就是"月度×业务线"这类二维数据:四条业务线乘六个月,表格要二十四格,行式排列翻着看还容易串行。热力图把同一份数据画成颜色矩阵,值大的格子深、值小的格子浅,哪条业务线哪个月冲高、哪块区域整片偏淡,一眼定位。jquick-pdf 的热力图渲染成 SVG 灌进 ${svg} 占位符,本篇素材是官方 Demo JQuickCreditReport10HeatmapTest,输出 D:\test\creditreport\10_heatmap.pdf。
整页紫色主题:渐变深紫抬头里直接嵌了三张元信息小卡,财务表压紫底表头,图表区居中放 24 格热力矩阵,说明图例拆成左右两栏收在图下。(效果预览图 alt:jquick-pdf 热力图信用评级报告 PDF,紫色渐变主题抬头,六个月四条业务线的营收热力矩阵居中展示)
官网示例:
- FORMULAS 示例页:www.jquick.org/jquick-pdf/...
- github 地址:github.com/paohaijiao/...
真实渲染效果预览
以下为上述代码 + 模板真实运行生成的 PDF 首屏预览(由 jquick-pdf 渲染输出,非示意图):

从模板第一行开始拆
credit_report_10_heatmap.txt 全文 170 行,七个区块。
渐变抬头:色带里嵌元信息小卡
html
<div style="background:linear-gradient(135deg, #311B92 0%, #673AB7 100%); borderRadius:8px; paddings:16px; marginBottom:18px">
<h1 style="fontSize:21; color:white; textAlignment:center; bold:true; marginBottom:12px">'企业信用评级报告'</h1>
<div style="display:flex; justifyContent:space-around">
<div style="width:180px; textAlignment:center">
<div style="fontSize:8; color:#d1c4e9; textAlignment:center; marginBottom:3px">'报告编号'</div>
<div style="fontSize:10; color:white; textAlignment:center">'CR-2023-08975'</div>
</div>
<!-- 评估日期 / 评估机构,两张同构小卡 -->
</div>
</div>
抬头从单行文字升级成两层结构:上层 21 号白字大标题,下层 justifyContent:space-around 均分三张 180px 元信息卡,标签 8 号浅紫、值 10 号纯白。元信息进色带的好处是省一个区块------报告编号、日期、机构三行不再单独占版心,报告正文从抬头下面直接开始。纵向间距也配比过:h1 的 marginBottom:12px 把大标题和元信息卡隔开,卡内标签到值只留 3px------组间松、组内紧,色带高度刚好包住两层不显空。把 h1 的 12px 改成 6px 重跑,色带矮一截,但元信息卡立刻显出贴着标题的局促。space-around 和 space-between 的差别在这里看得见:三张卡两侧也留了半份空隙,不是顶着色带两端排。
paddings:16px 又出现了,还是 paddings 的拼写。上一条经验照用:跑一次看色带内文字贴不贴边,贴边改 padding。渐变底上加 borderRadius:8px,直角色带变圆角色带,这行删掉抬头就回到方块形态------半径数值越大弧越明显,超过 12px 左右深色带的圆角会开始吃内文字空间。
信息表与财务表:紫底体系的两个变体
html
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:left; width:160px">'统一信用代码'</th>
信息表沿用两列结构,首行 th 换成 #512DA8 中紫实底,其余行垫 #ede7f6 浅紫,160px 加 440px 的宽度分配照旧。深紫首行压在浅紫标签列上面,信息表的视觉入口被抬到第一行,评审视线先落在"统一信用代码"这条最关键的锚定信息上,其余五条顺着浅紫列往下走。财务表则是标准六列:紫底白字表头、borderBottom:1px solid #ede7f6 浅紫行线,净利润和净资产两行整行垫 #f6f4fb 做斑马纹------浅紫系里垫白偏紫的第三档色,斑马纹的对比故意压得很低,只在凑近看时才起作用,整页的紫不会被打断。增长率列上 color:#512DA8; bold:true,紫主题里"重要列自己带主题色"的写法不变。
要留意的是浅紫斑马纹 #f6f4fb 和行线 #ede7f6 色差极小,灰度打印后两档基本融合,斑马纹失效但表格不塌------线框和行线还在。这是低对比斑马纹比深色斑马纹适合打印场景的原因。
图表区:居中矩阵加双栏图例
html
<h2 style="fontSize:13; color:#311B92; bold:true; textAlignment:center; marginBottom:10px">'月度经营热力图'</h2>
<div style="textAlignment:center">
<svg style="width:450px;height:400px">${svg}</svg>
</div>
<div style="marginTop:10px">
<h3 style="fontSize:12; color:#311B92; bold:true; textAlignment:center; marginBottom:8px">'评级指标说明'</h3>
<div style="display:flex; justifyContent:space-between">
<div style="width:290px">
<div style="fontSize:10; marginBottom:6px">
<span style="color:#512DA8; bold:true">'● 财务状况(90分): '</span>
'营收稳定增长'
</div>
<!-- 经营能力95分 -->
</div>
<div style="width:290px">
<!-- 偿债能力85分 / 发展潜力92分 -->
</div>
</div>
</div>
热力图 svg 写死 450×400 居中独占,不带侧面板------矩阵图横向跨度大,压进半宽栏里格子会被挤扁,独占整行是对的。图例创新在排布:四条说明拆成左右两个 290px 容器,每条竖排两条,形成一个 2×2 的紧凑块,比四条横排省一半纵向空间;290×2 加中间空隙恰好 600,双栏铺满版心不留死边。marginTop:10px 把图例块和图隔开,删掉它图例会贴着矩阵下沿。
色点还是绿红橙混搭的四色,与热力图的颜色映射没有对应关系,只做条目分隔。热力图真正的"图例"是颜色深浅和数值的映射规则,模板里没有文字说明这层映射------严谨的报告可以在图下补一行"颜色越深营收越高",这行模板里没有,复用时看业务需要加。
数据侧再说一句:Demo 里 24 条三元组是手写常量,真实项目里这批数必然由数据层拼接------行下标、列下标全部程序生成,SQL 出来的结果集按 y 分组循环展开即可。手写 24 条只是演示数据量,行列涨到 8×12 时手写就是灾难,拼接逻辑从第一天就按通用写,模板和图表配置不用动。
Java 侧的热力图配置作注脚挂在这:
java
JOption option = new JOption();
option.title("月度经营热力图", "各业务线月度营收(万元)");
option.xAxis(new JCategoryAxis().data("1月", "2月", "3月", "4月", "5月", "6月"));
option.yAxis(new JCategoryAxis().data("软件产品", "技术服务", "云服务", "其他业务"));
JHeatmap heatmap = new JHeatmap();
heatmap.data(
new Object[]{0, 0, 860}, new Object[]{0, 1, 1020}, new Object[]{0, 2, 1180},
new Object[]{0, 3, 1340}, new Object[]{0, 4, 1520}, new Object[]{0, 5, 1680},
new Object[]{1, 0, 520}, new Object[]{1, 1, 640}, new Object[]{1, 2, 780},
new Object[]{1, 3, 890}, new Object[]{1, 4, 1010}, new Object[]{1, 5, 1160},
new Object[]{2, 0, 380}, new Object[]{2, 1, 460}, new Object[]{2, 2, 540},
new Object[]{2, 3, 620}, new Object[]{2, 4, 710}, new Object[]{2, 5, 820},
new Object[]{3, 0, 260}, new Object[]{3, 1, 310}, new Object[]{3, 2, 360},
new Object[]{3, 3, 420}, new Object[]{3, 4, 470}, new Object[]{3, 5, 540}
);
option.series(heatmap);
String svg = JChartRendererFactory.renderChart(JChartType.HEATMAP, option);
五个落点:每条数据是 {x, y, value} 三元组,x 是列下标、y 是行下标,都从 0 起------第一行业务线的 1 月是 {0,0,860},下标越界的格子直接丢数据不报错,行列数变了先数三元组;x 轴放时间、y 轴放业务线是刻意安排,时间从左到右递增符合阅读惯性,反着放矩阵每行都要从右往左读;title 的双参数形式把主副标题一起传了,图表内会再渲染一遍标题,而模板 h2 也写了"月度经营热力图"------双层标题语义重复,复用时二选一;数据按业务线分段排布(每行六条连排),纯为人工可读性,顺序不影响渲染,乱序传也能画对;枚举名是 JChartType.HEATMAP 全大写,和 Funnel、Guage 的驼峰式不是一个命名风格,写代码时别顺手驼峰了。
浅紫渐变结论块与页脚
html
<div style="marginBottom:18px; background:linear-gradient(135deg, #ede7f6 0%, #d1c4e9 100%); borderRadius:10px; padding:16px; borderLeft:4px solid #673AB7">
结论区的渐变放在浅紫区间,深紫只出现在 4px 左边线上------抬头浓、结论淡,页面重心压在上半部,读到结论区情绪收住。borderRadius:10px 是全篇最大圆角,浅色大圆角块和深色方角带形成一软一硬的收尾对照。深色字压浅紫渐变对比度安全,这份模板里结论区没有白字,改渐变时保持浅端即可。页脚 <lineSeparator> 用 #512DA8 中紫,和表头同色,首尾呼应;两行 9 号灰字收尾。
复现清单
text
1. 新建 Maven 工程引入附录坐标(jquick-pdfx 4.7.0+);
2. 模板文件放到 src/test/resources/report/credit_report_10_heatmap.txt;
3. 拷贝附录 Java 类,确认 JQuickConstant.path 指向本地输出目录;
4. 运行 report10Heatmap(),打开输出的 10_heatmap.pdf;
5. 对照检查:抬头渐变与圆角、元信息三卡排布、热力矩阵行列数与三元组数量一致(24 格);
6. 图表空白时先查两处:setFlexLayout(true) 是否已开、bind 的键与 ${svg} 是否一致。
动手改两行验证
text
1. 把抬头 space-around 改成 space-between 重跑,观察三张元信息卡
从"两侧留半份空隙"变成"顶到色带两端"的差异;
2. 把 yAxis 数据顺序倒过来重跑,观察矩阵行序颠倒后
"从上往下按营收规模排列"的阅读直觉如何被打破。
热力图在评级报告里的适用边界
热力图吃"双维度交叉"的数据:月度×业务线、区域×产品、评分项×季度。单维序列、纯占比数据套热力图都是浪费------一格一色的意义在于让二维交叉的密度模式可见。灰度打印是它的弱项:颜色深浅转灰后相邻档位难分,黑白输出场景要么减少色阶档位、要么在格内直接标数值。格子数量也有上限,行列乘积超过四五十格后单格面积过小,颜色差异挤在一起反而看不出模式,那时候该回表格。复用时还有个工程收益:{x,y,value} 三元组结构天然适合从报表引擎直出,模板、图表配置、数据拼装三层互不牵连,换一批业务数据只动数据源,模板一个字不用改。模板骨架------渐变抬头嵌元信息卡、两列信息表、紫底财务表、居中矩阵、双栏图例、浅紫结论------换掉 #311B92/#512DA8/#ede7f6 三个主色即可整体换装。
完整源码附录
依赖版本 4.7.0+。本项目基于 Apache-2.0 协议开源,使用时请保留源码文件头部原有的 License 与版权声明。
Maven 依赖
xml
<dependency>
<groupId>io.github.paohaijiao</groupId>
<artifactId>jquick-pdfx</artifactId>
<version>4.7.0</version>
<scope>test</scope>
</dependency>
Gradle 依赖
groovy
testImplementation 'io.github.paohaijiao:jquick-pdfx:4.7.0'
Java 测试类(JQuickCreditReport10HeatmapTest.java)
java
/*
* 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.axis.JCategoryAxis;
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.series.JHeatmap;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 统一信用报告 ------ 风格 10:热力图(深紫)
*
* <p>以 {@code report/credit_report_10_heatmap.txt} 为模板,把热力图渲染成 SVG 后
* 绑定到模板中的 {@code ${svg}} 占位符,输出到 {@code D:\test\creditreport\10_heatmap.pdf}。</p>
*
* @author Martin
* @version 1.0.0
*/
public class JQuickCreditReport10HeatmapTest {
public static final String path = JQuickConstant.path;
@Test
public void report10Heatmap() throws IOException {
JOption option = new JOption();
option.title("月度经营热力图", "各业务线月度营收(万元)");
option.xAxis(new JCategoryAxis().data("1月", "2月", "3月", "4月", "5月", "6月"));
option.yAxis(new JCategoryAxis().data("软件产品", "技术服务", "云服务", "其他业务"));
JHeatmap heatmap = new JHeatmap();
heatmap.data(
new Object[]{0, 0, 860}, new Object[]{0, 1, 1020}, new Object[]{0, 2, 1180},
new Object[]{0, 3, 1340}, new Object[]{0, 4, 1520}, new Object[]{0, 5, 1680},
new Object[]{1, 0, 520}, new Object[]{1, 1, 640}, new Object[]{1, 2, 780},
new Object[]{1, 3, 890}, new Object[]{1, 4, 1010}, new Object[]{1, 5, 1160},
new Object[]{2, 0, 380}, new Object[]{2, 1, 460}, new Object[]{2, 2, 540},
new Object[]{2, 3, 620}, new Object[]{2, 4, 710}, new Object[]{2, 5, 820},
new Object[]{3, 0, 260}, new Object[]{3, 1, 310}, new Object[]{3, 2, 360},
new Object[]{3, 3, 420}, new Object[]{3, 4, 470}, new Object[]{3, 5, 540}
);
option.series(heatmap);
String svg = JChartRendererFactory.renderChart(JChartType.HEATMAP, option);
File dir = new File(path + "creditreport");
if (!dir.exists()) {
dir.mkdirs();
}
FileOutputStream fileOutputStream = new FileOutputStream(path + "creditreport/10_heatmap.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_10_heatmap.txt");
fileOutputStream.write(bytes);
fileOutputStream.close();
}
}
模板文件(report/credit_report_10_heatmap.txt)
html
<pdf>
<body>
<div style="background:linear-gradient(135deg, #311B92 0%, #673AB7 100%); borderRadius:8px; paddings:16px; marginBottom:18px">
<h1 style="fontSize:21; color:white; textAlignment:center; bold:true; marginBottom:12px">'企业信用评级报告'</h1>
<div style="display:flex; justifyContent:space-around">
<div style="width:180px; textAlignment:center">
<div style="fontSize:8; color:#d1c4e9; textAlignment:center; marginBottom:3px">'报告编号'</div>
<div style="fontSize:10; color:white; textAlignment:center">'CR-2023-08975'</div>
</div>
<div style="width:180px; textAlignment:center">
<div style="fontSize:8; color:#d1c4e9; textAlignment:center; marginBottom:3px">'评估日期'</div>
<div style="fontSize:10; color:white; textAlignment:center">'2023年11月15日'</div>
</div>
<div style="width:180px; textAlignment:center">
<div style="fontSize:8; color:#d1c4e9; textAlignment:center; marginBottom:3px">'评估机构'</div>
<div style="fontSize:10; color:white; textAlignment:center">'四川省企业信用评估中心'</div>
</div>
</div>
</div>
<div style="marginBottom:18px">
<h2 style="fontSize:14; color:#311B92; bold:true; marginBottom:10px">'四川省泡海椒科技有限公司'</h2>
<table style="width:600px; fontSize:10">
<tr>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:left; width:160px">'统一信用代码'</th>
<td style="padding:6px; textAlignment:left; width:440px">'91110108MA01XX1234'</td>
</tr>
<tr>
<th style="backgroundColor:#ede7f6; color:#311B92; bold:true; padding:6px; textAlignment:left">'成立日期'</th>
<td style="padding:6px; textAlignment:left">'2018年5月20日'</td>
</tr>
<tr>
<th style="backgroundColor:#ede7f6; color:#311B92; bold:true; padding:6px; textAlignment:left">'注册资本'</th>
<td style="padding:6px; textAlignment:left">'1000万元人民币'</td>
</tr>
<tr>
<th style="backgroundColor:#ede7f6; color:#311B92; bold:true; padding:6px; textAlignment:left">'法定代表人'</th>
<td style="padding:6px; textAlignment:left">'泡海椒'</td>
</tr>
<tr>
<th style="backgroundColor:#ede7f6; color:#311B92; bold:true; padding:6px; textAlignment:left">'所属行业'</th>
<td style="padding:6px; textAlignment:left">'软件和信息技术服务业'</td>
</tr>
<tr>
<th style="backgroundColor:#ede7f6; color:#311B92; bold:true; padding:6px; textAlignment:left">'企业规模'</th>
<td style="padding:6px; textAlignment:left">'中型(150-200人)'</td>
</tr>
</table>
</div>
<div style="marginBottom:18px">
<h2 style="fontSize:13; color:#311B92; bold:true; marginBottom:10px">'历年财务数据(单位:万元)'</h2>
<table style="width:600px; fontSize:10">
<tr>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:left">'财务指标'</th>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:right">'2020年'</th>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:right">'2021年'</th>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:right">'2022年'</th>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:right">'2023年'</th>
<th style="backgroundColor:#512DA8; color:white; bold:true; padding:6px; textAlignment:right">'增长率'</th>
</tr>
<tr>
<td style="padding:6px; textAlignment:left; borderBottom:1px solid #ede7f6; bold:true">'营业收入'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'8,560'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'12,340'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'18,920'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'25,680'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; color:#512DA8; bold:true">'+44.2%'</td>
</tr>
<tr>
<td style="padding:6px; textAlignment:left; borderBottom:1px solid #ede7f6; bold:true; backgroundColor:#f6f4fb">'净利润'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'1,240'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'2,150'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'3,890'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'5,420'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb; color:#512DA8; bold:true">'+63.8%'</td>
</tr>
<tr>
<td style="padding:6px; textAlignment:left; borderBottom:1px solid #ede7f6; bold:true">'总资产'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'15,800'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'22,450'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'31,200'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'42,800'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; color:#512DA8; bold:true">'+39.5%'</td>
</tr>
<tr>
<td style="padding:6px; textAlignment:left; borderBottom:1px solid #ede7f6; bold:true; backgroundColor:#f6f4fb">'净资产'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'9,200'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'13,800'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'19,500'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb">'26,400'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; backgroundColor:#f6f4fb; color:#512DA8; bold:true">'+42.1%'</td>
</tr>
<tr>
<td style="padding:6px; textAlignment:left; borderBottom:1px solid #ede7f6; bold:true">'毛利率'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'42.5%'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'45.8%'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'48.2%'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6">'51.6%'</td>
<td style="padding:6px; textAlignment:right; borderBottom:1px solid #ede7f6; color:#512DA8; bold:true">'+9.1%'</td>
</tr>
</table>
</div>
<div style="marginBottom:18px">
<h2 style="fontSize:13; color:#311B92; bold:true; marginBottom:10px">'关键经营指标'</h2>
<div style="display:flex; justifyContent:space-between">
<div style="width:190px; padding:10px; border:1px solid #673AB7; borderRadius:6px; fontSize:10">
'营收增长率:连续三年保持40%以上增长,2023年达到25,680万元。'
'利润率提升:净利率从14.5%提升至21.1%,盈利能力显著增强。'
</div>
<div style="width:190px; padding:10px; border:1px solid #673AB7; borderRadius:6px; fontSize:10">
'研发投入:研发费用年均增长38.9%,占营收比例达13.3%。'
'人才结构:技术研发人员占比42%,硕士以上学历占35%。'
</div>
<div style="width:190px; padding:10px; border:1px solid #673AB7; borderRadius:6px; fontSize:10">
'客户质量:服务15家上市公司,客户续约率92%,大客户满意度4.8/5.0。'
'资产质量:资产负债率维持在38%左右,流动比率2.8,偿债能力良好。'
</div>
</div>
</div>
<div style="marginBottom:18px">
<h2 style="fontSize:13; color:#311B92; bold:true; textAlignment:center; marginBottom:10px">'月度经营热力图'</h2>
<div style="textAlignment:center">
<svg style="width:450px;height:400px">${svg}</svg>
</div>
<div style="marginTop:10px">
<h3 style="fontSize:12; color:#311B92; bold:true; textAlignment:center; marginBottom:8px">'评级指标说明'</h3>
<div style="display:flex; justifyContent:space-between">
<div style="width:290px">
<div style="fontSize:10; marginBottom:6px">
<span style="color:#512DA8; bold:true">'● 财务状况(90分): '</span>
'营收稳定增长'
</div>
<div style="fontSize:10; marginBottom:6px">
<span style="color:#2ecc71; bold:true">'● 经营能力(95分): '</span>
'客户留存率高'
</div>
</div>
<div style="width:290px">
<div style="fontSize:10; marginBottom:6px">
<span style="color:#e74c3c; bold:true">'● 偿债能力(85分): '</span>
'负债率合理'
</div>
<div style="fontSize:10; marginBottom:6px">
<span style="color:#f39c12; bold:true">'● 发展潜力(92分): '</span>
'研发投入增加'
</div>
</div>
</div>
</div>
</div>
<div style="marginBottom:18px; background:linear-gradient(135deg, #ede7f6 0%, #d1c4e9 100%); borderRadius:10px; padding:16px; borderLeft:4px solid #673AB7">
<h2 style="fontSize:13; color:#311B92; bold:true; marginBottom:8px">'综合评价'</h2>
<p style="fontSize:11; textAlignment:left; marginBottom:8px">
'四川省泡海椒科技有限公司作为国家级高新技术企业和专精特新"小巨人"企业,在云计算和大数据领域表现出色。'
'公司财务状况健康,经营能力突出,技术创新能力强,具备良好的发展潜力。信用评级为AAA级,展望稳定。'
</p>
<p style="fontSize:8; color:#512DA8; textAlignment:right">'认证通过'</p>
</div>
<div style="textAlignment:center; marginTop:20px">
<lineSeparator style="strokeColor:#512DA8"></lineSeparator>
<p style="fontSize:9; color:#6c757d; textAlignment:center; marginTop:8px">'本报告依据公开信息和专业评估模型生成,仅供参考 | 报告生成时间: 2025年09月06日'</p>
<p style="fontSize:9; color:#6c757d; textAlignment:center">'© 2023 企业信用评估中心 版权所有 | 认证编号: CE-2023-001'</p>
</div>
</body>
</pdf>