Release Notes

This page details what's new in the latest release.

Release policies

We generally release every 2-3 months. There has been a longer-than-usual gap since 1.19 in January 2004 due to restructuring within ReportLab, moves to a completely new version control system, and a growing number of projects, but we aim to return to this schedule henceforth.

We believe in Agile Development and our code base is almost always in a releasable state; test suites are run every night, and daily builds made available. The numbered releases are largely a convenience, and commercial customers can obtain stable interim builds at other times to suit project requirements.

The 1.XX releases aim for backward compatibility.

We are working on a 'version 2.0' which will break compatibility - various little-used features will be removed, and character handling will be strictly Unicode-based. No precise date is set but this is likely to be 3 months hence - whenever you read this :-)

We do concurrent releases of our open source (reportlab) and commercial (rlextra) packages with the same numbers. The commercial packages are documented on http://developer.reportlab.com/downloads.html, with their release notes here:http://developer.reportlab.com/relnotes.html, Serious users are advised to keep abreast of the commercial package documentation; it sits on top of the Open Source one, and we are better at keeping the docs up to date, so new RML features will usually imply new ones in the ReportLab Toolkit.

Release 1.20 - 27th November 2004 - download

What's new in 1.20

  • Prior to 1.20, the distutils setup.py script was a contribution we did not support. We've now done some work on this and it works (to the best of our knowledge). This was tested on FreeBSD and Windows. We welcome feedback on the setup script.
  • The accelerator and extension code has been broken out into a separate tree in our subversion archive (see the subversion instructions). So, _rl_accel.c is no longer in reportlab.lib. The setup script is smart enough to prompt you about how to get this, and to compile extensions if present.
  • We made numerous changes so that the entire framework (and apps using it) can now be run out of a Python 2.3 zip archive (the equivalent of Java JAR deployment). All file-opening operations such as reading DTDs, PDFs, fonts and other resources can be loaded out of zip archives. This makes it possible to deploy document-generating apps as atomic units.
  • An invariant mode has been added to generate PDF files without any timestamp information. This means that the same input should produce the same output, which in turn facilitates regression testing.
  • Many new formatting features including
    • Frames have a new attribute overlapAttachedSpace (0 or 1) (see reportlab/platypus/frames.py). This will intelligently combine the spaceBefore and spaceAfter of adjacent elements and take the greater, if set. Thus, a paragraph with 6 points of space after and a heading with 24 points of space before will end up separated by 24 points of space rather than 30.
    • tables have spaceBefore and spaceAfter attributes, so you don't have to insert spacers around them.
    • tables with spanned cells no longer get "slashed" by the grid drawing commands
    • lines in tables now allow multiples through the 'count' and 'space' slots of the lineStyle list. These are not required but can be supplied if desired. The inter-line spacing is equal to line width if not given. The full possible set of attributes for lines is defined as a list like this: operation, (startCol, startRow), (endCol,endRow), weight, color, cap, dash, join, count, space
    • cycling through colours: you can specify alternating sequences of colours for table rows or columns (e.g. green-white-green-white). To do a cycle running vertically, you would use the drawing command ROWBACKGROUNDS and supply a list of colours instead of a colour. Example in test/test_platypus_tables.py.
    • An HTML-style 'horizontal rule' flowable has been added. This has the usual attributes of line objects (lineCap, thickness, align, color, spaceBefore, spaceAfter), and its width is 80% of that of the frame by default. See reportlab/platypus/flowables.py line 560.
    • An indent tag allows you to set a relative indent on left, right or both sides across a span of the story. This makes nested lists and indented subsections easy. (It was there before but we hadn't told people noisily enough, and some are still asking!) See reportlab/test/test_platypus_indents.py
    • A "please turn over" flowable feature lets you specify content to be included at the end of a frame or a beginning when an object is continued. This will typicallly be used with complex nested tables which need special continuation headers and footers. reportlab/test/test_platypus_pto.py

Future Release Plans

It's likely we will produce a 1.21 in fairly short order, in order to solidify our new release processes.

The bulk of our efforts are now going into a Version 2.0, which will allow us to break old code in minor ways. The prime goal of this will be to change to using Unicode characters throughout internally, and thus be able to use strict UTF8 in input (or Latin-1, if specified). Version 2.0 will also allow us to retire various old tags, features and APIs which are no longer needed, and to produce a documented API. The 2.0 cycle will involve alpha and beta releases. We hope (but do not promise) to get this out in Q1 2005.

Further ahead, we have clear plans for a radical Version 3.0 which would provide even more flexibility and speed and a new layout engine.