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

Αυτό το άρθρο εξηγεί πως να εξάγετε αρχεία PDF, δυναμικά, χρησιμοποιώντας τα Django views. Αυτό είναι εφικτό, με τη χρήση της εξαιρετικής, ανοιχτού λογισμικου PDF βιβλιοθήκης της Python, [ReportLab](https://www.reportlab.com/opensource/).

Το πλεονέκτημα της παραγωγής δυναμικών αρχείων PDF είναι ότι μπορείτε να δημιουργείτε παραμετροποιήσιμα PDFs για διαφορετικούς σκοπούς – πχ, για διαφορετικούς χρήστες ή διαφορετικά κομμάτια δεδομένων.

Για παράδειγμα, το Django χρησιμοποιήθηκε στο [kusports.com](http://www2.kusports.com/) για να παράγει παραμετροποιήσιμα, φιλικά προς εκτύπωση αποτελέσματα αγώνων μπάσκετ (NCAA tournament brackets), ως αρχεία PDF, για αυτούς που συμμετέχουν στον διαγωνισμό March Madness.

## Εγκατάσταση της βιβλιοθήκης ReportLab

Η βιβλιοθήκη ReportLab είναι [διαθέσιμη στο PyPI](https://pypi.python.org/pypi/reportlab). Ένας [οδηγός χρήστη](http://www.reportlab.com/docs/reportlab-userguide.pdf) (όχι τυχαία, ένα PDF αρχείο) είναι επίσης διαθέσιμο για download. Μπορείτε να εγκαταστήσετε το ReportLab με το `pip`:

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

*Windows*

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

Ελέγξτε την εγκατάσταση της βιβλιοθήκης κάνοντας την import στο Python interactive shell σας (αν την έχετε εγκαταστήσει globally, τότε σε κονσόλα γράψτε πρώτα `python` ή `python3.x` όπου `x` η έκδοση Python που χρησιμοποιείτε):

```
>>> import reportlab
```

Αν αυτό δεν σας εμφανίσει κάποιο σφάλμα, η βιβλιοθήκη έχει εγκατασταθεί επιτυχώς.

## Γράψτε το view

The key to generating PDFs dynamically with Django is that the ReportLab API
acts on file-like objects, and Django’s [`FileResponse`](/el/4.1/ref/request-response/#django.http.FileResponse)
objects accept file-like objects.

Εδώ φαίνεται το κλασικό παράδειγμα «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')
```

Παρόλο που ο κώδικας και τα σχόλια είναι αρκετά επεξηγηματικά, θα πρέπει να αναφέρουμε μερικά πράγματα:

- 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.
- You can provide an arbitrary `filename` parameter. It’ll be used by browsers
  in the «Save as…» dialog.
- You can hook into the ReportLab API: The same buffer passed as the first
  argument to `canvas.Canvas` can be fed to the
  [`FileResponse`](/el/4.1/ref/request-response/#django.http.FileResponse) class.
- Note that all subsequent PDF-generation methods are called on the PDF
  object (in this case, `p`) – not on `buffer`.
- Στο τέλος είναι σημαντικό να καλέσετε τις μεθόδους `showPage()` και `save()` στο PDF object.

> **Note**
>
> Η βιβλιοθήκη ReportLab δεν είναι ασφαλής από πολλαπλά threads. Μερικοί από τους χρήστες ανέφεραν κάποια περίεργα προβλήματα όταν πολλοί χρήστες είχαν πρόσβαση, ταυτόχρονα, στα Django views που χρησιμοποιούνταν για να παράξουν PDF αρχεία.

## Άλλες μορφές τύπου κειμένου

Όπως είδατε, δεν υπάρχει κάτι συγκεκριμένο με το PDF εδώ – μόνο τα κομμάτια που χρησιμοποιούν τη βιβλιοθήκη `reportlab`. Μπορείτε να χρησιμοποιήσετε κάποια παρόμοια τεχνική για να εξάγετε οποιαδήποτε μορφή τύπου κειμένου, αρκεί να υπάρχει μια Python βιβλιοθήκη που να την υποστηρίζει. Δείτε στο άρθρο [εξάγοντας αρχεία CSV με το Django](/el/4.1/howto/outputting-csv/) για ένα άλλο παράδειγμα και μερικές τεχνικές που μπορείτε να χρησιμοποιήσετε όταν παράγετε αρχεία με μορφή τύπου κειμένου.

> **See also**
>
> Τα Django Packages παρέχουν [συγκριτικό πίνακα μεταξύ των πακέτων](https://djangopackages.org/grids/g/pdf/) ο οποίος βοηθά στη δημιουργία PDF αρχείων από το Django.
