我一直在寻找通过Python脚本将.pptx文件转换为.pdf文件几个小时,但似乎没有任何工作。
我尝试了什么:我尝试过1)this script调用windows32.client和2)unoconv,但它们似乎都不适用于我。
遇到的问题:使用第一个选项中的脚本会引发错误(com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024894), None)
),而在第二个选项中,Python似乎无法识别unoconv
使用pip安装它。
我也看到了一些推荐的Pandoc,但我无法理解如何将它用于Python。
我正在使用的版本: Python 2.7.9,Windows 8.1
答案 0 :(得分:16)
我在this post的帮助和this question的回答中找到了答案。请注意,comtypes
仅适用于Windows。
import comtypes.client
def PPTtoPDF(inputFileName, outputFileName, formatType = 32):
powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
powerpoint.Visible = 1
if outputFileName[-3:] != 'pdf':
outputFileName = outputFileName + ".pdf"
deck = powerpoint.Presentations.Open(inputFileName)
deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
deck.Close()
powerpoint.Quit()
答案 1 :(得分:2)
我正在使用此解决方案,但我需要搜索所有.pptx,.ppt,然后将它们全部转换为.pdf(python 3.7.5)。希望它能起作用...
import os
import win32com.client
ppttoPDF = 32
for root, dirs, files in os.walk(r'your directory here'):
for f in files:
if f.endswith(".pptx"):
try:
print(f)
in_file=os.path.join(root,f)
powerpoint = win32com.client.Dispatch("Powerpoint.Application")
deck = powerpoint.Presentations.Open(in_file)
deck.SaveAs(os.path.join(root,f[:-5]), ppttoPDF) # formatType = 32 for ppt to pdf
deck.Close()
powerpoint.Quit()
print('done')
os.remove(os.path.join(root,f))
pass
except:
print('could not open')
# os.remove(os.path.join(root,f))
elif f.endswith(".ppt"):
try:
print(f)
in_file=os.path.join(root,f)
powerpoint = win32com.client.Dispatch("Powerpoint.Application")
deck = powerpoint.Presentations.Open(in_file)
deck.SaveAs(os.path.join(root,f[:-4]), ppttoPDF) # formatType = 32 for ppt to pdf
deck.Close()
powerpoint.Quit()
print('done')
os.remove(os.path.join(root,f))
pass
except:
print('could not open')
# os.remove(os.path.join(root,f))
else:
pass
try和except是针对那些我直到最后一个文档都无法阅读且不会退出代码的文档。而且我建议不要使用每种格式:首先是.pptx,然后是.ppt(反之亦然)。
答案 2 :(得分:1)
看看下面的代码片段。它使用unoconv,并且可以在UBUNTU 20.04上正常工作。
# requirements
# sudo apt install unoconv
# pip install tqdm
# pip install glob
import glob
import tqdm
path = "<INPUT FOLDER>"
extension = "pptx"
files = [f for f in glob.glob(path + "/**/*.{}".format(extension), recursive=True)]
for f in tqdm.tqdm(files):
command = "unoconv -f pdf \"{}\"".format(f)
os.system(command)
此代码段可用于不同2格式的转换。
答案 3 :(得分:0)
unoconv是执行此任务的好工具,它确实是用python构建的。 关于您的问题,这可能与重复出现的问题有关,即在安装后在主要unoconv文件中设置python解释器的方式。
要使用python3解释器运行它,请在unoconv文件(#!/usr/bin/env python
)中将#!/usr/bin/env python3
替换为#!/usr/bin/python3
或/usr/bin/unoconv
。
一个班轮:
sudo sed -i -e '1s:#!/usr/bin/env python$:#!/usr/bin/env python3:' /usr/bin/unoconv
您还可以将/usr/bin/unoconv
链接到/usr/local/bin/unoconv
。
答案 4 :(得分:0)
我认为必须更新答案,因为comtypes
不再起作用。
这是有效的代码(已接受答案的更新版本):
import win32com.client
def PPTtoPDF(inputFileName, outputFileName, formatType = 32):
powerpoint = win32com.client.DispatchEx("Powerpoint.Application")
powerpoint.Visible = 1
if outputFileName[-3:] != 'pdf':
outputFileName = outputFileName + ".pdf"
deck = powerpoint.Presentations.Open(inputFileName)
deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
deck.Close()
powerpoint.Quit()