/ / django: dołącz wygenerowany w formacie pisa plik pdf do wiadomości e-mail - django, pdf, załączniki do wiadomości e-mail, pisa

django: dołącz pisa wygenerowany plik PDF do wiadomości e-mail - django, pdf, załączniki do e-maili, pisa

Próbuję dowiedzieć się, jak uzyskać plik pdfgenerowane przez pisę, aby dołączyć do e-maila. Wcześniej udało mi się zrobić załącznik za pomocą bufora, ale wtedy użyłem prostego reportlab. Nie wiem, jak zastosować tę koncepcję do przekonwertowanego pliku PDF

W ten sposób możesz to zrobić po prostu używając reportlab:

def pdfgenerate(request):
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type="application/pdf")
response["Content-Disposition"] = "filename="invoicex.pdf""

buffer = BytesIO()

# Create the PDF object, using the BytesIO object as its "file."
p = canvas.Canvas(buffer)

# Draw things on the PDF. Here"s where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, "Hello world.")

# Close the PDF object cleanly.
p.showPage()
p.save()

# Get the value of the BytesIO buffer and write it to the response.
pdf = buffer.getvalue()
buffer.close()

email = EmailMessage("Hello", "Body", "from@from.com", ["to@to.com"])
email.attach("invoicex.pdf", pdf , "application/pdf")
email.send()
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))

To jest kod, który do tej pory miałem, używając, wygenerowany w formacie pdf:

def render_to_pdf(request, template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
html  = template.render(context)
result = StringIO.StringIO()

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
if not pdf.err:
response = HttpResponse(result.getvalue(), mimetype="application/pdf")
response["Content-Disposition"] = "filename="invoicex.pdf""
email = EmailMessage("Hello", "Body", "from@from.com", ["to@to.com"])
email.attach("invoicex.pdf", pdf , "application/pdf")
email.send()
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
return HttpResponse("We had some errors<pre>%s</pre>" % escape(html))

def labelsend(request, order_id):
labels = LabelOrder.objects.get(LabelOrderID=order_id)
args = {}

args["labels"] =labels

return render_to_pdf(request, "labelsforprint.html", args)

Odpowiedzi:

1 dla odpowiedzi № 1

potrzebujesz result.getvalue () nie pdf

email.attach("invoicex.pdf", result.getvalue() , "application/pdf")