开发者问题收集

为什么 docx2pdf 模块无法在我的 Python 脚本 Mac OS 中将 docx 转换为 pdf?

2020-06-29
5381

我使用的是 Python 3.8 和 docx2pdf 0.1.7。我尝试了很久,想在我的脚本中添加一些将 docx 转换为 pdf 的功能。我尝试了各种各样的方法,但到目前为止,没有一个对我有用。

有一个名为 docx2pdf 的模块可以转换我刚刚创建的文件,但它似乎不起作用,我不知道为什么会这样。我尝试在我的脚本中运行它,但我也尝试将其作为子进程运行,但都没有成功。该模块的文档位于 此处

我认为这是一个非常不为人知的模块,因为我在互联网上找不到任何答案,所以我希望有人知道如何解决这个问题。

这是我正在使用的代码:

from docx import Document
from docx.shared import Pt
from tkinter import *
from docx2pdf import convert

root = Tk()

# Then some irrelevant code for this question

def updater()
    doc = Document('./Contract.docx')
    # Then some code which updates the doc according to the tkinter Entry input

    # Save it according to some of the input from the GUI
    doc.save('/Users/Jem/Documents/Huurovereenkomsten/Specifiek/{}/contract{}.docx'.format(nospaceadres,
                                                                                                       naamhuurder.get()))

    # It all works fine until here
    convert('/Users/Jem/Documents/Huurovereenkomsten/Specifiek/{}/contract{}.docx'.format(nospaceadres,
                                                                                                       naamhuurder.get())) # This should convert it to a pdf with the same name in the same folder

# Some Tkinter GUI code which is also irrelevant for this question

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?

2个回答

尝试此代码,如果发生任何错误,请发布错误的屏幕截图......我们将尝试解决

import tkinter as to 
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 = askopenfile(filetypes = [('Word Files','*.docx')])
    print(file)
    convert(file.name)
    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()
sajjad shaikh
2020-07-04

尝试转换时是否打开了 .docx 文件?

我遇到了完全相同的问题(0% 和权限错误,只是没有收到荷兰语错误 (ookal ben ik ook nederlands)),但就在我尝试转换文档之前,我保存了 word 文档,更重要的是,用我的代码打开了该文档。

当我更改代码以使其在将 .docx 文件转换为 .pdf 文件之前不打开 .docx 文件时,它确实可以正常工作。

我认为出于某种原因,docx2pdf 会尝试打开 .docx 文件。因此,当您尝试转换并且已经打开 .docx 文件时,word 会向您发出权限警告/错误。

希望这对您有所帮助。

Maikel van Gurp
2023-12-08