Skip to content

Instantly share code, notes, and snippets.

@CleitonDeLima
Last active October 15, 2021 00:59
Show Gist options
  • Save CleitonDeLima/5deb1495402105e31415211d38df69a2 to your computer and use it in GitHub Desktop.
Save CleitonDeLima/5deb1495402105e31415211d38df69a2 to your computer and use it in GitHub Desktop.
Exemplo de response com pdf
class EmpresaReportView(BSModalFormView):
template_name = 'report_form.html'
def get_form_class(self):
nameform = self.kwargs['reponame']
if nameform:
self.form_class = eval(nameform)
return self.form_class
# incremento o contexto para o template
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = self.kwargs['repotitle']
context['reponame'] = self.kwargs['reponame']
return context
def form_valid(self, form):
model = Empresa
context = self.get_context_data()
# coleto os dados de filtro do report
lfilters = generatefilterreport(self, request)
# gero o queryset com aplicacao dos filtros
qs = buildqueryset(request, lfilters, model, 'codigo')
mypdf = relatorio_empresa()
response = HttpResponse(content_type='application/pdf')
response.write(mypdf)
# para baixar o relatorio (download) quando clicado no link
response['Content-Disposition'] = 'inline; attachment; filename="mypdf.pdf"'
return response
# relatorio pdf
def relatorio_empresa():
# obrigatorio criar o buffer e objeto canvas
buffer = io.BytesIO()
p = canvas.Canvas(buffer)
# escrevendo no relatorio coordenadas y e x... tipo @say
p.drawString(200, 810, 'Relatório de Funcionários')
# construindo linha abaixo do titulo
p.drawString(0, 800, '_' * 150)
p.showPage()
p.save()
buffer.seek(io.SEEK_SET)
pdf = buffer.getvalue()
return pdf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment