Skip to main content

Django PDFutils

Project description

A simple django app to generate PDF documents.


  1. In your, add pdfutils to your INSTALLED_APPS.
  2. (r’^reports/’, include(, to your
  3. Add pdfutils.autodiscover() to your
  4. Create a file in any installed django application.
  5. Create your report(s)
  6. Profit!

Note: If you are using buildout, don’t forget to put pdfutils in your eggs section or else the django-pdfutils dependencies wont be installed.

Example report

Reports are basically views with custom methods and properties.

# -*- coding: utf-8 -*-

from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _

from pdfutils.reports import Report
from pdfutils.sites import site

class MyUserReport(Report):
    title = _('Users')
    template_name = 'myapp/reports/users-report.html'
    slug = 'users-report'
    orientation = 'portrait'

    def get_users(self):
        return User.objects.filter(is_staff=True)

    def get_styles(self):
        It is possible to add or override style like so
        return super(AccountStatementReport, self).get_styles()

    def filename(self):
        The filename can be generated dynamically and translated
        return _('Users-report-%(count)s.pdf') % {'count': self.get_users().count() }

    def get_context_data(self):
        Context data is injected just like a normal view
        context = super(AccountStatementReport, self).get_context_data()
        context['user_list'] = self.get_users()
        return context


The slug should obviously be unique since it is used to build the report URL.

For example, with the default settings and URLs, the URL for report above would be /reports/users-report/.

Example template

        {{ STYLES|safe }}
    <body class="{% if landscape %}landscape{% else %}portrait{% endif %}">
            {% for user in user_list %}
            <li>{{ user }}</li>
            {% endif %}
        <a href="{% url 'pdfutils:your_report_slug' %}?format=html">Add ?format=html for easy template debug</a>

Some template variables are injected by default in reports:

  • title
  • slug
  • orientation

Overriding default CSS

Since the default CSS (base.css, portrait.css, landscape.css) are normal static files, they can be overrided from any other django app which has a pdfutils folder in their static folder.

Note: Be sure your applications are listed in the right order in INSTALLED_APPS !


  • django >=1.4, < 1.5.99
  • decorator == 3.4.0, <= 3.9.9
  • PIL == 1.1.7
  • reportlab == 2.5
  • html5lib == 0.90
  • httplib2 == 0.9
  • pyPdf == 1.13
  • xhtml2pdf == 0.0.4
  • django-xhtml2pdf == 0.0.3

Note: dependencies versions are specified in The amount of time required to find the right combination of dependency versions is largely to blame for the creation of this project.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
PDFutils-1.1.3.tar.gz (8.4 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page