📜  django 中的 pdfs - Python (1)

📅  最后修改于: 2023-12-03 15:14:43.700000             🧑  作者: Mango

Django 中的 PDFs - Python

Django is a high-level web framework written in Python. It makes it easy to build web applications and provides many useful features out of the box, including support for generating PDFs.

In this article, we will explore how to generate PDFs using Django and Python.

Installing Dependencies

Before we start, we need to make sure that all the necessary dependencies are installed. To generate PDFs in Django, we can use the PyPDF2 library. We can install it using pip:

pip install PyPDF2
Generating PDFs

To generate PDFs in Django, we need to follow these basic steps:

  1. Create a view that generates the PDF.
  2. Define a template that will be rendered as a PDF.
  3. Create a PDF response from the rendered template.
Creating a View

Let's create a simple view that generates a PDF:

from django.template.loader import get_template
from django.http import HttpResponse
from io import BytesIO
import zipfile
import os

def generate_pdf(request):
    # Get the template
    template = get_template('mypdf.html')

    # Render the template with the data
    context = {'title': 'My PDF'}
    html = template.render(context)

    # Create a PDF response
    pdf = BytesIO()
    pdf.write(html.encode('utf-8'))
    pdf.seek(0)
    response = HttpResponse(pdf, content_type='application/pdf')
    response['Content-Disposition'] = 'filename="mypdf.pdf"'

    return response

This view first loads a template called 'mypdf.html' and renders it with some data in the context. It then creates a PDF response from the rendered HTML using the PyPDF2 library.

Defining a Template

Let's create a simple template that will be rendered as a PDF:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>{{ title }}</title>
    </head>
    <body>
        <h1>{{ title }}</h1>
        <p>Hello, World!</p>
    </body>
</html>

This template contains some basic HTML and uses the 'title' variable that we passed in the context.

Creating a PDF Response

Finally, we need to create a PDF response from the rendered HTML. We do this by first rendering the template with the data and then using the PyPDF2 library to convert the HTML to PDF.

pdf = BytesIO()
pdf.write(html.encode('utf-8'))
pdf.seek(0)
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'filename="mypdf.pdf"'

This code creates a BytesIO object to store the PDF data in memory, writes the rendered HTML to the object, and then creates an HttpResponse object to return the PDF data to the user.

Conclusion

Generating PDFs in Django is easy thanks to the PyPDF2 library. By following the steps outlined in this article, you can quickly create PDFs from your Django views.