
PaddleOCR 版面恢复实战指南将 PDF 与文档图片一键还原为 Word 与 Markdown【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR导读本文基于 PaddleOCR 的 PP-Structure 版面恢复Layout Recovery能力系统讲解如何将 PDF 或文档图片中原本的段落、标题、表格、图片等元素按原排版顺序完整地重建到 Worddocx文档中。文章覆盖标准 PDF 解析与图片格式 PDF 解析两种恢复路径的原理、环境安装、模型下载与命令行/Whl 包两种调用方式并结合仓库源码recovery_to_doc.py、predict_system.py、utility.py深入剖析版面恢复的底层实现。读完本文你将能够根据输入文档的格式选择最合适的恢复方案并独立完成中英文文档的版面恢复与 Markdown 导出。1. 什么是版面恢复版面恢复Layout Recovery / Recovery to doc的目标是将输入的图片、PDF 内容按照原文档的版式排列——段落不变、顺序不变——输出到 Word 文档等载体中。它不同于单纯的 OCR 文字提取而是要在还原文字内容的同时尽量还原标题层级、段落结构、表格、图片等版面要素使恢复后的文档在阅读体验上接近原始文档。PaddleOCR 提供了两种版面恢复方法可根据输入 PDF 的格式进行选择标准 PDF 解析输入须为标准 PDF基于 Python 的 pdf 转 word 库 pdf2docx 进行优化。该方法通过 PyMuPDF 获取页面元素然后利用规则解析章节、段落、表格等布局及样式最后通过 python-docx 将解析出的内容元素重建到 Word 文档中。图片格式 PDF 解析输入可为标准 PDF 或图片格式 PDF结合版面分析与表格识别技术对文档区域进行划分并分别处理从而更好地恢复图片、表格、标题等内容支持中英文 PDF 文档以及文档图片格式的输入文件。两种方法的输入格式与适用场景对比如下方法支持输入文件适用场景 / 存在问题标准 PDF 解析pdf优点非论文文档恢复效果更优、每一页内容恢复后仍在同一页缺点有些中文文档中的英文乱码、仍存在内容超出当前页面的情况、整页内容恢复为表格格式、部分图片恢复效果不佳图片格式 PDF 解析pdf、图片优点更适合论文文档正文内容的恢复、中英文文档 OCR 识别效果好缺点目前内容恢复基于规则内容排版效果间距、字体等待进一步提升、版面恢复效果依赖于版面分析效果从源码结构看两种方案的分流点位于 predict_system.py当同时满足recoveryTrue、use_pdf2docx_apiTrue且输入为 PDF 时直接走 pdf2docx 的Converter转换路径否则进入StructureSystem驱动的版面分析 OCR 表格识别管线。下图展示了通过标准 PDF 解析得到的版面恢复效果下图分别展示了通过 OCR 技术对英文文档和中文文档进行版面恢复的效果2. 环境安装2.1 安装 PaddlePaddlepython3 -m pip install --upgrade pip # 您的机器安装的是 CUDA9 或 CUDA10请运行以下命令安装 python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple # 您的机器是 CPU请运行以下命令安装 python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple更多需求请参照 PaddlePaddle 官方安装文档中的说明进行操作如 CUDA 版本、Python 版本、国内镜像等。2.2 安装 PaddleOCR1下载版面恢复源码# 推荐直接克隆本仓库代码 git clone https://gitcode.com/GitHub_Trending/pa/PaddleOCR # 如果因为网络问题无法 pull 成功也可选择码云上的托管可能有 3~5 天同步延时2安装 recovery 的 requirements版面恢复需要导出 docx 文件因此必须安装 Python 处理 Word 文档的 python-docx API同时处理 pdf 格式的输入文件需要安装 PyMuPDF API要求 Python 3.7。通过如下命令安装全部依赖python3 -m pip install -r ppstructure/recovery/requirements.txt该 requirements.txt 中固定声明了python-docxWord 文档生成、beautifulsoup4表格 HTML 解析、fonttools4.43.0与fire0.3.0四个核心依赖。使用 pdf2docx 库解析的方式恢复文档还需要安装优化后的 pdf2docx 版本wget https://paddleocr.bj.bcebos.com/whl/pdf2docx-0.0.0-py3-none-any.whl pip3 install pdf2docx-0.0.0-py3-none-any.whl说明pdf2docx 路径仅在“标准 PDF 解析”方案中使用若只使用图片格式 PDF 解析方案可跳过该安装步骤。3. 使用标准 PDF 解析进行版面恢复use_pdf2docx_api表示使用 PDF 解析的方式进行版面恢复可通过 whl 包的形式快速使用更多信息详见 quickstart。方式一Whl 包命令行# 安装 paddleocr推荐使用 2.6 版本 pip3 install paddleocr2.6 paddleocr --image_dirppstructure/docs/recovery/UnrealText.pdf --typestructure --recoverytrue --use_pdf2docx_apitrue方式二源码命令行python3 predict_system.py \ --image_dirppstructure/docs/recovery/UnrealText.pdf \ --recoveryTrue \ --use_pdf2docx_apiTrue \ --output../output/在源码实现中该分支对应 predict_system.py通过try_import(pdf2docx)动态导入pdf2docx.converter.Converter对输入的 PDF 逐页解析并调用cv.convert(docx_file)输出{img_name}_api.docx随后cv.close()释放资源。整个过程不依赖 OCR 与版面分析模型因此速度更快但恢复质量完全取决于 pdf2docx 对 PDF 内部结构字体、段落、表格的解析能力这也解释了原文档中列出的“英文乱码、内容超出页面、整页变表格”等局限。4. 使用图片格式 PDF 解析进行版面恢复该方案的核心思路是通过版面分析对图片/pdf 形式的文档进行区域划分定位其中的关键区域文字、表格、图片等记录每个区域的位置、类别、区域像素值信息然后对不同类型的区域分别处理文字区域直接进行 OCR 检测和识别在版面信息基础上增加 OCR 检测框坐标和文本内容信息表格区域进行表格识别记录表格 html 和文字信息图片区域直接保存原图。最后利用版面信息、OCR 检测与识别结果、表格信息以及保存的图片将测试文档恢复为 Word。从 predict_system.py 的StructureSystem.__call__可以看出完整的处理链路版面分析LayoutPredictor输出各区域 bbox 与类别 → 对表格区域调用TableSystem输出表格 HTML → 对公式区域调用公式识别模型输出 LaTeX → 其余区域通过_filter_text_res将整图 OCR 结果按版面 bbox 做相交过滤得到每个区域内的文本行随后 save_structure_res 将表格导出为 xlsx、将图片区域保存为 jpg最终在 recovery_to_doc.py 中完成 docx 重建。通过 Whl 包快速使用# 安装 paddleocr推荐使用 2.6 版本 pip3 install paddleocr2.6 # 中文测试图 paddleocr --image_dirppstructure/docs/table/1.png --typestructure --recoverytrue # 英文测试图 paddleocr --image_dirppstructure/docs/table/1.png --typestructure --recoverytrue --langen # pdf 测试文件 paddleocr --image_dirppstructure/docs/recovery/UnrealText.pdf --typestructure --recoverytrue --langen4.1 下载模型英文文档模型OCR 检测、识别 表格识别 版面分析cd PaddleOCR/ppstructure # 下载模型 mkdir inference cd inference # 下载英文超轻量 PP-OCRv3 检测模型并解压 wget https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar tar xf en_PP-OCRv3_det_infer.tar # 下载英文超轻量 PP-OCRv3 识别模型并解压 wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/en_PP-OCRv3_mobile_rec_infer.tar tar xf en_PP-OCRv3_mobile_rec_infer.tar # 下载英文表格识别模型并解压 wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/paddle3.0b2/en_ppstructure_mobile_v2.0_SLANet_infer.tar tar xf en_ppstructure_mobile_v2.0_SLANet_infer.tar # 下载英文版面分析模型 wget https://paddleocr.bj.bcebos.com/ppstructure/models/layout/picodet_lcnet_x1_0_fgd_layout_infer.tar tar xf picodet_lcnet_x1_0_fgd_layout_infer.tar cd ..中文文档模型在 PP-OCRv3 中英文超轻量文本检测和识别模型列表 中下载对应中文模型即可同时参考 4.2 节参数表中的字典替换说明。4.2 版面恢复使用下载的模型恢复给定文档的版面以英文模型为例python3 predict_system.py \ --image_dir./docs/table/1.png \ --det_model_dirinference/en_PP-OCRv3_det_infer \ --rec_model_dirinference/en_PP-OCRv3_mobile_rec_infer \ --rec_char_dict_path../ppocr/utils/en_dict.txt \ --table_model_dirinference/en_ppstructure_mobile_v2.0_SLANet_infer \ --table_char_dict_path../ppocr/utils/dict/table_structure_dict.txt \ --layout_model_dirinference/picodet_lcnet_x1_0_fgd_layout_infer \ --layout_dict_path../ppocr/utils/dict/layout_dict/layout_publaynet_dict.txt \ --vis_font_path../doc/fonts/simfang.ttf \ --recoveryTrue \ --output../output/运行完成后恢复版面的 docx 文档会保存到output字段指定的目录下。字段含义一览参数含义与取值说明image_dir测试文件可以是图片、图片目录、pdf 文件、pdf 文件目录det_model_dirOCR 检测模型路径rec_model_dirOCR 识别模型路径rec_char_dict_pathOCR 识别字典。若更换为中文模型需改为../ppocr/utils/ppocr_keys_v1.txt若使用自己数据集训练的模型则改为训练时使用的字典文件table_model_dir表格识别模型路径table_char_dict_path表格识别字典。若更换为中文模型不需要更换字典layout_model_dir版面分析模型路径layout_dict_path版面分析字典。若更换为中文模型需改为../ppocr/utils/dict/layout_dict/layout_cdla_dict.txtrecovery是否进行版面恢复默认 Falseoutput版面恢复结果保存路径相关参数在 utility.py 中以 argparse 形式定义--recovery默认False、--recovery_to_markdown默认False、--use_pdf2docx_api默认False此外还有--layout、--table、--ocr、--formula、--image_orientation等开关用于控制版面恢复管线中是否启用对应子模块。5. 版面恢复的底层实现原理5.1 阅读顺序单栏 / 双栏版式排序版面分析输出的区域本身是无序的恢复前必须先按阅读顺序排序。sorted_layout_boxes 实现了这一逻辑先按「y 坐标为主、x 坐标为辅」排序所有区域然后根据区域 bbox 相对页面宽度w的位置将区域划分为**左栏res_left、右栏res_right与通栏single**三类区域起点x0 w/4且终点x2 3w/4判定为左栏区域起点x0 w/4且终点x2 w/2判定为右栏其余情况判定为通栏此时先将左右栏结果依次并入最终序列再追加当前区域通过维护左右两栏各自的累积顺序保证双栏文档的阅读顺序先左栏后右栏正确。5.2 Word 文档重建convert_info_docxconvert_info_docx 将排序后的区域结果写入 docx核心要点包括全局样式正文默认字体为 Times New Roman、东亚字体为宋体w:eastAsia、字号 6.5pt分栏控制当版面从单栏切换到双栏或反之时通过doc.add_section(WD_SECTION.CONTINUOUS)插入连续分节符并直接操作w:cols节点将栏数设置为 1 或 2从而还原双栏论文版式按区域类型重建figure将版面分析裁剪出的图片区域{bbox}_{img_idx}.jpg居中插入双栏时缩小宽度为 2 英寸单栏为 5 英寸title调用doc.add_heading转为 Word 标题table通过HtmlToDocx见 table_process.py解析表格识别输出的 HTML 并重建为 Word 表格样式为TableGridequation公式区域含 LaTeX 结果跳过直接写入避免乱码其余文本区域逐行写入段落首行设置 0.25 英寸缩进字号 10pt体现段落语义输出命名最终保存为{img_name}_ocr.docx并打印日志docx save to ...。5.3 Markdown 导出convert_info_markdown除 Word 外PaddleOCR 还支持将恢复结果同步导出为 Markdown 文件--recovery_to_markdownTrue。实现位于 recovery_to_markdown.py表格直接输出表格识别得到的 HTML公式输出$${latex}$$数学公式块标题转换为#级 Markdown 标题图片输出居中的img标签正文段落合并通过 check_merge_method 根据文本 bbox 与首行文本框的横向距离判断段落分隔方式再调用convert_text_space_head段首缩进识别或convert_text_space_tail行尾是否满行识别把同一段落内的多行文本拼接为一段行与行之间用\n、段落之间用\n\n分隔特殊字符转义对*、、~、$等 Markdown 特殊字符自动加反斜杠转义避免渲染异常。对应命令行示例详见 quick_start.md# 版面恢复 转换为 markdown 文件英文 paddleocr --image_dirppstructure/docs/recovery/UnrealText.pdf --typestructure --recoverytrue --recovery_to_markdowntrue --langen # 公式识别 版面恢复 markdown中文公式输出 LaTeX paddleocr --image_dirppstructure/docs/recovery/UnrealText.pdf --typestructure --recoverytrue --formulatrue --recovery_to_markdowntrue --langch6. 更多关于 OCR检测模型的训练评估与推理请参考文本检测教程关于 OCR识别模型的训练评估与推理请参考文本识别教程关于版面分析模型的训练评估与推理请参考版面分析教程关于表格识别模型的训练评估与推理请参考表格识别教程PP-Structure 整体能力与 Whl 包调用方式可进一步阅读 quickstart。总结与选型建议场景推荐方案非论文类文档合同、报表、简历等希望保留分页与原生 PDF 元素标准 PDF 解析--use_pdf2docx_apitrue论文正文、扫描件、图片格式 PDF重视 OCR 识别质量图片格式 PDF 解析--recoverytrue中英文效果良好需要把恢复结果进一步喂给 LLM / 知识库做结构化处理叠加--recovery_to_markdowntrue导出 Markdown需要说明的是图片格式 PDF 解析方案的排版效果间距、字体等目前基于规则实现仍在持续优化中且整体恢复质量依赖版面分析的准确度标准 PDF 解析方案则受限于 pdf2docx 对部分中文文档的兼容性。实际使用中建议根据输入文档的类型标准 PDF 还是扫描/图片与恢复目标保真排版还是内容结构化灵活选择必要时对两类方案的结果做对比验证。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考