为什么在我的Python脚本Mac OS中,docx2pdf模块无法将docx转换为pdf?
为什么在我的Python脚本Mac OS中,docx2pdf模块无法将docx转换为pdf?
我正在使用Python 3.8和docx2pdf 0.1.7。我已经尝试了很长时间,在我的脚本中找到一个将docx转换为pdf的方法。我尝试了各种方法,但迄今为止都没有成功。
有一个叫做docx2pdf的模块,应该可以将我刚刚创建的文件转换为pdf,但似乎不起作用,我无法弄清楚原因。我尝试在我的脚本中运行它,还尝试作为子进程运行它,但都没有成功。模块的文档在这里。
我认为这是一个相当不知名的模块,因为我在互联网上找不到任何答案,所以希望有人知道如何解决这个问题。
这是我正在使用的代码:
从docx导入文档
从docx.shared导入Pt
从tkinter导入*
从docx2pdf导入转换
根= Tk()
#然后一些与此问题无关的代码
def更新程序()
doc = Document('./Contract.docx')
#然后一些根据tkinter输入更新文档的代码
#根据GUI中的一些输入保存它
doc.save('/Users/Jem/Documents/Huurovereenkomsten/Specifiek/{}/contract{}.docx'.format(nospaceadres,
naamhuurder.get()))
#到这里都没问题
convert('/Users/Jem/Documents/Huurovereenkomsten/Specifiek/{}/contract{}.docx'.format(nospaceadres,
naamhuurder.get()))#这应该将其转换为相同名称的pdf文件,保存在相同的文件夹中
#一些对于这个问题也无关的Tkinter GUI代码
root.mainloop()
但首先,它给了我这个:
0%| | 0/1 [00:02 |?,?it / s]
然后它在我Macbook上打开MS Word,并告诉我它需要许可/权限打开docx。然后我必须选择文档,这样它才有权打开它。之后,它打开了docx,但什么也没发生。
之后,它给了我这个:
{'input':'/Users/Jem/Documents/Huurovereenkomsten/Specifiek/slotlaan73/contractabc.docx','output':'/Users/Jem/Documents/Huurovereenkomsten/Specifiek/slotlaan73/contractabc.pdf','result':'error','error':'Error:Er heeft zich een fout voorgedaan。 '}
'Er heeft zich een fout voorgedaan.'是荷兰语,意思是:发生了一个错误。
有人知道这是为什么,或者我可以做什么来使它工作,以便将docx转换为pdf吗?
问题的出现的原因:
- 代码中使用了tkinter库和docx2pdf模块来实现将docx文件转换为pdf文件的功能。
- 在代码中,使用了askopenfile函数来手动选择要转换的docx文件。
解决方法:
- 如果不想每次都手动选择文件,可以将文件的路径直接指定给file变量,而不使用askopenfile函数。
- 需要将以下代码段:
file = askopenfile(filetypes = [('Word Files','*.docx')])
替换为:
file = "path/to/your/file.docx"
其中"path/to/your/file.docx"是要转换的docx文件的路径。
- 这样,每次运行脚本时,都会自动使用指定的文件进行转换。
以下是修改后的代码:
import tkinter as tk import tkinter.ttk as ttk from tkinter.filedialog import askopenfile from tkinter.messagebox import showinfo from docx2pdf import convert win = tk.Tk() win.title("Word To PDF Converter") def openfile(): # 将文件的路径直接指定给file变量 file = "path/to/your/file.docx" convert(file) showinfo("Done","File Successfully Converted") label = tk.Label(win,text='Choose File: ') label.grid(row=0,column=0,padx=5,pady=5) button = ttk.Button(win,text='Select',width=30,command=openfile) button.grid(row=0,column=1,padx=5,pady=5) win.mainloop()