Communitygithub.com

Straits-AI/pdf-skill

以代理程式為本的原生 PDF 操作技能:透過單一 CLI 與結構化 API 完成檔案檢視、合併、分割、填寫表單、套用範本、浮水印、加密、壓縮、擷取與驗證。

pdf-skill 是什麼?

這項技能提供一個與代理程式(Agent)友善的指令列介面(CLI),將 PDF 操作提升到「文件意圖」的層次,而非低階的 PDF 指令。它支援完整的 PDF 生命週期管理:從最基本的檔案檢視(inspect)、結構性操作(合併、分割、頁面編輯),到進階功能如動態與靜態表單填寫、座標定位的文字/圖片/形狀疊加、浮水印、頁首頁尾與頁碼、AES 加密與權限控制、內容壓縮、文字與資產擷取,以及頁面轉換為圖片。核心強調「零錯誤工具選擇」:透過內建的 Inspector 自動區分可填寫表單(Acroform)與靜態版面,避免誤用指令;掃描頁面會明確標示其無文字圖層的限制;對於無法直接支援的功能(如 OCR、真正內容紅利、表格結構化萃取)則會明確回報差距並提供替代方案。安全性是最高原則:絕不嘗試破解密碼或繞過權限,密碼輸入優先使用環境變數以避免外洩,修改已簽署文件前會先警告使用者,且所有操作皆基於副本而非原始檔案。所有指令皆回傳結構化 JSON 結果,包含 ok 標誌、摘要、警告與詳細資料,代理程式可輕鬆解析與回應,適合整合到 Claude Code、Cursor 或 Codex 等開發工具中作為文件處理核心。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add Straits-AI/pdf-skill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

PDF 工具組

一套具備 Acrobat 等級功能的文件引擎,透過友善代理程式的 CLI 提供服務。將工作表達為文件意圖,而非低階的 PDF 指令。

執行時約定

內建的 CLI 是自足的(無需 npm install)。它需要 Node 20+ 以及外部二進位檔:qpdf 和 poppler-utils(pdfinfo、pdftotext、pdftoppm、pdffonts、pdfimages、pdfdetach)。Ghostscript (gs) 為選用,僅用於改善壓縮效果。

務必透過 Node 執行命令,可從任何工作目錄執行:

node <skill-dir>/cli/pdf.cjs <command> [options] --json

每次工作階段第一次使用時,請先驗證環境:

node <skill-dir>/cli/pdf.cjs doctor --json

如果缺少必要的二進位檔,請安裝它們(Debian/Ubuntu 使用 apt-get install qpdf poppler-utils,macOS 使用 brew install qpdf poppler),或告知使用者缺少什麼。請勿靜默地以其他工具替代。

黃金工作流程(每次處理 PDF 工作時請遵循)

  1. 檢視 — 修改前務必檢視:pdf inspect <file> --json。讀取 pages、encrypted、signed、formType、pageTypes.scanned 和 warnings。
  2. 分類 — 決定工作類型(結構性 / 表單 / 範本 / 疊加 / 安全性 / 壓縮 / 擷取 / 渲染)。對於不明確的意圖,使用 pdf plan <file> --intent "..." 取得結構化計劃與阻礙清單。
  3. 檢查限制 — 加密需要密碼;已簽署的文件會被編輯動作失效(請警告使用者);不支援 XFA 表單;掃描頁面沒有文字圖層(擷取與基於搜尋的操作會靜默地回傳空結果 — 請明確告知)。
  4. 執行 — 執行操作命令。
  5. 驗證 — 對每個修改過的檔案執行 pdf validate <output> --json。對於視覺敏感的工作(疊加、浮水印、範本),也請使用 pdf to-image 渲染並檢視結果。
  6. 回傳 — 交回輸出檔案、摘要、警告以及驗證結果。

讀取結果

每個命令都會回傳結構化結果(使用 --json):

{ "ok": true, "operation": "compress", "output": "...", "summary": "...",
  "warnings": ["..."], "data": { }, "manifest": { "operations": [], "engine": [] } }

請將 warnings 視為第一級輸出:將其呈現給使用者。當 ok 為 false 時,結束代碼為 1。

命令對應表

