1、docx、doc文件转成pdf
将Word文档转换为PDF格式的Python脚本。使用了comtypes.client库来调用Microsoft Word应用程序进行转换。
主要功能如下:
-
定义了一个名为get_path的函数,该函数接受一个路径作为参数,并返回该路径下所有以.doc或.docx结尾的文件名列表。
-
在主程序中,首先创建了一个Word应用程序对象,并将其可见性设置为不可见。
-
然后指定了要转换的Word文档所在的目录路径。
-
使用get_path函数获取该目录下的所有Word文档文件名和对应的PDF文件名。
-
对于每个Word文档,通过调用Word应用程序对象的Documents.Open方法打开文档,然后使用`SaveAS`方法将其保存为PDF格式,最后关闭文档。
-
如果在转换过程中出现异常,会打印出异常信息。
需要注意的是,运行此代码需要安装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应用程序进行转换。
代码的主要功能如下:
-
定义了两个函数pdf_xls和pdf_doc,分别用于将Excel文件(.xls和.xlsx)和Word文件(.doc和.docx)转换为PDF格式。
-
pdf_xls函数通过打开Excel应用程序,设置页面参数,然后将Excel文件导出为PDF格式。
-
pdf_doc函数通过打开Word应用程序,设置页面参数,然后将Word文件保存为PDF格式。
-
在主程序中,指定了要转换的文件路径,并遍历该路径下的所有文件。
-
对于每个文件,根据文件类型调用相应的转换函数进行处理。
-
如果转换过程中出现异常,会将错误信息写入名为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()