如何将 PyFPDF 数据用作 PDF 而不必将其导出(输出)为 PDF?

How to use PyFPDF data as a PDF without having to export (output) it as a PDF?

当用户使用我定制的 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 变量。

expected bytes-like object, not FPDF

我该怎么做?

documentation 中,您可以看到参数 S,它以字节字符串形式给出

content = pdf.output(val+".pdf", 'S')

现在您可以使用 content 在电子邮件中创建附件。

适合我:content = BytesIO(bytes(pdf.output(dest = 'S'), encoding='latin1'))