This is a powerful library to create PDF documents easily.

The way you create a PDF document with pdfme is very similar to how you create documents with LaTex: you just tell pdfme at a very high level what elements you want to be in the document, without worrying about wrapping text in a box, positioning every element inside the page, creating the lines of a table, or the internals of the PDF Document Format. pdfme will put every element below the last one, and when a page is full it will add a new page to keep adding elements to the document, and will keep adding pages until all of the elements are inside the document. It just works.

If you want the power to place elements wherever you want and mess with the PDF Document Format internals, pdfme got you covered too. Give the docs a look to check how you can do this.

Main features

  • You can create a document without having to worry about the position of each element in the document. But you have the possibility to place any element wherever you want too.

  • You can add rich text paragraphs (paragraphs with text in different sizes, fonts, colors and styles).

  • You can add images.

  • You can add tables and place whatever you want on their cells, span columns and rows, and change the fills and borders in the easiest way possible.

  • You can add group elements that contain paragraphs, images or tables, and guarantee that all of the children elements in the group element will be in the same page.

  • You can add content boxes, a multi-column element where you can add paragraphs, images, tables and even content boxes themselves. The elements inside this content boxes are added from top to bottom and from left to right.

  • You can add url links (to web pages), labels/references, footnotes and outlines anywhere in the document.

  • You can add running sections, content boxes that will be included in every page you add to the document. Headers and footers are the most common running sections, but you can add running sections anywhere in the page.


You can install using pip:

pip install pdfme

About this docs

We recommend starting with the tutorial in Tutorial, but you can find the description and instructions for each feature inside the docs for each class representing the feature, so in pdfme.text.PDFText class you’ll learn how to build a paragraph, in pdfme.table.PDFTable class you’ll learn how to build a table, in pdfme.content.PDFContent class you’ll learn how to build a content box, in pdfme.document.PDFDocument class you’ll learn how to build a PDF from a nested-dict structure (Json) and in pdfme.pdf.PDF class you’ll learn how to use the main class of this library, the one that represents the PDF document.


You can use this library to create PDF documents by using one of the following strategies:

  • The recommended way is to use the function pdfme.document.build_pdf(), passing a dictionary with the description and styling of the document as its argument. Tutorial section uses this method to build a PDF document, and you can get more information about this approach in pdfme.document.PDFDocument definition.

  • Use the pdfme.pdf.PDF class and use its methods to build the PDF document. For more information about this approach see pdfme.pdf.PDF class definition.


  • Currently this library only supports the standard 14 PDF fonts.

  • Currently this library only supports jpg and png image formats (png images are converted to jpg images using Pillow, so you have to install it to be able to embed png images).

You can explore the rest of this library components in the following links:

Indices and tables