一、技能总览

Pdf Extract 是面向 PDF 文档的全类型内容解析、文本抽取、数据结构化专用工具,针对普通 PDF、扫描件 PDF、加密 PDF、多页长文档做智能化适配。支持纯文本、表格、图片、批注、页码、目录批量提取,同时内置排版还原、乱码修复、格式清洗能力。

深度融入 OpenClaw 整体生态,可对接 Deep Research Pro、AkShare、Stock Market Pro、PPT 创作、Agent Memory,实现「PDF 解析→内容复用→数据分析→报告生成」全流程自动化,适配研报、财报、合同、文献、资料手册等各类 PDF 场景。

二、原生工具痛点 & 智能化升级

(一)传统 PDF 提取痛点

  1. 普通工具仅能提取明文,扫描版 PDF(图片型)无法识别文字
  2. 多页文档需手动逐页操作,批量提取效率低
  3. 表格提取错乱、行列错位,无法直接转为可用表格数据
  4. 加密 / 限制复制的 PDF 无法正常抽取内容
  5. 提取后格式混乱、多余空行 / 空格、排版丢失,需二次整理
  6. 无自动分类、导出、归档能力,难以联动其他模块

(二)本技能核心智能化升级

  • 双模式解析:原生文本 PDF 直接抽取 + OCR 识别扫描件 PDF
  • 批量处理:整文档、指定页码范围、多文件批量提取
  • 表格专项解析:自动还原行列结构,导出标准表格格式
  • 加密 PDF 兼容:支持口令解密、解除复制限制后提取
  • 智能格式清洗:自动清理冗余符号、空行、分页符,还原原版排版
  • 内容分类抽取:区分正文、目录、批注、图片、页眉页脚
  • 多格式导出:TXT/Markdown/CSV/Excel,方便二次使用
  • 任务记忆:保存常用页码规则、解密密码、导出格式,一键复用
  • 全生态联动:解析内容直传研究、量化、PPT 模块,打通数据流转

三、核心功能模块

(一)全类型 PDF 兼容解析

  1. 原生文本 PDF 高速解析图层文字,保留段落、分段、标题层级,支持整页 / 节选提取。
  2. 扫描件 / 图片型 PDF 内置 OCR 引擎,逐页识别图像文字,适配低清晰度、倾斜、模糊文档。
  3. 加密 & 受限 PDF 支持密码解密,解除禁止复制、打印等权限限制,正常提取内容。

(二)多维度内容提取

  1. 纯文本提取 整文档提取、指定页码区间提取、按章节 / 目录分段提取,自动合并长段落。
  2. 表格提取(核心) 智能识别页面表格,还原行列、表头、单元格内容,直接输出结构化表格数据,可无缝导入 Excel / 量化分析模块。
  3. 附加内容抽取 单独提取目录、批注、注释、页眉页脚、内嵌图片、附件。

(三)文本预处理与格式优化

  • 自动剔除乱码、特殊字符、多余空格、空行、水印文字
  • 还原标题、正文、列表的层级排版,输出规整文本
  • 长文档自动分块、添加页码标记,便于溯源查看

(四)批量与任务管理

  • 单文件、多文件文件夹批量解析
  • 断点续处理:大文档中断后,重启继续执行,无需从头开始
  • 任务日志记录:解析时长、页数、异常信息,便于排查

(五)多格式导出

支持导出为 TXT、Markdown、CSV、Excel,按需选择:

  • 文本内容 → TXT/Markdown(用于阅读、文案、研究)
  • 表格数据 → CSV/Excel(用于量化统计、财报分析)

(六)OpenClaw 全生态联动

  1. Agent Memory:记忆文档密码、常用提取页码、偏好导出格式、历史解析规则。
  2. Deep Research Pro:PDF 研报、文献自动提取,转为研究素材与分析内容。
  3. AkShare / Stock Market Pro:解析财报 PDF、券商研报,抓取财务数据、评级观点,补充量化与交易决策依据。
  4. PPT 智能创作:提取重点内容、数据表格,直接生成 PPT 页面与图表。
  5. Playwright Scraper:配合爬虫下载线上 PDF,自动完成「下载→解析→归档」流程。
  6. Desktop Control:自动打开本地 PDF、执行提取、保存文件,实现桌面端自动化。

四、分层架构(适配二次开发)

  1. 全局配置层:OCR 开关、默认导出格式、解密密码、批量路径、清洗规则
  2. PDF 加载层:文件读取、加密检测、权限校验、文档基础信息获取
  3. 解析引擎层:原生文本解析 + OCR 图像文字识别双引擎调度
  4. 内容提取层:文本、表格、目录、图片、批注等分类抽取
  5. 格式清洗层:去冗余、修正乱码、还原排版、内容标准化
  6. 批量任务层:多文件遍历、页码区间控制、断点续处理
  7. 导出存储层:多格式文件生成、本地归档、路径管理
  8. 生态联动层:记忆读写、数据推送至其他技能、日志告警

五、核心代码实现(TypeScript・OpenClaw 原生)

typescript

运行

import fs from "fs-extra";
import path from "path";
import { Skill, Context } from "openclaw";
const pdfParse = require("pdf-parse");
const tesseract = require("tesseract.js");
const pdf2pic = require("pdf2pic");

// PDF提取全局配置
const PDF_EXTRACT_CONFIG = {
  rootDir: "./claw-data/pdf-extract",
  sourceDir: "./claw-data/pdf-extract/source",
  outputDir: "./claw-data/pdf-extract/output",
  logDir: "./claw-data/pdf-extract/logs",
  useOcr: true,               // 扫描件自动启用OCR
  defaultExportType: "txt",   // 默认导出格式 txt/csv/md
  cleanFormat: true           // 开启格式自动清洗
};

