{"id":37016264,"url":"https://github.com/paohaijiao/jquick-pdf","last_synced_at":"2026-04-19T15:10:07.526Z","repository":{"id":300422425,"uuid":"1006123844","full_name":"paohaijiao/jquick-pdf","owner":"paohaijiao","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-25T23:51:17.000Z","size":20548,"stargazers_count":79,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-26T23:53:07.805Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paohaijiao.png","metadata":{"files":{"readme":"README-EN.md","changelog":"change.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-21T14:47:50.000Z","updated_at":"2025-12-25T23:51:20.000Z","dependencies_parsed_at":"2025-06-21T16:26:34.421Z","dependency_job_id":"47d71ba1-9131-4481-8b5b-8d69a90d895f","html_url":"https://github.com/paohaijiao/jquick-pdf","commit_stats":null,"previous_names":["paohaijiao/jquick-pdf"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/paohaijiao/jquick-pdf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paohaijiao%2Fjquick-pdf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paohaijiao%2Fjquick-pdf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paohaijiao%2Fjquick-pdf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paohaijiao%2Fjquick-pdf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paohaijiao","download_url":"https://codeload.github.com/paohaijiao/jquick-pdf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paohaijiao%2Fjquick-pdf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T00:40:43.272Z","status":"ssl_error","status_checked_at":"2026-01-14T00:40:42.636Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-14T01:49:45.788Z","updated_at":"2026-04-19T15:10:07.403Z","avatar_url":"https://github.com/paohaijiao.png","language":"Java","funding_links":[],"categories":["Projects"],"sub_categories":["PDF"],"readme":"# 📄 JQuickPDF – The lightest and purest Java PDF generation library\n\n[简体中文](./README.md) | [ENGLISH]\n\n\u003e JQuickPDF is a pure Java library specifically designed to render syntax like HTML and CSS styles into PDFs,\n\n\u003e **It does not rely on any browser or external rendering engine at all**。\n\u003e **Supports commonly used Echart graphics such as bar charts, maps, radar charts, and pie chart**。\n## ✅ core feature\n- 🚀 **Pure Java implementation**  \n  No need to install a browser, WebKit, or any native libraries\n- 🎨 **CSS support**  \n  Supports most CSS styles, including borders, padding, floating, etc\n- 📝 **template-friendly**  \n  It can be used in conjunction with template engines such as Thymeleaf and FreeMarker to generate dynamic content\n- 📊 **graphics-rich**  \n  Supports over 20 common Echart graphics\n- 💰 **open source and free**  \n  under the Apache License\n---\n\n\n| 图标类型             | 备注                 |\n|------------------|--------------------|\n| BAR              | 柱状图                |\n| BOXPLOT          | 箱线图                |\n| HEATMAP          | 热力图                |\n| K                | K线图(蜡烛图)           |\n| LINE             | 折线图                |\n| PIE              | 饼图                 |\n| RADAR            | 雷达图                |\n| RELATION         | 关系图                |\n| SCATTER          | 散点图                |\n| SUNBURST         | 旭日图(1.5.1)         |\n| Treemap          | 矩形树图(1.5.1)        |\n| Bubble           | 气泡图(1.5.1)         |\n| Calendar         | 日历活动图(1.5.3)       |\n| Lunar            | 日历(1.5.3)          |\n| Funnel           | 漏斗图(1.5.3)         |\n| CorrectionMatrix | 相关系数矩阵(1.5.3)      |\n| Gantt            | 甘特图(1.5.3)         |\n| Gauge            | 仪表盘(1.5.3)         |\n| WordsCloud       | 词云(1.5.3)          |\n| GEO Json         | 地图(1.5.4)          |\n| Line Bar         | 组合图形\u003c折线条形图\u003e(1.5.5) |\n| Multiple Line    | 多重折线图(1.5.6)       |\n| Multiple Bar    | 多重条形图(1.5.7)       |\n| AREA             | 区域堆积图(1.5.8)       |\n| HorizontalBar    | 横向条形图(1.5.9)       |\n| MutipleHorizontalBar    | 多重横向条形图(1.5.10)    |\n| DoubleRadar          | 双雷达图(1.5.11)       |\n\n## 🚀 项目状态\n\n[![GitHub stars](https://img.shields.io/github/stars/paohaijiao/jquick-pdf.svg?style=for-the-badge\u0026logo=github\u0026label=Stars)](https://github.com/paohaijiao/jquick-pdf)\n[![GitHub forks](https://img.shields.io/github/forks/paohaijiao/jquick-pdf.svg?style=for-the-badge\u0026logo=github\u0026label=Forks)](https://github.com/paohaijiao/jquick-pdf)\n[![GitHub issues](https://img.shields.io/github/issues/paohaijiao/jquick-pdf.svg?style=for-the-badge\u0026logo=github\u0026label=Issues)](https://github.com/paohaijiao/jquick-pdf/issues)\n[![GitHub license](https://img.shields.io/github/license/paohaijiao/jquick-pdf.svg?style=for-the-badge\u0026logo=github\u0026label=License)](https://opensource.org/licenses/Apache-2.0)\n\n---\n\n### 📖 Table of Contents\n- [✨ Core Features](#-core-features)\n- [📦 Quick Start](#-quick-start)\n  - [Installation](#installation)\n  - [Basic Usage](#basic-usage)\n- [🎨 Style System](#-style-system)\n  - [Block Element Styles](#block-element-styles)\n  - [Property Styles](#property-styles)\n- [🧩 Content Elements](#-content-elements)\n  - [Text Elements](#text-elements)\n  - [Layout Elements](#layout-elements)\n  - [List Elements](#list-elements)\n  - [Table Elements](#table-elements)\n  - [Form Elements](#form-elements)\n  - [Media Elements](#media-elements)\n- [📊 Chart Support](#-chart-support)\n- [🔧 Special Elements](#-special-elements)\n- [💌 Support the Project](#-support-the-project)\n\n---\n## ✨ Core Features\n\nJQuickPDF is a lightweight Java library used to generate PDF documents from HTML like templates. Support dynamic data binding, rich style control, and multiple common chart types.\n\n### 🌟 Key Features\n- ✅ HTML-like template syntax, easy to get started\n- ✅ Support for dynamic data binding\n- ✅ Rich style control\n- ✅ Support for multiple chart types\n- ✅ Lightweight with no redundant dependencies\n\n```java\nJQuickPdfXExecutor executor = new JQuickPdfXExecutor();\nexecutor.execute(templateContent);\n```\n\n## 📦 📦 Quick Start\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.paohaijiao\u003c/groupId\u003e\n    \u003cartifactId\u003ejquick-pdf\u003c/artifactId\u003e\n    \u003cversion\u003e最新版本\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## 📝 Basic Grammar\nCreate a simple PDF template:\n```html\n\u003cpdf\u003e\n  \u003cbody\u003e\n    \u003c!-- Write content here --\u003e\n    \u003ch1\u003eHello JQuickPDF\u003c/h1\u003e\n    \u003cp\u003eThis is a sample paragraph.\u003c/p\u003e\n  \u003c/body\u003e\n\u003c/pdf\u003e\n```\n\n### Syntax Rules\n```string\n\u003celement style=\"property1:value1; property2:value2; ...\"\u003e\n    Content\n\u003c/element\u003e\n```\n#### Elements\n##### Text Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003cp\u003e` | Paragraph block (Paragraph) | `\u003cp style=\"text-align:justify\"\u003e'Paragraph content'\u003c/p\u003e` |\n| `\u003ch1\u003e-\u003ch6\u003e` | Heading (styled paragraph) | `\u003ch1 style=\"font-size:24pt\"\u003e'Heading content'\u003c/h1\u003e` |\n| `\u003cspan\u003e` | Inline text container (Chunk) | `\u003cspan style=\"fontColor:blue\"\u003e'Inline text'\u003c/span\u003e` |\n| `\u003cbr\u003e` | Line break (Newline) | `\u003cbr type=\"after\"\u003e` |\n| `\u003ctab\u003e` | Tab character | `\u003cp\u003e\u003ctab/\u003e\u003ctab/\u003e\u003cspan\u003e'Text after tabs'\u003c/span\u003e\u003c/p\u003e` |\n\n##### Layout Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003cdiv\u003e` | Block container (Div) | `\u003cdiv style=\"width:100%\"\u003e'Block container content'\u003c/div\u003e` |\n| `\u003careaBreak\u003e` | Section break (AreaBreak) | `\u003careaBreak\u003e\u003c/areaBreak\u003e` |\n| `\u003chtmlPageBreak\u003e` | Explicit page break (NewPage) | `\u003chtmlPageBreak style=\"font-color:blue\"\u003enext_area\u003c/htmlPageBreak\u003e` |\n| `\u003clineSeparator\u003e` | Line separator | `\u003clineSeparator style=\"strokeColor:red\"\u003e\u003c/lineSeparator\u003e` |\n\n##### List and Table Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003clist\u003e` | Ordered/unordered list (List) | `\u003clist style=\"symbol:hahaha\"\u003e\u003cli\u003e'Option 1'\u003c/li\u003e\u003c/list\u003e` |\n| `\u003cli\u003e` | List item (ListItem) | `\u003cli style=\"fontColor:red\"\u003e'Option 1'\u003c/li\u003e` |\n| `\u003ctable\u003e` | Table container (Table) | `\u003ctable\u003e\u003ctr\u003e\u003ctd\u003e'Data'\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e` |\n| `\u003ctr\u003e` | Table row (TableRow) | `\u003ctr style=\"height:30px\"\u003e\u003c/tr\u003e` |\n| `\u003ctd\u003e` | Table data cell (TableCell) | `\u003ctd style=\"fontColor:red\"\u003e'Data'\u003c/td\u003e` |\n| `\u003cth\u003e` | Table header cell (TableCell) | `\u003cth style=\"font-weight:bold\"\u003e'Header'\u003c/th\u003e` |\n\n##### Form Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003cbutton\u003e` | Button (PushbuttonField) | `\u003cbutton style=\"fontColor:blue\"\u003e'Submit'\u003c/button\u003e` |\n| `\u003ccheckbox\u003e` | Checkbox (CheckboxField) | `\u003ccheckbox style=\"font-color:blue\" checked\u003e'Submit'\u003c/checkbox\u003e` |\n| `\u003cinputField\u003e` | Text input field (TextField) | `\u003cinputField style=\"font-color:blue\"\u003e'Hello China'\u003c/inputField\u003e` |\n| `\u003ccomboBoxField\u003e` | Combo box (ComboBoxField) | `\u003ccomboBoxField style=\"font-color:blue\" checked\u003e'Submit'\u003c/comboBoxField\u003e` |\n| `\u003ctextArea\u003e` | Multi-line text input field (TextAreaField) | `\u003cp\u003e\u003ctextArea\u003e'Hello China'\u003c/textArea\u003e\u003c/p\u003e` |\n\n##### Media Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003cimage\u003e` | Embedded image (Image) | `\u003cimage src=\"logo.png\" style=\"width:200px;height:150px\"\u003e\u003c/image\u003e` |\n| `\u003csvg\u003e` | Vector graphic (PdfTemplate) | `\u003csvg\u003e${svg}\u003c/svg\u003e` or `\u003csvg\u003e\u0026{svg}\u003c/svg\u003e` |\n\n##### Special Elements\n| Element | Description | Example Code |\n|---------|-------------|--------------|\n| `\u003ctemplate\u003e` | Reusable template content | `\u003ctemplate\u003e\u0026html\u003c/template\u003e` |\n| `\u003ctree\u003e` | Tree-structured data | `\u003ctree\u003e${tree}\u003c/tree\u003e` or `\u003ctree\u003etree\u003c/tree\u003e` |\n| `${variable}` | Data binding placeholder | `\u003cp\u003eName: ${name}\u003c/p\u003e` |\n| `\u003ctextArea\u003e` | Multi-line text input field (TextAreaField) | `\u003cp\u003e\u003ctextArea\u003e'Multi-line text'\u003c/textArea\u003e\u003c/p\u003e` |\n\n\n#### 📋 Complete Property Table (Including Example Code)\n\n| Property | Example Value | Description | Example Code |\n|----------|---------------|-------------|--------------|\n| **Margin Properties** | | | |\n| `marginLeft` | `\"1px\"` | Left margin value | `\u003cdiv style=\"marginLeft:1px\"\u003eContent\u003c/div\u003e` |\n| `marginRight` | `\"500px\"` | Right margin value | `\u003cdiv style=\"marginRight:500px\"\u003eContent\u003c/div\u003e` |\n| `marginTop` | `\"500px\"` | Top margin value | `\u003cdiv style=\"marginTop:500px\"\u003eContent\u003c/div\u003e` |\n| `marginBottom` | `\"500px\"` | Bottom margin value | `\u003cdiv style=\"marginBottom:500px\"\u003eContent\u003c/div\u003e` |\n| `commonMargin` | `\"100px\"` | Uniform margin for all sides | `\u003cdiv style=\"commonMargin:100px\"\u003eContent\u003c/div\u003e` |\n| `margins` | `\"'20px 30px 40px 50px'\"` | Top, right, bottom, left margins (clockwise) | `\u003cdiv style=\"margins:'20px 30px 40px 50px'\"\u003eContent\u003c/div\u003e` |\n| **Padding Properties** | | | |\n| `paddingLeft` | `\"50px\"` | Left padding value | `\u003cdiv style=\"paddingLeft:50px\"\u003eContent\u003c/div\u003e` |\n| `paddingRight` | `\"50px\"` | Right padding value | `\u003cdiv style=\"paddingRight:50px\"\u003eContent\u003c/div\u003e` |\n| `paddingTop` | `\"50px\"` | Top padding value | `\u003cdiv style=\"paddingTop:50px\"\u003eContent\u003c/div\u003e` |\n| `paddingBottom` | `\"50px\"` | Bottom padding value | `\u003cdiv style=\"paddingBottom:50px\"\u003eContent\u003c/div\u003e` |\n| `commonPadding` | `\"50px\"` | Uniform padding for all sides | `\u003cdiv style=\"commonPadding:50px\"\u003eContent\u003c/div\u003e` |\n| `paddings` | `\"50px 50px 60px 70px\"` | Top, right, bottom, left padding (clockwise) | `\u003cdiv style=\"paddings:50px 50px 60px 70px\"\u003eContent\u003c/div\u003e` |\n| **Alignment \u0026 Layout Properties** | | | |\n| `verticalAlignment` | `\"top\"` | Vertical alignment (top/middle/bottom) | `\u003cdiv style=\"verticalAlignment:top\"\u003eContent\u003c/div\u003e` |\n| `spacingRatio` | `\"30\"` | Spacing ratio between elements | `\u003cdiv style=\"spacingRatio:30\"\u003eContent\u003c/div\u003e` |\n| `keepTogether` | `\"true\"` | Whether to keep elements together | `\u003cdiv style=\"keepTogether:true\"\u003eContent\u003c/div\u003e` |\n| `keepWithNext` | `\"true\"` | Whether to keep with the next element | `\u003cdiv style=\"keepWithNext:true\"\u003eContent\u003c/div\u003e` |\n| **Dimension Properties** | | | |\n| `width` | `\"300px\"` | Element width | `\u003cdiv style=\"width:300px\"\u003eContent\u003c/div\u003e` |\n| `height` | `\"300px\"` | Element height | `\u003cdiv style=\"height:300px\"\u003eContent\u003c/div\u003e` |\n| `maxHeight` | `\"300px\"` | Maximum element height | `\u003cdiv style=\"maxHeight:300px\"\u003eContent\u003c/div\u003e` |\n| `minHeight` | `\"300px\"` | Minimum element height | `\u003cdiv style=\"minHeight:300px\"\u003eContent\u003c/div\u003e` |\n| `minWidth` | `\"300px\"` | Minimum element width | `\u003cdiv style=\"minWidth:300px\"\u003eContent\u003c/div\u003e` |\n| `maxWidth` | `\"300px\"` | Maximum element width | `\u003cdiv style=\"maxWidth:300px\"\u003eContent\u003c/div\u003e` |\n| **Other Properties** | | | |\n| `angleInRadians` | `\"30\"` | Rotation angle (in radians) | `\u003cdiv style=\"angleInRadians:30\"\u003eContent\u003c/div\u003e` |\n\n#### 📐 Dimension Properties Table (Including Example Code)\n\n| Property | Example Value | Description | Example Code |\n|----------|---------------|-------------|--------------|\n| `width` | `\"300px\"` | Element width | `\u003cdiv style=\"width:300px\"\u003eContent\u003c/div\u003e` |\n| `height` | `\"300px\"` | Element height | `\u003cdiv style=\"height:300px\"\u003eContent\u003c/div\u003e` |\n| `maxHeight` | `\"300px\"` | Maximum element height | `\u003cdiv style=\"maxHeight:300px\"\u003eContent\u003c/div\u003e` |\n| `minHeight` | `\"300px\"` | Minimum element height | `\u003cdiv style=\"minHeight:300px\"\u003eContent\u003c/div\u003e` |\n| `minWidth` | `\"300px\"` | Minimum element width | `\u003cdiv style=\"minWidth:300px\"\u003eContent\u003c/div\u003e` |\n| `maxWidth` | `\"300px\"` | Maximum element width | `\u003cdiv style=\"maxWidth:300px\"\u003eContent\u003c/div\u003e` |\n\n#### Property Styles\n## 🎨 Property Styles Table (Including Example Code)\n\n| Property | Example Value | Description | Example Code |\n|----------|---------------|-------------|--------------|\n| **Position \u0026 Layout** | | | |\n| `relativePosition` | `\"30px 30px 30px 30px\"` | Relative position value (left, top, right, bottom) | `\u003cdiv style=\"relativePosition:'30px 30px 30px 30px'\"\u003eContent\u003c/div\u003e` |\n| **Font Properties** | | | |\n| `font` | `\"HELVETICA\"` | Font type, refer to JFontEnum | `\u003cspan style=\"font:HELVETICA\"\u003eText\u003c/span\u003e` |\n| `fontFamilyNames` | `\"Helvetica\"` | Font family names (comma-separated) | `\u003cp style=\"fontFamilyNames:Helvetica,Arial\"\u003eText\u003c/p\u003e` |\n| `fontColor` | `\"red\"` | Font color, refer to JColorEnums class | `\u003cspan style=\"fontColor:red\"\u003eRed text\u003c/span\u003e` |\n| `fontSize` | `\"34\"` | Font size | `\u003cp style=\"fontSize:34\"\u003eLarge text\u003c/p\u003e` |\n| `fontKerning` | `\"yes\"` | Font kerning setting | `\u003cp style=\"fontKerning:yes\"\u003eText with adjusted kerning\u003c/p\u003e` |\n| `fontScript` | `\"common\"` | Font script type | `\u003cp style=\"fontScript:common\"\u003eText\u003c/p\u003e` |\n| **Text Styles** | | | |\n| `textAlignment` | `\"left\"` | Text alignment, refer to JTextAlignment | `\u003cdiv style=\"textAlignment:left\"\u003eLeft-aligned text\u003c/div\u003e` |\n| `characterSpacing` | `\"30\"` | Character spacing | `\u003cp style=\"characterSpacing:30\"\u003eText\u003c/p\u003e` |\n| `wordSpacing` | `\"30\"` | Word spacing | `\u003cp style=\"wordSpacing:30\"\u003eText\u003c/p\u003e` |\n| `splitCharacters` | `\"24\"` | Character spacing (same as characterSpacing) | `\u003cp style=\"splitCharacters:24\"\u003eText\u003c/p\u003e` |\n| `textRenderingMode` | `\"24\"` | Text rendering mode | `\u003cp style=\"textRenderingMode:24\"\u003eText\u003c/p\u003e` |\n| `baseDirection` | `\"no_bidi\"` | Text base direction | `\u003cp style=\"baseDirection:no_bidi\"\u003eText\u003c/p\u003e` |\n| **Text Decoration** | | | |\n| `bold` | `\"true\"` | Whether text is bold | `\u003cspan style=\"bold:true\"\u003eBold text\u003c/span\u003e` |\n| `italic` | `\"true\"` | Whether text is italic | `\u003cspan style=\"italic:true\"\u003eItalic text\u003c/span\u003e` |\n| `lineThrough` | `\"true\"` | Whether text has strikethrough | `\u003cspan style=\"lineThrough:true\"\u003eStrikethrough text\u003c/span\u003e` |\n| `underline` | `\"true\"` | Whether text has underline | `\u003cspan style=\"underline:true\"\u003eUnderlined text\u003c/span\u003e` |\n| **Background \u0026 Border** | | | |\n| `backgroundColor` | `\"red\"` | Background color, refer to JColorEnums class | `\u003cdiv style=\"backgroundColor:red\"\u003eContent\u003c/div\u003e` |\n| `backgroundImage` | `\"D:/pdf/image.png\"` | Background image path | `\u003cdiv style=\"backgroundImage:'D:/pdf/image.png'\"\u003eContent\u003c/div\u003e` |\n| `border` | `\"solid 32px red\"` | Border style (type, width, color) | `\u003cdiv style=\"border:'solid 32px red'\"\u003eContent\u003c/div\u003e` |\n| `borderTop` | `\"solid 32px red\"` | Top border style | `\u003cdiv style=\"borderTop:'solid 32px red'\"\u003eContent\u003c/div\u003e` |\n| `borderRight` | `\"solid 32px red\"` | Right border style | `\u003cdiv style=\"borderRight:'solid 32px red'\"\u003eContent\u003c/div\u003e` |\n| `borderLeft` | `\"solid 32px red\"` | Left border style | `\u003cdiv style=\"borderLeft:'solid 32px red'\"\u003eContent\u003c/div\u003e` |\n| `borderBottom` | `\"solid 32px red\"` | Bottom border style | `\u003cdiv style=\"borderBottom:'solid 32px red'\"\u003eContent\u003c/div\u003e` |\n| `borderRadius` | `\"32px 24px\"` | Border radius value | `\u003cdiv style=\"borderRadius:'32px 24px'\"\u003eContent\u003c/div\u003e` |\n| `borderBottomLeftRadius` | `\"32px 24px\"` | Bottom-left border radius | `\u003cdiv style=\"borderBottomLeftRadius:'32px 24px'\"\u003eContent\u003c/div\u003e` |\n| `borderBottomRightRadius` | `\"32px 24px\"` | Bottom-right border radius | `\u003cdiv style=\"borderBottomRightRadius:'32px 24px'\"\u003eContent\u003c/div\u003e` |\n| `borderTopRightRadius` | `\"32px 24px\"` | Top-right border radius | `\u003cdiv style=\"borderTopRightRadius:'32px 24px'\"\u003eContent\u003c/div\u003e` |\n| `borderTopLeftRadius` | `\"32px 24px\"` | Top-left border radius | `\u003cdiv style=\"borderTopLeftRadius:'32px 24px'\"\u003eContent\u003c/div\u003e` |\n| **Effects \u0026 Stroke** | | | |\n| `opacity` | `\"0.5\"` | Element opacity | `\u003cdiv style=\"opacity:0.5\"\u003eSemi-transparent content\u003c/div\u003e` |\n| `strokeColor` | `\"red\"` | Stroke color | `\u003cdiv style=\"strokeColor:red\"\u003eContent\u003c/div\u003e` |\n| `strokeWidth` | `\"24\"` | Stroke width | `\u003cdiv style=\"strokeWidth:24\"\u003eContent\u003c/div\u003e` |\n| **Anchor \u0026 Target** | | | |\n| `destination` | `\"hello\"` | Element target/anchor name | `\u003cdiv style=\"destination:hello\"\u003eContent\u003c/div\u003e` |\n\n# 📊 Chart Types\nJQuickPDF supports multiple chart types, which can be configured via Java code and embedded into PDFs:\n\n\n## 📈 How to use\n### 📉 1.Native way\n```string\n# Pass SVG XML String to Variable\n#1. Define Java Code\n      JContext params = new JContext();\n      String svg = \"\u003c?xml  xxxx \u003e\u003c/svg\u003e\";\n      params.put(\"svg\", svg);\n      JReader fileReader = new JReSourceFileReader(\"sample/svg1.txt\");\n      JAdaptor context = new JAdaptor(fileReader);\n      JQuickPdfXExecutor executor = new JQuickPdfXExecutor(params);\n      executor.execute(context.getRuleContent());\n#2. Define Template Code\n  \u003cpdf\u003e\n    \u003cbody\u003e\n      \u003csvg\u003e${svg}\u003c/svg\u003e\n    \u003c/body\u003e\n  \u003c/pdf\u003e\n```\n### 🍩 2.Java implements\n```string\n# Pass JOption of Related Graphics to JPdfConfig for Rendering\n#1. Define Java Code\n        JGraphContainer graphContainer = new JGraphContainer();\n        JOption option = new JOption();\n        graphContainer.setOption(option);\n        graphContainer.setType(JChartType.K);\n        JGraphConfig graphConfig = new JGraphConfig();\n        graphConfig.put(\"svg\", graphContainer);\n        JPdfConfig config = new JPdfConfig();\n        config.setGraphConfig(graphConfig);\n        JReader fileReader = new JReSourceFileReader(\"sample/svg2.txt\");\n        JAdaptor context = new JAdaptor(fileReader);\n        JQuickPdfXExecutor executor = new JQuickPdfXExecutor(config);\n#2. Define Template Code\n    \u003cpdf\u003e\n        \u003cbody\u003e\n          \u003csvg\u003e\u0026{svg}\u003c/svg\u003e\n        \u003c/body\u003e\n    \u003c/pdf\u003e\n```\n## 📋相关图形的JOption\n```string \n// ============================================================================\n# 1.柱状图  BAR chart\n// ============================================================================\n```\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e柱状图数据\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n          \u003ccode class=\"language-java\"\u003e// 1. 创建图表配置\n          JOption option = new JOption();\n          option.title().text(\"销售数据\")\n          .subtext(\"2023年度\");\n          option.tooltip().trigger(JTrigger.axis);\n          // 2. 配置坐标轴\n          JCategoryAxis xAxis = new JCategoryAxis();\n          xAxis.data(\"衬衫\", \"羊毛衫\", \"雪纺衫\", \n          \"裤子\", \"高跟鞋\", \"袜子\");\n          option.xAxis(xAxis);\n          option.yAxis(new JValueAxis());\n          // 3. 配置数据系列\n          JBar bar = new JBar();\n          bar.name(\"销量\").data(5, 20, 36, 10, 10, 20);\n          option.series(bar);\u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/barchart.svg\"alt=\"销售数据柱状图\" style=\"width: 100%; max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e柱状图数据\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 箱线图  BOXPLOT chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e箱线图数据\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n          \u003ccode class=\"language-java\"\u003e\n          // 1. 创建图表配置\n           JOption option = new JOption();\n           option.title().text(\"销售数据分布\");\n           option.xAxis(new JCategoryAxis().data(\"一季度\", \n           \"二季度\", \"三季度\", \"四季度\"));\n           option.series(new JBoxplot().data(\n              new Object[]{10, 15, 20, 25, 30},\n              new Object[]{12, 18, 22, 28, 35},\n              new Object[]{8, 14, 19, 26, 32},\n              new Object[]{11, 16, 21, 27, 33}\n           ));\n          \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/boxchart.svg\" alt=\"箱线图数据\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e箱线图数据\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n```string \n// ============================================================================\n# HEATMAP  热力图 chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e热力图数据\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n          \u003ccode class=\"language-java\"\u003e\n          // 1. 创建图表配置\n           JOption option = new JOption();\n           option.title().text(\"销售数据分布\");\n           option.xAxis(new JCategoryAxis().data(\"一季度\", \n           \"二季度\", \"三季度\", \"四季度\"));\n           option.series(new JBoxplot().data(\n              new Object[]{10, 15, 20, 25, 30},\n              new Object[]{12, 18, 22, 28, 35},\n              new Object[]{8, 14, 19, 26, 32},\n              new Object[]{11, 16, 21, 27, 33}\n           ));\n          JOption option = new JOption();\n          option.title(\"2023年月度温度分布热力图\");\n          option.xAxis(new JCategoryAxis()\n          .data(\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\",\n          \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"));\n          option.yAxis(new JCategoryAxis()\n          .data(\"凌晨(0-6)\", \"早晨(6-9)\", \"上午(9-12)\",\n          \"中午(12-14)\", \"下午(14-18)\", \"晚上(18-24)\"));\n          JHeatmap heatmap = new JHeatmap();\n          heatmap.data(\n          new Object[]{0, 0, -5.2}, new Object[]{0, 1, -3.8}\n          , new Object[]{0, 2, 1.5},\n          new Object[]{0, 3, 4.2}, new Object[]{0, 4, 2.8}, \n          new Object[]{0, 5, -2.1},\n          new Object[]{1, 0, -3.5}, new Object[]{1, 1, -1.2}\n          , new Object[]{1, 2, 3.0},\n          new Object[]{1, 3, 6.5}, new Object[]{1, 4, 4.2},\n          new Object[]{1, 5, 0.5},\n          new Object[]{2, 0, 0.8}, new Object[]{2, 1, 3.5},\n          new Object[]{2, 2, 8.2},\n          new Object[]{2, 3, 12.0}, new Object[]{2, 4, 9.5},\n          new Object[]{2, 5, 4.2},\n          new Object[]{3, 0, 5.2}, new Object[]{3, 1, 8.0},\n          new Object[]{3, 2, 12.5},\n          new Object[]{3, 3, 16.8}, new Object[]{3, 4, 14.2},\n          new Object[]{3, 5, 9.5},\n          new Object[]{4, 0, 10.5}, new Object[]{4, 1, 13.2}, \n          new Object[]{4, 2, 17.8},\n          new Object[]{4, 3, 21.5}, new Object[]{4, 4, 19.0},\n          new Object[]{4, 5, 14.8},\n          new Object[]{5, 0, 15.2}, new Object[]{5, 1, 18.5},\n          new Object[]{5, 2, 22.0},\n          new Object[]{5, 3, 26.5}, new Object[]{5, 4, 24.2},\n          new Object[]{5, 5, 19.8},\n          new Object[]{6, 0, 18.5}, new Object[]{6, 1, 22.0},\n          new Object[]{6, 2, 26.5},\n          new Object[]{6, 3, 30.2}, new Object[]{6, 4, 28.5},\n          new Object[]{6, 5, 23.8},\n          new Object[]{7, 0, 17.8}, new Object[]{7, 1, 21.5},\n          new Object[]{7, 2, 25.2},\n          new Object[]{7, 3, 29.0}, new Object[]{7, 4, 27.5},\n          new Object[]{7, 5, 22.8},\n          new Object[]{8, 0, 13.5}, new Object[]{8, 1, 16.2},\n          new Object[]{8, 2, 20.0},\n          new Object[]{8, 3, 24.5}, new Object[]{8, 4, 22.0},\n          new Object[]{8, 5, 17.5},\n          new Object[]{9, 0, 8.2}, new Object[]{9, 1, 11.5},\n          new Object[]{9, 2, 15.0},\n          new Object[]{9, 3, 18.8}, new Object[]{9, 4, 16.5},\n          new Object[]{9, 5, 12.0},\n          new Object[]{10, 0, 2.5}, new Object[]{10, 1, 5.0},\n          new Object[]{10, 2, 9.2},\n          new Object[]{10, 3, 12.5}, new Object[]{10, 4, 10.0},\n          new Object[]{10, 5, 5.5},\n          new Object[]{11, 0, -2.8}, new Object[]{11, 1, -0.5},\n          new Object[]{11, 2, 3.5},\n          new Object[]{11, 3, 6.8}, new Object[]{11, 4, 4.2},\n          new Object[]{11, 5, 0.0}\n        );\n    option.series(heatmap);\n          \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/heatmap.svg\" alt=\"热力图数据\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e热力图数据\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n\n```string \n// ============================================================================\n# K线图(蜡烛图)  K chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003eK线图(蜡烛图)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n          \u003ccode class=\"language-java\"\u003e\n        JOption option = new JOption();\n        option.title().text(\"股票K线图(含数据)\");\n        option.tooltip().trigger(JTrigger.axis);\n        JCategoryAxis xAxis = new JCategoryAxis();\n        xAxis.data(\"01/01\", \"01/02\", \"01/03\", \"01/04\", \n        \"01/05\",\"01/06\", \"01/07\", \"01/08\", \"01/09\",\n        \"01/10\");\n        option.xAxis(xAxis);\n        option.yAxis(new JValueAxis());\n        JCandlestick candlestick = new JCandlestick();\n        candlestick.name(\"股价\")\n        .data(\n             new Object[]{105.2, 108.5, 104.8, 109.1},\n             new Object[]{108.6, 107.8, 106.5, 109.5},\n             new Object[]{107.9, 105.3, 104.2, 108.0},\n             new Object[]{105.4, 106.1, 104.5, 107.2},\n             new Object[]{106.2, 104.8, 103.0, 107.5},\n             new Object[]{104.9, 107.3, 104.0, 108.2},\n             new Object[]{107.4, 109.1, 106.5, 110.2},\n             new Object[]{109.2, 108.8, 107.0, 110.5},\n             new Object[]{108.9, 110.3, 108.2, 111.0},\n             new Object[]{110.4, 112.1, 109.5, 112.8}\n        );\n        option.series(candlestick);\n          \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/k_chart.svg\" alt=\"K线图(蜡烛图)\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003eK线图(蜡烛图)\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n```string \n// ============================================================================\n# 折线图  Line chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e折线图(Line chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption option = new JOption();\n        option.title().text(\"销售数据折线图\");\n        option.tooltip().trigger(JTrigger.axis);\n        JCategoryAxis xAxis = new JCategoryAxis();\n        xAxis.data(\"1月\", \"2月\", \"3月\", \"4月\", \n        \"5月\", \"6月\", \"7月\");\n        option.xAxis(xAxis);\n        option.yAxis(new JValueAxis());\n        JLine line = new JLine();\n        line.name(\"销售额\").data(120, 132, 101,\n        134, 90, 230, 210);\n        option.series(line);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/line_chart.svg\" alt=\"折线图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e折线图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n```string \n// ============================================================================\n# 饼图  PIE chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e饼图(PIE chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption option = new JOption();\n        option.title().text(\"销售占比\").subtext(\"2023年度\");\n        option.tooltip().trigger(JTrigger.item);\n        JPie pie = new JPie(\"销售占比\");\n        pie.data(\n          new JData().name(\"衬衫\").value(35),\n          new JData().name(\"羊毛衫\").value(20),\n          new JData().name(\"雪纺衫\").value(15),\n          new JData().name(\"裤子\").value(18),\n          new JData().name(\"高跟鞋\").value(8),\n          new JData().name(\"袜子\").value(4)\n        );\n        option.series(pie);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/pie-chart.svg\" alt=\"饼图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e饼图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n```string \n// ============================================================================\n# 雷达图  RADAR chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e雷达图(RADAR chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n              // 创建图表选项\n        JOption option = new JOption();\n        option.title().text(\"雷达图示例\")\n                .subtext(\"预算 vs 开销对比\")\n                .left(\"center\")\n                .textStyle(new JTextStyle().color(\"#333\"));\n        // 设置提示框\n        option.tooltip().trigger(JTrigger.item);\n        // 设置雷达图指标\n        JRadar radar = new JRadar();\n        radar.indicator(\n        new JRadar.Indicator().name(\"销售\")\n        .max(6500),\n        new JRadar.Indicator().name(\"管理\")\n        .max(16000),\n        new JRadar.Indicator().name(\"信息技术\")\n        .max(30000),\n        new JRadar.Indicator().name(\"客服\")\n        .max(38000),\n        new JRadar.Indicator().name(\"研发\")\n        .max(52000),\n        new JRadar.Indicator().name(\"市场\")\n        .max(25000)\n        );\n        option.radar(radar);\n        // 添加雷达图系列数据\n        JRadarSeries budgetSeries = new JRadarSeries();\n        budgetSeries.name(\"预算\").type(JSeriesType.radar)\n        .data(4300, 10000, 28000, 35000, 50000, 19000);\n        JRadarSeries actualSeries = new JRadarSeries();\n        actualSeries.name(\"实际开销\")\n        .type(JSeriesType.radar)\n        .data(5000, 14000, 28000, 31000, 42000, 21000);\n        option.series(budgetSeries, actualSeries);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/radar_chart.svg\" alt=\"雷达图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e雷达图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 关系图  RELATION chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e关系图(RELATION chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n         JGsonOption option = new JGsonOption();\n        option.title(\"Relationship Chart Test\");\n        // 创建图系列\n        JGraph graph = new JGraph();\n        graph.name(\"关系图\");\n        graph.layout(JLayout.force); // 使用力导向布局\n        graph.force().repulsion(100); // 设置排斥力\n        graph.draggable(true); // 节点可拖动\n        // 添加节点 - 修正了ID问题\n        List\u003cJNode\u003e nodes = new ArrayList\u003c\u003e();\n        nodes.add(new JNode(\"1\", \"Node A\")\n        .symbolSize(30).category(0));//id 1\n        nodes.add(new JNode(\"2\", \"Node B\")\n        .symbolSize(25).category(1));\n        nodes.add(new JNode(\"3\", \"Node C\")\n        .symbolSize(20).category(2));\n        nodes.add(new JNode(\"4\", \"Node D\")\n        .symbolSize(15).category(0));\n        nodes.add(new JNode(\"5\", \"Node E\")\n        .symbolSize(35).category(1));\n        nodes.add(new JNode(\"6\", \"Node F\")\n        .symbolSize(20).category(3));\n        nodes.add(new JNode(\"7\", \"Node G\")\n        .symbolSize(25).category(2));\n        nodes.add(new JNode(\"8\", \"Node H\")\n        .symbolSize(15).category(4));\n        nodes.add(new JNode(\"9\", \"Node I\")\n        .symbolSize(30).category(3));\n        nodes.add(new JNode(\"10\", \"Node J\")\n        .symbolSize(20).category(0));\n        graph.setData(nodes);\n        // 添加连接\n        List\u003cJLink\u003e links = new ArrayList\u003c\u003e();\n        links.add(new JLink(\"1\", \"2\"));\n        links.add(new JLink(\"1\", \"3\"));\n        links.add(new JLink(\"2\", \"4\"));\n        links.add(new JLink(\"3\", \"5\"));\n        links.add(new JLink(\"4\", \"6\"));\n        links.add(new JLink(\"5\", \"7\"));\n        links.add(new JLink(\"6\", \"8\"));\n        links.add(new JLink(\"7\", \"9\"));\n        links.add(new JLink(\"8\", \"10\"));\n        links.add(new JLink(\"9\", \"1\"));\n        links.add(new JLink(\"10\", \"2\"));\n        links.add(new JLink(\"3\", \"6\"));\n        links.add(new JLink(\"4\", \"7\"));\n        links.add(new JLink(\"5\", \"8\"));\n        graph.setLinks(links);\n        // 添加类别\n        List\u003cJCategory\u003e categories =\n        new ArrayList\u003c\u003e();\n        categories.add(new JCategory()\n        .name(\"Category 1\"));\n        categories.add(new JCategory()\n        .name(\"Category 2\"));\n        categories.add(new JCategory()\n        .name(\"Category 3\"));\n        categories.add(new JCategory()\n        .name(\"Category 4\"));\n        categories.add(new JCategory()\n        .name(\"Category 5\"));\n        graph.setCategories(categories);\n        option.series(graph);\n        option.legend().data(\"Category 1\",\n        \"Category 2\", \"Category 3\", \"Category 4\",\n        \"Category 5\");\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/relation_chart.svg\" alt=\"关系图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e关系图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 散点图  SCATTER chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e散点图(SCATTER chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n      JData[] data = new JData[]{\n      new JData().value(new Double[]{10.0, 8.04}),\n      new JData().value(new Double[]{8.07, 6.95}),\n      new JData().value(new Double[]{13.0, 7.58}),\n      new JData().value(new Double[]{9.05, 8.81}),\n      new JData().value(new Double[]{11.0, 8.33}),\n      new JData().value(new Double[]{14.0, 7.66}),\n      new JData().value(new Double[]{13.4, 6.81}),\n      new JData().value(new Double[]{10.0, 6.33}),\n      new JData().value(new Double[]{14.0, 8.96}),\n      new JData().value(new Double[]{12.5, 6.82}),\n      new JData().value(new Double[]{9.15, 7.2}),\n      new JData().value(new Double[]{11.5, 7.2}),\n      new JData().value(new Double[]{3.03, 4.23}),\n      new JData().value(new Double[]{12.2, 7.83}),\n      new JData().value(new Double[]{2.02, 4.47}),\n      new JData().value(new Double[]{1.05, 3.33}),\n      new JData().value(new Double[]{4.05, 4.96}),\n      new JData().value(new Double[]{6.03, 7.24}),\n      new JData().value(new Double[]{12.0, 6.26}),\n      new JData().value(new Double[]{12.0, 8.84}),\n      new JData().value(new Double[]{7.08, 5.82}),\n      new JData().value(new Double[]{5.02, 5.68})\n      };\n      JOption option = new JOption();\n      option.title().text(\"散点图示例\");\n      option.tooltip().trigger(JTrigger.axis);\n      option.xAxis(new JValueAxis().scale(true));\n      option.yAxis(new JValueAxis().scale(true));\n      JScatter scatter = new JScatter();\n      scatter.symbolSize(20).data(data);\n      option.series(scatter);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/scatter.svg\" alt=\"散点图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e散点图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 旭日图(1.5.1)  SUNBURST chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e旭日图(SUNBURST chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption option = new JOption();\n        // 设置标题\n        JTitle title = new JTitle();\n        title.setText(\"咖啡风味分析\");\n        option.setTitle(title);\n        JSunburstData root = \n        new JSunburstData(\"总数据\", 1.0);\n        JSunburstData main1 = \n        new JSunburstData(\"电子产品\", 0.4);\n        JSunburstData main2 = \n        new JSunburstData(\"服装\", 0.3);\n        JSunburstData main3 = \n        new JSunburstData(\"食品\", 0.3);\n        // 第二层：子分类\n        JSunburstData main1Sub1 = \n        new JSunburstData(\"手机\", 0.6);\n        JSunburstData main1Sub2 =\n        new JSunburstData(\"电脑\", 0.4);\n        JSunburstData main2Sub1 =\n        new JSunburstData(\"男装\", 0.5);\n        JSunburstData main2Sub2 = \n        new JSunburstData(\"女装\", 0.5);\n        JSunburstData main3Sub1 =\n        new JSunburstData(\"生鲜\", 0.4);\n        JSunburstData main3Sub2 =\n        new JSunburstData(\"零食\", 0.6);\n        // 第三层：孙分类\n        main1Sub1.addChild(new\n          JSunburstData(\"智能手机\", 0.7));\n        main1Sub1.addChild(new \n          JSunburstData(\"功能手机\", 0.3));\n        main1Sub2.addChild(new \n          JSunburstData(\"笔记本电脑\", 0.6));\n        main1Sub2.addChild(new \n          JSunburstData(\"台式电脑\", 0.4));\n        main2Sub1.addChild(new \n          JSunburstData(\"衬衫\", 0.4));\n        main2Sub1.addChild(new \n          JSunburstData(\"裤子\", 0.6));\n        main3Sub2.addChild(new \n          JSunburstData(\"膨化食品\", 0.5));\n        main3Sub2.addChild(new \n          JSunburstData(\"糖果\", 0.5));\n        main1.addChild(main1Sub1);\n        main1.addChild(main1Sub2);\n        main2.addChild(main2Sub1);\n        main2.addChild(main2Sub2);\n        main3.addChild(main3Sub1);\n        main3.addChild(main3Sub2);\n        root.addChild(main1);\n        root.addChild(main2);\n        root.addChild(main3);\n        option.setSunburstData(root);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/sunburst.svg\" alt=\"旭日图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e旭日图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n```string \n// ============================================================================\n# 矩形树图(1.5.1)  Treemap chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e矩形树图(Treemap chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JTreeMapNode root = createTestData();\n        TreeMapOption treemapOption = new TreeMapOption();\n        treemapOption.setRoot(root);\n        treemapOption.setDepartmentColors(DEPARTMENT_COLORS);\n        treemapOption.setCategoryColors(CATEGORY_COLORS);\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"开发\", \"技术部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"项目\", \"技术部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"服务\", \"技术部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"会计\", \"财务部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"预算\", \"财务部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"税务\", \"财务部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"审计\", \"财务部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"销售\", \"销售部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"区域\", \"销售部\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"招聘\", \"人力资源\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"培训\", \"人力资源\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"薪酬\", \"人力资源\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"员工\", \"人力资源\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"营销\", \"市场营销\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"品牌\", \"市场营销\"));\n        treemapOption.getDepartmentRules()\n        .add(new TreeMapMapping(\"公关\", \"市场营销\"));\n        JOption option = new JOption();\n        option.setTreemapOption(treemapOption);\n        option.title(\"公司业务分布矩形树图（JTreemapRenderer）\");\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/treemap.svg\" alt=\"矩形树图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e矩形树图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 气泡图(1.5.1)  Bubble chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e气泡图(Bubble chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JTitle title = new JTitle();\n        title.setText(\"空气质量指数 (AQI) 监测气泡图\");\n        title.setSubtext(\"图表说明：本气泡图展示了空气质量指数(AQI)的\n        时间变化趋势。X轴表示日期，Y轴表示AQI数值，气泡大小反映PM2.5浓度，\n        气泡颜色表示AQI等级。\");\n        JOption option = new JOption()\n        .title(title)\n        .legend(\"优\", \"良\", \"轻度污染\", \"中度污染\", \"重度污染\")\n        .xAxis(new CategoryAxis().name(\"日期\"))\n        .yAxis(new ValueAxis().name(\"AQI数值\"));\n        ScatterSeries series = new ScatterSeries(\"空气质量监测\");\n        List\u003cMap\u003cString, Object\u003e\u003e data = new ArrayList\u003c\u003e();\n        Random random = new Random(42); // 固定种子以便重现\n        String[] dates = {\"01-01\", \"01-02\", \"01-03\", \"01-04\",\n        \"01-05\", \"01-06\", \"01-07\", \"01-08\", \"01-09\", \"01-10\",\n        \"01-11\", \"01-12\", \"01-13\", \"01-14\", \"01-15\"};\n        for (int i = 0; i \u003c dates.length; i++) {\n            int aqi = 20 + random.nextInt(180); // AQI 20-200\n            double pm25 = 10 + random.nextDouble() * 150; // PM2.5 10-160\n            String category;\n            if (aqi \u003c= 50) category = \"优\";\n            else if (aqi \u003c= 100) category = \"良\";\n            else if (aqi \u003c= 150) category = \"轻度污染\";\n            else if (aqi \u003c= 200) category = \"中度污染\";\n            else category = \"重度污染\";\n            String name = String.format(\"日期:%s, AQI:%d, \n            PM2.5:%.1f\", dates[i], aqi, pm25);\n            Map\u003cString, Object\u003e dataPoint = new HashMap\u003c\u003e();\n            dataPoint.put(\"x\", dates[i]);\n            dataPoint.put(\"y\", aqi);\n            dataPoint.put(\"size\", pm25);\n            dataPoint.put(\"category\", category);\n            dataPoint.put(\"name\", name);\n            data.add(dataPoint);\n        }\n        series.data(data.toArray());\n        option.series(series);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/bubble.svg\" alt=\"气泡图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e气泡图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 日历(1.5.3)  Lunar chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e日历贡献图(Calendar chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        Map\u003cLocalDate, Integer\u003e data = new HashMap\u003c\u003e();\n        LocalDate startDate = LocalDate.of(2024, 1, 1);\n        for (int i = 0; i \u003c 365; i++) {\n            LocalDate date = startDate.plusDays(i);\n            int value = (int) (Math.random() * 15);\n            data.put(date, value);\n        }\n        JOption option = new JOption();\n        JCalendarOption calendarOption = new JCalendarOption(\n          \"2024年活动日历\", \"类似GitHub贡献图\", 2024, data,\n                new Color(235, 237, 240),\n                new Color(32, 125, 222),\n                new Color(232, 235, 240),\n                new Color(84, 85, 90),\n                20,\n                80\n        );\n        option.setJCalendarOption(calendarOption);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/calendar.svg\" alt=\"日历贡献图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e日历贡献图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 日历(1.5.3)  Lunar chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e日历(Lunar chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n       LunarCalendarOption.CalendarDataConfig dataConfig = \n              new LunarCalendarOption.CalendarDataConfig()\n       .setDayDataList(createDefaultDayData())\n       .setSpecialDays(createDefaultSpecialDays())\n       .setWeekDays(new String[]{\"Mon\", \"Tue\", \n        \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"})\n       .setRows(5)\n       .setCols(7);\n        LunarCalendarOption.ColorConfig colorConfig = \n        new LunarCalendarOption.ColorConfig()\n        .setBackgroundColor(null)\n        .setSpecialDayColor(new Color(0, 100, 0));\n        JTitle title = new JTitle();\n        title.setText(\"2024年3月日历\");\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/lunar.svg\" alt=\"日历\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e日历\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n```string \n// ============================================================================\n# 漏斗图(1.5.3)  Funnel chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e日历(Lunar chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JFunnelOption option = JFunnelOption\n        .createDefaultFunnel();\n        JFunnelOption customOption = option\n        .title(new Title().text(\"销售漏斗\")\n        .subtext(\"2024年数据\"))\n        .funnel(new Funnel()\n        .width(600)\n        .topY(80)\n        .bottomY(200)\n        .gap(2)\n        .borderColor(Color.GRAY)\n        )\n        .series(Collections.singletonList(\n        new Series()\n        .name(\"sales\")\n        .type(\"funnel\")\n        .data(Arrays.asList(\n             new DataItem(\"展现\", 10000),\n             new DataItem(\"点击\", 5000),\n             new DataItem(\"咨询\", 2000),\n             new DataItem(\"订单\", 500)\n        ))\n        ))\n        .colors(\n             new Color(12, 168, 223),\n             new Color(255, 153, 77),\n             new Color(80, 112, 221),\n             new Color(182, 214, 52)\n        );\n        JFunnelChartRenderer renderer = new JFunnelChartRenderer();\n        JOption jOption = new JOption();\n        jOption.setFunnelOption(customOption);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/funnel.svg\" alt=\"漏斗图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e漏斗图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 相关系数矩阵(1.5.3)  CorrectionMatrix chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e相关系数矩阵(CorrectionMatrix chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\ndouble[][] correlationData = {\n{1.00, -0.20, 0.03, -0.62, -0.54, -0.21, 0.63, 0.30},\n{-0.20, 1.00, 0.36, -0.61, -0.26, 0.05, 0.16, 0.41},\n{0.03, 0.36, 1.00, -0.74, -0.94, 0.71, -0.90, -0.66},\n{-0.62, -0.61, -0.74, 1.00, 0.37, -0.66, 0.54, -0.66},\n{-0.54, -0.26, -0.94, 0.37, 1.00, -0.05, -0.46, 0.71},\n{-0.21, 0.05, 0.71, -0.66, -0.05, 1.00, -0.84, -0.40},\n{0.63, 0.16, -0.90, 0.54, -0.46, -0.84, 1.00, -0.55},\n{0.30, 0.41, -0.66, -0.66, 0.71, -0.40, -0.55, 1.00}\n};\nString[] dimensions = {\"销售额\", \"广告费\", \"促销费\",\n\"竞品价\", \"季节指数\", \"GDP\", \"人口\", \"天气\"};\nJCorrelationMatrixOption option = JCorrelationMatrixOption.builder()\n.title(\"销售因素相关系数矩阵\", \"各因素之间的相关性分析\")\n.dataset(correlationData)\n.build();\noption.dataset().dimensions(dimensions);\nJOption jOption = new JOption();\njOption.setCorrelationMatrixOption(option);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/Matrix.svg\" alt=\"相关系数矩阵\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e相关系数矩阵\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 甘特图(1.5.3)  Gantt chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e甘特图(Gantt chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JGanttOption option = new JGanttOption();\n        option.setTitle(\n        new JGanttOption.Title(\n        \"Gantt of Airport Flight\", \"航班调度甘特图\")\n        );\n        option.setFlightData(\n        Arrays.asList(\n        new JGanttOption.FlightData\n            (\"Y3683\", \"681\", \"X\", 21, 0, 360, 0, 0.7),\n        new JGanttOption.FlightData\n            (\"EKXAD\", \"682I\", \"W\", 21, 0, 360, 1, 0.7),\n        new JGanttOption.FlightData\n            (\"Y4682\", \"682O\", \"W\", 21, 0, 360, 2, 0.7),\n        new JGanttOption.FlightData\n            (\"Y4393\", \"682\", \"X\", 21, 0, 360, 3, 0.7),\n        new JGanttOption.FlightData\n            (\"Y2238\", \"683\", \"X\", 21, 0, 360, 4, 0.7),\n        new JGanttOption.FlightData\n            (\"Y8192\", \"684\", \"W\", 21, 0, 240, 5, 0.7),\n        new JGanttOption.FlightData\n            (\"Y3887\", \"685\", \"X\", 21, 0, 360, 6, 0.7),\n        new JGanttOption.FlightData\n            (\"Y3086\", \"690\", \"X\", 21, 0, 360, 7, 0.7),\n        new JGanttOption.FlightData\n            (\"Y7421\", \"691\", \"X\", 21, 0, 120, 8, 0.7),\n        new JGanttOption.FlightData\n            (\"Y4619\", \"692\", \"X\", 21, 0, 300, 9, 0.7)\n        ));\n        option.setChartStyle(new JGanttOption.ChartStyle(\n                    Color.WHITE,\n                    new Color(146, 154, 186),\n                    new Color(54, 140, 108),\n                    new Color(80, 112, 221),\n                    new Color(221, 179, 11),\n                    new Font(\"微软雅黑\", Font.BOLD, 18),\n                    new Font(\"微软雅黑\", Font.PLAIN, 12),\n                    872,\n                    282\n        ));\n        option.setTimeRange(\n            new JGanttOption.TimeRange(21, 3, \n            new String[]{\"21:00\", \"22:00\", \"23:00\", \"00:00\", \n         \"01:00\", \"02:00\", \"03:00\"}));\n        JChartRenderer renderer = new JGanttChartRenderer();\n        JOption jOption = new JOption();\n        jOption.setGanttOption(option);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/gantt.svg\" alt=\"甘特图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e甘特图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 甘特图(1.5.3)  Gantt chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e仪表盘(Gauge chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        GuageConfig scoreConfig = GuageConfig.builder()\n        .score(75)  // 设置分数为75\n        .pointerColor(new Color(220, 80, 80))  \n        // 红色指针\n        .backgroundColor(new Color(240, 240, 245))  \n         // 浅灰色背景\n        .title(\"PERFORMANCE\")\n        .build();\n        JGuageOption option = JGuageOption.builder()\n        .scoreMeter(scoreConfig).build();\n        JGuageRenderer renderer = new JGuageRenderer();\n        JOption option1 = new JOption();\n        option1.setGuageOption(option);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/gauge.svg\" alt=\"仪表盘\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e仪表盘\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n```string \n// ============================================================================\n# 词云(1.5.3)  WordsCloud chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e词云(WordsCloud chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption option = new JOption()\n        .title(new JTitle().text(\"热门编程语言\"))\n        .series(Arrays.asList(\n         new JWordCloudSeries(\"语言热度\")\n         .data(Arrays.asList(\n              new JData(\"Java\", 100),\n              new JData(\"Python\", 85),\n              new JData(\"JavaScript\", 75),\n              new JData(\"C++\", 60),\n              new JData(\"Go\", 50),\n              new JData(\"Rust\", 45),\n              new JData(\"Kotlin\", 40),\n              new JData(\"Swift\", 35),\n              new JData(\"TypeScript\", 30),\n              new JData(\"Scala\", 25)\n           ))\n        .minFontSize(20)\n        .maxFontSize(60)\n        .gridSize(10)\n        .rotationStep(15)\n        .rotationRange(90)\n        .textStyle(new JItemStyle().color(Color.BLUE))\n        ));\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/wordcloud.svg\" alt=\"词云\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e词云\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n```string \n// ============================================================================\n# 地图 (1.5.4)  GEO Json chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e地图(GEO Json chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption jOption = new JOption();\n        String geoJsonContent = readFile(\"d://sample//test.geojson\");\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/geo.svg\" alt=\"地图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e地图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n```string \n// ============================================================================\n# 组合图形\u003c折线条形图\u003e (1.5.5)  LineBar chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e组合图形 (折线条形图 LineBar chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JOption jOption = new JOption();\n        List\u003cDouble\u003e salesData = Arrays.asList(45.0, 38.0, 52.0,\n        48.0, 62.0, 58.0, 72.0, 78.0, 65.0, 70.0, 82.0, 88.0);\n        List\u003cDouble\u003e profitData =Arrays.asList(12.0, 10.0, 15.0,\n        14.0, 18.0, 17.0, 22.0, 25.0, 20.0, 21.0, 26.0, 28.0);\n        List\u003cString\u003e months =Arrays.asList(\"1月\", \"2月\", \"3月\",\n        \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\");\n        JComboLineBarChartData data = JComboLineBarChartData.builder()\n                .width(1000)                    // 宽度1000像素\n                .height(600)                    // 高度600像素\n                .title(\"2024年度销售数据分析\", \"全年12个月数据趋势\")\n                .barData(salesData)\n                .lineData(profitData)\n                .xAxisLabels(months)\n                .leftAxisTitle(\"销售额（万元）\")\n                .rightAxisTitle(\"利润率（%）\")\n                .barLegendText(\"月销售额（万元）\")\n                .lineLegendText(\"利润率趋势\")\n                .footerText(\"数据来源：2024年度财务报告\")\n                .barColor(new Color(52, 152, 219))   // 蓝色\n                .lineColor(new Color(231, 76, 60))   // 红色\n                .showBarLabels(true)\n                .showLineLabels(true)\n                .autoCalculateMax(true)\n                .build();\n        jOption.setData(data);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/linebar.svg\" alt=\"折线条形图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e折线条形图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\n\n```string \n// ============================================================================\n# 多重折线图(1.5.6)  Mutiple Line Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e多重折线图(多重折线图 Mutiple Line Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        List\u003cString\u003e months = Arrays.asList(\"1月\", \"2月\", \"3月\", \n        \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\");\n        List\u003cDouble\u003e productA = Arrays.asList(120.0, 135.0, 148.0, \n        162.0, 175.0, 190.0, 205.0, 218.0, 230.0, 245.0, 258.0, 270.0);\n        List\u003cDouble\u003e productB = Arrays.asList(95.0, 108.0, 112.0, \n        130.0, 125.0, 145.0, 150.0, 168.0, 172.0, 185.0, 190.0, 200.0);\n        List\u003cDouble\u003e productC = Arrays.asList(80.0, 82.0, 85.0, 88.0,\n        90.0, 92.0, 95.0, 98.0, 100.0, 102.0, 105.0, 108.0);\n        List\u003cDouble\u003e productD = Arrays.asList(45.0, 58.0, 72.0, 89.0,\n        105.0, 128.0, 150.0, 175.0, 198.0, 225.0, 248.0, 275.0);\n        JMultiLineChartData chartData = new JMultiLineChartData();\n        chartData.setXAxisLabels(months);\n        chartData.setWidth(900);\n        chartData.setHeight(600);\n        chartData.setTitleText(\"2024年度产品销售趋势分析\");\n        chartData.setSubtitleText(\"各产品线月度销售额对比（单位：万元）\");\n        chartData.setYAxisTitle(\"销售额（万元）\");\n        chartData.setFooterText(\"数据来源：销售系统报表 | 统计时间：\n        2024年1月-12月\");\n        chartData.setGridCount(6);\n        chartData.setShowDataLabels(false);\n        chartData.setShowInnerPoint(true);\n        chartData.setPointRadius(5);\n        chartData.setInnerPointRadius(2);\n        chartData.setChartAreaColor(new Color(248, 249, 250));\n        chartData.setAxisColor(Color.BLACK);\n        chartData.setGridColor(new Color(220, 220, 220));\n        chartData.setTextColor(Color.BLACK);\n        chartData.setFooterColor(new Color(128, 128, 128));\n        chartData.setValueWithPercent(false);\n        chartData.setAutoCalculateMax(true);\n        chartData.setRotateXAxisLabels(false);\n        JMultiLineChartData.LineData lineA = new JMultiLineChartData\n       .LineData();\n        lineA.setName(\"产品A\");\n        lineA.setLegendText(\"产品A - 高端系列\");\n        lineA.setValues(productA);\n        lineA.setLineColor(new Color(66, 133, 244));\n        lineA.setLineWidth(2.5f);\n        JMultiLineChartData.LineData lineB = new JMultiLineChartData\n        .LineData();\n        lineB.setName(\"产品B\");\n        lineB.setLegendText(\"产品B - 中端系列\");\n        lineB.setValues(productB);\n        lineB.setLineColor(new Color(234, 67, 53));\n        lineB.setLineWidth(2.5f);\n        JMultiLineChartData.LineData lineC = new JMultiLineChartData\n        .LineData();\n        lineC.setName(\"产品C\");\n        lineC.setLegendText(\"产品C - 入门系列\");\n        lineC.setValues(productC);\n        lineC.setLineColor(new Color(52, 168, 83));\n        lineC.setLineWidth(2.5f);\n        JMultiLineChartData.LineData lineD = new JMultiLineChartData\n        .LineData();\n        lineD.setName(\"产品D\");\n        lineD.setLegendText(\"产品D - 创新系列\");\n        lineD.setValues(productD);\n        lineD.setLineColor(new Color(251, 188, 5));\n        lineD.setLineWidth(2.5f);\n        chartData.setLineDataList(Arrays.asList(lineA, lineB, lineC, lineD));\n        chartData.updateMaxValues();\n        JOption option = new JOption();\n        JTitle title = new JTitle();\n        title.setText(\"2024年度产品销售趋势分析\");\n        title.setSubtext(\"各产品线月度销售额对比\");\n        option.setTitle(title);\n        option.setData(chartData);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/multipleLine.svg\" alt=\"多重折线图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e多重折线图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 多重条形图(1.5.7)  Mutiple Bar Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e多重条形图(多重条形图 Mutiple Bar Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n       JMultiBarChartData regionalData = new JMultiBarChartData();\n        regionalData.setTitleText(\"2024年上半年各区域业绩对比（万元）\");\n        regionalData.setSubtitleText(\"华东、华南、华北、西部四区表现\");\n        regionalData.setXAxisLabels(Arrays.asList(\"1月\", \"2月\", \n       \"3月\", \"4月\", \"5月\", \"6月\"));\n        regionalData.setXAxisTitle(\"月份\");\n        regionalData.setYAxisTitle(\"业绩（万元）\");\n        // 华东区域\n        JMultiBarChartData.BarData eastChina = new JMultiBarChartData\n       .BarData();\n        eastChina.setLegendText(\"华东\");\n        eastChina.setBarColor(JMultiBarChartRenderer.COLOR_A);\n        eastChina.setValues(Arrays.asList(120.5, 135.2, 148.0, \n        162.5, 175.3, 190.8));\n        // 华南区域\n        JMultiBarChartData.BarData southChina = new JMultiBarChartData\n        .BarData();\n        southChina.setLegendText(\"华南\");\n        southChina.setBarColor(JMultiBarChartRenderer.COLOR_B);\n        southChina.setValues(Arrays.asList(98.3, 112.6, 128.4, 145.2, \n        158.7, 172.5));\n        // 华北区域\n        JMultiBarChartData.BarData northChina = new JMultiBarChartData\n        .BarData();\n        northChina.setLegendText(\"华北\");\n        northChina.setBarColor(JMultiBarChartRenderer.COLOR_C);\n        northChina.setValues(Arrays.asList(85.6, 92.3, 105.8, 118.4, \n        132.6, 148.2));\n        // 西部区域\n        JMultiBarChartData.BarData westChina = new JMultiBarChartData\n        .BarData();\n        westChina.setLegendText(\"西部\");\n        westChina.setBarColor(new Color(80, 180, 120));\n        westChina.setValues(Arrays.asList(52.4, 61.8, 73.5, 85.2,\n        96.8, 108.5));\n        regionalData.setBarDataList(Arrays.asList(eastChina, southChina, \n          northChina, westChina));\n        JOption option = new JOption();\n        option.setData(regionalData);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/fourBar.svg\" alt=\"多重条形图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e多重条形图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 区域堆积图(1.5.8)  Area Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e区域堆积图(区域堆积图 Area Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n       java.util.List\u003cDouble\u003e values =Arrays.asList(85.0, 120.0, \n        150.0, 210.0, 280.0, 350.0, 420.0, 400.0, 380.0, 450.0, 480.0, 520.0);\n        List\u003cString\u003e labels = Arrays.asList(\"1月\", \"2月\", \"3月\", \"4月\", \"5月\",\n        \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\");\n        JAreaChartData data = new JAreaChartData();\n        data.setWidth(800);\n        data.setHeight(500);\n        data.setTitle(\"2024年度销售趋势\");\n        data.setSubtitle(\"数据来源：销售系统\");\n        data.setXAxisTitle(\"月份\");\n        data.setYAxisTitle(\"销售额（万元）\");\n        data.setLegendText(\"销售额\");\n        data.setShowDataLabels(true);\n        data.setSeriesList(Arrays.asList(new JSeriesData(\"销售额\", values)));\n        data.setXAxisLabels(labels);\n        data.setTheme(JTheme.DEFAULT);      // 默认主题\n        JOption option = new JOption();\n        option.setData(data);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/area.svg\" alt=\"堆叠区域图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e堆叠区域图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 横向条形图(1.5.9)  HorizontalBar Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e横向条形图(横向条形图 HorizontalBar Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n     JHorizontalBarChartData chartData = new JHorizontalBarChartData();\n        chartData.setTitleText(\"2024年度销售数据\");\n        chartData.setSubtitleText(\"各产品线销售占比\");\n        chartData.setXAxisTitle(\"销售额（万元）\");\n        chartData.setYAxisTitle(\"产品类别\");\n        chartData.setValueWithPercent(false);\n        chartData.setShowDataLabels(true);\n        chartData.addYAxisLabel(\"电子产品\");\n        chartData.addYAxisLabel(\"服装服饰\");\n        chartData.addYAxisLabel(\"家居用品\");\n        chartData.addYAxisLabel(\"美妆个护\");\n        chartData.addYAxisLabel(\"食品饮料\");\n        java.util.List\u003cDouble\u003e productAValues = Arrays\n        .asList(85.5, 62.3, 45.8, 71.2, 93.6);\n        java.util.List\u003cDouble\u003e productBValues = Arrays\n        .asList(45.2, 78.9, 52.1, 38.5, 67.4);\n        chartData.addBarData(new JHorizontalBarChartData\n        .BarData(\"产品A\", productAValues, JHorizontalBarChartData.COLOR_A));\n        chartData.addBarData(new JHorizontalBarChartData\n        .BarData(\"产品B\", productBValues, JHorizontalBarChartData.COLOR_B));\n        JOption option = new JOption();\n        option.setData(chartData);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/horizontalBar.svg\" alt=\"横向条形图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e横向条形图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 多重横向条形图(1.5.10)  MutipleHorizontalBar Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e多重横向条形图(多重横向条形图 MutipleHorizontalBar Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JHorizontalMultiBarChartData chartData = \n        new JHorizontalMultiBarChartData();\n        chartData.setTitleText(\"2024年度各产品销售数据\");\n        chartData.setSubtitleText(\"单位：万元\");\n        chartData.setXAxisTitle(\"销售额（万元）\");\n//        chartData.setYAxisTitle(\"产品类别\");\n        chartData.setValueWithPercent(false);\n        chartData.setShowDataLabels(true);\n        chartData.setLegendAtTop(true);\n        chartData.setGroupSpacingRatio(0.15);\n        chartData.setBarSpacingRatio(0.2);\n        chartData.addCategory(\"智能手机\");\n        chartData.addCategory(\"笔记本电脑\");\n        chartData.addCategory(\"平板电脑\");\n        chartData.addCategory(\"智能手表\");\n        chartData.addCategory(\"耳机音箱\");\n        List\u003cDouble\u003e productAValues = Arrays\n        .asList(125.5, 98.3, 65.8, 45.2, 78.6);\n        List\u003cDouble\u003e productBValues = Arrays\n        .asList(88.2, 112.5, 72.1, 38.5, 55.3);\n        List\u003cDouble\u003e productCValues = Arrays\n        .asList(45.6, 68.9, 52.4, 28.7, 42.1);\n        chartData.addSeries(\"品牌 A\", productAValues, \n        new Color(52, 73, 94));    // 深灰蓝 #34495e\n        chartData.addSeries(\"品牌 B\", productBValues, \n        new Color(41, 128, 185));   // 中蓝 #2980b9\n        chartData.addSeries(\"品牌 C\", productCValues,\n        new Color(26, 188, 156));   // 薄荷绿 #1abc9c\n        JOption option = new JOption();\n        option.setData(chartData);\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/mhBarChart.svg\" alt=\"多重横向条形图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e多重横向条形图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n```string \n// ============================================================================\n# 双雷达图(1.5.11)  DoubleRadar Chart\n// ============================================================================\n```\n\n\u003ctable style=\"width: 100%; border: none; border-collapse: collapse;\"\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"width: 30%; vertical-align: middle; padding-right: 2%; border: none;\"\u003e\n      \u003cstrong\u003e双雷达图(双雷达图 DoubleRadar Chart)\u003c/strong\u003e\u003cbr\u003e\n      \u003cpre style=\"background: #f5f5f5; padding: 10px; border-radius: 4px; font-size: 0.9em; overflow-x: auto;\"\u003e\n      \u003ccode class=\"language-java\"\u003e\n        JDoubleRadarChartData chartData = new \n        JDoubleRadarChartData();\n        chartData.setWidth(1000);\n        chartData.setHeight(600);\n        chartData.setTitleText(\"多维度数据对比雷达图\");\n        chartData.setSubtitleText(\"左右两组数据对比分析\");\n        chartData.setLeftTitle(\"实验组数据\");\n        chartData.setRightTitle(\"对照组数据\");\n        List\u003cString\u003e dimensions = Arrays.asList(\"维度A\", \n        \"维度B\", \"维度C\", \"维度D\", \"维度E\");\n        chartData.setDimensions(dimensions);\n        JDoubleRadarChartData.RadarData leftRadar = new \n        JDoubleRadarChartData.RadarData();\n        List\u003cJDoubleRadarChartData.Series\u003e leftSeriesList = new ArrayList\u003c\u003e();\n        JDoubleRadarChartData.Series series1 = new JDoubleRadarChartData.Series();\n        series1.setName(\"节点1\");\n        List\u003cDouble\u003e values1 = Arrays.asList(85.0, 70.0, 65.0, 80.0, 75.0);\n        series1.setValues(values1);\n        series1.setColor(new Color(84, 112, 198));  // 蓝色\n        leftSeriesList.add(series1);\n        JDoubleRadarChartData.Series series2 = new JDoubleRadarChartData.Series();\n        series2.setName(\"节点2\");\n        List\u003cDouble\u003e values2 = Arrays.asList(70.0, 85.0, 80.0, 65.0, 70.0);\n        series2.setValues(values2);\n        series2.setColor(new Color(250, 200, 88));  // 黄色\n        leftSeriesList.add(series2);\n        leftRadar.setSeriesList(leftSeriesList);\n        chartData.setLeftRadar(leftRadar);\n        JDoubleRadarChartData.RadarData rightRadar = new J\n        DoubleRadarChartData.RadarData();\n        List\u003cJDoubleRadarChartData.Series\u003e rightSeriesList = new ArrayList\u003c\u003e();\n        JDoubleRadarChartData.Series series3 = new JDoubleRadarChartData.Series();\n        series3.setName(\"节点3\");\n        List\u003cDouble\u003e values3 = Arrays.asList(90.0, 85.0, 88.0, 92.0, 87.0);\n        series3.setValues(values3);\n        series3.setColor(new Color(238, 102, 102));  // 红色\n        rightSeriesList.add(series3);\n        JDoubleRadarChartData.Series series4 = new JDoubleRadarChartData.Series();\n        series4.setName(\"节点4\");\n        List\u003cDouble\u003e values4 = Arrays.asList(75.0, 80.0, 72.0, 78.0, 82.0);\n        series4.setValues(values4);\n        series4.setColor(new Color(80, 180, 150));  // 绿色\n        rightSeriesList.add(series4);\n        rightRadar.setSeriesList(rightSeriesList);\n        chartData.setRightRadar(rightRadar);\n        chartData.setGridLevels(4);\n        chartData.setFillAlpha(70);\n        chartData.setLineWidth(2.0f);\n        chartData.setShowDataPoints(true);\n        chartData.setLegendAtTop(false);\n        chartData.setShowLegendSide(true);\n        chartData.setFooterText(\"数据来源：示例数据\");\n       \u003c/code\u003e\n      \u003c/pre\u003e\n    \u003c/td\u003e\n    \u003ctd style=\"width: 48%; vertical-align: middle; text-align: center; border: none;\"\u003e\n      \u003cimg src=\"./images/twoRadar.svg\" alt=\"双雷达图\" style=\"width: 100%; min-width: 400px ;max-width: 400px !important; height: auto;\"\u003e\n      \u003cdiv style=\"font-size: 0.9em; color: #666; margin-top: 10px;\"\u003e双雷达图\u003c/div\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### How to Generate a Credit Report Using JQuickPDF\n#### Define a Template\n```xml\n\u003cpdf\u003e\n\u003cbody\u003e\n  \u003cdiv style=\"textAlignment:center; marginBottom:5px; paddings:5px 5px 60px 70px; background:#3E6B9D; color:white; borderRadius:4px; position:relative\"\u003e\n    \u003ch1 style=\"textAlignment:center;color:white; marginBottom:8px; fontSize:20; fontWeight:bold\"\u003e'企业信用评级报告'\u003c/h1\u003e\n    \u003cp style=\"textAlignment:center;color:rgba(255,255,255,0.9); fontSize:11; margin:2px\"\u003e'报告编号: CR-2023-08975 | 评估日期: 2023年11月15日'\u003c/p\u003e\n    \u003cp style=\"textAlignment:center;color:rgba(255,255,255,0.9); fontSize:11; margin:2px\"\u003e'评估机构: 四川省企业信用评估中心'\u003c/p\u003e\n  \u003c/div\u003e\n  \u003cdiv style=\"marginBottom:3px;borderRadius:4px;\"\u003e\n    \u003cdiv style=\"padding:12px\"\u003e\n      \u003ch2 style=\"color:#2c3e50; marginTop:0; marginBottom:8px; fontSize:14; fontWeight:bold\"\u003e'四川省泡海椒科技有限公司'\u003c/h2\u003e\n      \u003ctable style=\"width:600px;verticalAlignment:center; fontSize:10\"\u003e\n        \u003ctr\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa;padding:5px; textAlign:left;width:150px;\"\u003e'统一信用代码'\u003c/td\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa;padding:5px;width:150px;  \"\u003e'91110108MA01XX1234'\u003c/td\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left;width:150px;\"\u003e'成立日期'\u003c/td\u003e\n          \u003ctd style=\"padding:5px; width:150px;\"\u003e'2018年5月20日'\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; \"\u003e'注册资本'\u003c/td\u003e\n          \u003ctd style=\"padding:5px; \"\u003e'1000万元人民币'\u003c/td\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; \"\u003e'法定代表人'\u003c/td\u003e\n          \u003ctd style=\"padding:5px;\"\u003e'泡海椒'\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; \"\u003e'所属行业'\u003c/td\u003e\n          \u003ctd style=\"padding:5px; \"\u003e'软件和信息技术服务业'\u003c/td\u003e\n          \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; \"\u003e'企业规模'\u003c/td\u003e\n          \u003ctd style=\"padding:5px; \"\u003e'中型（150-200人）'\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003ctemplate\u003e\u0026html\u003c/template\u003e\n  \u003cdiv style=\"margin-bottom:15px\"\u003e\n    \u003ch2 style=\"color:#3498db; borderBottom:1px solid #3498db; paddingBottom:4px; fontSize:13; marginBottom:10px\"\u003e'历年财务数据（单位：万元）'\u003c/h2\u003e\n    \u003ctable style=\"width:600px; fontSize:10; marginTop:8px\"\u003e\n      \u003ctr\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'财务指标'\u003c/th\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'2020年'\u003c/th\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'2021年'\u003c/th\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'2022年'\u003c/th\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'2023年'\u003c/th\u003e\n        \u003cth style=\"backgroundColor:#3498db; color:white; padding:6px; textAlign:center; border:1px solid #dee2e6\"\u003e'增长率'\u003c/th\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; border:1px solid #dee2e6; fontWeight:bold\"\u003e'营业收入'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'8,560'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'12,340'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'18,920'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'25,680'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6; color:#4CAF50; fontWeight:bold\"\u003e'+44.2%'\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; border:1px solid #dee2e6; fontWeight:bold\"\u003e'净利润'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'1,240'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'2,150'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'3,890'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'5,420'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6; color:#4CAF50; fontWeight:bold\"\u003e'+63.8%'\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; B:left; border:1px solid #dee2e6; fontWeight:bold\"\u003e'总资产'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'15,800'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'22,450'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'31,200'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'42,800'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6; color:#4CAF50; fontWeight:bold\"\u003e'+39.5%'\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; border:1px solid #dee2e6; fontWeight:bold\"\u003e'净资产'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'9,200'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'13,800'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'19,500'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'26,400'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6; color:#4CAF50; fontWeight:bold\"\u003e'+42.1%'\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n        \u003ctd style=\"backgroundColor:#f8f9fa; padding:5px; textAlign:left; border:1px solid #dee2e6; fontWeight:bold\"\u003e'毛利率'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'42.5%'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'45.8%'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'48.2%'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6\"\u003e'51.6%'\u003c/td\u003e\n        \u003ctd style=\"padding:5px; textAlign:right; border:1px solid #dee2e6; color:#4CAF50; fontWeight:bold\"\u003e'+9.1%'\u003c/td\u003e\n      \u003c/tr\u003e\n    \u003c/table\u003e\n  \u003c/div\u003e\n\n  \u003cdiv style=\"margin-bottom:15px\"\u003e\n    \u003ch2 style=\"color:#3498db; border-bottom:1px solid #3498db; padding-bottom:4px; font-size:13px; margin-bottom:10px\"\u003e'关键经营指标'\u003c/h2\u003e\n    \u003clist style=\"list-style-type:none; padding-left:0; font-size:11px\"\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #4CAF50; border-radius:0 4px 4px 0\"\u003e\n        '营收增长率:连续三年保持40%以上增长，2023年达到25,680万元'\n      \u003c/li\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #2196F3; border-radius:0 4px 4px 0\"\u003e\n        ' 利润率提升:净利率从14.5%提升至21.1%，盈利能力显著增强'\n      \u003c/li\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #FF9800; border-radius:0 4px 4px 0\"\u003e\n        ' 研发投入:研发费用年均增长38.9%，占营收比例达13.3%'\n      \u003c/li\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #9C27B0; border-radius:0 4px 4px 0\"\u003e\n        ' 人才结构:技术研发人员占比42%，硕士以上学历占35%'\n      \u003c/li\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #E91E63; border-radius:0 4px 4px 0\"\u003e\n        ' 客户质量:服务15家上市公司，客户续约率92%，大客户满意度4.8/5.0'\n      \u003c/li\u003e\n      \u003cli style=\"margin-bottom:8px; padding:10px; background-color:#f8f9fa; border-left:4px solid #009688; border-radius:0 4px 4px 0\"\u003e\n        ' 资产质量:资产负债率维持在38%左右，流动比率2.8，偿债能力良好'\n      \u003c/li\u003e\n    \u003c/list\u003e\n  \u003c/div\u003e\n\n  \u003cdiv style=\"margin-bottom:15px\"\u003e\n    \u003ch2 style=\"color:#3498db; border-bottom:1px solid #3498db; padding-bottom:4px; font-size:13px; margin-bottom:10px\"\u003e'信用评级雷达图'\u003c/h2\u003e\n    \u003cdiv style=\"display:flex; justify-content:space-between; margin-top:10px\"\u003e\n        \u003csvg\u003e${svg}\u003c/svg\u003e\n    \u003c/div\u003e\n    \u003cdiv style=\"display:flex; justify-content:space-between; margin-top:10px\"\u003e\n      \u003cdiv style=\"width:400px\"\u003e\n        \u003cdiv style=\"backgroundColor:#f8f9fa; padding:15px; borderRadius:4px; height:230px; overflow-y:auto\"\u003e\n          \u003ch3 style=\"color:#2c3e50; margin-top:0; fontSize:12; marginBottom:8px\"\u003e'评级指标说明'\u003c/h3\u003e\n          \u003clist style=\"list-style-type:none; padding-left:0; font-size:10px\"\u003e\n            \u003cli style=\"margin-bottom:6px; padding-left:16px; position:relative\"\u003e\n              \u003cspan style=\"position:absolute; left:0; width:8px; height:8px; background-color:#3498db; border-radius:50%; top:4px\"\u003e\u003c/span\u003e\n              \u003cspan style=\"font-weight:bold; color:#2c3e50\"\u003e'财务状况(90分):' \u003c/span\u003e\n              '营收稳定增长'\n            \u003c/li\u003e\n            \u003cli style=\"margin-bottom:6px; padding-left:16px; position:relative\"\u003e\n              \u003cspan style=\"position:absolute; left:0; width:8px; height:8px; background-color:#2ecc71; border-radius:50%; top:4px\"\u003e\u003c/span\u003e\n              \u003cspan style=\"font-weight:bold; color:#2c3e50\"\u003e'经营能力(95分):' \u003c/span\u003e\n             ' 客户留存率高'\n            \u003c/li\u003e\n            \u003cli style=\"margin-bottom:6px; padding-left:16px; position:relative\"\u003e\n              \u003cspan style=\"position:absolute; left:0; width:8px; height:8px; background-color:#e74c3c; border-radius:50%; top:4px\"\u003e\u003c/span\u003e\n              \u003cspan style=\"font-weight:bold; color:#2c3e50\"\u003e'偿债能力(85分):' \u003c/span\u003e\n              '负债率合理'\n            \u003c/li\u003e\n            \u003cli style=\"margin-bottom:6px; padding-left:16px; position:relative\"\u003e\n              \u003cspan style=\"position:absolute; left:0; width:8px; height:8px; background-color:#f39c12; border-radius:50%; top:4px\"\u003e\u003c/span\u003e\n              \u003cspan style=\"font-weight:bold; color:#2c3e50\"\u003e'发展潜力(92分):' \u003c/span\u003e\n              '研发投入增加'\n            \u003c/li\u003e\n          \u003c/list\u003e\n        \u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv style=\"margin-bottom:15px; background:linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%); padding:15px; border-radius:4px; border-left:4px solid #2196F3; position:relative\"\u003e\n    \u003ch2 style=\"color:#1565c0; margin-top:0; font-size:13px; margin-bottom:8px\"\u003e'综合评价'\u003c/h2\u003e\n    \u003cp style=\"line-height:1.5; text-align:justify; margin-bottom:8px; font-size:11px\"\u003e\n      '四川省泡海椒科技有限公司作为国家级高新技术企业和专精特新\"小巨人\"企业，在云计算和大数据领域表现出色。'\n      '公司财务状况健康，经营能力突出，技术创新能力强，具备良好的发展潜力。信用评级为AAA级，展望稳定。'\n    \u003c/p\u003e\n    \u003cdiv style=\"position:absolute; bottom:10px; right:15px; text-align:center\"\u003e\n      \u003cdiv style=\"font-size:8px; color:#d32f2f; margin-top:2px\"\u003e'认证通过'\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv style=\"text-align:center; margin-top:15px; padding-top:12px; border-top:1px solid #dee2e6; color:#6c757d; font-size:9px; position:relative\"\u003e\n    \u003cp\u003e'本报告依据公开信息和专业评估模型生成，仅供参考 | 报告生成时间: 2025年09月06日'\u003c/p\u003e\n    \u003cp\u003e'© 2023 企业信用评估中心 版权所有 | 认证编号: CE-2023-001'\u003c/p\u003e\n    \u003cdiv style=\"position:absolute; bottom:5px; right:10px; opacity:0.1\"\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\u003c/body\u003e\n\u003c/pdf\u003e\n```\n#### 定义一个内嵌的html 组件(html 变量)\n\u003cdiv style=\"marginBottom:15px\"\u003e\n    \u003ch2 style=\"color:#3498db;  fontSize:13; marginBottom:10px\"\u003e企业资质认证\u003c/h2\u003e\n    \u003cdiv style=\"display:flex; marginTop:12px; gap:8px\"\u003e\n      \u003cdiv style=\"width:20%; background:linear-gradient(135deg, #4CAF50 0%, #81C784 100%); color:white; padding:10px; border-radius:5px; text-align:center\"\u003e\n        \u003cdiv style=\"font-size:18px; font-weight:bold; margin-bottom:3px\"\u003eAAA\u003c/div\u003e\n        \u003cdiv style=\"font-size:10px\"\u003e信用等级\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv style=\"width:20%; background:linear-gradient(135deg, #FF9800 0%, #F57C00 100%); color:white; padding:10px; border-radius:5px; text-align:center\"\u003e\n        \u003cdiv style=\"font-size:18px; font-weight:bold; margin-bottom:3px\"\u003e高新\u003c/div\u003e\n        \u003cdiv style=\"font-size:10px\"\u003e高新技术企业\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv style=\"width:20%; background:linear-gradient(135deg, #1976D2 0%, #0D47A1 100%); color:white; padding:10px; border-radius:5px; text-align:center\"\u003e\n        \u003cdiv style=\"font-size:18px; font-weight:bold; margin-bottom:3px\"\u003e专精特新\u003c/div\u003e\n        \u003cdiv style=\"font-size:10px\"\u003e小巨人企业\u003c/div\u003e\n      \u003c/div\u003e\n      \u003cdiv style=\"width:20%; background:linear-gradient(135deg, #9C27B0 0%, #BA68C8 100%); color:white; padding:10px; border-radius:5px; text-align:center\"\u003e\n        \u003cdiv style=\"font-size:18px; font-weight:bold; margin-bottom:3px\"\u003e水电\u003c/div\u003e\n        \u003cdiv style=\"font-size:10px\"\u003e双软认证企业\u003c/div\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n#### 定义一个雷达图背景svg(也可以使用java 加载方式)\n```xml\n\u003csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"500\" height=\"450\" viewBox=\"0 0 500 450\"\u003e\n                \u003c!-- 雷达图背景 --\u003e\n                \u003cg transform=\"translate(250, 200)\"\u003e\n                    \u003c!-- 绘制5层同心六边形 --\u003e\n                    \u003cpolygon points=\"0,-150 129.9,-75 129.9,75 0,150 -129.9,75 -129.9,-75\" \n                             fill=\"none\" stroke=\"#e0e0e0\" stroke-width=\"1\"/\u003e\n                    \u003cpolygon points=\"0,-120 103.9,-60 103.9,60 0,120 -103.9,60 -103.9,-60\" \n                             fill=\"none\" stroke=\"#e0e0e0\" stroke-width=\"1\"/\u003e\n                    \u003cpolygon points=\"0,-90 77.9,-45 77.9,45 0,90 -77.9,45 -77.9,-45\" \n                             fill=\"none\" stroke=\"#e0e0e0\" stroke-width=\"1\"/\u003e\n                    \u003cpolygon points=\"0,-60 51.9,-30 51.9,30 0,60 -51.9,30 -51.9,-30\" \n                             fill=\"none\" stroke=\"#e0e0e0\" stroke-width=\"1\"/\u003e\n                    \u003cpolygon points=\"0,-30 25.9,-15 25.9,15 0,30 -25.9,15 -25.9,-15\" \n                             fill=\"none\" stroke=\"#e0e0e0\" stroke-width=\"1\"/\u003e\n\n                    \u003c!-- 坐标轴 --\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"0\" y2=\"-160\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"129.9\" y2=\"-75\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"129.9\" y2=\"75\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"0\" y2=\"160\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"-129.9\" y2=\"75\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \u003cline x1=\"0\" y1=\"0\" x2=\"-129.9\" y2=\"-75\" stroke=\"#95a5a6\" stroke-width=\"1.5\"/\u003e\n                    \n                    \u003c!-- 维度标签 --\u003e\n                    \u003ctext x=\"0\" y=\"-180\" text-anchor=\"middle\" font-size=\"12\" fill=\"#2c3e50\"\u003e偿债能力\u003c/text\u003e\n                    \u003ctext x=\"145\" y=\"-75\" text-anchor=\"start\" font-size=\"12\" fill=\"#2c3e50\"\u003e盈利能力\u003c/text\u003e\n                    \u003ctext x=\"145\" y=\"85\" text-anchor=\"start\" font-size=\"12\" fill=\"#2c3e50\"\u003e运营能力\u003c/text\u003e\n                    \u003ctext x=\"0\" y=\"190\" text-anchor=\"middle\" font-size=\"12\" fill=\"#2c3e50\"\u003e成长能力\u003c/text\u003e\n                    \u003ctext x=\"-145\" y=\"85\" text-anchor=\"end\" font-size=\"12\" fill=\"#2c3e50\"\u003e现金流\u003c/text\u003e\n                    \u003ctext x=\"-145\" y=\"-75\" text-anchor=\"end\" font-size=\"12\" fill=\"#2c3e50\"\u003e信用历史\u003c/text\u003e\n                    \n                    \u003c!-- 刻度标签 --\u003e\n                    \u003ctext x=\"5\" y=\"-150\" text-anchor=\"start\" font-size=\"10\" fill=\"#7f8c8d\"\u003e100\u003c/text\u003e\n                    \u003ctext x=\"5\" y=\"-120\" text-anchor=\"start\" font-size=\"10\" fill=\"#7f8c8d\"\u003e80\u003c/text\u003e\n                    \u003ctext x=\"5\" y=\"-90\" text-anchor=\"start\" font-size=\"10\" fill=\"#7f8c8d\"\u003e60\u003c/text\u003e\n                    \u003ctext x=\"5\" y=\"-60\" text-anchor=\"start\" font-size=\"10\" fill=\"#7f8c8d\"\u003e40\u003c/text\u003e\n                    \u003ctext x=\"5\" y=\"-30\" text-anchor=\"start\" font-size=\"10\" fill=\"#7f8c8d\"\u003e20\u003c/text\u003e\n                    \n                    \u003c!-- 当前企业数据 --\u003e\n                    \u003cpolygon points=\"0,-135 116.9,-67.5 103.9,60 0,120 -103.9,67.5 -116.9,-67.5\" \n                             fill=\"#3498db\" fill-opacity=\"0.2\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \n                    \u003c!-- 数据点 --\u003e\n                    \u003ccircle cx=\"0\" cy=\"-135\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \u003ccircle cx=\"116.9\" cy=\"-67.5\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \u003ccircle cx=\"103.9\" cy=\"60\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \u003ccircle cx=\"0\" cy=\"120\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \u003ccircle cx=\"-103.9\" cy=\"67.5\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \u003ccircle cx=\"-116.9\" cy=\"-67.5\" r=\"4\" fill=\"#ffffff\" stroke=\"#3498db\" stroke-width=\"2\"/\u003e\n                    \n                    \u003c!-- 数据值标签 --\u003e\n                    \u003ctext x=\"0\" y=\"-145\" text-anchor=\"middle\" font-size=\"10\" fill=\"#3498db\"\u003e90\u003c/text\u003e\n                    \u003ctext x=\"127\" y=\"-67.5\" text-anchor=\"start\" font-size=\"10\" fill=\"#3498db\"\u003e85\u003c/text\u003e\n                    \u003ctext x=\"114\" y=\"70\" text-anchor=\"start\" font-size=\"10\" fill=\"#3498db\"\u003e80\u003c/text\u003e\n                    \u003ctext x=\"0\" y=\"140\" text-anchor=\"middle\" font-size=\"10\" fill=\"#3498db\"\u003e75\u003c/text\u003e\n                    \u003ctext x=\"-114\" y=\"77\" text-anchor=\"end\" font-size=\"10\" fill=\"#3498db\"\u003e88\u003c/text\u003e\n                    \u003ctext x=\"-127\" y=\"-67.5\" text-anchor=\"end\" font-size=\"10\" fill=\"#3498db\"\u003e92\u003c/text\u003e\n                \u003c/g\u003e\n                \n                \u003c!-- 标题 --\u003e\n                \u003ctext x=\"250\" y=\"30\" text-anchor=\"middle\" font-size=\"16\" font-weight=\"bold\" fill=\"#2c3e50\"\u003e\n                    科技有限公司信用评级\n                \u003c/text\u003e\n                \n                \u003c!-- 评级说明 --\u003e\n                \u003ctext x=\"250\" y=\"380\" text-anchor=\"middle\" font-size=\"12\" fill=\"#2c3e50\"\u003e\n                    综合信用评分: 85/100 | 评级: AA\n                \u003c/text\u003e\n            \u003c/svg\u003e\n```\n#### pdf 渲染\n```java\nJPdfConfig config = new JPdfConfig();\nJTemplateConfig templateConfig = config.getTemplateConfig();\n        templateConfig.put(\"html\", html);\n        System.out.println(html);\n        config.setTemplateConfig(templateConfig);\nJReader fileReader = new JReSourceFileReader(\"report.txt\");\nJAdaptor adaptor = new JAdaptor(fileReader);\n\nJContext param = new JContext();\n param.put(\"svg\", svg);\nJQuickPdfXExecutor executor = new JQuickPdfXExecutor(param, config);\nexecutor.execute(adaptor.getRuleContent());\n \n```\n\n![Demo](./pay/demo.png)\n\n# **捐献 ☕**\n\n感谢您使用这个开源项目！它完全免费并将持续维护，但开发者确实需要您的支持。\n\n---\n\n## **如何支持我们**\n\n1. **请我喝杯咖啡**  \n   果这个项目为您节省了时间或金钱，请考虑通过小额捐赠支持我。\n\n2. **您的捐赠用途**\n\n- 维持项目运行的服务器成本.\n- 开发新功能以提供更多价值.\n- 优化文档以提升用户体验.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaohaijiao%2Fjquick-pdf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaohaijiao%2Fjquick-pdf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaohaijiao%2Fjquick-pdf/lists"}