如何从二进制字符串创建 PDF?

How to create a PDF from a binary string?

已使用 Python 的 requests 模块向服务器发出请求:

requests.get('myserver/pdf', headers)

它返回了一个 status-200 响应,其中都包含 response.content

中的 PDF 二进制数据

问题

如何从 response.content 创建 PDF 文件?

您可以创建一个空的 pdf,然后像这样以二进制形式保存写入该 pdf:

from reportlab.pdfgen import canvas
import requests

# Example of path. This file has not been created yet but we 
# will use this as the location and name of the pdf in question

path_to_create_pdf_with_name_of_pdf = r'C:/User/Oleg/MyDownloadablePdf.pdf'

# Anything you used before making the request. Since you did not
# provide code I did not know what you used
.....
request = requests.get('myserver/pdf', headers)

#Actually creates the empty pdf that we will use to write the binary data to
pdf_file = canvas.Canvas(path_to_create_pdf_with_name_of_pdf)

#Open the empty pdf that we created above and write the binary data to. 
with open(path_to_create_pdf_with_name_of_pdf, 'wb') as f:
     f.write(request.content)
     f.close()

reportlab.pdfgen 允许您通过使用 canvas.Canvas 方法指定要保存 pdf 的路径以及 pdf 的名称来制作新的 pdf。如我的回答所述,您需要提供执行此操作的路径。

一旦你有一个空的 pdf,你可以打开 pdf 文件作为 wb(写入二进制)并将 pdf 的内容从请求写入文件并关闭文件。

使用路径时 - 确保名称不是任何现有文件的名称,以确保您不会覆盖任何现有文件。如评论所示,如果此名称是任何其他文件的名称,那么您将面临覆盖数据的风险。例如,如果您在循环中执行此操作,则需要在每次迭代时使用新名称指定路径,以确保每次都有一个新的 pdf。但是,如果它是一次性的,那么只要它不是另一个文件的名称,您就不会 运行 冒这个风险。