# infographic-project **Repository Path**: aylerh/infographic-project ## Basic Information - **Project Name**: infographic-project - **Description**: 基于语义匹配的Infographic信息可视化;支持:饼图、流程图等等273种;支持:(1)文本转svg;(2)svg转可编辑pptx(svg2pptx);(3)svg转pdf;注:(1)引入了原svg2pptx-project - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-28 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Infographic Project(一体化信息图生成系统) 将**语义匹配 SVG 生成**与**SVG → 可编辑 PPTX 转换**融合在同一个服务中,只需一个端口即可完成从文字描述 → 精美信息图 → Office PPTX 的完整链路。 --- ## 页面样式 ### 主页 ![1](./svg-gen-project/images/1.png) ## 🚀 快速启动 ```bash # 在项目根目录执行,一键构建并启动 docker compose up -d --build ``` 启动完成后,访问: | 地址 | 说明 | | :--- | :--- | | **[http://localhost:8301](http://localhost:8301)** | 主操作界面 | | [http://localhost:8301/docs](http://localhost:8301/docs) | Swagger API 文档 | > 系统只有 **一个端口(8301)**,所有功能统一由 `infographic-svc` 提供。 --- ## ✨ 核心功能 ### 1. 语义匹配 输入一句话(如"公司组织架构树"),系统自动匹配最合适的 AntV Infographic 模板分类,支持 7 大类 273+ 套模板。 ### 2. 实时预览与编辑 - **基础语法(Raw)** 与 **快捷表格(Table)** 双模式,实时双向同步 - 内置 5 套精调配色方案:光谱 / 日落 / 深海 / 薄荷岩 / 鲜艳 ### 3. 高质量导出 | 按钮 | 输出 | 说明 | | :--- | :--- | :--- | | 📥 导出 PDF | 矢量 PDF | 基于 jsPDF + svg2pdf,无限缩放不失真 | | 📥 导出 SVG | 标准 SVG | 可在 Illustrator / Inkscape 二次编辑 | | 📥 导出 PPTX | 可编辑 PPTX | **文本在 PPT 中可直接修改**,矢量形状保留 | PPTX 转换采用 `SVG → EMF(Inkscape)→ python-pptx` 链路,矢量形状完整保留,文字以原生文本框覆盖,打开 PowerPoint 即可直接修改内容。 --- ## 🛠️ 最近修复的痛点 (Resolved Issues) - **PPTX 导出引擎重构与精度提升:** - **4 象限图导出错位**:修复了旧版本不支持 `transform=matrix/scale` 的问题,实现了多层级节点的仿射矩阵变换换算,精准映射坐标。 - **层级图文字丢失**:增强了隐藏元素的拦截规则(过滤 `display="none"` 等),修正了提取层级导致文字无法显示的问题。 - **Compare(对比图)与 Sequence(序列图)颜色失真**:彻底治愈了 Inkscape -> EMF 导出时不兼容 Alpha 透明度及 RGBA 的顽疾;通过在后台将半透明色(如 `rgba`、`#RRGGBBaa`)与白色背景混合折算成实心 Hex 颜色值并剔除不支持的高光阴影 `` 滤镜,百分百还原 Web 呈现配色。 - **Relation(关系图)画布冲出与文本换行**:根据图表纵横比(Aspect-Ratio)智能换算可用范围(关系图独享 0.8 极限缩放防止纵向冲出)。并严格遵从原始 `data-word-wrap` 规约,保证不需要换行的短标题与数据节点完全单行居中展示,不再被挤出或折断。 --- ## 📁 目录结构 ```text infographic-project/ ├── docker-compose.yml # 根目录一键启动(单服务单端口) ├── svg-gen-project/ # 一体化服务(Python/FastAPI) │ ├── main.py # 语义匹配 API + SVG→PPTX 转换 API │ ├── requirements.txt # Python 依赖 │ ├── Dockerfile # 含 Inkscape + 中文字体的两阶段构建 │ ├── static/ # 前端 HTML / JS │ └── docs/ # Swagger 文档(自动生成) ├── svg2pptx-project/ # 原独立转换服务(已被合并,仅作历史备份) └── 文档/ # 开发说明与优化记录 ``` --- ## ⚠️ 注意事项 - **Inkscape 构建体积**:Inkscape 依赖较大,首次 `docker compose build` 约需 3–5 分钟,后续增量构建很快。 - **中文字体**:容器内已内置 `fonts-wqy-zenhei`,PPTX 文本框默认使用 `Alibaba PuHuiTi`,如需更换字体请修改 `main.py` 中的 `run.font.name`。 - **uploads / outputs**:转换产生的临时文件通过 Docker 命名 volume 持久化,重启容器不会丢失已转换的文件。 --- ## 🔧 API 一览 | Method | Path | 说明 | | :----- | :--- | :--- | | `POST` | `/api/v1/match` | 语义匹配最佳模板 | | `GET` | `/api/v1/keywords` | 获取全量关键词库 | | `POST` | `/api/v1/keywords` | 覆盖更新关键词库 | | `POST` | `/convert` | 上传 SVG → 返回 pptx_id | | `GET` | `/download/{pptx_id}` | 按 ID 下载 PPTX 文件 |