当前位置: 代码网 > it编程>前端脚本>Python > Python批量将PDF转为可编辑的Word的两种方案详解

Python批量将PDF转为可编辑的Word的两种方案详解

2026年08月28日 Python 我要评论
场景引入收到一份扫描版 pdf 合同,里面的文字无法复制、无法搜索、无法编辑。需要将其转换为可编辑的 word 文档。手动逐字输入太慢,用免费转换工具又有页数限制。本节教你用 python 批量将 p

场景引入

收到一份扫描版 pdf 合同,里面的文字无法复制、无法搜索、无法编辑。需要将其转换为可编辑的 word 文档。手动逐字输入太慢,用免费转换工具又有页数限制。

本节教你用 python 批量将 pdf 转为 word,特别是扫描件(图片格式)也能通过 ocr 提取文字。

技术原理

pdf 转 word 分两种情况:

pdf 类型特点处理方式
文字型文字可复制选择直接提取文字
扫描型实质是图片需要 ocr 识别文字

ocr(光学字符识别)流程

扫描 pdf → 每页转为图片 → tesseract ocr 识别文字 → 写入 word 文档

环境准备

方案 1:文字型 pdf(简单)

pip install pdfplumber python-docx

方案 2:扫描型 pdf(ocr)

pip install pytesseract pdf2image python-docx pillow

还需要安装 tesseract ocr 引擎:

  1. 下载:https://github.com/ub-mannheim/tesseract/wiki
  2. 安装后设置环境变量,或在代码中指定路径

完整代码

方案 1:文字型 pdf 转 word

import pdfplumber
from docx import document
from pathlib import path

def pdf_to_word_text(input_pdf, output_docx):
    """
    将文字型 pdf 转换为 word 文档

    参数:
        input_pdf: 源 pdf 文件
        output_docx: 输出 word 文件
    """
    doc = document()

    with pdfplumber.open(input_pdf) as pdf:
        total_pages = len(pdf.pages)
        print(f"共 {total_pages} 页,开始转换...")

        for i, page in enumerate(pdf.pages):
            # 提取文字
            text = page.extract_text()
            if text:
                doc.add_paragraph(text)

            # 添加分页符(除最后一页)
            if i < total_pages - 1:
                doc.add_page_break()

            print(f"已转换第 {i+1} 页")

    doc.save(output_docx)
    print(f"\n转换完成: {output_docx}")


# 提取表格
def pdf_tables_to_word(input_pdf, output_docx):
    """
    将 pdf 中的表格提取到 word
    """
    doc = document()

    with pdfplumber.open(input_pdf) as pdf:
        for i, page in enumerate(pdf.pages):
            tables = page.extract_tables()
            for table_idx, table in enumerate(tables):
                if table:
                    doc.add_heading(f"第 {i+1} 页 - 表格 {table_idx+1}", level=2)

                    # 创建 word 表格
                    word_table = doc.add_table(rows=len(table), cols=len(table[0]))
                    for row_idx, row in enumerate(table):
                        for col_idx, cell in enumerate(row):
                            word_table.cell(row_idx, col_idx).text = str(cell or '')

    doc.save(output_docx)
    print(f"表格提取完成: {output_docx}")

方案 2:扫描型 pdf(ocr)转 word

import pytesseract
from pdf2image import convert_from_path
from docx import document
import os

# tesseract 路径(根据实际安装位置修改)
tesseract_path = r"c:\program files\tesseract-ocr\tesseract.exe"
pytesseract.pytesseract.tesseract_cmd = tesseract_path

def ocr_pdf_to_word(input_pdf, output_docx, lang='chi_sim+eng'):
    """
    使用 ocr 将扫描版 pdf 转为可编辑 word

    参数:
        input_pdf: 扫描版 pdf
        output_docx: 输出 word
        lang: ocr 语言,'chi_sim'=简体中文,'eng'=英文,可组合
    """
    doc = document()

    # pdf 每页转为图片
    print("正在将 pdf 转为图片...")
    images = convert_from_path(input_pdf, dpi=300)
    print(f"共 {len(images)} 页")

    for i, image in enumerate(images):
        print(f"ocr 识别第 {i+1} 页...")

        # ocr 识别
        text = pytesseract.image_to_string(image, lang=lang)

        # 写入 word
        doc.add_paragraph(text)

        if i < len(images) - 1:
            doc.add_page_break()

    doc.save(output_docx)
    print(f"\nocr 转换完成: {output_docx}")

方案 3:批量转换文件夹中的所有 pdf

def batch_pdf_to_word(folder_path, output_dir="word文档", use_ocr=false):
    """
    批量转换文件夹中的所有 pdf
    """
    folder = path(folder_path)
    output = path(output_dir)
    output.mkdir(parents=true, exist_ok=true)

    for pdf_file in folder.glob('*.pdf'):
        word_file = output / f"{pdf_file.stem}.docx"

        if use_ocr:
            ocr_pdf_to_word(str(pdf_file), str(word_file))
        else:
            pdf_to_word_text(str(pdf_file), str(word_file))

    print(f"\n批量转换完成! 输出目录: {output_dir}/")

常见问题

q1:ocr 识别率低?

  • 提高 dpiconvert_from_path(input_pdf, dpi=600) — dpi 越高,识别越准确
  • 图像预处理:转换为灰度、二值化后再识别
  • 语言包:确保安装了正确的语言包

q2:中文识别出来是乱码?

确保 tesseract 安装了中文语言包:

  1. 下载 chi_sim.traineddata 放到 tesseract-ocr\tessdata\ 目录
  2. 使用 lang='chi_sim' 参数

q3:转换后格式丢失?

ocr 只能提取文字,无法保留原始格式(字体、图片、表格等)。如需保留格式,建议使用专业工具(如 adobe acrobat、wps 会员版)。

总结

pdf 类型方案准确率速度
文字型pdfplumber100%
扫描型tesseract ocr85-95%中等
含表格pdfplumber.extract_tables()

本节掌握了 pdf 转 word 的两种方法:文字型直接提取 + 扫描型 ocr 识别。

到此这篇关于python批量将pdf转为可编辑的word的两种方案详解的文章就介绍到这了,更多相关python pdf转可编辑word内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com