当用户使用我定制的Django应用程序注册时,我正在使用PyFPDF自动创建自定义PDF文档。PDF 包含有关该人员注册的信息。对于每个注册的人,我不想将他们的 pdf 保存为单独的 pdf - 我想在格式化后立即邮寄他们的 PDF。
pdf = FPDF()
pdf.add_page()
pdf.image(file_path, 0, 0, 210)
pdf.set_text_color(1, 164, 206)
pdf.set_font("helvetica", size=26)
pdf.ln(142)
pdf.cell(0, 0, txt=name, ln=4, align="C")
这是我目前格式化PDF的内容,其中name
是从每个用户的注册中检索的值。
这是紧随其后的,也是我想替换的内容:
val = uuid.uuid4().hex
pdf.output(val+".pdf")
现在,我正在导出具有唯一文件名的每个PDF,然后将其发送到每个用户的电子邮件中。
我更喜欢在发送每封电子邮件时直接使用pdf
变量,如下所示:
finalEmail = EmailMessage(
subject,
plain_message,
from_email,
[email]
)
finalEmail.attach("Registration.pdf", pdf)
finalEmail.send()
但是,Django 不接受它作为有效的附件类型,因为它仍然是一个 FPDF 变量。
预期的类似字节的对象,而不是 FPDF
我该怎么做?
在文档中,您可以看到参数S
它以字节字符串的形式给出
content = pdf.output(val+".pdf", 'S')
现在,您可以使用content
在电子邮件中创建附件。
对我有用:content = BytesIO(bytes(pdf.output(dest = 'S'), encoding='latin1'))
我像这样修改IX8的答案:
content = io.BytesIO(bytes(pdf.output(dest = 'S'), encoding='latin1'))
with open("Registration.pdf", "wb") as temp_file:
temp_file.write(content.getvalue())
现在您可以使用注册.pdf您想要的位置