使用Python的win32com控制PowerPoint。如何以编程方式访问“另存为”选项

时间:2012-05-30 07:04:55

标签: python vba client powerpoint win32com

我正在尝试通过python打开powerpoint,然后将幻灯片演示文稿保存为pdf讲义(三页到一页)。经过一番谷歌搜索后,我偶然发现了this。一个非常相似的问题。但是,我似乎无法让它运行。我想我可能会错误地将VB翻译成Python。

查看MSDN文档here,我试图填写两个必需的参数作为起点。虽然它似乎接受path,但它会导致FixedFormatType出错。

我的代码如下。

import win32com.client, sys, os

app = win32com.client.Dispatch("PowerPoint.Application")
app.Visible = True

names = []
for i in os.listdir(os.getcwd()):
    if i[-1] == 't':
        tmp = os.getcwd() + '\\' + i
        names.append(tmp)
        tmp = ''



presentation = app.Presentations.Open(names[0])
presentation.ExportAsFixedFormat(os.getcwd() + '\\test.pdf', 'PpFixedFormatType')

我尝试了ppFixdFormatType参数的许多变体。 ppFixedFormatTypePDFwin32com.ppFixedFormatTypePDFwin32com.client.constants.ppFixedFormatTypePDF等等。但都引发了一种或另一种错误。大多数与此类似:ValueError: invalid literal for int() with base 10: 'PpFixedFormatType'

2 个答案:

答案 0 :(得分:1)

您可能在PowerPoint的API中遇到过此错误:Type mismatch when using export function of PowerPoint 2007。 解决方案是为ExportAsFixedFormat()调用指定PrintRange参数。

答案 1 :(得分:0)

我知道问题在于如何通过VBA来操作PowerPoint,但是您也可以使用免费开放源代码pdftools将PDF幻灯片保存为讲义(就像PowerPoint一样)。

保存3x3讲义的命令为:

pdftools --input-file slides.pdf --output slides_W.pdf --white-page --fitpaper --overwrite
pdftools --input-file slides_W.pdf --nup 3 3 --height 0.32 --delta 0mm 0mm --landscape --out-suffix _HANDOUT --frame --overwrite --paginate --paper a4paper -t $filename 0.4 0.01

您可以通过处理传递给--nup选项的参数来获得不同的讲义布局