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 в корневой каталог, затем открытие его из корневого каталога, прикрепление к письму, отправка письма, а затем удаление его из корневого каталога.
Я не могу подтвердить, насколько это эффективно или безопасно, но буду изучать это больше, теперь, когда у меня есть рабочее решение.