dsh-pdf-edit:AI 修改 PDF 文字并保持原版式

前言

DSH 的插件生态把不同能力拆成可安装、可装载的模块。dsh-pdf-edit 是其中面向 PDF 文档的社区插件:用 AI 修改 PDF 文字,同时保持字体、字号、颜色、位置等排版样式不变。

它适合术语统一、错别字修正、合同/报告批量替换,以及把 Markdown/笔记作为新页插入指定页后的场景。DSH 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-pdf-edit 是 DeepSeek Harness 插件,维护者为 Whatsmore-nf,许可证为 MIT。

它解决的问题是:在 PDF 中修改文字时,避免字体、字号、颜色、位置等排版样式被改变。

核心功能

  • AI 只修改 PDF 文字,不改变字体、字号、颜色、位置等排版样式。
  • 当新文字比原来更长时,自动缩小字号或截断,以避免溢出版面。
  • 自动识别并嵌入系统中文字体:SimHei、微软雅黑、Noto Sans CJK。
  • 支持术语统一、错别字修正、合同/报告批量替换等场景。
  • 支持将 PDF 重新排版为学术论文双栏、手机阅读单栏、商务简报等版式。
  • 支持将 Markdown/笔记作为新页插入指定页后,且无需 LLM。
  • 提供 dsh-std Community v0.15 静态清单与标准 FacetModule 入口,同时保留 cordis 直连入口。
  • 提供编程接口,包括 StyleLockedEditorpreviewPageeditDocumentgetExtractopenNativeDocdrawPatchedPagesinsertPagesparseMarkdownBlocksremoveSubheadings 等方法。
  • 支持路径白名单、浏览器渲染模式、模型路由、补丁颜色、tid 严格模式、溢出模式等配置项。

安装与启用

下面的命令用于在 DSH web profile 中安装插件:

dsh plugin --profile web add dsh-pdf-edit@latest

也可以直接通过 npm 安装:

npm install dsh-pdf-edit

如果宿主支持 dsh-std,并准备在标准生态内装载,先安装 adapter,再安装插件:

dsh plugin --profile web add @dsh-std/adapter-dsh
dsh plugin --profile web add dsh-pdf-edit

安装后,插件由 DSH 宿主装载;工具调用仍受 allowedRoots 路径白名单限制。

典型用法

chatFn 用于 LLM 调用路径,original 表示待处理的 PDF 字节数据。下面示例展示核心接口。

打开文档并预览可编辑单元

先打开文档,再预览第 1 页的可编辑单元并获取 tid 列表:

const editor = await StyleLockedEditor.open(original, chatFn, {
  allowedRoots: ['/workspace']
});

const units = await editor.previewPage(1);

执行全文 AI 修改

让 AI 按指令修改全文:

const result = await editor.editDocument('修正错别字并统一术语');

手动删除指定文字

当 AI 返回空文本时,sanitizeText 会拒收空字符串,并按 missingTidsUseOriginal 配置回填原文。手动删除指定文字时,可以先取 extract,再修改目标 unit:

const extract = await editor.getExtract(1);
// 对目标 unit 执行:unit.text = ''

const { doc, resolver } = await editor.openNativeDoc();
await editor.drawPatchedPages(doc, resolver, [/* 对应页的修改单元 */]);

删除匹配的小标题文本

删除匹配的小标题文本:

await removeSubheadings(
  'doc.pdf',
  'doc-deleted.pdf',
  ['第一章 小标题', '附录 A'],
  chatFn
);

将内容作为新页插入

将标题、文本块、公式等内容作为新页插入原 PDF 指定页之后。该链路无需 LLM:

await insertPages(
  original,
  [
    {
      afterPage: 14,
      title: '补充一',
      blocks: parseMarkdownBlocks(mdText)
    }
  ]
);

适用场景与注意

  • 适合需要保留原版式、只做文字修改的 PDF 工作流。
  • 适合术语统一、错别字修正、合同/报告批量替换等场景。
  • 需要 Node >= 22
  • 兼容 dsh >= 0.1.1-rc.2 的 cordis 直连方式,并支持 dsh-std Community v0.15 宿主。
  • dsh-std 清单不声明 required 契约与权限,并与任意 std 宿主协商即兼容。
  • std 协议当前未向插件开放宿主 LLM 推理通道,因此 std 宿主下 AI 精修需使用 DeepSeek API Key 直连。
  • 工具调用受路径白名单 allowedRoots 限制,文件不存在或不在允许目录会失败。
  • sanitizeText 拒收空字符串,AI 返回空文本时会被拒收,并按 missingTidsUseOriginal 配置回填原文。
  • 本项目已宣布暂停维护较长时间,期间不会进行更新,恢复维护时间待定。
  • 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。许可证为 MIT。

参考

  • 目录页:https://www.skillhub.cn/plugins/Whatsmore-nf/dsh-pdf-edit
  • GitHub:https://github.com/Whatsmore-nf/dsh-pdf-edit
羽毛球分组比赛记分
小程序二维码

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

小夜