- reportlab==2.7
Faça uma view conforme abaixo:
############################################################# # PDF ############################################################# class PDFView(View): def post(self, request, *args, **kwargs): # IMPORTS NECESSARIOS from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter, landscape, A4 from reportlab.lib.units import inch, cm
from reportlab.lib.colors import HexColor
from django.conf import settings import os # VALIDAÇÃO DO CSRF_TOKEN c = {} c.update(csrf(request)) # NOME DO ARQUIVO nome_arquivo = "1.pdf" arquivo = '%s/uploads/%s' % (settings.MEDIA_ROOT, nome_arquivo) if os.path.isfile(arquivo): # REDIRECT CASO NÃO ENCONTRAR O ARQUIVO return redirect('/') imagem = '%s/%s' % (settings.MEDIA_ROOT, "sua_imagem_aqui.jpg") # CRIAÇÃO DO PDF EM MODO PAISAGEM , TAMANHO A4 c = canvas.Canvas(arquivo, pagesize=landscape(A4)) c.drawImage( '%s' % imagem, 0, 0, 29.7*cm, 21*cm ) # DEFINIÇÃO DE FONTE, FAMILIA, TAMANHO E COR c.setFont("Helvetica", 16) c.setFillColor(HexColor(0x094d8a)) # ESCRITA DO TEXTO POR CIMA DA IMAGEM COM ALINHAMENTO c.drawString(18.4*cm, 14*cm, "%s" % participante.nome) # GERAÇÃO E CRIACAO DO PDF c.showPage() c.save() # REDIRECT PARA VIEW QUE FORCARÁ O DOWNLOAD return redirect('certificados:download',participante.id) def get(self, request, *args, **kwargs): return redirect('/') ############################################################# # DOWNLOAD ############################################################# class ForceDownload(View): def get(self, request, *args, **kwargs): from django.http import HttpResponse from os import path import mimetypes arquivo = '%s/uploads/%s.pdf' % (settings.MEDIA_ROOT, kwargs['pk']) if not (path.exists(arquivo)): raise Http404 mimetype, encoding = mimetypes.guess_type(arquivo) if mimetype is None: mimetype = 'application/force-download' file = arquivo.split("/")[-1] response = HttpResponse(open(arquivo, 'r').read()) response['Content-Type'] = mimetype response['Pragma'] = 'public' response['Expires'] = '0' response['Cache-Control'] = 'must-revalidate, post-check=0, pre-check=0' response['Content-Disposition'] = 'attachment; filename=%s' % file response['Content-Transfer-Encoding'] = 'binary' response['Content-Length'] = str(path.getsize(arquivo)) return response # Create your views here.
E no urls deixe da seguinte forma:
# coding: utf-8 from django.conf.urls import patterns, include, url from . import views urlpatterns = patterns('', ############################################################################ # DOWNLOADS ############################################################################ url(r'^downloads/(?P<pk>\d+)/$', views.ForceDownload.as_view(), name='download'), ############################################################################ # CERTIFICADO ############################################################################ url(r'^(?P<slug>[-\w]+)/$', views.PDFView.as_view(), name='pdf_detail'), )
hasta!
Nenhum comentário:
Postar um comentário