Django PDFutils
Project description
django-pdfutils
A simple django app to generate PDF documents.
Installation
In your settings.py, add pdfutils to your INSTALLED_APPS.
(r’^reports/’, include(pdfutils.site.urls)), to your urls.py
Add pdfutils.autodiscover() to your urls.py
Create a report.py file in any installed django application.
Create your report(s)
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
from pdfutils.utils import memoize
class MyUserReport(Report):
title = _('Users')
template_name = 'myapp/reports/users-report.html'
slug = 'users-report'
orientation = 'portrait'
@memoize
def get_users(self):
"""
This method is not necessary, it is used to showcase the
memoize decorator which is included in utils. This prevent
methods from computing their output twice.
"""
return User.objects.filter(is_staff=True)
def get_styles(self):
"""
It is possible to add or override style like so
"""
self.styles.append('myapp/css/users-report.css')
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
site.register(MyUserReport)
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
<html>
<head>
{{ STYLES|safe }}
</head>
<body class="{% if landscape %}landscape{% else %}portrait{% endif %}">
<ul>
{% for user in user_list %}
<li>{{ user }}</li>
{% endif %}
</ul>
</body>
</html>
Some template variables are injected by default in reports:
title
slug
orientation
MEDIA_URL
STATIC_URL
STYLES
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 !
Dependencies
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.7.4
pyPdf == 1.13
xhtml2pdf == 0.0.4
django-xhtml2pdf == 0.0.3
Note: dependencies are specified in setup.py, thus are installed automatically.
Changelog
v1.0.6 (2015-03-27)
Cleanup. [Maxime Haineault]
v1.0.5 (2015-03-27)
Fixed build script. [Maxime Haineault]
v1.0.4 (2015-03-27)
Let pisa handle remote resources. [Maxime Haineault]
https://github.com/dulaccc/django-pdfutils/commit/e92304c2c952a902c6461787aec2cb269595b738
Add a url name property to the urlpattern generated. [Maxime Haineault]
https://github.com/dulaccc/django-pdfutils/commit/161c7fc044d21dbaf91c57266f4b408846af8122
Updated to httplib2 0.9. [Maxime Haineault]
Messed up version, dammit. [Maxime Haineault]
v1.0.3 (2015-03-27)
Wheel doesn’t build. well.. no wheel. [Maxime Haineault]
v1.0.2 (2015-03-27)
Updated .gitignore. [Maxime Haineault]
Updated build script, now building wheel. [Maxime Haineault]
v1.0.1 (2015-03-27)
Updated .gitignore, almost finished build script, updated setup.py. [Maxime Haineault]
Added a release script. [Maxime Haineault]
Merged. [Maxime Haineault]
Update setup.py. [Maxime Haineault]
Updated urls for django 1.5+ (unused), updated gitignore. [Maxime Haineault]
Fixed small bug in get_context. [Maxime Haineault]
Removed maximum django version restriction, updated gitignore. [Maxime Haineault]
Removed PIL dependency. [Maxime Haineault]
Removed django-xhtml2pdf dependency. [Maxime Haineault]
Removed THUMBNAIL_MEDIA_URL from template variables. [Maxime Haineault]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.