PaddleOCR 版面恢复(Layout Recovery)实战指南:PDF/图片转 Word 与 Markdown 的完整方案 📅 发布时间:2026/9/19 20:04:02 👁 浏览次数: PaddleOCR 版面恢复Layout Recovery实战指南PDF/图片转 Word 与 Markdown 的完整方案【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR版面恢复Layout Recovery是 PaddleOCR PP-Structure 体系中面向文档还原的核心能力它能把输入的 PDF 或文档图片中的文字、表格、图片、标题等内容在保持原有段落结构、阅读顺序和排版布局不变的前提下重建输出为可编辑的 Worddocx文档或 Markdown 文件。本文以 ppstructure/recovery/README_ch.md 为骨架结合 predict_system.py、recovery_to_doc.py 等源码实现系统讲解两种版面恢复方法的原理、安装配置、模型下载、命令行调用与关键参数并深入到 docx / Markdown 生成器的底层实现细节帮助读者从能跑通命令进阶到理解恢复流程为何如此设计。1. 版面恢复简介版面恢复的目标非常直观将输入的图片、PDF 内容仍然像原文档那样排列着段落不变、顺序不变地输出到 Word 文档等载体中。它区别于普通 OCR 之处在于不仅识别文字还保留文档的版面语义——标题层级、段落分块、双栏布局、表格结构、图片位置等都被完整还原。PaddleOCR 提供了 2 种版面恢复方法可根据输入 PDF 的格式进行选择标准 PDF 解析输入须为标准 PDF基于 Python 的 pdf 转 word 库pdf2docx进行优化。该方法通过 PyMuPDF 获取页面元素然后利用规则解析章节、段落、表格等布局及样式最后通过python-docx将解析出的内容元素重建到 Word 文档中。图片格式 PDF 解析输入可为标准 PDF 或图片格式 PDF结合版面分析、表格识别技术从而更好地恢复图片、表格、标题等内容支持中、英文 PDF 文档、文档图片格式的输入文件。两种方法的输入格式、适用场景对比如下方法支持输入文件适用场景/存在问题标准 PDF 解析pdf优点非论文文档恢复效果更优、每一页内容恢复后仍在同一页缺点有些中文文档中的英文乱码、仍存在内容超出当前页面的情况、整页内容恢复为表格格式、部分图片恢复效果不佳图片格式 PDF 解析pdf、图片优点更适合论文文档正文内容的恢复、中英文文档 OCR 识别效果好缺点目前内容恢复基于规则内容排版效果间距、字体等待进一步提升、版面恢复效果依赖于版面分析效果从仓库现状看版面恢复模块还提供了Markdown 导出能力--recovery_to_markdown参数详见 recovery_to_markdown.py可在恢复 docx 的同时输出*_ocr.md文件方便接入文档知识库、RAG 等下游应用。2. 安装2.1 安装 PaddlePaddlepython3 -m pip install --upgrade pip # 您的机器安装的是 CUDA9 或 CUDA10请运行以下命令安装 GPU 版本 python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple # 您的机器是 CPU请运行以下命令安装 CPU 版本 python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple更多安装需求请参照 PaddlePaddle 官方安装文档中的说明进行操作根据操作系统、Python 版本、CUDA 版本选择对应的安装命令。2.2 安装 PaddleOCR1下载版面恢复源码git clone https://github.com/PaddlePaddle/PaddleOCR进入仓库目录后后续所有命令均在该目录下执行。2安装 recovery 的requirements版面恢复最终导出为 docx 文件因此需要安装 Python 处理 Word 文档的python-docxAPI同时处理 pdf 格式的输入文件需要安装 PyMuPDF API要求 Python 3.7。通过如下命令安装全部库python3 -m pip install -r ppstructure/recovery/requirements.txt从 ppstructure/recovery/requirements.txt 可以看到该模块依赖的核心库为python-docx创建与写入 Word 文档beautifulsoup4解析表格识别返回的 HTML 结构用于重建 Word 表格fonttools4.43.0字体处理fire0.3.0命令行解析辅助使用 pdf2docx 库解析的方式恢复文档需要额外安装优化的 pdf2docxPaddleOCR 团队基于开源 pdf2docx 优化后的 whl 包wget https://paddleocr.bj.bcebos.com/whl/pdf2docx-0.0.0-py3-none-any.whl pip3 install pdf2docx-0.0.0-py3-none-any.whl3. 使用标准 PDF 解析进行版面恢复use_pdf2docx_api表示使用 PDF 解析的方式进行版面恢复通过 whl 包的形式方便快速使用代码如下# 安装 paddleocr推荐使用 2.6 版本 pip3 install paddleocr2.6 paddleocr --image_dirppstructure/docs/recovery/UnrealText.pdf --typestructure --recoverytrue --use_pdf2docx_apitrue通过命令行的方式在 PaddleOCR 仓库根目录执行python3 ppstructure/predict_system.py \ --image_dirppstructure/docs/recovery/UnrealText.pdf \ --recoveryTrue \ --use_pdf2docx_apiTrue \ --output../output/从 predict_system.py 的源码可以看到当args.recovery and args.use_pdf2docx_api and flag_pdf同时满足时程序会走pdf2docx的快捷通道try_import(pdf2docx) from pdf2docx.converter import Converter os.makedirs(args.output, exist_okTrue) docx_file os.path.join(args.output, {}_api.docx.format(img_name)) cv Converter(image_file) cv.convert(docx_file) cv.close()即直接调用pdf2docx.Converter.convert()完成 PDF 到 docx 的转换输出文件命名为{文件名}_api.docx。这种方式不经过版面分析、OCR 等模型推理速度最快但只适用于标准文本型PDF扫描版、图片格式 PDF 没有文本层无法被该方法解析应使用第 4 节的图片格式 PDF 解析方法。4. 使用图片格式 PDF 解析进行版面恢复图片格式 PDF 解析是版面恢复的完全体方案。其整体流程为通过版面分析对图片 / pdf 形式的文档进行区域划分定位其中的关键区域如文字、表格、图片等记录每个区域的位置、类别、区域像素值信息然后对不同的区域分别处理文字区域直接进行 OCR 检测和识别在之前信息基础上增加 OCR 检测框坐标和文本内容信息表格区域进行表格识别记录表格 HTML 和文字信息图片区域直接保存为图片文件。最后通过版面信息、OCR 检测和识别结果、表格信息、保存的图片对测试图片进行整体恢复重建出 docx / Markdown 文档。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 下载模型图片格式 PDF 解析依赖三类模型OCR 检测模型、OCR 识别模型、表格识别模型、版面分析模型。如果输入为英文文档类型下载 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://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_infer.tar tar xf en_PP-OCRv3_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 ..如果输入为中文文档类型在 PaddleOCR 模型列表中下载对应的中文模型即可PP-OCRv3 中英文超轻量文本检测和识别模型、表格识别模型、版面分析模型。4.2 版面恢复使用下载的模型恢复给定文档的版面以英文模型为例在ppstructure目录下执行如下命令python3 predict_system.py \ --image_dir./docs/table/1.png \ --det_model_dirinference/en_PP-OCRv3_det_infer \ --rec_model_dirinference/en_PP-OCRv3_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字段指定的目录下文件名为{原文件名}_ocr.docx。字段含义参数含义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版面恢复结果保存路径4.3 与版面恢复相关的其他参数在 ppstructure/utility.py 中除上述字段外还定义了一批与恢复流程联动的参数合理组合可以覆盖更多业务场景--recovery_to_markdown默认 False是否在生成 docx 的同时输出 Markdown 文件--layout默认 True是否启用版面分析。若关闭则整张图会被当作一个 table 区域处理--table默认 True表格区域是否使用表格识别模型--formula默认 False是否启用公式识别LaTeXOCR 等算法启用后版面中的公式区域会输出 LaTeX 公式可被recovery_to_markdown写为$$...$$形式--ocr默认 True非表格区域是否使用 OCR 识别--layout_score_threshold默认 0.5、--layout_nms_threshold默认 0.5版面分析区域的置信度阈值与 NMS 阈值--image_orientation默认 False是否启用图像方向识别对于旋转扫描件可以自动纠偏--invert、--binarize输入图像预处理开关反色、二值化。5. 恢复流程的源码级拆解了解了命令用法之后再看 predict_system.py 与 recovery_to_doc.py 的源码就能清楚一份 docx 是如何从文档图片一步步重建出来的。5.1 版面区域解析与 OCR 结果聚合在StructureSystem.__call__中predict_system.py每个版面区域会按照其labeltable / equation / 其他分流处理table 区域交给TableSystem做表格结构识别得到 HTML 与单元格文字equation 区域交给公式识别模型得到 LaTeX其余区域text / title / figure 等通过_filter_text_res把整图 OCR 得到的文本行与版面区域 bbox 做交集判断_has_intersection只保留落在该区域内的文本行从而保证文字归属正确、顺序不乱。随后main()中predict_system.py调用sorted_layout_boxes对全部区域按从上到下、从左到右排序再调用convert_info_docx生成 Word 文档若开启了--recovery_to_markdown还会调用convert_info_markdown生成 Markdown。5.2 双栏/单栏版面识别sorted_layout_boxesrecovery_to_doc.py 中的sorted_layout_boxes是版面恢复保序的关键。它以页面宽度w为基准通过区域 bbox 与w/4、w/2、3w/4的比较将区域划分为**左栏left/ 右栏right/ 单栏single**三类区域横向范围基本落在左半页x0 w/4且x2 3w/4→ 判定为左栏区域横向范围主要落在右半页x0 w/4且x2 w/2→ 判定为右栏跨栏或整页区域 → 判定为单栏。排序时先按(y, x)排序再根据栏位归属重组同一行的左右栏内容被重新拼接为左栏在前、右栏在后的阅读顺序。这一布局标记随后被convert_info_docx用来设置 Word 分栏if flag 2 and region[layout] single: section doc.add_section(WD_SECTION.CONTINUOUS) section._sectPr.xpath(./w:cols)[0].set(qn(w:num), 1) flag 1 elif flag 1 and region[layout] double: section doc.add_section(WD_SECTION.CONTINUOUS) section._sectPr.xpath(./w:cols)[0].set(qn(w:num), 2) flag 2即当内容从单栏切换为双栏时插入一个CONTINUOUS分节并把列数设为 2反之恢复为 1 列。这正是论文等双栏文档能被正确还原的核心机制。5.3 按区域类型重建 Word 元素convert_info_docxrecovery_to_doc.py 中的convert_info_docx遍历排序后的每个区域按type分派写入 docxfigure图片从保存的{bbox}_{img_idx}.jpg文件读取插入段落并居中双栏区域插入宽度 2 英寸的小图单栏区域插入 5 英寸的大图title标题调用doc.add_heading(text)生成带标题样式的段落table表格交给HtmlToDocx来自 table_process.py把表格识别输出的 HTML 重建为 Word 表格equation公式源码中当前对含 LaTeX 的公式区域不做额外写入pass公式以文本形式保留在其他区域内容中其余文本区域逐行写入段落首行设置 0.25 英寸的首行缩进模拟中文段首空两格字体大小 10pt。同时convert_info_docx在文档初始化时会把 Normal 样式的西文字体设为 Times New Roman、中文字体w:eastAsia设为宋体确保中英文混排输出观感正常。5.4 HTML 表格重建为 Word 表格HtmlToDocxtable_process.py 中HtmlToDocx负责将表格识别结果HTML 字符串转换为 docx 表格。其核心逻辑在handle_tabletable_process.py用 BeautifulSoup 解析 HTML通过get_table_dimensions统计行数并累计各列的colspan得到总列数用doc.add_table(rows, cols)创建空表格套用 Table Grid 样式逐行逐列遍历单元格读取colspan/rowspan用docx_cell.merge(...)实现跨行跨列合并每个单元格内部再起一个子HtmlToDocx解析器add_html_to_cell递归写入文本并对b、i、sup、sub、code等行内标签应用对应的字体样式font_styles/font_names映射见 table_process.py。同时该文件还实现了to_excel所依赖的单元格文本清理remove_whitespace等辅助逻辑保证合并单元格、嵌套表格场景下输出的 docx 不会损坏。5.5 Markdown 导出recovery_to_markdown如果开启--recovery_to_markdownrecovery_to_markdown.py 的convert_info_markdown会生成同名的*_ocr.md文件各区域按类型映射为 Markdown 语法figure →div aligncenterimg src.../div图片引用title →# 标题文本标题行内多段文本拼接table → 直接写入表格识别输出的 HTML 表格equation →$$LaTeX$$公式块header / footer → 跳过不写text → 通过check_merge_method判断段落合并策略当首行相对文本块 bbox 缩进超过一行高度时判定为段首空两格convert_text_space_head否则按行末不满行即分段convert_text_space_tail规则插入\n\n完成段落重组并对*、、~、$等 Markdown 特殊字符做转义。6. 恢复结果与下游应用版面恢复的输出结果集中在--output指定目录下主要包括{图片名}_ocr.docx版面恢复的 Word 文档{图片名}_ocr.md开启--recovery_to_markdown后生成的 Markdown 文档{图片名}/子目录其中show_{idx}.jpg为带版面框标注的可视化结果图res_{idx}.txt为结构化 JSON 中间结果{bbox}_{idx}.jpg为从原图裁剪出的图片区域{bbox}_{idx}.xlsx为表格区域导出的 Excel 文件。这些中间产物意味着版面恢复不仅能输出可编辑文档还能直接作为文档解析流水线的数据源结构化 JSON 便于程序化消费Markdown 便于喂给 RAG / 知识库docx 便于人工二次编辑。7. 更多版面恢复的质量上限取决于上游各模型的精度因此对单个模型的训练、评估与推理可进一步参考关于 OCR 检测模型的训练评估与推理请参考 PaddleOCR 文本检测教程关于 OCR 识别模型的训练评估与推理请参考 PaddleOCR 文本识别教程关于版面分析模型的训练评估与推理请参考版面分析教程关于表格识别模型的训练评估与推理请参考表格识别教程。8. 小结本文完整梳理了 PaddleOCR 版面恢复的两种技术路线面向标准 PDF 的pdf2docx快速解析--use_pdf2docx_apiTrue与面向任意图片/PDF 的版面分析 OCR 表格识别方案。后者在 predict_system.py 中被组织为一条清晰的处理链版面区域解析 → 分区域识别文本 / 表格 / 公式 / 图片→sorted_layout_boxes保序排序 →convert_info_docx/convert_info_markdown重建文档。理解这条链路后无论是快速体验paddleocr --typestructure --recoverytrue还是自行下载中英文模型做精细恢复都能有的放矢并根据实际文档类型单栏/双栏、论文/非论文、扫描件/文本 PDF选择最合适的参数组合。【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考