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()
相关推荐
无尽的大道6 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒9 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
binishuaio19 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE20 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻25 分钟前
WPF中的依赖属性
开发语言·wpf
洋24033 分钟前
C语言常用标准库函数
c语言·开发语言
进击的六角龙35 分钟前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点36 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
NoneCoder1 小时前
Java企业级开发系列(1)
java·开发语言·spring·团队开发·开发
苏三有春1 小时前
PyQt5实战——UTF-8编码器功能的实现(六)
开发语言·qt