PoDoFo is a library to work with the PDF file format. The name comes from the first letter of PDF (Portable Document Format). A few tools to work with PDF files are already included in the PoDoFo package.
The PoDoFo library includes classes to parse PDF files and modify their contents into memory. The changes can be written back to disk easily. The parser can also be used to extract information from a PDF file (for example the parser could be used in a PDF viewer).
Besides parsing PoDoFo includes also very simple classes to create your own PDF files. All classes are documented so it is easy to start writing your own application using PoDoFo.
Key Features
- Create PDF files.
- Read PDF files.
- Modify PDF files.
- Simple command-line tools to work with PDF files:
- podofoencrypt – encrypts any PDF and allows to set PDF permissions.
- podofoimgextract – extracts all images from a given PDF file.
- podofoimpose – powerful PDF imposition tool. It places pages from one or more source PDFs onto pages of a new PDF, applying scaling and positioning.
- podofomerge – merges two PDF files into one.
- podofopdfinfo – provides some basic info about a PDF – metadata, page details, etc.
- podofotxt2pdf – converts a text file to a PDF.
- podofotxtextract – tool that extracts all text from a PDF file. Works only for simple PDFs at the moment.
- podofouncompress – removes all compression filters from a PDF file. This is useful for debugging existing PDF files.
- Encrypt and sign PDFs.
- Draw PDFs.
- Unicode fonts.
- Font subsetting.
Website: github.com/podofo/podofo
Support:
Developer: Dominik Seichter, Leonard Rosenthol, Craig Ringer
License: GNU General Public License v2.0
PoDoFo is written in C++ and Lua. Learn C++ with our recommended free books and free tutorials. Learn Lua with our recommended free books and free tutorials.
Related Software
| PDF Development Libraries | |
|---|---|
| PDFBox | Create, render, print, split, merge, alter, verify and extract text and metadata |
| TCPDF | PHP class for generating PDF documents |
| Poppler | Library for rendering PDF files, and examining or modifying their structure |
| PDFKit | PDF document generation library for Node and the browser |
| pdfcpu | PDF processing library |
| Apache FOP | Print formatter driven by XSL formatting objects |
| QPDF | Library and programs that inspect and manipulate the structure of PDF files |
| PoDoFo | Parse PDF files and modify their contents into memory |
| OpenPDF | Library for creating and editing PDF files; fork of iText |
| xhtml2pdf | HTML to PDF converter using Python |
| libHaru | Library for generating PDFs |
| CapyPDF | Fully color managed PDF generation library |
| pdf-lib | Create and modify PDF documents in a JavaScript environment |
| PDFio | PDF read/write library |
| PDFsharp | .NET library for processing PDF files |
| JasperReports | Reporting engine written in Java |
| CamlPDF | OCaml library for reading, writing and modifying PDF files |
Read our verdict in the software roundup.
Explore our comprehensive directory of recommended free and open source software. Our carefully curated collection spans every major software category.This directory is part of our ongoing series of informative articles for Linux enthusiasts. It features hundreds of detailed reviews, along with open source alternatives to proprietary solutions from major corporations such as Google, Microsoft, Apple, Adobe, IBM, Cisco, Oracle, and Autodesk. You’ll also find interesting projects to try, hardware coverage, free programming books and tutorials, and much more. Discovered a useful open source Linux program that we haven’t covered yet? Let us know by completing this form. |


I made the mistake of incorporating PoDoFo into my project. The important factor was PoDoFo was not API stable (and a quick search doesn’t show whether or not it is now API stable). This means that they felt free to change the API, breaking my code. From that perspective alone, I will actively avoid PoDoFo.
Additionally, if you’re not willing to use the “using namespace”, you have to type PoDoFo (case switching) every time that you call their code. It is easily the most irritating namespace I have ever had to deal with.
I think it would help if you told us what to use instead. ☺️