---
title: "Så här skapar du PDF-filer"
version: 6.0
locale: sv
source: https://docs.djangoproject.com/sv/6.0/howto/outputting-pdf/
canonical: https://djangodocs.dev/sv/6.0/howto/outputting-pdf/
---
# Så här skapar du PDF-filer

Detta dokument förklarar hur man dynamiskt kan skriva ut PDF-filer med hjälp av Django-vyer. Detta möjliggörs av det utmärkta PDF-biblioteket [ReportLab](https://docs.reportlab.com/) Python med öppen källkod.

Fördelen med att generera PDF-filer dynamiskt är att du kan skapa anpassade PDF-filer för olika ändamål, t.ex. för olika användare eller olika delar av innehållet.

Till exempel användes Django på [kusports.com](https://www2.kusports.com/) för att generera anpassade, utskriftsvänliga NCAA-turneringsfästen som PDF-filer för personer som deltog i en March Madness-tävling.

## Installera ReportLab

ReportLab-biblioteket är [tillgängligt på PyPI](https://pypi.org/project/reportlab/). En [användarhandledning](https://www.reportlab.com/docs/reportlab-userguide.pdf) (inte av en tillfällighet en PDF-fil) finns också tillgänglig för nedladdning. Du kan installera ReportLab med `pip`:

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

*Windows*

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

Testa din installation genom att importera den i Pythons interaktiva tolk:

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

Om kommandot inte ger några felmeddelanden har installationen fungerat.

## Skriv din åsikt

Nyckeln till att generera PDF-filer dynamiskt med Django är att ReportLab API agerar på filliknande objekt, och Djangos [`FileResponse`](/sv/6.0/ref/request-response/#django.http.FileResponse)-objekt accepterar filliknande objekt.

Här är ett exempel på ”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")
```

Koden och kommentarerna borde vara självförklarande, men det finns några saker som förtjänar att nämnas:

- Svaret kommer automatiskt att ställa in MIME-typen `application/pdf` baserat på filnamnstillägget. Detta talar om för webbläsare att dokumentet är en PDF-fil, snarare än en HTML-fil eller ett generiskt binärt innehåll av typen `application/octet-stream`.
- När `as_attachment=True` skickas till `FileResponse`, anges lämplig `Content-Disposition` header och det säger till webbläsare att popa upp en dialogruta som frågar/bekräftar hur dokumentet ska hanteras även om en standard är inställd på maskinen. Om parametern `as_attachment` utelämnas kommer webbläsarna att hantera PDF-filen med hjälp av det program/plugin som de har konfigurerats för att använda för PDF-filer.
- Du kan ange en godtycklig parameter för `filnamn`. Den kommer att användas av webbläsare i dialogrutan ”Spara som…”.
- Du kan koppla in dig på ReportLab API: Samma buffert som skickas som det första argumentet till `canvas.Canvas` kan matas till [`FileResponse`](/sv/6.0/ref/request-response/#django.http.FileResponse)-klassen.
- Observera att alla efterföljande PDF-genereringsmetoder anropas på PDF-objektet (i detta fall `p`) - inte på `buffer`.
- Slutligen är det viktigt att anropa `showPage()` och `save()` på PDF-filen.

> **Note**
>
> ReportLab är inte trådsäkert. Några av våra användare har rapporterat konstiga problem med att bygga PDF-genererande Django-vyer som nås av många personer samtidigt.

## Andra format

Lägg märke till att det inte finns mycket i dessa exempel som är PDF-specifikt - bara de delar som använder `reportlab`. Du kan använda en liknande teknik för att generera vilket godtyckligt format som helst som du kan hitta ett Python-bibliotek för. Se även [Hur man skapar CSV-utdata](/sv/6.0/howto/outputting-csv/) för ett annat exempel och några tekniker som du kan använda när du genererar textbaserade format.

> **See also**
>
> Django Packages ger en jämförelse av paket \<<https://djangopackages.org/grids/g/pdf/>\>\`\_ som hjälper till att generera PDF-filer från Django.
