web-dev-qa-db-ja.com

Python)を使用して.pptxを.pdfに変換する方法

Pythonスクリプトを使用して.pptxファイルを.pdfファイルに変換することを数時間探していましたが、何も機能していないようです。

私が試したこと:私は1) このスクリプト これはwindows32.clientを呼び出し、2) noconv ですが、どれも私のために働いていないようです。

発生した問題:最初のオプションからスクリプトを使用するとエラー(com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024894), None))がスローされますが、2番目のオプションではPython pipを使用してインストールした後でも、unoconvを認識できないようです。

また、推奨される Pandoc もいくつか見ましたが、Pythonでの使用方法がわかりません。

使用しているバージョン:Python 2.7.9、Windows 8.1

11
user238469

この投稿この質問 の助けを借りて答えを見つけました。

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()
18
user238469

私はこのソリューションで作業していましたが、すべての.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

試してみたのは、私が読むことができず、最後のドキュメントまでコードを終了しないドキュメントを除いたものでした。そして、私は、最初に.pptx、次に.ppt(またはその逆)の各タイプのフォーマットを脇に置くことをお勧めします。

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()
0
Sankar

noconv はこのタスクを実行するための優れたツールであり、実際に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にシンボリックリンクすることもできます。