857-dsh-pdf-patched:为 DSH 提供 PDF 解析与未内嵌 CJK 字体渲染

前言

在 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