前言¶
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 直连入口。
- 提供编程接口,包括
StyleLockedEditor、previewPage、editDocument、getExtract、openNativeDoc、drawPatchedPages、insertPages、parseMarkdownBlocks、removeSubheadings等方法。 - 支持路径白名单、浏览器渲染模式、模型路由、补丁颜色、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