Last active
October 15, 2021 00:59
-
-
Save CleitonDeLima/5deb1495402105e31415211d38df69a2 to your computer and use it in GitHub Desktop.
Exemplo de response com pdf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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