A Django app for rendering PDF documents with WeasyPrint
Project description
Django BootyPrint
A Django app for rendering PDF documents with WeasyPrint and BootyPrint.
Installation
pip install django-bootyprint
# or with uv
uv add django-bootyprint
Requirements
- Python 3.13+
- Django 5.1.7+
- WeasyPrint 65.0+
Quick Start
- Add
'bootyprint'to yourINSTALLED_APPSsetting:
INSTALLED_APPS = [
...
'bootyprint',
...
]
- Customize settings in your settings.py (optional):
See WeasyPrint PDF generation options for the options in PDF_OPTIONS
BOOTYPRINT = {
'DEFAULT_TEMPLATE': 'myapp/my_template.html', # Override default template
'PDF_OPTIONS': {
'media_type': 'print',
'pdf_identifier': None,
'pdf_variant': None,
'pdf_version': None,
'pdf_forms': False,
'uncompressed_pdf': False,
'custom_metadata': False,
'srgb': True,
'optimize_images': True,
'jpeg_quality': 95,
'presentational_hints': False,
'dpi': 96,
'full_fonts': True,
'hinting': True,
},
'CACHE_ENABLED': True, # Enable caching (default: True)
'CACHE_TIMEOUT': 3600, # Cache timeout in seconds (default: 86400 - 24 hours)
}
Usage
Basic Usage
from bootyprint.utils import generate_pdf
from django.http import HttpResponse
def my_pdf_view(request):
# Generate PDF from template
context = {'title': 'My Document', 'content': 'Hello World'}
pdf_content = generate_pdf(
template_name='myapp/my_template.html',
context=context,
encoding='utf-8'
)
# Return as response
response = HttpResponse(pdf_content, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="my_document.pdf"'
return response
Using PDFResponse
from bootyprint.views import PDFResponse
from bootyprint.utils import generate_pdf
def my_pdf_view(request):
context = {'title': 'My Document', 'content': 'Hello World'}
pdf_content = generate_pdf(
template_name='myapp/my_template.html',
context=context
)
return PDFResponse(pdf_content, filename='my_document.pdf')
Using PDFTemplateResponse
from django.views.generic import DetailView
from bootyprint.views import PDFTemplateResponse
def my_pdf_view(request):
context = {'title': 'My Document', 'content': 'Hello World'}
return PDFTemplateResponse(
request=request,
template='myapp/my_template.html',
context=context,
filename='my_document.pdf'
)
class MyPDFView(DetailView):
model = MyModel
template_name = "myapp/my_template.html"
response_class = PDFTemplateResponse
Template Tags
Load BootyPrint
The latest BootyPrint is included in this library. The bootyprint_css template tag loads it into the html template.
{% load bootyprint %}
<head>
{% bootyprint_css %}
<style>
:root {
--primary: #3f51b5;
--secondary: #2196f3;
--font-size-base: 11px;
--page-size: A4;
--page-margin: 10mm;
}
</style>
</head>
Local paths to static files
Usually it's the easiest way to provide local, absolute file paths to resources to WeasyPrint. The template tag
local_static is like django's static tag, but returns a local path.
{% load bootyprint %}
<img src="{% local_static "img/default_avatar" %}" alt="My Profile Image">
Templates
Bootyprint comes with a default template (bootyprint/default.html) that you can extend or override. Your templates should be valid HTML that WeasyPrint can render to PDF.
Example template:
{% extends "bootyprint/default.html" %}
{% block content %}
<h1>{{ title }}</h1>
<p>{{ content }}</p>
<table>
<thead>
<tr>
<th>Item</th>
<th>Price</th>
</tr>
</thead>
<tbody>
{% for item in items %}
<tr>
<td>{{ item.name }}</td>
<td>${{ item.price }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block footer %}
Generated on {{ generation_date|date:"F j, Y" }}
{% endblock %}
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_bootyprint-0.0.2.tar.gz.
File metadata
- Download URL: django_bootyprint-0.0.2.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9695819cbd4ed9026978309723e550735cab9613857721fa576907cc41abdca
|
|
| MD5 |
3fe15ad0818449aec5f4043f238d9f5d
|
|
| BLAKE2b-256 |
8e2774215deb014ded1180111810b43ad520649e7c9c0e5af7c69b2ed88c84cf
|
File details
Details for the file django_bootyprint-0.0.2-py3-none-any.whl.
File metadata
- Download URL: django_bootyprint-0.0.2-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a151ef8c0761cd31c0c6bfb692b79bb694fed57d2817f3d0ee1a8af016e2eafa
|
|
| MD5 |
1cc6a6954102c32c0dcc23b696706168
|
|
| BLAKE2b-256 |
083b574c337291623d1fbc0d2463d32eb2310a6842b1b82d3725b85189fcc696
|