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;
- 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