image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Raissa Azevedo
Raissa Azevedo18/09/2023 17:59
Compartilhe

COMO GERAR UM ARQUIVO PDF COM DJANGO

  • #Django
  • #Python

Gerar arquivos PDF com o Django Framework é crucial para oferecer aos usuários a capacidade de salvar e compartilhar informações de forma conveniente e padronizada. Isso melhora a experiência do usuário, facilita a impressão de documentos e ajuda na distribuição de relatórios, documentos legais e outros conteúdos críticos de maneira profissional e acessível.

Além disso, o PDF é um formato amplamente compatível, garantindo que os dados sejam acessíveis em diferentes dispositivos e sistemas operacionais.

Então aqui está o seu pequeno tutorial de como gerar um arquivo PDF com Django!

# Técnica 1

O que você vai precisar?

  • Claramente do django, um nome de projeto e uma aplicação.
pip3 install django 
django-admin startproject relatorio . 
django-admin startapp core

Fazer as configurações necessárias no settings.py

Usar a biblioteca Reportlab recomendada nas documentações do Django:

pip3 install reportlab 
python3 manage.py shell 
import reportlab 

Executar os seguintes passos para verificar se não houve nenhum erro na instalação da biblioteca.

Criar um arquivo de rotas na aplicação core: 

from django.urls import path 
from .views import IndexView 


urlpatterns = [ 
  path('', IndexView.as_view(), name='index'), 
]

Avisar a rotas do projeto:

from django.contrib import admin 
from django.urls import path, include 

urlpatterns = [ 
    path('', include('core.urls')), 
    path('admin/', admin.site.urls), 
]

Criando os comandos para a geração do PDF:

Na views.py:

import io
from django.http import FileResponse
from django.views.generic import View
from reportlab.pdfgen import canvas



class IndexView(View):
  def get(self, request, *args, **kwargs):
      # Cria um arquivo para receber os dados e gerar o PDF
      buffer = io.BytesIO()


      # Cria o arquivo PDF
      pdf = canvas.Canvas(buffer)


      # Insere "coisas" no PDF
      pdf.drawString(100, 100, "Gerando PDF com Django")


      # Ao finalizar a inserção de coisas
      pdf.showPage()
      pdf.save()


      # Por fim, retornar o buffer para o inicio do arquivo
      buffer.seek(0)
      return FileResponse(buffer, as_attachment=True, filename='Relatorio1.pdf')


  # Abre o PDF direto no navegador
  return FileResponse(buffer, filename='Relatorio1.pdf')

Isso irá gerar um página em PDF.

O reportlab possui duas versões, a opensource com algumas limitações, e a versão paga.

Há outra forma de gerar PDF com Django:

# Técnica 2

Através da biblioteca WeasyPrint que é opensource e desenvolvido para usar com Python.

A partir de uma página HTML essa biblioteca printa a página e gera o arquivo PDF.

pip3 install WeasyPrint

No template de relatório.html: 

<!DOCTYPE html>
<html lang="pt-br">


<head>
  <meta charset="UTF-8">
  <title>Report - Django</title>
  <style>
      body {
          background: #0080ff;
      }
  </style>
</head>


<body>
  <h1>Report - Django</h1>
  {% for p in texto %}
  <p>{{ p }}</p>
  {% endfor %}
</body>


</html>

Na views.py: 

from django.core.files.storage import FileSystemStorage
from django.template.loader import render_to_string
from django.http import HttpResponse
from weasyprint import HTML



class Index2View(View):
  def get(self, request, *args, **kwargs):
      texto = [
          'Gerando arquivo PDF', 'Evolua seu lado Programador Django',
          'Programação Web com Python e Django'
          ]
      
      html_string = render_to_string(
          'relatorio.html', 
          {'texto': texto}
          )
      
      html = HTML(
          string=html_string
          )
      
      html.write_pdf(
          target='/tmp/relatorio2.pdf'
          )
      
      fs = FileSystemStorage('/tmp')


      with fs.open('relatorio2.pdf') as pdf:
          response = HttpResponse(pdf, content_type='application/pdf')
          # Faz o download do arquivo PDF
          # response['Content-Disposition'] = 'attachment: filename="relatorio2.pdf"'
          # Abre o PDF como página HTML:
          response['Content-Disposition'] = 'inline: filename="relatorio2.pdf"'
      return response

Na urls.py da aplicação:

from django.urls import path
from .views import IndexView, Index2View


urlpatterns = [
  path('', IndexView.as_view(), name='index'),
  path('2/', Index2View.as_view(), name='index2'),
]

Agora você conhece duas formas de gerar arquivos PDF com Django Framework :)

OBS. Lembrando que essas técnicas são feitas para adaptar para uma página Web já criada.

Compartilhe
Comentários (1)

RS

Rívea Souza - 18/09/2023 18:16

Gratidão

Sou iniciante e seu posto me ajudou muito.

Parabéns