断网批量提取 PDF 正文,扫描件与电子文档结果导出 Word、HTML、Markdown

大家好,这里是离线办公智能体广场。最近我们很有激情地研究了一个技术:如何把 PDF 里的正文完整提取出来,变成可编辑、可复用的文档。

今天就把这套方案和教程做个总结。它可以在断网环境下,批量处理一批 PDF——无论是扫描件、截图转成的 PDF,还是自带文字层的电子文档——把正文识别出来,并按你的需要导出为 Markdown、HTML 或 Word。表格内容也能一并保留,方便后续整理、检索和二次编辑。

 

一、需求分析

我准备了一个扫描版的PDF和一个可编辑版的PDF ,截图如下:

image

 

第二个PDF:

image

 

需要将他们都转成 Word,HTML 或者Markdown。 下面是我转成Word的结果图:

image

 

第二个Word:

image

 

文字版就不用说了, 我案例中的扫描版其实字体是不清晰的,但是转换出来的还是效果很不错的。然后表格那些也都保留了。 

 

二、实现方案一:小白上手

打开鲸闲办公智能体广场,找到 “PDF 内容提取”,如图:
注意,可断网使用!!! 

image

 

获取: 宫中&浩气: “老罗软件”。 然后将所有的 PDF进行输入,如图:

 

image

 

这些参数都可以根据自己的需求默认即可。 下面我简单说明一下重要的参数的含义:

  • 识别页范围: 指定哪些页参与识别。
  • 输出格式:支持Word,HTML,MarkDown。
  • 文字来源:有扫描版时,选OCR。 OCR类慢一点,需要模型的支持。文字类型就很快。

 

执行时,可以是网络断开的环境,但是第一次执行会自动下载OCR模型到本地(需要网络),以后使用就无需下载和联网了。 

 

三、实现方案二:Python脚本

 用 Python + Paddle 做 PDF 批量正文提取,对经常要处理扫描档案、论文资料、合同附件、内部文档的人来说,非常实用。

它适合这样的场景:手里有一批 PDF,需要把正文完整识别出来,再导出成 Markdown、HTML 或 Word,方便后续编辑、检索、归档和二次整理。扫描件、截图转成的 PDF 走 OCR;自带文字层的电子 PDF 也可以直接读文本层,速度更快。

优势:

  • 可批量处理大量 PDF,适合成批资料转写
  • 对扫描件、拍照件、截图 PDF 更友好,不依赖原始文本层
  • 支持 OCR 识别和文本层提取两种模式,流程统一
  • 可保留表格结构,导出后比纯 TXT 更易读
  • 本地运行,文件不出本机,适合内部材料和敏感文件
  • 可按需导出 Markdown / HTML / Word,方便接入不同工作流

劣势:

  • 需要一定 Python 基础,首次运行要安装依赖并下载模型
  • 扫描模糊、倾斜严重、版式复杂的 PDF,识别效果会受影响
  • 多栏排版、页眉页脚、图文混排场景,往往还需要人工校对
  • 大批量高清 PDF 处理耗时较长,对 CPU / 内存有一定压力
  • 文本层提取仅适用于「可选中复制文字」的电子 PDF,扫描件无效

下面是一个简单的 Paddle 实现示例:批量读取目录下的 PDF,识别正文内容,并按页导出为 Markdown;如需 HTML / Word,可在此基础上继续转换。

 
import os
from pathlib import Path
from paddlex import create_pipeline
# 输入目录,可包含多个子目录
input_root = r"path\to\your\pdfs"
# 输出目录
output_root = r"path\to\your\output"
Path(output_root).mkdir(parents=True, exist_ok=True)
# 仅处理 PDF
SUPPORTED_EXT = {".pdf"}
# 创建文档解析流水线
# 不同 PaddleX 版本 API 可能略有差异,实际以当前版本文档为准
pipeline = create_pipeline(
    pipeline="PP-StructureV3",
    use_table_recognition=True,      # 保留表格
    use_seal_recognition=False,      # 不识别印章
    use_formula_recognition=False,   # 不识别公式
)
def process_file(file_path: Path):
    ext = file_path.suffix.lower()
    if ext not in SUPPORTED_EXT:
        print(f"跳过不支持的文件:{file_path}")
        return
    print(f"识别中:{file_path}")
    # PDF 会按页处理
    results = pipeline.predict(str(file_path))
    # 每个 PDF 单独建一个输出目录
    file_output_dir = Path(output_root) / file_path.stem
    file_output_dir.mkdir(parents=True, exist_ok=True)
    for page_index, res in enumerate(results, start=1):
        page_dir = file_output_dir / f"page_{page_index:03d}"
        page_dir.mkdir(parents=True, exist_ok=True)
        # 导出 Markdown;不同版本也可能支持 save_to_html / save_to_word
        res.save_to_markdown(save_path=str(page_dir))
    print(f"完成:{file_path} -> {file_output_dir}")
def walk_files(root: Path):
    for path in root.rglob("*"):
        if path.is_file():
            process_file(path)
if __name__ == "__main__":
    walk_files(Path(input_root))
    print(f"全部处理完成,结果目录:{output_root}")

 

如果 PDF 本身是可选中文字的电子文档,也可以先用文本层直接提取,速度更快:

import fitz  # PyMuPDF
def extract_text_layer(pdf_path: str, output_md: str):
    doc = fitz.open(pdf_path)
    parts = []
    for page in doc:
        parts.append(page.get_text("text"))
    Path(output_md).write_text("\n\n".join(parts), encoding="utf-8")

 

四、总结

PDF 正文批量转写已经能直接用于日常:离线工具同样适合大批量处理,拖入一批 PDF 即可导出 Markdown、HTML 或 Word,本地运行、不改源文件;只有需要自定义识别规则或对接内部流程时,再考虑脚本方案。扫描模糊、版式复杂的结果建议当初稿,关键内容入库前核对一遍即可。

 

posted @ 2026-07-06 22:35  qq3993387644  阅读(23)  评论(0)    收藏  举报