Bagaimana membuat berkas PDFLink to this heading
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.
Pasang ReportLabLink to this heading
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:
Linux / macOS
$ python -m pip install reportlab
Windows
...\> 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.
Tulis tampilan andaLink to this heading
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:
Tanggapan akan otomatis menyetel jenis MIME application/pdf berdasarkan pada ekstensi nama berkas. Ini memberitahu peramban bahwa dokumen adalah berkas PDF, daripada berkas HTML atau isi biner umum application/octet-stream.
When
as_attachment=Trueis passed toFileResponse, it sets the appropriateContent-Dispositionheader 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 theas_attachmentparameter is omitted, browsers will handle the PDF using whatever program/plugin they've been configured to use for PDFs.Anda dapat menyediakan parameter
filenameyang berubah-ubah. Itu akan digunakan oleh peramban dalam dialog "Save as...".Anda dapat mengkaitkan kedalam API ReportLab: Wadah sama dilewatkan sebagai argumen pertama pada
canvas.Canvasbisa diberi makan ke kelas theFileResponse.Catat bahwa semua cara pembangkitan-PDF berikutnya dipanggil pada obyek PDF (dalam kasus ini,
p) -- bukan padabuffer.Akhirnya, sangatlah penting memanggil
showPage()dansave()pada berkas PDF.
Bentuk lainLink to this heading
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.