📈 GH Trending Explorer 🎲 Surprise me

← all repos

tanzhouhu / pdf-figure-vector

git clone https://github.com/tanzhouhu/pdf-figure-vector.git

Convert academic PDF figures into self-contained vector SVG and editable PPTX with pixel-level comparison and live preview.

—
stars, 24h
+62
stars, 7 days · #792
+62
stars, 30 days · #4,281
62
★ total · +62% this week
2
forks · 0 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguagePython
License—
Created2026-10-18 (2d ago)
Last pushtoday
Watchers1
OwnerUser

Links

README excerpt
# pdf-figure-vector
2026.10.20下午16点更新。
把学术 PDF 里的 Figure 原样复刻成**自包含矢量 SVG**和**可编辑 PPTX**;
也可以把独立 PNG/JPG/WebP 图片自动描摹成矢量 SVG 和原生自由形状 PPTX。
这个仓库同时是一个 Claude Code/Codex/豆包 Skill。作为
Codex Skill 放到 `~/.codex/skills/pdf-figure-vector/`,或作为 Claude Code Skill 放到
`~/.claude/skills/pdf-figure-vector/` 后,直接说「把这篇 PDF 的图 2 转成矢量图」即可,skill在运行过程中会自动跳转到浏览器展示绘制过程。
对于WorkBuddy或其他 agent,目前没有测试和适配,能否使用取决于它是否支持 SKILL.md;不过脚本本身是可用的,所以建议作为可调用 Python 工具箱使用。
演示视频展示的是分别用Codex/Claude code 接入 deepseek v4.1 flash 的效果,token消耗非常少,速度也比较快,因此具有极高的性价比。
建议在转换前查看一下pdf的插图是否是矢量图(把pdf放大看如果清晰度没变化就是矢量图),由于模型的输出质量取决于识别时的清晰度,因此矢量图的转换质量高于其它类型的图片,且消耗的token非常少。
最后希望大家觉得好用的话顺便点点star。大家也可以在评论区提一些意见,后续我将持续维护更新。
## 演示
点击观看抖音演示视频
## 特点
- **逐元素重建**:按 PDF 原始绘制顺序输出路径、文字、位图,z-order 正确
- **独立图片转矢量**:PNG/JPG/WebP/BMP/TIFF 用 VTracer 输出 SVG 和可编辑 PPTX
- **实时预览**:`--live` 边画边写 SVG,自动起本地服务并在 VS Code 集成浏览器(或默认浏览器)中打开
- **字体内嵌**:从 PDF 抽取字体子集,补齐 cmap / OS/2 后在 Chrome 与 SVG 中正常显示
- **位图处理**:带蒙版(SMask)、色键图标、转置图自动走高倍渲染裁切
- **位图自动识别**:`probe.py --bbox` 判断图是原生矢量还是位图;位图会提示改走手工重绘,不会把一张图片冒充成矢量
- **逐像素验收**:Chrome 截图与 PDF 渲染对比,输出 MAE 与左右对照图
- **PPTX 可编辑**:文字/形状/图片分别生成,自动校验是否为整张位图贴图
- **自动清理**:生成结束后删掉 `assets/`、`fonts/`、诊断 PNG、调参脚本等中间产物,只留成品
- **跨 agent**:Claude Code、Codex CLI、普通终端、SSH/headless 都能跑;预览按环境自动降级
## 环境要求
- Python 3.9+
- 依赖见 `requirements.txt`
- 独立图片描摹依赖 `vtracer`
- 对比功能需要 Google Chrome(Windows / macOS / Linux)
- VS Code 自动预览(可选):
 - Windows + PowerShell
 - VS Code 1.141+(`Open Integrated Browser`),或带 `Simple Browser` 的旧版
 - 无法自动操作 VS Code 时会退回默认浏览器,不影响使用
- 其它 agent / 环境:Codex CLI、普通终端、macOS/Linux 有 GUI → 默认浏览器;
 SSH / headless → 只打印 URL(可 `ssh -L 转发`)。也可用 `PDFVEC_PREVIEW=vscode|browser|none`
 强制指定,见下文「预览方式」
## 安装
 [code] 
作为 Skill 使用:
 [code] 
## 独立 PNG/JPG 转换
 [code] 
预设:
- `diagram`:框架图、流程图、论文示意图,保留彩色细节
- `logo`:黑白 logo、线稿、单色图标
- `photo`:照片近似描摹,路径较多
小字图片可使用 `--scale 2`;透明 PNG 使用 `--background transparent`。
默认会生成 `out/Figure1/_qa/_side.png` 和 `_diff.png` 做视觉对比。
输出文字会转成路径,不能在 SVG 中直接修改文字。
默认同时生成 `Figure1.pptx`。它由 PowerPoint 原生自由形状组成,不嵌入
整张位图。加 `--pptx-qa` 可渲染 PPTX 并生成 `_ppt_side.png` 与 `_ppt_diff.png`。
## 快速开始
所有命令假设当前目录是 skill 根目录(`scripts/` 的上一级)。
1. 探查页面,确认图在哪一页:
 [code] 
算出 bbox 后判断这张图是原生矢量还是位图:
 [code] 
提示「位图为主」时不要直接抽取(那只是把图片嵌进去),按 SKILL.md
「图本身是位图时:手工重绘成真矢量」处理。
2. 抽取并生成(`--live` 会边画边预览):
 [code] 
3. 与 PDF 逐像素比对:
 [code] 
4. 检查 PPTX 是否真的是矢量(正常会在生成后自动执行):
 [code] 
## 参数说明
`extract_figure.py`:
| 参数 | 说明 |
| --- | --- |
| `--pdf` | PDF 路径 |
| `--page` | 页索引,**0 起** |
| `--bbox` | 图像区域 `x0,y0,x1,y1`(PDF point) |
| `--out` | 输出目录 |
| `--name` | 输出文件名(不含扩展名) |
| `--width` | SVG 画布宽度,默认 1948 |
| `--live` | 边生成边写 SVG 并自动打开预览 |
| `--no-preview` | 配合 `--live`,只画不开预览窗口 |
| `--live-every` | 每 N 个元素写一次,默认 1 |
| `--no-pptx` | 只出 SVG |
| `--no-open` | 生成后不自动弹出 PowerPoint |
| `--no-clean` | 保留中间产物 |
`trace_image.py`:
| 参数 | 说明 |
| --- | --- |
| `--image` | PNG/JPG/JPEG/WebP/BMP/TIFF 输入 |
| `--out` | 输出目录 |
| `--name` | 输出 SVG 文件名(不含扩展名) |
| `--preset` | `diagram`、`logo` 或 `photo`,默认 `diagram` |
| `--scale` | 描摹前放大倍数;默认 `0