Skip to main content

PyPI version

django-advanced-pdf

django-advanced-pdf is a Django app for building PDFs from XML templates (with Django template syntax), powered by ReportLab.

This repository contains:

  • the reusable package: django_advanced_pdf/
  • a runnable Django demo project: django_examples/

What this project does

You can generate PDFs by:

  1. Rendering XML stored in the database (PrintingTemplate)
  2. Rendering XML files from templates
  3. Rendering in background tasks (Celery helper included)

The XML supports rich layout features such as:

  • tables, row/column spans, nested tables
  • custom style blocks and inline style attributes
  • page borders and page-level pager/header/footer blocks
  • conditional/hidden rows/columns
  • overflow handling for long cells
  • embedded PNG/SVG and object injection

Quick start (Docker, easiest)

From repository root:

docker compose up --build

Then open:

  • http://localhost:8012/ (example app)

The compose stack includes:

  • Django app
  • Postgres (db_pdf)
  • Redis (redis)
  • Celery worker

Local setup (without Docker)

1) Install dependencies

python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

2) Configure database/cache for the demo app

The example project settings are in:

  • django_examples/django_examples/settings.py

By default, the demo uses Postgres + Redis hostnames intended for Docker:

  • DB host: db_pdf
  • Redis host: redis on port 6380

If running fully local, update these to your local services.

3) Run migrations and start server

cd django_examples
python manage.py migrate
python manage.py runserver 0.0.0.0:8012

4) (Optional) load sample data

python manage.py import_advanced_pdf

Integrate into your own Django project

1) Install package

pip install django-advanced-pdf

2) Add app

INSTALLED_APPS = [
    # ...
    "django_advanced_pdf",
]

3) Include URLs (for task PDF download/modal helpers)

from django.urls import include, path

urlpatterns = [
    # ...
    path("pdf/", include("django_advanced_pdf.urls", namespace="django_advanced_pdf")),
]

Common usage patterns

A) Render from a database template (PrintingTemplate)

from django_advanced_pdf.models import PrintingTemplate

template = PrintingTemplate.objects.get(name="invoice")
result = template.make_pdf(context={"invoice": invoice})

pdf_bytes = result["pdf_data"].getvalue()
has_xml_warnings = result["has_potential_xml_errors"]

B) Render XML directly with ReportXML

from django_advanced_pdf.engine.report_xml import ReportXML

xml = """
<document title="Example" page_size="A4">
  <table>
    <tr><td>Hello world</td></tr>
  </table>
</document>
"""

report = ReportXML()
buffer = report.load_xml_and_make_pdf(xml)
pdf_bytes = buffer.getvalue()

C) Class-based view for database templates

Inherit from django_advanced_pdf.views.standard.DatabasePDFView and set the model instance.


XML template quick reference

Root element

<document
    title="My report"
    page_size="A4"
    page_orientation="portrait"
    page_style="borders"
    border_top_first="10"
    border_bottom_first="10"
    border_left_first="10"
    border_right_first="10">
    ...
</document>

Frequently used tags

  • <style>...</style>: define reusable classes
  • <table>, <tr>, <td>: table layout
  • <header>, <footer> inside table
  • <keep> wrapper for “keep-with-next” row groups
  • <p>: paragraph block
  • <spacer style="height:10">
  • <page_break/>
  • <obj ...>: inject Python objects from object_lookup
  • <pagers><pager ...>...</pager></pagers>: page-level fixed blocks

Styling

Styles are CSS-like but mapped to ReportLab table/paragraph options. Examples seen in this repository:

  • inner_grid:0.25,#000000
  • box:0.5,#000000
  • text_color:#0000FF
  • background:#F0F0F0
  • line_below:0.5,#000000
  • left_padding:1

Reference examples:

  • django_examples/advanced_pdf_examples/templates/file_examples/basic.xml
  • .../border.xml
  • .../pager.xml
  • .../hidden.xml

Background task flow (Celery)

The helper base class is:

  • django_advanced_pdf.tasks.TaskProcessPDFHelper

Typical flow:

  1. build PDF in task (build_pdf)
  2. save bytes + filename to Django cache
  3. redirect user to django_advanced_pdf:view_task_pdf for download
  4. or open modal via django_advanced_pdf:view_task_pdf_modal

Example task implementation:

  • django_examples/advanced_pdf_examples/tasks.py

Demo routes worth checking

From the demo project root URL:

  • / database templates demo
  • /files/ file-based XML demos
  • /view/companies/ context-driven companies PDF
  • /report/example/ merged report sample
  • /report/headed-notepaper/ background image example
  • /tasks/<slug>/ task/modal examples

Running tests

Package tests live in:

  • django_advanced_pdf/tests.py

Run:

python -m unittest django_advanced_pdf.tests

Troubleshooting

  • Blank/failed output: check malformed XML and inspect has_potential_xml_errors.
  • Task PDF not downloadable: verify cache backend + Redis connectivity.
  • Demo app DB errors: ensure Postgres connection values match your environment.
  • Missing static/demo assets: run from repo layout expected by django_examples.

Demo video

An automated demo recording script is included at:

scripts/create_demo_video.py

It starts the Django example project with demo-friendly settings (django_examples.settings_demo), walks through a few routes, and saves a video to demo/django-advanced-pdf-demo.mp4.

Generate locally

pip3 install -r requirements.txt
pip3 install playwright
python3 -m playwright install chromium
python3 scripts/create_demo_video.py

License

MIT (see LICENSE).

Metadata

Release files for django-advanced-pdf 0.2.24

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-advanced-pdf 0.2.24
File Size Uploaded Provenance
django_advanced_pdf-0.2.24.tar.gz 4.3 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for django-advanced-pdf 0.2.24
File Interpreter ABI Platform
django_advanced_pdf-0.2.24-py3-none-any.whl Python 3 none any Details

Total release size: 8.5 MB

Release files / django_advanced_pdf-0.2.24.tar.gz

Download URL django_advanced_pdf-0.2.24.tar.gz
Size 4.3 MB
Tags Source
SHA-256 checksum
How to use checksums
38369d1bfa1a0b8fd7ccbd88f34a369e6183bd5dfaa9a8be28bccc9d4b1c700a
BLAKE2b-256 checksum
How to use checksums
8f4edfabd31c117bebaff83ef412dba1da02f7694088cbed7459a4ca565ae628
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / django_advanced_pdf-0.2.24-py3-none-any.whl

Download URL django_advanced_pdf-0.2.24-py3-none-any.whl
Size 4.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
98b6d6566b3e8582cd6c5ab55f280e30d6eef00c0225a3f6bc446d101f06d9e0
BLAKE2b-256 checksum
How to use checksums
5fd9ea3bdbeb7574d435bbff5b0a9dbab0f38c2f667a63a214a365f52bbfee53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Security for django-advanced-pdf 0.2.24

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for django_advanced_pdf-0.2.24.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.24 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page