关于 pdf-tools
面向开发者的 PDF 工程技能,覆盖提取、生成、修改、表单处理和文档安全。它按任务梳理以 JavaScript 为主的库,以及适用于专门工作流的 Python 和命令行工具。
主要功能
- 01提取 PDF 文本和表格
- 02从 HTML 生成 PDF
- 03修改、合并和拆分 PDF
- 04填写交互式与静态表单
- 05加密、修复和涂黑 PDF
- 06支持签名与归档合规检查
适用场景
- 01从复杂 PDF 提取结构化数据
- 02从 HTML 或 React 生成 PDF
- 03填写表单并编辑现有文档
- 04为安全存储或归档准备 PDF
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill pdf-tools安装后在 Claude Code 中输入/pdf-tools确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai-extraction-patterns.mdbatch-and-accessibility.mdform-filling.mdhigh-fidelity-generation.mdlegacy-utilities.md详细介绍
PDF 工具
涵盖提取、生成、修改、填写表单和安全保护的 PDF 全生命周期工程。优先采用 JavaScript 优先的解决方案(pdf-lib、unpdf、Puppeteer),并使用 Python/CLI 工具处理高级场景。
适用场景:从 PDF 中提取结构化数据、根据 HTML/React 生成像素级精准的 PDF、修改现有 PDF、填写表单(可填写或不可填写),或通过加密保护文档。
不适用场景:处理简单的文本文件、脱离 PDF 场景单独处理图像,或更适合用文字处理软件完成的任务。
快速参考
| 任务 | 工具 | 要点 |
|---|---|---|
| 根据 HTML 生成 PDF | Puppeteer / Playwright | page.pdf();使用 networkidle0(Puppeteer)或 networkidle(Playwright) |
| 提取文本(轻量级) | unpdf | 兼容边缘环境/无服务器环境 |
| 提取表格(AI) | 视觉模型 + Zod 架构 | 支持多列和合并单元格 |
| 提取表格(非 AI) | pdfplumber(Python) | 精确检测单元格边界 |
| 修改、合并、拆分 | pdf-lib(或 @pdfme/pdf-lib) | 在 JS 中进行字节级 PDF 操作 |
| 填写可填写表单 | pdf-lib(或 @pdfme/pdf-lib) | 写入前检查 AcroForm 字段 |
| 填写不可填写表单 | Python 标注脚本 | 视觉分析 + 边界框标注 |
| 加密 PDF | qpdf | AES-256:qpdf --encrypt user owner 256 -- |
| 修复损坏的 PDF | qpdf | qpdf input.pdf --replace-input |
| 快速提取文本(CLI) | poppler-utils | pdftotext -layout input.pdf - |
| 合并数千个文件 | pypdf(Python) | 比无头浏览器更轻量 |
| 批量队列处理 | BullMQ + unpdf | 基于 Redis,支持重试、并发和进度跟踪 |
| 符合 PDF/A 归档规范 | ghostscript + verapdf | 使用 gs -dPDFA=2 转换;使用 verapdf 验证 |
| 带标签的 PDF(无障碍) | Puppeteer | tagged: true 将 HTML 语义映射为 PDF 结构标签 |
| 数字签名 | @signpdf/* | 使用 P12 证书进行 PKCS#7 签名 |
| PDF 比较 | unpdf + diff / pixelmatch | 对不同版本进行文本差异或像素级视觉差异比较 |
| 安全涂黑 | pymupdf (fitz) | apply_redactions() 会移除内容字节,而不只是添加视觉覆盖层 |
常见错误
| 错误 | 正确做法 |
|---|---|
| 使用画布绘图命令生成 PDF | 使用 Puppeteer/Playwright 和 HTML/CSS 模板 |
| 在边缘/无服务器环境中运行 Puppeteer | 边缘环境使用 unpdf;Puppeteer 需要完整的 Node.js |
| 使用基础文本解析器提取复杂版面 | 对多栏文本使用 AI 辅助 OCR 或 pdfplumber |
| 在公共存储中存储未加密的含有个人身份信息的 PDF | 存储前通过 qpdf 应用 AES-256 加密 |
依赖 window.print() 在服务器端生成 PDF | 使用无头浏览器 API(page.pdf())以获得确定性输出 |
| 使用 pypdf 提取复杂版面 | 对多栏或重叠文本使用 pdfplumber 或 AI OCR |
| 在容器化环境中跳过字体嵌入 | 使用 Puppeteer 嵌入 Google Fonts 或 WOFF2 文件 |
| 写入扁平化 PDF 表单字段 | 写入前使用 pdf-lib 检查 AcroForm 字段 |
使用不再维护的 pdf-lib 处理加密 PDF | 使用添加了加密 PDF 支持的分支 @cantoo/pdf-lib |
委派
- 检查 PDF 结构并诊断提取问题:使用
ExploreAgent 检查 AcroForm 字段、编码和元数据 - 构建端到端文档处理管道:使用
TaskAgent 实现提取、转换和生成工作流 - 为新系统设计 PDF 架构:使用
PlanAgent 选择工具并规划提取、生成或修改策略
参考资料
评论
支持 Markdown