UTF-8 не может декодировать ReportLab pdf

У меня проблема с декодированием pdf, сгенерированного библиотекой reportlab.

Вот код, вызывающий мою функцию:

print('Rendering Report and Sending Mail')
r = renderTestPDF()
sendTestPDF(r)

Вот код, создающий PDF:

def renderTestPDF():

 canvas = Canvas('hello.pdf')
 canvas.drawString(72, 72, "Hello, World")
 content = canvas.getpdfdata()
 return content

Вот код, отправляющий письмо, и где я получаю ошибку:

def sendtestpdf(report):
# Variables For The Server
 emailhost = ''
 emailport = ''

# Variables For The Email
 systemEmail = ''
 password = ''
 recieveremail = ''

# Configure The Email Message
 message = MIMEMultipart()
 message["Subject"] = 'This is a test for pdf creation and attachment'
 message["From"] = systemEmail
 message["To"] = recieveremail

html = """
    <h1>Your report is here!</h1>
"""

# Turn The Message Into A MIME Object
part1 = MIMEText(html, "html")

**---- I THINK THIS IS WHERE THE ERROR IS LYING -----**
binary_pdf = open(report, "rd")
payload = MIMEBase('application', 'octate-stream', Name="Test.pdf")
payload.set_payload((binary_pdf).read())
encoders.encode_base64(payload)
payload.add_header('Content-Decomposition', 'attachment', filename='Test.pdf')

# Add HTML/plain-text parts to MIMEMultipart message
message.attach(part1)
message.attach(payload)

# Create Secure Connection with Server and Send Email
 context = ssl.create_default_context()
 with smtplib.SMTP_SSL(emailhost, emailport, context=context) as server:
     server.login(systemEmail, password)
     server.sendmail(systemEmail, recieveremail, message.as_string())

и, наконец, вот ошибка, которую я получаю:

Ошибка

Ошибка Подсказка

Тело ошибки

ОБНОВЛЕНИЕ: (ПОМЕТКА КАК ОТВЕТ)

Похоже, что полотно, созданное с помощью ReportLab, НЕОБХОДИМО сохранить как .pdf, прежде чем пытаться его прочитать...

По причинам моего приложения, я не хочу/не хочу, чтобы pdf сохранялся где-либо.

Обходным решением для этого является временное сохранение pdf в корневой каталог, затем открытие его из корневого каталога, прикрепление к письму, отправка письма, а затем удаление его из корневого каталога.

Я не могу подтвердить, насколько это эффективно или безопасно, но буду изучать это больше, теперь, когда у меня есть рабочее решение.

Вернуться на верх