Skip to main content
Help us improve Python packaging – donate today!

The Python document processor

Project Description

PyPI Build status Test coverage Code issues Gitter chat

Rinohtype is a document processor in the style of LaTeX. It renders structured documents to PDF based on a document template and a style sheet. An important goal of rinohtype is to be more user-friendly than LaTeX. This includes providing clear error messages and making it very easy to adjust the document style. See the documentation to learn how to customize the style of your document.

Rinohtype is currently in a beta phase and thus not recommended for production use, but you can use it to explore rinohtype’s features and bugs. I’d highly appreciate it if you could create a ticket for any bugs you may encounter. However, rinohtype is already very capable. Here is a list of its main features:

  • a powerful page layout system supporting columns, running headers/footers, floatable elements and footnotes
  • support for figures, and (large) tables
  • automatically generated table of contents and index
  • automatic numbering and cross-referencing of section headings, figures and tables
  • use one of the included document templates or create your own
  • an intuitive style sheet system inspired by CSS
  • modular design allowing for multiple frontends (such as reStructuredText, Markdown, DocBook, …)
  • handles OpenType, TrueType and Type1 fonts with support for advanced typographic features such as kerning, ligatures and small capitals
  • embeds PDF, PNG and JPEG images, preserving transparency and color profiles
  • easy to deploy; pure-Python with few dependencies
  • built on Unicode; ready for non-latin languages

Rinohtype’s primary input format is reStructuredText. The rinoh command line tool renders reStructuredText documents and the included Sphinx builder obsoletes the need for a large LaTeX installation to produce PDF output. Have a look at the rinohtype documentation for an example of the output.

Please, be warned that some older versions of PDF readers have trouble displaying the PDFs generated by rinohtype (issue 2):

  • pre-37.0 Firefox’s built-in PDF viewer (pdf.js)
  • pre-0.41 poppler-based applications such as Evince


Rinohtype supports Python 3.3+. It might be back-ported to Python 2.7 at some point in the future if there are a lot of requests for it.

For parsing reStructuredText documents Rinohtype depends on docutils. For parsing PNG images rinohtype depends on PurePNG. pip takes care of these requirement when you install rinohtype. If you want to include images other than PDF, PNG or JPEG, you also need to install Pillow.

Getting Started

Installation is trivial:

pip install rinohtype

reStructuredText Renderer

The easiest way to get started with rinohtype is to render a reStructuredText document (such as demo.txt) using the rinoh command line tool:

rinoh demo.txt

When the script finishes, you will find demo.pdf alongside the input file.

By default rinoh renders the input document using the article template. Run rinoh --help to see how you can tell rinoh which document template and style sheet to use.

Sphinx Builder

Rinohtype can be used as a drop-in replacement for the LaTeX builder (the latex_documents configuration variable has to be set). You only need to add 'rinoh.frontend.sphinx' to the extensions list in With this in place, you can select the rinoh builder when building the documentation:

sphinx-build -b rinoh . _build/rinoh




All of rinohtype’s source code is licensed under the Affero GPL 3.0, unless indicated otherwise in the source file (such as

The Affero GPL requires for software that builds on rinohtype to also be released as open source under the same license. For building closed-source applications, you can obtain a commercial license. The author of rinohtype is also available for consultancy projects involving rinohtype.

Release History

Release 0.2.1 (2016-08-18)

New Features:

  • optionally limit the width of large images and make use of this to simulate the Sphinx LaTeX builder behavior (#46)
  • reStructuredText/Sphinx: support for images with hyperlinks (#49)
  • record the styled page numbers in the PDF as page labels (#41)
  • unsupported Python versions: prevent installation where possible (sdist) or exit on import (wheel)
  • support Python 3.6


  • make StyleSheet objects picklable so the Sphinx builder’s rinoh_stylesheet option can actually be used
  • Fix #47: ClassNotFound exception in Literal_Block.lexer_getter()
  • Fix #45: Images that don’t fit are still placed on the page
  • don’t warn about duplicate style matches that resolve to the same style

Release 0.2.0 (2016-08-10)


  • generate a style log (show matching styles) to help style sheet development
  • keep_with_next style attribute: prevent splitting two flowables across pages
  • stylesheets can be loaded from files in INI format
  • check the type of attributes passed to styles
  • source code highlighting using Pygments
  • table of contents entries can be styled more freely
  • allow hiding the section numbers of table of contents entries
  • allow for custom chapter titles
  • selectors can now also select based on document part/section
  • various small tweaks to selectors and matchers
  • various fixes relating to style sheets


  • configurable standard document templates: article and book
  • a proper infrastructure for creating custom document templates
  • support for left/right page templates
  • make the Article template more configurable
  • pages now have background, content and header/footer layers
  • support for generating an index
  • make certain strings configurable (for localization, for example)


  • Sphinx: interpret the LaTeX configuration variables if the corresponding rinohtype variable is not set
  • Sphinx: roughly match the LaTeX output (document template and style sheet)
  • added a CommonMark frontend based on recommonmark
  • added basic ePUB and DocBook frontends
  • XML frontends: fix whitespace handling
  • frontends now return generators yielding flowables (more flexible)

Command-line Renderer (rinoh):

  • allow specifying a template and style sheet
  • automatically install typefaces used in the style sheet from PyPI


  • typefaces are discovered/loaded by entry point
  • more complete support for OpenType fonts
  • fix support for the 14 base Type 1 fonts


  • more versatile image sizing: absolute width/height & scaling
  • allow specifying the baseline for inline images
  • several fixes in the JPEG reader


  • reorganize the Container class hierarchy
  • fixes in footnote handling
  • drop Python 3.2 support (3.3, 3.4 and 3.5 are supported)

Release 0.1.3 (2015-08-04)

  • recover from the slow rendering speed caused by a bugfix in 0.1.2 (thanks to optimized element matching in the style sheets)
  • other improvements and bugfixes related to style sheets

Release 0.1.2 (2015-07-31)

  • much improved Sphinx support (we can now render the Sphinx documentation)
  • more complete support for reStructuredText (docutils) elements
  • various fixes related to footnote placement
  • page break option when starting a new section
  • fixes in handling of document sections and parts
  • improvements to section/figure/table references
  • native support for PNG and JPEG images (drops PIL/Pillow requirement, but adds PurePNG 0.1.1 requirement)
  • new ‘sphinx’ stylesheet used by the Sphinx builder (~ Sphinx LaTeX style)
  • restores Python 3.2 compatibility

Release 0.1.1 (2015-04-12)

First preview release

Release history Release notifications

History Node


History Node


This version
History Node


History Node


History Node


History Node


History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
rinohtype-0.2.1-py3-none-any.whl (529.8 kB) Copy SHA256 hash SHA256 Wheel py3 Aug 18, 2016
rinohtype-0.2.1.tar.gz (5.2 MB) Copy SHA256 hash SHA256 Source None Aug 18, 2016

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page