Text Markup to PDF with Python

A presentation at FOSDEM in February 2019 in Brussels, Belgium by Lorna Jane Mitchell

Slide 1

Slide 1

Create PDFs from Markup with Python Lorna Mitchell

Slide 2

Slide 2

Meet rst2pdf • https://rst2pdf.org • Open source, Python project • Accepts ReStructured Text format, outputs PDF • Useful for: reports, slide decks, … all sorts @lornajane

Slide 3

Slide 3

ReStructured Text @lornajane

Slide 4

Slide 4

ReStructured Text A text-based markup format (like markdown, but better). Use your favourite text editor! Use source control. @lornajane

Slide 5

Slide 5

A note on source control Source control is for people who: • don’t like losing work • sometimes make mistakes • might want to collaborate with others some day @lornajane

Slide 6

Slide 6

ReStructured Text Examples Slide with bullets: Meet rst2pdf ============== * * * * http://rst2pdf.github.io Open source, Python project Accepts ReStructured Text format, outputs PDF Useful for: reports, slide decks, … all sorts .. raw:: pdf PageBreak titlePage @lornajane

Slide 7

Slide 7

ReStructured Text Examples Code block: .. code-block:: python def inbound_sms(): if request.is_json: pprint(request.get_json()) Image: .. image:: images/postman.png :width: 26cm @lornajane

Slide 8

Slide 8

Portable Document Format @lornajane

Slide 9

Slide 9

Portable Document Format PDF is my preferred file format for things that: • should be well presented • need not be edited It is a self-contained, open format, fonts can be embedded, and there are loads of tools that work with it. @lornajane

Slide 10

Slide 10

PDF Tools The best thing about PDF? The tools! • pdftk for manipulating PDFs (including the surprise later in this slide deck) • pdfjam for utterly painless handouts • pdfpc for presenting from PDF including speaker notes, timer etc @lornajane

Slide 11

Slide 11

Create PDFs from Markup with Python Meet rst2pdf ReStructured Text • https://rst2pdf.org • Open source, Python project • Accepts ReStructured Text format, outputs PDF • Useful for: reports, slide decks, … all sorts A text-based markup format (like markdown, but better). ReStructured Text Use your favourite text editor! Use source control. Lorna Mitchell @lornajane @lornajane A note on source control ReStructured Text Examples ReStructured Text Examples Source control is for people who: • don’t like losing work • sometimes make mistakes • might want to collaborate with others some day Slide with bullets: Code block: Meet rst2pdf ============== .. code-block:: python


Image: .. raw:: pdf .. image:: images/postman.png :width: 26cm PageBreak titlePage @lornajane Portable Document Format def inbound_sms(): if request.is_json: pprint(request.get_json()) http://rst2pdf.github.io Open source, Python project Accepts ReStructured Text format, outputs PDF Useful for: reports, slide decks, … all sorts @lornajane @lornajane @lornajane @lornajane Portable Document Format PDF Tools How to rst2pdf PDF is my preferred file format for things that: • should be well presented • need not be edited The best thing about PDF? The tools! • pdftk for manipulating PDFs (including the surprise later in this slide deck) • pdfjam for utterly painless handouts • pdfpc for presenting from PDF including speaker notes, timer etc Everything you need is here: https://rst2pdf.org/ It is a self-contained, open format, fonts can be embedded, and there are loads of tools that work with it. @lornajane @lornajane rst2pdf pip install rst2pdf Or on GitHub https://github.com/rst2pdf/rst2pdf @lornajane @lornajane

Slide 12

Slide 12

rst2pdf @lornajane

Slide 13

Slide 13

How to rst2pdf Everything you need is here: https://rst2pdf.org/ pip install rst2pdf Or on GitHub https://github.com/rst2pdf/rst2pdf @lornajane

Slide 14

Slide 14

How to rst2pdf Everything you need is here: https://rst2pdf.org/ pip install rst2pdf Or on GitHub https://github.com/rst2pdf/rst2pdf @lornajane

Slide 15

Slide 15

How to rst2pdf Use rst2pdf like this: rst2pdf awesomeness.rst You can supply styles, layouts, output file name but … this is basically it @lornajane

Slide 16

Slide 16

Separate Content and Style I love this approach! • Style is always consistent throughout document. • Styles can be re-used between documents. • Content can be re-used between documents. • Documents can VERY easily be re-styled (is my contrast OK?). • You can grep for content. Extra bonus: tool itself is also separate @lornajane

Slide 17

Slide 17

Code Samples It’s python, and uses pygments: def inbound_sms(): if request.is_json: pprint(request.get_json()) else: data = dict(request.form) or dict(request.args) pprint(data) return (”, 204) https://github.com/nexmo-community/nexmo-python-quickstart @lornajane

Slide 18

Slide 18

The rst2pdf Project @lornajane

Slide 19

Slide 19

The rst2pdf Project Current version: 0.94 Released: 24th January 2019 Previous version: 0.93 Released: 19th December 2012 @lornajane

Slide 20

Slide 20

Project Status • Python 2 only at this moment • Working test suite and decent test coverage • Good documentation, new website • includes examples, open an issue if you have a question @lornajane

Slide 21

Slide 21

How do you test a PDF? 1. Generate a PDF that is “right” 2. Create a hash of that file 3. All future tests generate and hash the PDF for this test and compare it • it’s a selection of hashes; different tools make different outputs @lornajane

Slide 22

Slide 22

rst2pdf Use a text editor. Make a PDF. https://rst2pdf.org @lornajane

Slide 23

Slide 23

Resources rst2pdf • https://rst2pdf.org • https://github.com/rst2pdf/rst2pdf • https://github.com/ralsina/rst-cheatsheet Me • https://lornajane.net • @lornajane @lornajane