这个主要参照 https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.tools.excel.worksheet.pagesetup?view=vsto-2017
官网对于pageSetup属性的描述
#-*- 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__":
path=input('输入文档路径')
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()