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

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

小夜