问题描述
我正在尝试使用 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 中打开
我怎样才能让它正常工作?目前正在通过在下载文件后更改扩展名来解决。
解决方法
我能够重现这个问题。我在下面的链接中更深入地研究了源代码。
https://github.com/O365/python-o365/blob/master/O365/drive.py
让我们关注下面的代码片段 - 因为它负责转换和下载 pdf 文件。
据我所知:
- 如果目标文件名后缀在列表中(定义在 同一个文件)
- 如果 convert_to_pdf 为 True
然后它会下载 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 中的列表中。
现在,您可以编写一段代码 - 手动更新文件以反映文件名。
或者可以就同一问题联系作者。