微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 python-o365 将 Microsoft Graph 导出为 pdf 给出无效文件

如何解决使用 python-o365 将 Microsoft Graph 导出为 pdf 给出无效文件

我正在尝试使用 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 扩展名,但在 Adob​​e 中打开而不是在 Word 中打开

我怎样才能让它正常工作?目前正在通过在下载文件后更改扩展名来解决

解决方法

我能够重现这个问题。我在下面的链接中更深入地研究了源代码。

https://github.com/O365/python-o365/blob/master/O365/drive.py

让我们关注下面的代码片段 - 因为它负责转换和下载 pdf 文件。

enter image description here

据我所知:

  • 如果目标文件名后缀在列表中(定义在 同一个文件)

enter image description here

  • 如果 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 中的列表中。

enter image description here

enter image description here

现在,您可以编写一段代码 - 手动更新文件以反映文件名。

或者可以就同一问题联系作者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。