docx、excel、word转pdf文件

1、docx、doc文件转成pdf

将Word文档转换为PDF格式的Python脚本。使用了comtypes.client库来调用Microsoft Word应用程序进行转换。

主要功能如下:

  1. 定义了一个名为get_path的函数,该函数接受一个路径作为参数,并返回该路径下所有以.doc或.docx结尾的文件名列表。

  2. 在主程序中,首先创建了一个Word应用程序对象,并将其可见性设置为不可见。

  3. 然后指定了要转换的Word文档所在的目录路径。

  4. 使用get_path函数获取该目录下的所有Word文档文件名和对应的PDF文件名。

  5. 对于每个Word文档,通过调用Word应用程序对象的Documents.Open方法打开文档,然后使用`SaveAS`方法将其保存为PDF格式,最后关闭文档。

  6. 如果在转换过程中出现异常,会打印出异常信息。

需要注意的是,运行此代码需要安装comtypes库,并且计算机上必须安装了Microsoft Word应用程序。

python 复制代码
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @File : doc2pdf.py
# @Software: PyCharm
import os
import comtypes.client


def get_path(path):
    filename_list = os.listdir(path)
    wordname_list = [filename for filename in filename_list if filename.endswith((".doc", ".docx"))]
    for wordname in wordname_list:
        # 分离word文件名称和后缀,转化为pdf名称
        pdfname = os.path.splitext(wordname)[0] + '.pdf'
        # 如果当前word文件对应的pdf文件存在,则不转化
        if pdfname in filename_list:
            continue
        wordpath = os.path.join(path, wordname)  # word所在目录
        pdfpath = os.path.join(path, pdfname)  # 存放生成的pdf目录
        # 生成器
        yield wordpath, pdfpath


if __name__ == '__main__':
    word = comtypes.client.CreateObject("Word.Application")
    word.Visiable = 0  # 设置可见性,不可见

    path = "E:\\docx"
    for w, p in get_path(path):
        print(w)
        try:
            newpdf = word.Documents.Open(w)
            newpdf.SaveAS(p, FileFormat=17)  # 17表示PDF格式
            newpdf.Close()
        except Exception as e:
            print(e)

2、excel文件转pdf

将Excel和Word文档转换为PDF格式的Python脚本。它使用了win32com.client库来调用Microsoft Excel和Word应用程序进行转换。

代码的主要功能如下:

  1. 定义了两个函数pdf_xls和pdf_doc,分别用于将Excel文件(.xls和.xlsx)和Word文件(.doc和.docx)转换为PDF格式。

  2. pdf_xls函数通过打开Excel应用程序,设置页面参数,然后将Excel文件导出为PDF格式。

  3. pdf_doc函数通过打开Word应用程序,设置页面参数,然后将Word文件保存为PDF格式。

  4. 在主程序中,指定了要转换的文件路径,并遍历该路径下的所有文件。

  5. 对于每个文件,根据文件类型调用相应的转换函数进行处理。

  6. 如果转换过程中出现异常,会将错误信息写入名为error_data.txt的文件中。

需要注意的是,运行此代码需要安装pywin32包,并且计算机上必须安装了Microsoft Excel和Word应用程序。

python 复制代码
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @File : excel2pdf.py
# @Software: PyCharm
# -*- coding:utf-8 -*-
import os
import win32api  # 需要下载pywin32的包
import win32com.client


def pdf_xls(root, filename, name):  # 转换xls和xlsx为pdf的函数
    if (filename.find('.xlsx') >= 0):  # 文件名有xlsx
        pdfname = root + os.sep + filename.replace(".xlsx", ".pdf")  # 将文件名变为pdf后缀
    else:
        pdfname = root + os.sep + filename.replace(".xls", ".pdf")  # 将xls文件名转换为pdf后缀
    xlApp = win32com.client.Dispatch('Excel.Application')  # pywin32包打卡excel
    xlApp.Visible = 0  # xls文件不可见
    xlApp.DisplayAlerts = 0
    books = xlApp.Workbooks.Open(name, False)
    for sh in books.Sheets:  # 每个表格中设置pagesetup的参数
        sh.PageSetup.Orientation = 1  # 设置横向以及纵向
        sh.PageSetup.Zoom = False  # 设置缩放大小,false说明不以此缩放依据
        sh.PageSetup.FitToPagesWide = 1  # 以适应宽度的方式缩放
    books.ExportAsFixedFormat(0, pdfname)  # 导出pdf文件
    books.Close()  # 关闭表格
    print('保存 PDF 文件:', pdfname)
    xlApp.Quit()  # 关闭打开excel的进程


def pdf_doc(root, filename, name):  # doc以及docx打开pdf文件
    if (name.find('.docx') >= 0):
        pdfname = root + os.sep + filename.replace(".docx", ".pdf")
    else:
        pdfname = root + os.sep + filename.replace(".doc", ".pdf")
        print(pdfname)
    exec_tool = 'kwps.application'
    word = win32com.client.DispatchEx(exec_tool)
    word.Visible = 0
    word.DisplayAlerts = 0
    password = '666666'  # 文档的打开密码,即使没有密码也可以打开
    doc = word.Documents.Open(name, True, False, False, password, password, Visible=False)  # 以有文档密码的方式打开doc文档,参数不可以缺省
    doc.SaveAs(pdfname, FileFormat=17)  # 转换为pdf文件
    # doc.ExportAsFixedFormat(0,pdfname)
    doc.Close()
    word.Quit()


if __name__ == "__main__":
    # 输入excel文件的路径
    path = "E:\\xlsx"
    for root, directories, files in os.walk(path):  # 遍历文件目录下的所有文件
        n = 0
        for fileList in files:
            name = root + os.sep + fileList  # 文件名
            if (name.find('.doc') >= 0):
                print(name + "开始执行")
                try:
                    pdf_doc(root, fileList, name)
                    print(name + "已完成执行")
                except Exception as re:
                    f = open("error_data.txt", "a", encoding='UTF-8')
                    f.write(str(name) + str(re) + "\n")
                    f.close()
            if name.find('.xls') >= 0:
                print(name + "开始执行")
                try:
                    pdf_xls(root, fileList, name)
                # root 目录 fileList 文档名称 name 文件加文档名
                except Exception as re:
                    f = open("error_data.txt", "a", encoding='UTF-8')
                    f.write(name + str(re) + "\n")
                    f.close()
相关推荐
郝学胜-神的一滴1 分钟前
避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
开发语言·c++·程序人生
我没想到原来他们都是一堆坏人5 分钟前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
搞一搞汽车电子12 分钟前
S32K3平台eMIOS 应用说明
开发语言·驱动开发·笔记·单片机·嵌入式硬件·汽车
总有刁民想爱朕ha1 小时前
车牌模拟生成器:Python3.8+Opencv代码实现与商业应用前景(C#、python 开发包SDK)
开发语言·python·数据挖掘
小菜全2 小时前
uniapp新增页面及跳转配置方法
开发语言·前端·javascript·vue.js·前端框架
人衣aoa2 小时前
Python编程基础(八) | 类
开发语言·python
晚云与城2 小时前
今日分享:C++ Stack和queue(栈与队列)
开发语言·c++
小莞尔2 小时前
【51单片机】【protues仿真】基于51单片机停车场的车位管理系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
张烫麻辣亮。2 小时前
golang-gin包
开发语言·golang·gin
大模型真好玩2 小时前
深入浅出LangGraph AI Agent智能体开发教程(四)—LangGraph全生态开发工具使用与智能体部署
人工智能·python·mcp