- 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