前言
通过win32com.client
将PPT和Word文件转为PDF格式
内容
代码语言:javascript复制import fitz # pip install pymupdf
import win32com.client
import os
def ppt2pdf(filename, output_filename):
"""
PPT文件导出为pdf格式
:param filename: PPT文件的名称
:param output_filename: 导出的pdf文件的名称
:return:
"""
ppt_app = win32com.client.Dispatch('PowerPoint.Application')
ppt = ppt_app.Presentations.Open(filename)
ppt.SaveAs(output_filename, 32)
ppt_app.Quit()
def doc2pdf(doc_path, pdf_path):
"""
word转pdf
:param doc_path: word文件路径
:param pdf_path: 生成pdf文件路径
"""
word = win32com.client.gencache.EnsureDispatch('Word.Application')
doc = word.Documents.Open(doc_path, ReadOnly=1)
doc.ExportAsFixedFormat(pdf_path,
win32com.client.constants.wdExportFormatPDF,
Item=win32com.client.constants.wdExportDocumentWithMarkup,
CreateBookmarks=win32com.client.constants.wdExportCreateHeadingBookmarks)
word.Quit(win32com.client.constants.wdDoNotSaveChanges)
def pdf2img(pdf_path, zoom_x, zoom_y):
"""
参数说明
:param pdf_path: pdf文件的路径
:param zoom_x: x轴方向的缩放系数
:param zoom_y: y轴方向的缩放系数
"""
doc = fitz.open(pdf_path) # 打开pdf文件
for page in doc: # 逐页循环
# print(page.number)
pic = page.get_pixmap(matrix=fitz.Matrix(zoom_x, zoom_y)) # 将页面渲染为图片
dir_save = os.path.dirname(pdf_path) # 结果保存的路径与pdf文件所在的路径同级
pdf_name = os.path.basename(pdf_path).split('.pdf')[0]
pic.save(f'{dir_save}/{pdf_name}-page-{page.number 1}.png') # 逐页将pdf存储为PNG格式
if page.number == 1: # 只对PDF前两页做转换
break
doc.close() # 关闭读取pdf文件
for root, dirs, files in os.walk(r"\Desktop-le2mgrr宋延余共享文件夹碳相关资料收集"): # 将目录修改为需要批量转换的PDF目录
for file in files:
file_path = os.path.join(root, file)
if file.endswith((".doc", ".docx")):
print('doc', file)
doc2pdf(file_path, os.path.join(root, f"{file}.pdf"))
if file.endswith((".ppt", ".pptx")):
print('ppt', file)
ppt2pdf(file_path, os.path.join(root, f"{file}.pdf"))
# for root, dirs, files in os.walk(r"\Desktop-le2mgrr宋延余共享文件夹碳相关资料收集"): # 将目录修改为需要批量转换的PDF目录
# for file in files:
# if file.endswith(".pdf"):
# print('pdf', file)
# pdf2img(
# os.path.join(root, file),
# zoom_x=3,
# zoom_y=3
# )