windows 如何使用Python将.pptx转换为.pdf

pxyaymoc  于 2023-02-25  发布在  Windows
关注(0)|答案(8)|浏览(496)

我一直在寻找通过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

vwhgwdsa

vwhgwdsa1#

我在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()
hyrbngr7

hyrbngr72#

我正在使用这个解决方案,但我需要搜索所有的.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(反之亦然)。

p3rjfoxz

p3rjfoxz3#

我认为答案必须更新,因为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()
cclgggtu

cclgggtu4#

看看下面的代码片段,它使用了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)

这个代码段可以用于different-2格式转换。
Original Snippet

50few1ms

50few1ms5#

我需要一种方法来保存PPTX文件到PDF和PDF与笔记。这里是我的解决方案

from comtypes.client import CreateObject, Constants

def PPTtoPDF(inputFileName, outputFileName, formatType = 32):
    powerpoint = CreateObject('Powerpoint.Application')
    constants = Constants(powerpoint)
    powerpoint.Visible = 1

    if outputFileName[-3:] != 'pdf':
        outputFileName = outputFileName + ".pdf"
    deck = powerpoint.Presentations.Open(inputFileName)
    deck.SaveAs(outputFileName, constants.PpSaveAsPDF)
    deck.Close()
    powerpoint.Quit()

def PPTtoPDFNote(inputFileName, outputFileName, formatType = 32):
    powerpoint = CreateObject('Powerpoint.Application')
    constants = Constants(powerpoint)
    powerpoint.Visible = 1

    if outputFileName[-3:] != 'pdf':
        outputFileName = outputFileName + ".pdf"
    deck = powerpoint.Presentations.Open(inputFileName)
    deck.ExportAsFixedFormat(
        outputFileName,
        constants.ppFixedFormatTypePDF,
        constants.ppFixedFormatIntentPrint,
        False, # No frame
        constants.ppPrintHandoutHorizontalFirst,
        constants.ppPrintOutputNotesPages,
        constants.ppPrintAll
    )
    deck.Close()
    powerpoint.Quit()

为了使用它,

PPTtoPDF    ('.\\Test.pptx', '.\Test.pdf'          )
PPTtoPDFNote('.\\Test.pptx', '.\Test_with_Note.pdf')

注意:使用Windows平台总是最好的,即使用comtypes,这样它就可以始终支持Microsoft Powerpoint中的新格式和功能。

dgsult0t

dgsult0t6#

对于转换.pptx/.docx到pdf在谷歌云功能,我指的是这个github repo https://github.com/zdenulo/gcp-docx2pdf/tree/master/cloud_function,他们正在使用谷歌驱动器API的。在这个repo中,他们已经使用MIME类型的docx转换.docx文件到.pdf文件在谷歌驱动器,你可以使用其他MIME类型以及,像MIME类型的pptx(指:https://developers.google.com/drive/api/v3/mime-types)来转换google驱动器上的文件。其余所有代码都与github repo中提到的相同。

xtupzzrd

xtupzzrd7#

unoconv是一个很好的工具来完成这个任务,它确实是在python中构建的。关于你的问题,它可能与python解释器安装后在主unoconv文件中设置的方式有关。
要使用python3解释器运行它,请在unoconv文件(/usr/bin/unoconv)中将#!/usr/bin/env python替换为#!/usr/bin/env python3#!/usr/bin/python3
一个内衬:

sudo sed -i -e '1s:#!/usr/bin/env python$:#!/usr/bin/env python3:' /usr/bin/unoconv

您也可以将/usr/bin/unoconv符号链接到/usr/local/bin/unoconv

ego6inou

ego6inou8#

试试这个代码,它对我有用

import os
import win32com.client as win32
import comtypes

#make sure to initial cometypes
comtypes.CoInitialize()

# Path to input PowerPoint document
input_path = 'path/to/input/document.pptx'

# Path to output PDF file
output_path = 'path/to/output/document.pdf'

# Open PowerPoint document and convert to PDF
powerpoint = win32.Dispatch('Powerpoint.Application')
presentation = powerpoint.Presentations.Open(input_path)
presentation.SaveAs(output_path , 32)
presentation.Close()
powerpoint.Quit()

相关问题