pythonpython-3.xpdfms-word

Convert Microsoft Word document to PDF using Python


I have tons of Word and Excel files. I want to convert many Word files in folders by sub folders to PDF, and I try following code.

This code is not active (I mean there aren't Word convert to PDF) although no error.

Enter image description here

What could be the problem? Is there another solution?

This is my code:

import os
from win32com import client
path = 'D:\programing\test'
word_file_names = []
word = client.DispatchEx("Word.Application")
for dirpath, dirnames, filenames in os.walk(path):
    print (dirpath)
    for f in filenames:
        if f.lower().endswith(".docx") and re.search('Addendum', f):
            new_name = f.replace(".docx", r".pdf")
            in_file = word_file_names.append(dirpath + "\\" + f)
            new_file = word_file_names.append(dirpath + "\\" + new_name)
            doc = word.Documents.Open(in_file)
            doc.SaveAs(new_file, FileFormat = 17)
            doc.Close()
        if f.lower().endswith(".doc") and re.search('Addendum', f):
            new_name = f.replace(".doc", r".pdf")
            in_file = word_file_names.append(dirpath + "\\" + f)
            new_file = word_file_names.append(dirpath + "\\" + new_name)
            doc = word.Documents.Open(in_file)
            doc.SaveAs(new_file, FileFormat = 17)
            doc.Close()
    word.Quit()

Solution

  • i solved this problem and fixed the code has following

    import os
    import win32com.client
    import re
    path = (r'D:\programing\test')
    word_file_names = []
    word = win32com.client.Dispatch('Word.Application')
    for dirpath, dirnames, filenames in os.walk(path):
        for f in filenames:  
            if f.lower().endswith(".docx") :
                new_name = f.replace(".docx", ".pdf")
                in_file =(dirpath + '/'+ f)
                new_file =(dirpath + '/' + new_name)
                doc = word.Documents.Open(in_file)
                doc.SaveAs(new_file, FileFormat = 17)
                doc.Close()
            if f.lower().endswith(".doc"):
                new_name = f.replace(".doc", ".pdf")
                in_file =(dirpath +'/' + f)
                new_file =(dirpath +'/' + new_name)
                doc = word.Documents.Open(in_file)
                doc.SaveAs(new_file, FileFormat = 17)
                doc.Close()
    word.Quit()