前言¶
在 DeepSeek Harness(DSH)里让 agent 读 PDF,常见做法是接 pdfjs-dist:页数、元数据、文本层、整页 raster 都能做。但嘉立创 EDA / EasyEDA 导出的原理图 PDF 往往用 SimSun、SimHei 等 Type0 字体,且字体未内嵌、编码为 UniGB-UCS2-H;pdfjs 会出现 translateFont failed,渲染丢字,文本提取也不完整。857-dsh-pdf-patched 是维护者 RCYD857 发布的 DSH 插件,在 agent 侧暴露三个原生工具,并在「全内嵌字体」与「未内嵌 CJK」两类文档之间自动选引擎,使原理图类 PDF 的提取与 PNG 输出可用。
这是什么¶
857-dsh-pdf-patched(npm 包名 @RCYD857/dsh-pdf-patched,当前版本 0.1.1)面向 DeepSeek Harness 的 PDF 解析工具包。插件通过 cordis 入口注册 pdf_info、pdf_extract_text、pdf_render_page,并注入 agent 指引块;不依赖 @deepseek-ai/dsh-tools,参数与输出为普通 JSON Schema。运行时要求 Node ^22.19.0 || >=24.0.0,依赖 pdfjs-dist 4.10.38 与 @napi-rs/canvas 0.1.68,许可证 MIT。
核心功能¶
三个 agent 工具¶
| 工具 | 作用 |
|---|---|
pdf_info |
页数、各页尺寸(pt)、文档元数据、字体列表及每个字体的 embedded 标志 |
pdf_extract_text |
按页提取文本;可选 page、withPosition(行级 x/y 与字号) |
pdf_render_page |
将单页渲染为本地 PNG;可配置 scale、outDir;引擎自动选择 |
双引擎设计¶
- pdfjs engine:当文档中字体均为内嵌时使用,适用于常规 PDF。
- sysfont engine:内置内容流解析器,解码
BT/ET、Tf、Tm、Td、Tj、TJ等算子,将UniGB-UCS2-H/ UTF-16BE 映射为 Unicode,再通过系统字体(SimSun、SimHei、Microsoft YaHei 等)经@napi-rs/canvas绘制。
文本提取同样自动选型:内嵌字体走 pdfjs 文本层;未内嵌字体走内置解码器,以恢复 pdfjs 丢失的 CJK 文本。
实现要点(便于二次阅读源码)¶
lib/index.js:cordis 插件入口,注册三个工具并注入systemPrompt.section(order 160)。lib/pdf-core.js:自包含引擎(对象解析、字体扫描、带 fs 的 CMap/StandardFont 工厂、内置提取与 sysfont 渲染)。cordis.patch.yml:dsh.bundle.patch插入行;通过 profile 下 node_modules 软链接挂载,无需改 dsh 源码。
安装与启用¶
在 web profile 下从 GitHub 安装:
dsh plugin --profile web add github:RCYD857/857-dsh-pdf-patched
本地开发时可改用 checkout 路径:
dsh plugin --profile web add link:<path-to-repo>
安装后重启 DSH 或新开 session,三个工具与 agent 指引块即可用。
典型用法¶
README 中以嘉立创导出样例 SCH_SA-V11A.pdf 演示(路径按本机调整):
pdf_info("D:/Downloads/SCH_SA-V11A.pdf")
→ 3 pages, A3 landscape, jsPDF producer, 6 fonts (all non-embedded)
pdf_extract_text("D:/Downloads/SCH_SA-V11A.pdf", { page: 1 })
→ net names, pin numbers, and Chinese labels ("主控板", "嘉立创", …)
pdf_render_page("D:/Downloads/SCH_SA-V11A.pdf", { page: 1, scale: 2 })
→ D:/Downloads/SCH_SA-V11A-pages/page-1.png (2396×1698, engine: sysfont)
经过上面的步骤,agent 可先 pdf_info 判断字体是否内嵌,再按需提取网表标注或渲染整页供视觉理解。
适用场景与注意¶
适合谁: 需要在 DSH 中解析 PDF、尤其是 JLC EDA / EasyEDA 等未内嵌 CJK 字体的原理图或文档的开发者;标签含 pdf、schematic、tools 的同类场景也可参考。
局限(资料原文):
- 纯扫描/仅图像 PDF 无文本层,提取为空;渲染仍可作为普通图片输出。
- sysfont 假设 Type0 CID 码等于 Unicode 码点(UniGB-UCS2-H 导出成立);非常规 CID 字体会回退 pdfjs。
- 大文件会整份载入内存。
安全与权限: 插件在当前 dsh 进程权限下读本地路径、写 PNG;安装前请阅读 GitHub 仓库 源码与 MIT 许可证。DSH 社区插件目录 SkillHub 条目 为独立站点,与 DeepSeek / 幻方无官方从属关系;生态上 DSH 强调「一切皆插件」,本插件即其中 PDF 能力的一种实现。
结尾¶
857-dsh-pdf-patched 把 PDF 元数据、文本提取与单页 PNG 渲染收敛为三个 agent 工具,并用 pdfjs 与 sysfont 混合引擎补齐未内嵌 CJK 字体 PDF 的短板。需要接入时,使用上文安装命令并重启 session 即可。
- 目录页:https://www.skillhub.cn/plugins/RCYD857/857-dsh-pdf-patched
- GitHub:https://github.com/RCYD857/857-dsh-pdf-patched