断网批量提取 PDF 正文,扫描件与电子文档结果导出 Word、HTML、Markdown
大家好,这里是离线办公智能体广场。最近我们很有激情地研究了一个技术:如何把 PDF 里的正文完整提取出来,变成可编辑、可复用的文档。
今天就把这套方案和教程做个总结。它可以在断网环境下,批量处理一批 PDF——无论是扫描件、截图转成的 PDF,还是自带文字层的电子文档——把正文识别出来,并按你的需要导出为 Markdown、HTML 或 Word。表格内容也能一并保留,方便后续整理、检索和二次编辑。
一、需求分析
我准备了一个扫描版的PDF和一个可编辑版的PDF ,截图如下:

第二个PDF:

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

第二个Word:

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

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

这些参数都可以根据自己的需求默认即可。 下面我简单说明一下重要的参数的含义:
- 识别页范围: 指定哪些页参与识别。
- 输出格式:支持Word,HTML,MarkDown。
- 文字来源:有扫描版时,选OCR。 OCR类慢一点,需要模型的支持。文字类型就很快。
执行时,可以是网络断开的环境,但是第一次执行会自动下载OCR模型到本地(需要网络),以后使用就无需下载和联网了。
三、实现方案二:Python脚本
它适合这样的场景:手里有一批 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 本身是可选中文字的电子文档,也可以先用文本层直接提取,速度更快:
四、总结
PDF 正文批量转写已经能直接用于日常:离线工具同样适合大批量处理,拖入一批 PDF 即可导出 Markdown、HTML 或 Word,本地运行、不改源文件;只有需要自定义识别规则或对接内部流程时,再考虑脚本方案。扫描模糊、版式复杂的结果建议当初稿,关键内容入库前核对一遍即可。

浙公网安备 33010602011771号