【问题标题】:How to convert a PDF from base64 string to a file?如何将 PDF 从 base64 字符串转换为文件?
【发布时间】:2018-01-04 21:50:51
【问题描述】:

我有一个 PDF 作为 base64 字符串,我需要使用 Python 将其写入文件。 我试过这个:

import base64

base64String = "data:application/pdf;base64,JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."

with open('temp.pdf', 'wb') as theFile:
  theFile.write(base64.b64decode(base64String))

但它没有创建有效的 PDF 文件。 我错过了什么?

【问题讨论】:

  • 你能告诉我你在这方面做了什么改变,因为我对那种类型的字符串也有同样的问题。
  • 我必须得到结果但不正确。你得到 pdf 的正确结果了吗?

标签: python pdf base64 file-writing


【解决方案1】:

据我了解,base64decode 仅接受 base64 字符串,并且看起来您的字符串上有一些未编码的标头。

我会删除“data:application/pdf;base64”

在此处查看文档:https://docs.python.org/2/library/base64.html

我以前用的时候,只用了编码字符串。

【讨论】:

    【解决方案2】:

    使用codecs.decode 函数编写它是否有效? 同样正如 Mark 所说,您可以尝试删除字符串的 data:application/pdf;base64, 部分,因为这部分字符串不会被解码。:

    import codecs
    base64String = "JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
    
    
    with open("test.pdf", "wb") as f:
        f.write(codecs.decode(base64string, "base64"))
    

    【讨论】:

    • 你救了我的命 :)
    【解决方案3】:

    这不仅仅是base64编码的数据,而是data-uri编码的:

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

    还有一篇关于堆栈溢出的帖子询问如何在 Python 中解析此类字符串:

    How to parse data-uri in python?

    它的要点是删除标题(包括第一个逗号在内的所有内容):

    theFile.write(base64.b64decode(base64String.split(",")[1:2]))
    

    注意:我使用 [1:2] 而不是 [1],因为如果列表中只有 1 个元素,它不会引发异常,因为逗号后面没有任何内容(空数据)。

    【讨论】:

      【解决方案4】:

      扩展@Jebbyanswer using Base64(与@SmartManoj有同样的问题)

      import base64
      base64String = "JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
      
      
      with open("test.pdf", "wb") as f:
          f.write(base64.b64decode(base64string))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2021-12-12
        • 2017-01-29
        • 1970-01-01
        • 2020-10-19
        • 2018-02-22
        相关资源
        最近更新 更多