【问题标题】:How do I create a PDF file from a binary code using Python?如何使用 Python 从二进制代码创建 PDF 文件?
【发布时间】:2017-03-26 03:26:01
【问题描述】:

我正在尝试使用 Python 通过电子邮件向自己发送 PDF 文件。我可以向自己发送 PDF 文件的二进制代码,但我无法从这个二进制代码重建 PDF 文件。

以下是我获取 PDF 文件二进制代码的方法:

file = open('code.txt', 'w')
for line in open('somefile.pdf', 'rb').readlines():
    file.write(str(line))
file.close()

这是我尝试从二进制代码创建 PDF 文件的方法:

file = open('new.pdf', 'wb')
for line in open('code.txt', 'r').readlines():
    file.write(bytes(line))
file.close()

然后我收到此错误:

Traceback(最近一次调用最后一次): 文件“something.py”,第 3 行,在 file.write(字节(行)) TypeError:没有编码的字符串参数

我做错了什么?

【问题讨论】:

  • 这……不是一回事。你为什么做这个?为什么首先在线路上调用str,为什么稍后再在它们上调用bytes?为什么不直接通过电子邮件发送 PDF?
  • 我不知道怎么做。我需要能够用 Python 做到这一点。
  • 您可以执行类似base64.b64encode(cPickle.dumps(open('somefile.pdf', 'rb').read())) 的操作,然后在之后撤消该操作
  • 如果我对其进行编码会发生什么?
  • @Peter 使用pickle 有什么意义?

标签: python pdf binary


【解决方案1】:

在您的第一个块中,以二进制写入模式 (wb) 打开文件,因为您正在向它写入二进制文件。此外,您不需要将其显式转换为 str。它应该是这样的:

file = open('code.txt', 'wb')
for line in open('somefile.pdf', 'rb').readlines():
    file.write(line)
file.close()

对于第二个块,以读取二进制模式 (rb) 打开文件。这里也不需要显式转换为字节。它应该是这样的:

file = open('new.pdf', 'wb')
for line in open('code.txt', 'rb').readlines():
    file.write(line)
file.close()

这应该可以解决问题。但是为什么你首先需要转换它呢?保持文件完整将节省您的辛勤工作和计算能力。

【讨论】:

  • 这与shutil.copying 文件有何不同?该文件“转换”。
  • 我正在尝试通过电子邮件向自己发送一个 PDF 文件。我不知道如何直接发送文件,或者是否有可能。这就是为什么我尝试将 PDF 文件的代码转换为字符串并稍后再转换回来的原因。
  • @RonLauterbach 您可以使用 python 的电子邮件模块附加和发送 pdf。无需转换。
  • @Jay Bhavsar 我该怎么做?
  • @RonLauterbach this 应该有帮助
猜你喜欢
  • 2011-05-07
  • 2018-03-25
  • 2019-07-28
  • 2022-10-25
  • 2013-08-13
  • 1970-01-01
  • 2021-09-20
  • 2016-01-26
  • 2017-05-28
相关资源
最近更新 更多