Dokumen ini menjelaskan bagaimana mengeluarkan berkas-berkas PDF secara dinamis menggunakan tampilan Django. Ini dibuat mungkin oleh istimewa, sumber terbuka pustaka PDF Python ReportLab.
Keuntungan dari membangkitkan berkas-berkas PDF secara dinamis adalah bahwa anda dapat membuat penyesuaian PDF untuk tujuan berbeda -- katakan, untuk pengguna berbeda atau potongan berbeda dari isi.
Sebagai contoh, Django telah digunakan pada kusports.com untuk membangkitkan penyesuaian, kurung turnamen NCAA ramah-mencetak, sebagai berkas-berkas PDF, untuk orang yang ikut serta di perlombaan March Madness.
The ReportLab library is available on PyPI. A user guide
(not coincidentally, a PDF file) is also available for download.
You can install ReportLab with pip
:
$ python -m pip install reportlab
...\> py -m pip install reportlab
Test your installation by importing it in the Python interactive interpreter:
>>> import reportlab
Jika perintah itu tidak menimbulkan kesalahan apapun, pemasangan bekerja.
Kunci untuk membangkitkan PDF secara dinamis dengan Django adalah bahwa API ReportLab bertindak pada merasa-seperti obyek.
Ini adalah contoh "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")
Kode dan komentar seharunya sudah cukup jelas, tetapi sedikit hal pantas disebut:
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.filename
yang berubah-ubah. Itu akan digunakan oleh peramban dalam dialog "Save as...".canvas.Canvas
bisa diberi makan ke kelas the FileResponse
.p
) -- bukan pada buffer
.showPage()
dan save()
pada berkas PDF.Catatan
ReportLab tidak thread-safe. Beberapa dari pengguna kami telah melaporkan masalah-masalah ganjil dengan membangun tampilan Django pembangkitan-PDF yang diakses oleh banyak orang pada waktu yang sama.
Perhatikan bahwa tidak ada banyak di contoh ini yaitu spesifik-PDF -- cukup bit menggunakan reportlab
. Anda dapat menggunakan teknik mirip untuk membangkitkan bentuk berubah-ubah yang anda dapat temukan pustaka Python. Juga lihat Bagaimana membuat keluaran CSV untuk contoh lainnya dan beberapa teknik anda dapat gunakan ketika membangkitkan bentuk berbasis-teks.
Lihat juga
Paket Django menyediakan comparison of packages yang membantu membangkitkan berkas PDF dari Django.
Des 04, 2023