python学习之PDF转换Word文档

背景:当前一些pdf转化为word文档的工具大多数都存在收费的情况。在线免费的也是只能转换pdf文档限制的页数。最常见是WPS工具,虽有免费转换5页的试用资格,但是在遇见PDF文档页数较多的时候,局限性还是比较大的。

python学习之PDF转换Word文档_第1张图片

内容:python代码转换为Word文档时也存在着文本格式上的局限,导致不能1:1的转换pdf文档。

  1. PDF和Word是两种不同格式的文档,其内部结构和表现方式也不同。PDF是一种固定格式的文档,包含了页面布局、字体、图像等信息,而Word是一种可编辑的文档,包含了文字、段落、样式等信息。因此,将PDF转换为与原始PDF完全相同的Word文档是一项非常复杂的任务,可能无法完全保留原始PDF的所有细节和格式。

  2. PDF文件中的内容可能具有复杂的结构和布局,例如多列文本、表格、图像等。将这些元素准确地转换到Word中是一项挑战性的任务,特别是对于包含大量格式化和复杂排版的PDF文件。

下面是批量转换PDF文档为Word文档的python代码:

!注意在运行代码之前需要安装python的第三方库

pip install pdf2docx  # 将PDF文件转换为Word文档(.docx)格式
pip install PyMuPDF   # 用于处理PDF文件的库
pip install python-docx  # 创建和操作Microsoft Word文档(.docx格式)
# coding:utf-8
import os
import fitz
from pdf2docx import Converter  # 将PDF文件转换为Word文档(.docx)格式
from docx.shared import Pt  # 设置字体大小
from docx import Document  # 创建和操作Word文档
# pip install pdf2docx

def pdf_docx():
    # 获取当前工作目录
    file_path = r'E:\ceshi\pdf转word'  #  存放你需要转换pdf的文件夹.
    # 遍历所有文件
    for file in os.listdir(file_path):
        # 获取文件后缀
        suff_name = os.path.splitext(file)[1]
        # 过滤非pdf格式文件
        if suff_name != '.pdf':
            continue
        # 获取文件名称
        file_name = os.path.splitext(file)[0]
        # pdf文件名称
        pdf_name = os.path.join(file_path, file)
        # 要转换的docx文件名称
        docx_name = os.path.join(file_path, file_name + '.docx')
        # 创建一个转换器对象
        cv = Converter(pdf_name)
        # 将pdf转换为docx并保存
        cv.convert(docx_name, start=0, end=None)  # start=0表示从第一页开始转换,end=None表示转换所有页
        # 关闭转换器对象
        cv.close()

        # 打开转换后的docx文件
        document = Document(docx_name)
        # 获取PDF中的字体和大小信息
        font_name = get_pdf_font_name(pdf_name)  # 替换为获取实际PDF字体名称的函数
        font_size = get_pdf_font_size(pdf_name)  # 替换为获取实际PDF字体大小的函数

        # 修改Word文档中的字体和大小
        for paragraph in document.paragraphs:
            for run in paragraph.runs:
                run.font.name = font_name
                run.font.size = Pt(font_size)

        # 保存修改后的docx文件
        document.save(docx_name)

# 获取PDF字体名称
def get_pdf_font_name(pdf_name):
    doc = fitz.open(pdf_name)
    page = doc[0]
    font_name = page.get_text("fontname")  # 使用 get_text 方法来获取页面中的文本
    doc.close()
    return font_name
# 获取PDF字体大小
def get_pdf_font_size(pdf_name):
    doc = fitz.open(pdf_name)
    page = doc[0]
    text_blocks = page.get_text_blocks()
    font_size = None
    default_font_size = 18  # 默认字体大小
    if len(text_blocks) > 0:  # 检查文本块列表的长度是否大于0,以确保至少有一个文本块。
        first_block = text_blocks[0]
        if len(first_block) > 7:
            font_size = first_block[7]
    doc.close()
    return font_size if font_size is not None else default_font_size  # 返回获取到的字体大小,如果没有获取到,则返回默认的字体大小

if __name__ == '__main__':
    pdf_docx()

示例图:

源PDF文档截图:

python学习之PDF转换Word文档_第2张图片

 转换后Word文档截图:

python学习之PDF转换Word文档_第3张图片

 说明:虽然此代码能使pdf文档转换为word文档,但pdf中的某些格式和字体样式,可能不能完全相同的转换到word文档,可经过调节Word文档中字体来达到相同的样式

你可能感兴趣的:(python实用代码,python,word,pdf,学习)