意圖命令
檢視文件inspect
從自然語言規劃plan --intent "..."
合併 / 分割 / 頁面手術merge、split、extract-pages、delete-pages、reorder、rotate
處理真實表單欄位form inspect、form fill、form clear、form flatten
填寫靜態(不可填寫)版面template inspect、template fill、template batch
在座標處加入內容add-text、add-image、add-shape
連續文字與編號header、footer、page-number
浮水印或戳章watermark、stamp
保護 / 解除保護encrypt、decrypt、permissions、sanitize
縮小檔案大小compress
取得文字或資產extract、extract-images、extract-attachments
將頁面渲染為圖片to-image
驗證輸出validate

完整的旗標與範例:請參閱 references/commands.md。範本 JSON schema 與批次產生:請參閱 references/templates.md。一個立即可試的範例位於 assets/examples/。

避免錯誤工具的判斷規則

  • 可填寫表單 vs. 靜態表單:如果 inspect 回報 formType: "acroform",請使用 pdf form fill。如果 formType: "none" 但頁面視覺上看起來像表單,那它就是靜態版面 — 請使用帶有座標對應的 pdf template fill。絕對不要對靜態 PDF 使用 form fill。
  • 掃描頁面:當 pageTypes.scanned > 0 時,文字擷取、文字搜尋和表單偵測並不適用於那些頁面。請說明需要 OCR;OCR 引擎在產品藍圖中,不在本次建置中。
  • 可重複的放置:對於一次性插入,使用 add-text/add-image 並從 to-image 渲染推斷座標。對於任何可重複的動作,請建立範本 JSON 並重複使用。
  • 書籤:結構性操作不會保留大綱/書籤;當來源檔案有書籤時請發出警告。

安全規則(不可協商)

  • 絕對不要嘗試破解密碼或繞過權限。decrypt 需要有效的密碼;失敗時請回報並停止。
  • 偏好透過環境變數傳遞機密:--password-env VAR 或 PDF_PASSWORD。絕對不要在日誌、摘要或清單中印出密碼值。
  • 修改已簽署的 PDF 會使其簽章失效。在執行前請警告使用者,並將警告包含在結果中。
  • 彩色矩形不等於紅利。 疊加(浮水印、白化、形狀)會讓底層文字仍可被擷取。真正的紅利是藍圖中的功能;如果被要求紅利,請直接告知,不要用黑色方塊假裝。
  • 在副本上操作。永遠不要就地修改使用者的原始檔案 — 一律寫入新的 --output 路徑。

座標與字型

  • CLI 疊加命令(add-text、add-image、add-shape)使用 PDF 點,左下角原點。
  • 範本 JSON 使用 公釐,左上角原點(設計師慣例)。
  • 內建字型(helvetica、times、courier,加上粗體/斜體)涵蓋拉丁文字以及常見標點符號。對於中日韓(CJK)或其他語言文字,請傳入 --font-file 搭配 TTF/OTF 字型 — 否則命令會以 FONT_REQUIRED 快速失敗,而非產生亂碼文字。

已知限制(藍圖範圍,刻意設計)

MVP 後續功能 — 當請求需要其中一項時,請明確指出差距,並提供最接近的支援替代方案:

  • OCR — 掃描頁面無法被搜尋或文字擷取。
  • 真正內容紅利 — 請參閱安全規則;不要用疊加假裝。
  • 表格/基於 schema 的擷取 — extract 回傳文字、Markdown 或逐頁 JSON;它不會將表格重建為 CSV,也不會根據 JSON schema 擷取。請提供 Markdown 文字擷取,並註明表格結構為近似值。
  • 註解 — 不支援螢光筆、便利貼或評論(建立或擷取)。
  • 圖片 → PDF / 其他格式 → PDF — 不支援 from-image 或文件轉換;僅接受 PDF 輸入。
  • 頁面插入/複製 — 沒有插入空白頁、插入 PDF 到 PDF 或複製頁面的命令(替代方案:extract-pages + merge)。
  • 圖片/標誌浮水印 — watermark 僅限文字;如需標誌,請在每頁使用 add-image。
  • 連結註解 — add-shape/add-text 會繪製內容,但無法建立可點擊的連結。
  • PDF 比較 — 沒有 compare 命令。
  • 無 Ghostscript 的圖片降取樣 — 壓縮會退回到無失真模式。

相關技能