Python pptx to pdf dosya açma hatası

Merhaba Python Kullanarak klasördeki .pptx dosyalarını .pdf e dönüştürmeye çalışıyorum bunun için biraz araştırıp bazı kodlar buldum

dosya_yolu = "C:/dosyayolu"
def convert_ppt_to_pdf(input_path, output_path):

    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
    presentation = powerpoint.Presentations.Open(input_path) #kodun yolunu buluyo ama açamıyo#
    
    presentation.SaveAs(output_path, 32)  #32 is the constant for the PDF format
    presentation.Close()
    powerpoint.Quit()

input_directory = dosya_yolu
output_directory = dosya_yolu

ppt_files = glob.glob(os.path.join(input_directory, "*.pptx"))

for ppt_file in ppt_files:
    pdf_file = os.path.join(output_directory, os.path.basename(ppt_file)[:-5] + ".pdf")
    if os.path.exists(pdf_file):
        ppt_modified = os.path.getmtime(ppt_file)
        pdf_modified = os.path.getmtime(pdf_file)
        if pdf_modified < ppt_modified:
            print(f"Updating {pdf_file}")
            convert_ppt_to_pdf(ppt_file, pdf_file)
    else:
        print(f"Creating {pdf_file}")
        convert_ppt_to_pdf(ppt_file, pdf_file)
        

bu kodda

    presentation = powerpoint.Presentations.Open(input_path)

satırında dosya yolu bulunamadı diye hata alıyorum ama dosya yolunu yazdırdığımda ise klasördeki tüm .pptx dosyalarını buluyor sanırım dosyayı açmada bir sorun var aynı kodu C# a uyarladım ve çalıştırdım yine aynı tür bi sorunla karşılaştım onda da open fonksiyonunda sorun vardı

aldığım hata şu şekilde(python)

    presentation = powerpoint.Presentations.Open(input_path)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ctypes.COMError: (-2147024894, 'Sistem belirtilen dosyayı bulamıyor.', (None, None, None, 0, None))

belki işinize yarayabilir diye C# daki satırı ve hatayı da paylaşıyorum

// Open the source file
                Presentation ppPresentation = ppApp.Presentations.Open(sourceFile);
System.IO.DirectoryNotFoundException
  HResult=0x80070003
  İleti=Sistem belirtilen yolu bulamıyor. (HRESULT özel durum döndürdü: 0x80070003)
  Kaynak=ConsoleApp4
  StackTrace:
   konum Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName, MsoTriState ReadOnly, MsoTriState Untitled, MsoTriState WithWindow)
   konum PowerPointToPDF.Program.Main(String[] args) C:\Users\msen\source\repos\ConsoleApp4\ConsoleApp4\Program.cs içinde: 28. satır

Meraba,
Bu adreste şu şekilde bir uyarı var;

  1. PPT dosyalarını düzenlenebilir ppt dosyalarına dönüştürmek için WPS 2007 sürümünü (bu işleve sahip olmak için 2007 sürümü olmalıdır) kullanmanız gerekir.

Bununla alakalı olabilir mi?

1 Beğeni

Merhaba,
yanıtınız içi öncelikle teşekkür ederim verdiğiniz adresi araştırdım oradaki kodları kullandığımda daha sağlıklı bir sonuç aldım ama şu anki sorunum şu
verdiğiniz adresteki kodları kullandığımda dosya yolu olarak sadece o andaki bulunduğu dosyanın konumunu alıyor bu da cwd = os.getcwd() komutuyla oluyor ancak ben kendim bir dosya yolu belirttiğimde tekrar en başta bahsettiğim hatayı alıyorum acaba bir şeyi gözümden mi kaçırıyorum ne yapıyorum anlayamadım gerçekten kodun en son halini aşağıda paylaşıyorum

Kod:

import os
import comtypes.client #powerpoint module
dosya_yolu = "C:/temp/denememrt"

def init_powerpoint():
    powerpoint = comtypes.client.CreateObject("Powerpoint.Application")
    powerpoint.Visible = 1
    return powerpoint
 
def ppt_to_pdf(powerpoint, inputFileName, outputFileName, formatType = 32):
    if outputFileName[-3:] != 'pdf':
        outputFileName = outputFileName + ".pdf"
    deck = powerpoint.Presentations.Open(inputFileName)
    deck.SaveAs(outputFileName, formatType) # formatType = 32 for ppt to pdf
    deck.Close()
 
def convert_files_in_folder(powerpoint, dosya_yolu):
    files = os.listdir(dosya_yolu)
    pptfiles = [f for f in files if f.endswith((".ppt", ".pptx"))]
    for pptfile in pptfiles:
        fullpath = os.path.join(cwd, pptfile)
        ppt_to_pdf(powerpoint, fullpath, fullpath)
 
if __name__ == "__main__":
    powerpoint = init_powerpoint()
    cwd = dosya_yolu
    convert_files_in_folder(powerpoint, cwd)
    powerpoint.Quit()

Aldığım Hata :

Traceback (most recent call last):
  File "c:\Users\msen\Desktop\python\doctopdf.py", line 100, in <module>
    convert_files_in_folder(powerpoint, cwd)
  File "c:\Users\msen\Desktop\python\doctopdf.py", line 95, in convert_files_in_folder
    ppt_to_pdf(powerpoint, fullpath, fullpath)
  File "c:\Users\msen\Desktop\python\doctopdf.py", line 86, in ppt_to_pdf
    deck = powerpoint.Presentations.Open(inputFileName)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ctypes.COMError: (-2147024894, 'Sistem belirtilen dosyayı bulamıyor.', (None, None, None, 0, None))

ama eğer hiç bişeyi değiştirmezsem program içinde olduğu klasördeki tüm pptx ve ppt dosyalarını pdf e çeviriyor

Kod, Size yine de çözüm olmuş.
Evdeki kişisel bilgisayarımda İşletm sistemi olarak Linux kullandığım için bu kod benim bir işime yaramadı.
Aldığım hata mesajı;

ImportError: cannot import name ‘COMError’ from ‘_ctypes’ (/usr/lib/python3.10/lib-dynload/_ctypes.cpython-310-x86_64-linux-gnu.so)

Gerekçesi ise;
Ne yazık ki COMTypes, Linux için değil, Windows için tasarlanmıştır.

Aslında tek sorun aşağıdaki kodu
bundan

dosya_yolu = "C:/temp/denememrt"

buna çevirmekmiş

dosya_yolu = "C://temp//denememrt"

ama bu kodun aynısını word ve excel için de yazmıştım neden bunda böyle oldu anlayamadım print ile yazdırdığımda dosya yolunu da buluyordu

Kaçış dizilerine dikkat etmek lazım tabi.

1 Beğeni