ReportLab PLUS


Create your reports 5 times faster with ReportLab PLUS - upgrade from £115 per month.

Comparison ReportLab PLUS vs. ReportLab open-source
Licence File Deployment and verification
Pricing and Purchasing


ReportLab PLUS solves several central problems that businesses face in creating documents that are personalised, produced in real time, in volume, and platform independent. Existing tools are limited to database reports, are typically Windows-based and have problematic restrictions on layout and graphic design. More complex systems involve pipelines of applications which are simply too unwieldy for real-time use in large scale environments. 

ReportLab's tools allow:

  • the direct creation of rich PDF reports on web or application servers in real time
  • data to be acquired from any source (JSON, XML, flat files, databases and more)
  • no limits on the output
  • electronic delivery and archival
  • cross-platform compatibility

Download evaluation version

What is it? Developers create templates using Report Markup Language (RML), an XML dialect geared to the printed page. RML allows for data calls, loops and conditionals to be included directly in the template.  One call then converts the RML to a PDF.

This makes PDF creation exactly like web development.  You can be up and running in minutes and learn the essentials of the language in a day from our examples.   

Case Studies - see who uses Reportlab PLUS 

ReportLab PLUS vs. ReportLab open-source

Our open-source PDF toolkit is downloaded by at least 50,000 developers per month, is the print engine for Wikipedia and the de facto standard in the Python world.  But it requires you to work at a low level, writing large chunks of Python code to define paragraph and table objects.  In a sense, it's the "engine" rather than the "car" and like many open-source solutions, better suited to those who have time to spend fiddling with how engines work. RML is the solution we developed when we were commisioned for our first projects.  The key benefits:

  • Develop (and learn) roughly 5x faster using a familiar templating system and a formally specified language.  You're welcome to try before you buy and check this for yourselves.
  • Use vector artwork with our PageCatcher™ technology.  Your designers can create backgrounds & vector logos in professional tools like Illustrator or InDesign, save them as PDF, and can be included with a single tag in RML.  This frees developers to "fill in the white bits"  in a simple manner, allows designers to continue to create beautiful assets, and lets management understand right away how things get updated.  
  • Integrated graphics: our Diagra framework allows charts and basic vector art to be created separately, and drawn with infinite sharpness in the PDFs as well as rendered for web use as bitmaps in a couple of lines of code.  If you need a bespoke chart of data visualisation, let us know - we have been creating charts for the fund management industry for over 20 years.
  • Mentoring and Support:  you have direct contact with the ReportLab team, and we're happy to provide "getting started" help or to quote for report creation.
  • The ability to include, overwrite and concatenate existing pages is not included in the open-source code.


Licence File Deployment and Verification

If you have purchased a commercial licence you should receive a licence file.

1. Make sure any expired/old licence files ( are deleted (along with the corresponding .pyc).

2. Make sure that the new file is copied anywhere on the PYTHONPATH.

3. Verify by checking:

  1. the licence can be imported,
  2. the path of the file,
  3. the licence number (eg when the the licence was issued) ,
  4. the user field looks right,
  5. check the expiry date

Example verification:

$ python
Python 2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ReportLabPLUSLicense
>>> ReportLabPLUSLicense.__file__
>>> ReportLabPLUSLicense.user
>>>import time
>>>time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(ReportLabPLUSLicense.expire))
'2020-09-19 01:00:00'