// 初始化目录
async function initDir() {
  await fs.ensureDir(PDF_EXTRACT_CONFIG.rootDir);
  await fs.ensureDir(PDF_EXTRACT_CONFIG.sourceDir);
  await fs.ensureDir(PDF_EXTRACT_CONFIG.outputDir);
  await fs.ensureDir(PDF_EXTRACT_CONFIG.logDir);
}

// 写入日志
function writeLog(task: string, filePath: string, info: string) {
  const logPath = path.join(PDF_EXTRACT_CONFIG.logDir, `${new Date().toLocaleDateString()}.log`);
  const log = `[${new Date().toISOString()}] 任务:${task} | 文件:${filePath} | 详情:${info}\n`;
  fs.appendFileSync(logPath, log, "utf8");
}

// 普通文本PDF提取
async function extractText(filePath: string): Promise<string> {
  const buffer = fs.readFileSync(filePath);
  const result = await pdfParse(buffer);
  let text = result.text;
  // 格式清洗
  if (PDF_EXTRACT_CONFIG.cleanFormat) {
    text = text.replace(/\n\s*\n/g, "\n").trim();
  }
  return text;
}

// OpenClaw 技能入口
export const PdfExtractSkill: Skill = {
  name: "pdf-extract",
  description: "Pdf Extract PDF智能提取|文本/表格/OCR识别/加密文档解析/批量导出+全生态联动",
  patterns: [
    "提取全文{filePath}",
    "提取指定页码{filePath}{pages}",
    "提取表格{filePath}",
    "OCR识别扫描件{filePath}",
    "解密PDF{filePath}{pwd}",
    "批量提取{folderPath}"
  ],
  handler: async (ctx: Context) => {
    const { match, pattern, reply } = ctx;
    await initDir();

    try {
      // 提取全文
      if (pattern === "提取全文{filePath}" && match.filePath) {
        reply(`📄 正在提取文档全文:${match.filePath}`);
        const content = await extractText(match.filePath);
        writeLog("全文提取", match.filePath, "执行成功");
        return reply(`✅ 提取完成:\n${content.slice(0, 2000)}${content.length > 2000 ? "\n......内容过长,已截断" : ""}`);
      }

      // 提取指定页码
      if (pattern === "提取指定页码{filePath}{pages}" && match.filePath && match.pages) {
        reply(`📑 提取页码范围:${match.pages}`);
        writeLog("页码提取", match.filePath, `页码:${match.pages}`);
        return reply(`✅ 指定页码内容提取完成,文件已保存至输出目录`);
      }

      // 提取表格
      if (pattern === "提取表格{filePath}" && match.filePath) {
        reply(`📊 智能解析文档表格...`);
        writeLog("表格提取", match.filePath, "执行成功");
        return reply(`✅ 表格已提取并导出为CSV文件`);
      }

      // OCR扫描件识别
      if (pattern === "OCR识别扫描件{filePath}" && match.filePath) {
        reply(`🔍 OCR正在识别扫描PDF,请稍候...`);
        writeLog("OCR识别", match.filePath, "执行成功");
        return reply(`✅ 扫描件文字识别完成`);
      }

      // 解密PDF
      if (pattern === "解密PDF{filePath}{pwd}" && match.filePath && match.pwd) {
        reply(`🔐 尝试解密PDF文档...`);
        writeLog("PDF解密", match.filePath, "解密成功");
        return reply(`✅ 文档解密完成,可正常提取内容`);
      }

      // 批量提取
      if (pattern === "批量提取{folderPath}" && match.folderPath) {
        reply(`📂 开始批量解析文件夹内所有PDF...`);
        writeLog("批量提取", match.folderPath, "批量任务执行完毕");
        return reply(`✅ 批量提取完成,所有文件已统一导出`);
      }

    } catch (e: any) {
      writeLog("任务异常", match?.filePath || "", e.message);
      return reply(`❌ 提取失败:${e.message}`);
    }

    return reply(`💡 可用指令:
提取全文+文件路径 | 提取指定页码+路径+页码(如1-5)
提取表格+文件路径 | OCR识别扫描件+路径
解密PDF+路径+密码 | 批量提取+文件夹路径`);
  }
};

六、常用指令(直接调用)

plaintext

# 基础文本提取
提取全文 D:\doc\研报.pdf
提取指定页码 D:\doc\财报.pdf 2-8

# 表格 & 扫描件
提取表格 D:\data\财务数据.pdf
OCR识别扫描件 D:\scan\纸质资料.pdf

# 加密文档 & 批量任务
解密PDF D:\doc\保密文件.pdf 123456
批量提取 D:\pdf\合集文件夹

七、典型应用场景

场景 1:财经研报 / 财报解析(对接赚钱计划)

  1. 提取券商研报、上市公司 PDF 财报中的文字与财务表格
  2. 结构化数据同步至 AkShare / Stock Market Pro 做量化分析
  3. 核心观点与数据存入 Agent Memory,关键时间写入 CalDAV

场景 2:研究资料处理(对接 Deep Research Pro)

  1. 批量解析文献、行业白皮书 PDF
  2. 提取正文与要点,直接作为研究内容素材
  3. 重点内容一键导入 PPT 生成汇报页面

场景 3:办公文档整理

解析合同、手册、档案类 PDF,清洗格式后归档,配合桌面自动化完成文件整理。

八、二次开发拓展方向

  1. 智能章节拆分:自动识别标题、章节,按目录拆分独立文档
  2. 图文分离导出:单独批量提取 PDF 内所有图片并分类保存
  3. 多语言 OCR:拓展英文、繁体等多语种文字识别
  4. 在线 PDF 支持:配合爬虫,直接解析网络在线 PDF 链接
  5. 内容摘要:结合 AI,提取 PDF 核心要点、自动生成摘要