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()
相关推荐
环能jvav大师2 分钟前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
吱吱鼠叔6 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
今天也要加油丫8 分钟前
`re.compile(r“(<.*?>)“)` 如何有效地从给定字符串中提取出所有符合 `<...>` 格式的引用
python
Antonio91511 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov24 分钟前
C++中move和forword的区别
开发语言·c++
程序猿练习生29 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode
一名路过的小码农39 分钟前
C/C++动态库函数导出 windows
c语言·开发语言·c++
m0_6312704041 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42841 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
Messiah___1 小时前
【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑
开发语言·php