2013-10-28 3 views
0

Я пытаюсь выяснить, как получить pdf-файл, созданный пизой, для прикрепления к электронной почте. Раньше я мог сделать вложение с помощью буфера, но это было тогда, когда я использовал прямой отчет. Я не могу понять, как применить эту концепцию в преобразованном PDFdjango: attach pisa generated pdf to email

Это, как вы могли бы сделать это просто с помощью 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', '[email protected]', ['[email protected]']) 
    email.attach('invoicex.pdf', pdf , 'application/pdf') 
    email.send() 
    return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 

Это код, который я до сих пор, используя, в Пизу Генерация 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', '[email protected]', ['[email protected]']) 
     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) 

ответ

1

вам нужно result.getvalue() не PDF

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