我正在尝试使用python-o365库下载保存在一个驱动器中的pdf格式的word文档,但是下载的文件无法用adobe打开。我得到一个错误,Adobe Acrobat could not open 'Output.pdf' because it is either not a supported format...等。我的一些代码如下所示:
my_drive = storage.get_default_drive()
attachments_folder = my_drive.get_special_folder('attachments')
items = attachments_folder.get_items()
target_file = "Example.docx"
file = list(filter(lambda x: target_file == x.name, items))[0]
file.download(to_path = r"C:\Users\UserX\OneDrive WordToPdf", name="Output.pdf",convert_to_pdf=True)下载的文件似乎只有一个pdf扩展名,但实际上仍然是一个word文件,因为它在Word中打开。
当我删除name中的扩展时
file.download(to_path = r"C:\Users\UserX\OneDrive WordToPdf", name="Output",convert_to_pdf=True)生成的文件具有docx扩展名,但在Adobe中打开而不是在Word中打开
我怎样才能让它正常工作?当前的解决方法是在文件下载后更改扩展名。
发布于 2021-03-03 22:53:20
我能够重现这个问题。我在下面的链接中对源代码进行了更深入的研究。
https://github.com/O365/python-o365/blob/master/O365/drive.py
让我们关注下面的代码片段--因为它负责转换和下载pdf格式的文件。

据我所知:
如果目标文件名后缀在列表中(在同一文件的顶部定义),则返回

然后,它会下载PDF格式的文件。
发生了什么?
所以在我们的例子中--当你给出一个目标文件名,比如"ABC.pdf“--它会选择目标文件的扩展名( pdf ) --因为pdf不在allowed_pdf_extensions的列表中--这个文件是作为一个普通的docx文件下载的(因为下面这行代码没有被执行)
params['format'] = 'pdf'这也是为什么如果你不提供扩展名-它接受目标文件的源扩展名- docx - docx在列表allowed_pdf_extensions中,convert_to_pdf被设置为true -它会下载pdf格式的文件。(但文件使用docx扩展名命名)。
可能的工作循环:
我能够暂时绕过这个行为--通过将".pdf“添加到机器的drive.py本地列表中。


现在,您可以编写一段代码-手动更新文件以反映文件名。
或者可以联系作者来解决同样的问题。
https://stackoverflow.com/questions/66167706
复制相似问题