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

时间:2019-03-06 18:39:31

标签: python python-requests pdf-generation

使用Python的requests模块已向服务器发送了一个请求:

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

它返回了status-200响应,所有响应都包含response.content中的PDF二进制数据

问题

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

1 个答案:

答案 0 :(得分:2)

您可以创建一个空的pdf文件,然后将写入该pdf文件的二进制文件保存如下:

from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
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,您可以将wb(写二进制文件)打开pdf文件,并将pdf内容从请求写入文件中,然后关闭文件。

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