职场福利!Python自动化办公 实现批量Word转pdf

本期资源是Python自动化办公的一个案例

Python在自动化办公有很强大的应用,使用Python几百条数据10秒即可搞定,这和Python专门适合处理重复性的工作不无关系,这里作者给各位朋友介绍一个批量转pdf的案例,不是太难

这里需要导入几个模块

from win32com.client import Dispatch # 没有的话输入pip install pywin32命令 即可安装
from os import walk
import os

os是用于文件处理常用的模块,至于Dispatch,它是提供了一个接口, win32提供了多种word转换为其他文件的接口,其中FileFormat=17是转换为pdf格式.

之后转换文件逻辑也很简单,首先需要提取出文件名,word文件的后缀是doc或docx,那么将后缀名替换为pdf即可转换,这里用到replace方法,即replace(‘docx’,‘pdf’).replace(‘doc’,‘pdf’)因为有可能后缀是doc,所以需要2次判断。

值得注意的是,转换的文件夹事先要存在,否则会报错误。

下面是项目的源代码

from win32com.client import Dispatch # pip install pywin32
from os import walk
import os

wdFormatPDF = 17  # win32提供了多种word转换为其他文件的接口,其中FileFormat=17是转换为pdf


def doc2pdf(input_file, input_file_name, output_dir):
    try:
        word = Dispatch('Word.Application')
        doc = word.Documents.Open(input_file)
    except Exception as e:
        print("word无法打开, 发生如下错误:\n{}".format(e))
    try:
        pdf_file_name = input_file_name.replace(".docx", ".pdf").replace(".doc", ".pdf")
        pdf_file = os.path.join(output_dir, pdf_file_name)
        doc.SaveAs(pdf_file, FileFormat=wdFormatPDF)
        doc.Close()
        word.Quit()
        print("成功转换\"{}\"".format(input_file_name))
        print()
    except Exception as e:
        print("文件保存失败, 发生如下错误:\n{}".format(e))


if __name__ == "__main__":
    path_in=input("请输入word文件夹的路径(绝对路径) 要保证存在 建议复制粘贴")
    path_out=input("请输入pdf文件夹的路径(绝对路径) 要保证存在 建议复制粘贴")
    doc_files = []
    directory = path_in# word文件夹
    output_dir =path_out # pdf文件夹
    for root, _, filenames in walk(directory):  # 第2个返回值是dirs, 用不上使用_占位
        for file in filenames:
            if file.endswith(".doc") or file.endswith(".docx"):
                print("转换{}中......".format(file))
                doc2pdf(os.path.join(root, file), file, output_dir)

在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

猜你喜欢

转载自blog.csdn.net/XIe_0928/article/details/112918906