---
title: "How to create PDF files"
version: 6.1
locale: pt-br
source: https://docs.djangoproject.com/pt-br/6.1/howto/outputting-pdf/
canonical: https://djangodocs.dev/pt-br/6.1/howto/outputting-pdf/
---
# How to create PDF files

Este documnto explica como gerar arquivos PDF dinamicamente usando “views” Django. Isso é possível através da excelente, biblioteca Python de código-aberto [RepostLab](https://docs.reportlab.com/) .

A vantagem de gerar arquivos PDF dinamicamente é que você pode criar PDFs personalizados para diferentes propósitos – vamos dizer, para diferentes usuários ou diferentes partes de conteúdo.

Por exemplo, o DJango foi usado no [kusports.com](https://www2.kusports.com/) para gerar relatórios personalizados, prontos para impressão, de pontuação de torneio da NCAA, como arquivos PDF, para pessoas que participam do concurso March Madness.

## Instalar o ReportLab

The ReportLab library is [available on PyPI](https://pypi.org/project/reportlab/). A [user guide](https://www.reportlab.com/docs/reportlab-userguide.pdf)
(not coincidentally, a PDF file) is also available for download.
You can install ReportLab with `pip`:

```console
$ python -m pip install reportlab
```

*Windows*

```doscon
...\> py -m pip install reportlab
```

Test your installation by importing it in the Python interactive interpreter:

```pycon
>>> import reportlab
```

Se o comando não emitir nenhum erro, a instalação funciona.

## Escreva sua “view”

A chave para gerar PDFs dinamicamente com Django é que a API do ReportLab atua em objetos tipo arquivo, e objetos da classe do Django [`FileResponse`](/pt-br/6.1/ref/request-response/#django.http.FileResponse) aceitam objetivos tipo arquivo.

Aqui um exemplo “Hello World”:

```
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas

def some_view(request):
    # Create a file-like buffer to receive PDF data.
    buffer = io.BytesIO()

    # Create the PDF object, using the buffer as its "file."
    p = canvas.Canvas(buffer)

    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")

    # Close the PDF object cleanly, and we're done.
    p.showPage()
    p.save()

    # FileResponse sets the Content-Disposition header so that browsers
    # present the option to save the file.
    buffer.seek(0)
    return FileResponse(buffer, as_attachment=True, filename="hello.pdf")
```

O código e comentário devem ser auto-explanaveis, mas algumas coisas merecem uma menção.

- The response will automatically set the MIME type `application/pdf`
  based on the filename extension. This tells browsers that the document is a
  PDF file, rather than an HTML file or a generic
  `application/octet-stream` binary content.
- When `as_attachment=True` is passed to `FileResponse`, it sets the
  appropriate `Content-Disposition` header and that tells web browsers to
  pop-up a dialog box prompting/confirming how to handle the document even if a
  default is set on the machine. If the `as_attachment` parameter is omitted,
  browsers will handle the PDF using whatever program/plugin they’ve been
  configured to use for PDFs.
- Você pode fornecer um parâmetro `filename` arbitrário. Ele será usado para os navegadores na caixa de diálogo “Salvar como…”.
- You can hook into the ReportLab API: The same buffer passed as the first
  argument to `canvas.Canvas` can be fed to the
  [`FileResponse`](/pt-br/6.1/ref/request-response/#django.http.FileResponse) class.
- Note que todas os methods de geração de PDF subsequentes são chamados no objeto PDF (nesse caso, `p`) – não no `buffer`.
- E finalmente, é importante chamar `showPage()` e o  `save()` no arquivo PDF.

> **Note**
>
> O ReposrtLab não tem mecanismos de segurança para ser usado de maneira concorrente, ou não é thread-safe. Alguns de nossos usuários tem relatado problemas ímpares ao gerar PDF em “views” Django que são acessadas por muitos usuários ao mesmo tempo.

## Outros formatos

Note que não tem muito nestes exemplos que seja especificamente sobre PDF – apenas as partes usando `reportlab`. Você pode usar técnicas similares para gerar qualquer outro formato arbitrário para a qual você encontre uma bilioteca Python. Veja também [How to create CSV output](/pt-br/6.1/howto/outputting-csv/) para outro exemplo e algumas técnicas que você pode usar quando quiser gerar fomatos baseados em texto.

> **See also**
>
> O Django Packages fornece uma ferramenta para [comparação de pacotes](https://djangopackages.org/grids/g/pdf/) que auxiliam a geração de arquivos PDF com o Django
