Pragmatism in the real world

Background images and multiple styles in rst2pdf

Over the weekend I released rst2pdf 0.99. The list of changes is quite long as it’s been over a year since the last release.

There are some key things in this release that I’m particularly pleased about including Python 3.9 and 3.10 & Sphinx 4 support, multiple styles in the class directive and the ability to specify background images in the raw:: pdf directive. There’s also a number of bug fixes, particular to math rendering and errors.

I use rst2pdf to write the slides for talks that I give, so going to use background images and multiple styles in `class` a lot!

Background images

It’s not uncommon that I want a background image on a slide for a title page. Prior to 0.99, I would do this in presentation.rst:

.. raw:: pdf

  PageBreak docsTitlePage

.. class:: title

  Docs

with a page template defined in style.yaml:

pageTemplates:
  docsTitlePage:
    background: backgrounds/books.jpg
    frames:
    - [2%, 0%, 96%, 70%]
    showFooter: true
    showHeader: false

For every different background image, I have do define a new page template in my style file isn’t great.

With rst2pdf 0.99, I can specify the image in the PageBreak directive:

.. raw:: pdf

  PageBreak titlePage background=backgrounds/books.jpg

.. class:: title

  Docs

Now, just one page template is required for all my title pages.

Multiple styles in the class directive

Another situation I sometimes have is when I want to apply more than one style modifier to some text.

For example, rendering multiple paragraphs that need to be aligned differently with different colours. Previously, I would generate a new style for each combination:

  centred-highlight:
    alignment: TA_CENTER
    textColor: green

  left-highlight:
    alignment: TA_LEFT
    textColor: green

  right-highlight:
    alignment: TA_RIGHT
    textColor: green

  centred-lowlight:
    alignment: TA_CENTER
    textColor: darkgreen

  left-lowlight:
    alignment: TA_LEFT
    textColor: darkgreen

  right-lowlight:
    alignment: TA_RIGHT
    textColor: darkgreen

and so on, depending on which combinations are needed.

I can then use like this in my rst file:

.. class:: right-highlight

  Text goes here.

.. class:: left-lowlight

  Text goes here.

With rst2pdf 0.99, we can now specify more than one style in the class directive, so we can separate the styles:

  centred:
    alignment: TA_CENTER
  left:
    alignment: TA_LEFT
  right:
    alignment: TA_RIGHT
  highlight:
    textColor: green
  lowlight:
    textColor: darkgreen

and then apply them appropriately:

.. class:: right highlight

  Text goes here.

.. class:: left lowlight

  Text goes here.

Hopefully, this will make my style file that much clearer and easier to understand!

Try it out

With rst2pdf 0.99 we are getting very close now to 1.0 now and I’d love to see some people kick the tyres and see if it works for them. Restructured Text is a good markup format for documentation and is easy to publish to the web and PDF. Try it out and report any issues you find on GitHub.