【问题标题】:Microsoft Graph export to pdf using python-o365 gives invalid file使用 python-o365 将 Microsoft Graph 导出为 pdf 会提供无效文件
【发布时间】:2021-02-12 07:18:08
【问题描述】:

我正在尝试使用 python-o365 库以 pdf 格式下载保存在一个驱动器中的 word 文档,但下载的文件无法使用 adobe 打开。我收到一个错误Adobe Acrobat could not open 'Output.pdf' because it is either not a supported format...etc。我的一些代码如下所示:

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 中打开

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

【问题讨论】:

  • 有趣。使用 Microsoft Graph API 的所有 pdf 转换都会发生这种情况吗?
  • @Dev 我只试过word到pdf的转换。
  • 我在最后尝试过,但无论您遇到什么问题,我都无法重现该问题。

标签: python microsoft-graph-api microsoft-graph-sdks o365-flow


【解决方案1】:

我能够重现该问题。我在下面的链接中对源代码进行了深入研究。

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

让我们关注下面的sn-p——因为它负责转换和下载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 扩展名命名)。

可能的Worarounds:

我能够暂时绕过该行为 - 通过将“.pdf”添加到机器本地 drive.py 的列表中。

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多