-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdoc_to_pdf.py
91 lines (70 loc) · 2.85 KB
/
doc_to_pdf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# http://code.activestate.com/recipes/578858-convert-doc-and-docx-files-to-pdf/
# Convert doc and docx files to pdf (Python recipe)
from os import chdir, getcwd, listdir, path
from time import strftime
import sys
import os
import comtypes.client
def count_files(filetype):
''' (str) -> int
Returns the number of files given a specified file type.
>>> count_files(".docx")
11
'''
count_files = 0
for files in listdir(folder):
if files.endswith(filetype):
count_files += 1
return count_files
# Function "check_path" is used to check whether the path the user provided does
# actually exist. The user is prompted for a path until the existence of the
# provided path has been verified.
def check_path(prompt):
''' (str) -> str
Verifies if the provided absolute path does exist.
'''
abs_path = input(prompt)
while path.exists(abs_path) != True:
print ("\nThe specified path does not exist.\n")
abs_path = input(prompt)
return abs_path
print ("\n")
folder = check_path("Provide absolute path for the folder: ")
# Change the directory.
chdir(folder)
# Count the number of docx and doc files in the specified folder.
num_docx = count_files(".docx")
num_doc = count_files(".doc")
# Check if the number of docx or doc files is equal to 0 (= there are no files
# to convert) and if so stop executing the script.
if num_docx + num_doc == 0:
print ("\nThe specified folder does not contain docx or docs files.\n")
print (strftime("%H:%M:%S"), "There are no files to convert. BYE, BYE!.")
exit()
else:
print ("\nNumber of doc and docx files: ", num_docx + num_doc, "\n")
print (strftime("%H:%M:%S"), "Starting to convert files ...\n")
# Try to open win32com instance. If unsuccessful return an error message.
word = comtypes.client.CreateObject('Word.Application')
for files in listdir(getcwd()):
match = 0
if files.endswith(".doc"): s, match = "doc", 1
elif files.endswith(".docx"): s, match = "docx", 1
if match:
new_name = files.replace("."+s, r".pdf")
in_file = path.abspath(folder + "\\" + files)
new_file = path.abspath(folder + "\\" + new_name)
doc = word.Documents.Open(in_file)
print (strftime("%H:%M:%S"), " " +s+ " -> pdf ", path.relpath(new_file))
doc.SaveAs(new_file, FileFormat = 17)
doc.Close()
word.Quit()
print ("\n", strftime("%H:%M:%S"), "Finished converting files.")
# Count the number of pdf files.
num_pdf = count_files(".pdf")
print ("\nNumber of pdf files: ", num_pdf)
# Check if the number of docx and doc file is equal to the number of files.
if num_docx + num_doc == num_pdf:
print ("\nNumber of doc and docx files is equal to number of pdf files.")
else:
print ("\nNumber of doc and docx files is not equal to number of pdf files.")