← Back to Open-Source PDF Software

Open-Source PDF Software Capable of Generating PDF Documents

Create new PDF documents from scratch

83 tools

Java

Apache PDFBox

CliLibrary

Java library and CLI toolset covering PDF creation from scratch (with embedded fonts and images), Unicode text extraction, splitting and merging, form field extraction and filling, PDF/A-1b validation via its Preflight module, rendering pages to PNG/JPEG, printing via the Java printing API, and digital signing. The de facto standard Java PDF library, used as the underlying engine behind numerous other tools in this directory (PDFsam, PDFLayoutTextStripper, PdfBox-Android, and more).

Tested
Java

Apache XML Graphics FOP

Library

Print formatter driven by XSL Formatting Objects (XSL-FO): reads an FO tree (often produced via XSLT from semantic XML) and renders it to PDF (its primary target, targeting the PDF 1.4 spec), plus PostScript, PCL, AFP, PNG, RTF, TXT, and other outputs. Handles multi-page tables, footnotes, static page regions, and external graphics; usable standalone, embedded, via servlet, or via an Ant task.

Ruby

Asciidoctor PDF

Cli

Native PDF converter for AsciiDoc (the `pdf` Asciidoctor backend), converting directly to PDF without an intermediate DocBook/LaTeX step: style/layout control via YAML theme files, syntax highlighting, tables, images, and SVG. Built on the Prawn gem and its extensions (prawn-svg, prawn-table, prawn-icon).

Python

borb

Library

Pure-Python library for reading, creating, and manipulating PDFs, modeling the file as a JSON-like structure of nested lists/dictionaries/primitives for programmatic access — rather than the more common object-oriented page/content-stream abstraction most PDF libraries use. This structural, low-level modeling suits tasks that need direct access to a PDF's actual object graph rather than a higher-level document API. Ships with extensive documentation and example-driven tutorials.

Lisp

CL-PDF

Library

Cross-platform Common Lisp library for generating PDF files without third-party tools: TrueType/Type 1 fonts (with Unicode), PNG image embedding, barcode generation, charting, optional zlib compression, and a PDF templating system; pairs with cl-typesetting for a full document-composition system.

Stale
C#

clawPDF

Gui

Open-source virtual (network) printer for Windows that turns any application's Print dialog into a PDF-generation pipeline. Outputs PDF/A-1b/2b/3b, PDF/X, PDF/Image, PNG, JPEG, TIFF, and plain text; runs OCR on the printed content; and password-protects output with up to 256-bit AES encryption. Built with multi-user and enterprise deployment scenarios in mind, including centrally managed print-queue configurations across a network.

Stale
Clojure

clj-pdf

Library

Clojure library for generating PDFs from plain Clojure data structures — a document is just nested vectors/maps describing text, fonts, and layout, evaluated into a PDF via iText under the hood. Supports typography with custom TTF fonts, CSS-like stylesheets, lists, tables, multi-column layouts, SVG and image embedding, bar/line/pie charts, headers/footers, page numbering, document metadata, file attachments, and watermarks. A natural fit for generating reports from data already living in Clojure.

Python

Code2pdf

Cli

CLI tool and Python module that converts source code files to PDF with syntax highlighting across 23+ selectable style themes (matching Pygments' theme library), optional line numbering, and configurable paper sizes from A2 down to A5. Aimed at producing readable, printable PDF snapshots of source code — for code review handoffs, archival, or printing — rather than any PDF-reading or extraction capability.

Stale
LaTeX

ConTeXt

Cli

General-purpose document processor built on top of TeX, alongside LaTeX one of the two major TeX-based typesetting systems, with its own markup syntax and a strong focus on programmable, highly-configurable document layout. Used by pandoc as one of its PDF-producing backend engines, alongside pdflatex/xelatex/lualatex. Particularly favored for complex technical documents needing fine-grained layout control that LaTeX's more macro-package-driven approach makes harder to achieve directly.

LaTeX

CV Boilerplate

Library

LaTeX/Pandoc template that separates CV content (stored in a YAML file) from a LaTeX presentation template, compiling to a professionally typeset PDF via a makefile; supports configurable fonts, sizes, language/hyphenation, and margins.

Stale
Dart

dart_pdf

Library

Set of Dart/Flutter packages — `pdf` for core PDF generation, `printing` for device print/preview integration — that let Flutter apps generate and print PDF files natively on both iOS and Android from the same Dart codebase. The `pdf` package builds documents with a widget-like API modeled after Flutter's own layout system (rows, columns, padding, flexible sizing), so Flutter developers reuse layout intuition they already have. `printing` then hands the result to the OS's native print/share dialog.

PHP

FPDF

Library

Free PHP class for generating PDF files in pure PHP, with no external PDF library or PHP extension dependency required — just the class files themselves. One of the longest-running PHP PDF-generation libraries, and a base a number of other tools in this directory were originally built on or inspired by. Its minimal-dependency design makes it a reliable fallback on shared hosting environments where installing PHP extensions isn't an option.

Python

fpdf2

Library

Unicode TrueType font subset embedding, cell/multi-cell/plaintext writing with automatic page breaks, optional Markdown-like text styling, image embedding with transparency, SVG import, arbitrary path drawing, table generation, internal/external links, barcodes/charts/emoji, document encryption and digital signing, annotations (highlights, file attachments), HTML-to-PDF conversion, basic math rendering, and TOC/outline generation.

Ruby

gambas

Library

Rails gem that renders inline PDFs from normal Rails view templates (`.pdf.prawn` / `.pdf.erb`) using the Prawn library under the hood, exposing a `pdf` object in views with global or per-document configuration and metadata (title, author, page size). Lets a Rails app generate PDF responses the same way it already generates HTML views — same routing, same view-rendering pipeline — rather than a separate PDF-generation code path.

Stale
Go

GoFPDF

Library

Go library for generating PDFs: text with UTF-8/RTL support, standard/TrueType/Type1 fonts, JPEG/PNG/GIF/TIFF images and basic SVG, vector graphics (lines, Bézier curves, arcs, gradients, transparency), barcodes, charts, outline bookmarks, internal/external links, page templates and importing existing PDFs as templates, layers, document protection/encryption, and file attachments/annotations.

DepreciatedStale
Go

gopdf

Library

Go library for generating PDFs: Unicode/CJK subfont text with kerning, alignment, sub/superscript, RGB/CMYK color; vector shapes (lines, ovals, rounded rectangles, polygons, curves); JPG/PNG images with masking; password protection with permissions; headers/footers, links, transparency/blend modes; table layout; page rotation; and importing/reusing existing PDF pages as templates.

Go

goreport

Library

Go library built on top of gopdf for generating banded PDF reports in the style of classic report-writing tools: page headers/footers, grouped headers and summaries, detail bands for row-level data, and an overall report summary section. Draws text cells, lines, rectangles/ovals, JPEG images, and TrueType fonts across multiple page sizes and orientations. Aimed at business-report generation (invoices, statements, listings) rather than general-purpose PDF creation.

Ruby

HexaPDF

CliLibrary

PDF library and CLI (positioned as a pdftk/Poppler-utils alternative): creates PDFs from scratch with vector drawing, JPEG/PNG/PDF image embedding, and TrueType text with subsetting; a high-level document composition engine (automatic layout, text flow, page breaks, lists, multi-column, reusable styles); modifies and merges existing PDFs; creates AcroForms with Adobe-like appearances; adds annotations, outlines, and file attachments; extracts metadata/text/images/files; encrypts (incl. PDF 2.0 AES-256) and digitally signs; and optimizes file size with object validation.

Tested
JavaScript

HummusJS

BindingsLibrary

Fast Node.js module — a native binding around the C++ PDFWriter/PDFHummus engine (also published standalone as PDF-Writer) — for creating, parsing, and manipulating PDF files and streams. Being a native addon rather than a pure-JS implementation, it trades install-time complexity (native compilation) for meaningfully better performance on large documents. Superseded by muhammara, a drop-in replacement built on the same engine with modernized bindings and continued maintenance.

LaTeX

Invoice Boilerplate

Library

LaTeX/Pandoc/XeTeX template that generates invoice PDFs from a YAML data file (`details.yml`), auto-calculating line totals and VAT via the `spreadtab` package, with configurable fonts/margins/currency/language, optional embedded signature image, and optional custom letterhead PDF layered underneath.

Stale
Go

invoice-generator-api

LibraryWeb Api

REST API that generates invoices as PDFs from supplied structured details (invoice number, dates, sender/recipient, line items, payment terms), removing the need to hand-build invoice layout/rendering logic. Ships official SDKs for JS/Node, Python, C#/.NET, PHP, Go, Dart, and Android, so the API can be called with a native client in most common stacks rather than raw HTTP requests. A hosted service rather than something self-run.

Ruby

InvoicePrinter

CliLibraryServer

Pure-Ruby (no external system libraries) invoice-PDF generator, usable as a library, CLI, or server: A4/US Letter formats, purchaser/provider info boxes with addresses and tax IDs, SWIFT/IBAN payment details, itemized tables (description/quantity/price/tax/totals), automatic page numbering, customizable labels, custom fonts/logos/backgrounds/stamps/signatures/QR codes, and JSON-driven invoice data — fast enough for real-time request handling.

Java

iText

Library

Create and manipulate PDFs, merge documents, digitally sign, create and fill AcroForm fields, generate PDF/A and PDF/UA archival/accessible output, encrypt (including FIPS-compliant crypto), generate barcodes, embed SVG, and redact content — the core feature set of the modern, actively-developed iText line. Separate official add-ons extend it further: pdfOCR (Tesseract- or ONNX-based optical character recognition) and pdfHTML (HTML/CSS-to-PDF conversion), both maintained by the same organization rather than third-party plugins.

Java

itextpdf

Library

Legacy iText 5: core PDF creation/manipulation library (receiving security fixes only), with add-on modules for PDF 2.0 features (itext-xtra), PDF/A generation/validation (itext-pdfa), and XML/HTML-to-PDF conversion (xmlworker). Also reads existing PDFs via `PdfTextExtractor`. Targets Java 5 compatibility, which blocks upgrading some vulnerable dependencies.

Tested
Depreciated
Java

JasperReports

Library

Java reporting engine that compiles XML report templates (.jrxml) into executable reports (.jasper), pulling data from any data source to produce pixel-perfect documents; exports to PDF, HTML, Excel, Word, and OpenOffice formats, and renders Pie/Bar/Stacked Bar charts. Designed with Jaspersoft Studio and embeddable via API.

JavaScript

jsPDF

Library

Client-side JavaScript library for generating PDFs in the browser or Node: configurable paper size/orientation/units, text with 14 standard fonts or custom embedded TTF/Unicode fonts, images, transformation matrices, patterns, and FormObjects; plugin ecosystem adds HTML-to-PDF (via html2canvas) and table generation. Ships as ES module, UMD, or with TypeScript typings. (Originally MrRio/jsPDF, now hosted under github.com/parallax/jsPDF, which the old URL redirects to.)

JavaScript

jsreport

LibraryWeb Api

Open-source report-rendering platform: design reports with templating engines (e.g. Handlebars) or a visual designer, and render them to PDF, HTML, Excel, DOCX, and other formats; includes user management, a REST API, scheduling, and email delivery. Usable standalone or embedded as a Node.js library.

Ruby

Kitabu

CliDriver

Ruby framework that converts Markdown (with ERB templating) into PDF (via Prince XML), EPUB, Mobi, and HTML e-books: auto-generated tables of contents from headings, Rouge syntax highlighting, custom @font-face fonts, book-layout stylesheets per format, frontmatter metadata/variables, and pre/post-render content hooks.

Stale
LaTeX

latexmk

Cli

Perl script that automates the process of generating a LaTeX document by running pdflatex, xelatex, or lualatex (plus bibtex/makeindex for bibliographies and indexes) the correct number of times — LaTeX often needs 2-3 passes to resolve cross-references, tables of contents, and citations correctly, and latexmk figures out exactly how many are needed rather than requiring the author to guess. Also offers a continuous-preview mode that watches source files and reruns automatically on changes.

LaTeX

Letter Boilerplate

Library

LaTeX/XeTeX/Pandoc template that generates letter PDFs from a Markdown file with a YAML header (recipient, date, subject); supports custom fonts, sizes, margins, language/hyphenation, an auto-embedded signature image, and an optional custom letterhead PDF background, built via a makefile.

Stale
C

libharu

Library

ANSI C library for generating PDF documents entirely from scratch (no PDF import or editing) — a common embedded choice for C/C++ applications that need to produce reports or documents without shelling out to an external process. Draws lines, text, and images (PNG/JPEG, with CMYK, alpha-channel, and CCITT fax support), embeds Type1/TrueType/CJK fonts, and adds outlines plus text and link annotations. Supports document encryption, Deflate stream compression, and PDF/A-1b archival-compliant output.

LaTeX

LuaLaTeX

Cli

TeX engine that combines LaTeX with the LuaTeX extension, allowing Lua scripts to be embedded directly in the typesetting process for programmatic control over layout, font handling, and document generation that plain LaTeX macros can't easily express. Ships as part of standard TeX Live/MiKTeX distributions and is one of pandoc's selectable PDF-producing backend engines. Preferred over pdfLaTeX when a document needs Lua-level scripting or more modern font/Unicode handling.

Perl

Mojo::PDF

Library

Perl module (built on PDF::Reuse) for generating multi-page PDFs: text with font/size/color control, 14 built-in fonts plus custom TTF embedding (with Unicode), alignment and rotation, regex-based text formatting, JPEG image embedding, importing pages from existing PDFs as templates, horizontal rules, raw content streams, and auto-sized tables with headers, borders, padding, and page-overflow handling.

JavaScript

muhammara

Library

Node.js module for creating, reading, and modifying PDF files and streams — a drop-in replacement for HummusJS, built on the same underlying PDF-Writer/PDFHummus C++ engine but with modernized native bindings and active maintenance where HummusJS itself has stalled. Being a native addon rather than pure JavaScript, it offers meaningfully better performance on large documents than pure-JS PDF libraries, at the cost of requiring native compilation at install time.

C

MuPDF

CliGuiLibrary

Lightweight, fast C library, desktop viewer, and CLI toolset for PDF, XPS, and e-book formats, built by Artifex around the same rendering core used in Ghostscript. Renders pages and extracts text/images/metadata/structured content; creates, splits, merges, and compresses PDFs; adds annotations (highlights, stamps, shapes); permanently redacts content; and digitally signs documents. Converts between PDF, SVG, PNG, HTML, and PostScript, and embeds into web pages and native apps via its library bindings.

Tested
Java

OpenPDF

Library

PDF creation/manipulation library: creates PDFs from scratch and modifies existing ones (add/remove pages, edit text); HTML-to-PDF conversion (openpdf-html module); text, fonts, graphics, images, and tables; page layout control; encryption and digital signing (via BouncyCastle); text extraction; PDF-to-image rendering (openpdf-renderer); and PDF 2.0 (ISO 32000-2) features including Brotli stream compression.

Tested
Ruby

Origami

Cli

Pure-Ruby framework for parsing, modifying, and creating PDF files, with lazy on-demand parsing: compression filters with predictors, RC4/AES encryption (including Revision 6), digital signatures and usage rights, file attachments, AcroForm/XFA forms, and object streams. Ships CLI tools including `pdfcop` for detecting dangerous PDF content (not a full malware-analysis/forensics suite by the author's own description) plus decompression, decryption, encryption, resource-extraction, and metadata-inspection utilities.

Stale
Go

PDF Guru

Library

Self-hostable 'knowledge converter' that extracts highlighted text, formulas, and images from PDFs (plus Word/Excel/images, WeChat Reading notes, and mind maps) to generate Anki flashcards, using an LLM (Gemini, GPT-4, Claude, etc.) to identify key concepts automatically; also batch-exports Anki decks back to PDF.

JavaScript

pdf-lib

Library

Dependency-free JavaScript library (works in browsers, Node, Deno, React Native) to create PDFs from scratch or modify existing ones: add/insert/remove/copy pages, draw text (with embedded custom fonts), images (PNG/JPEG), vector graphics and SVG paths; create and fill AcroForm fields (text, checkbox, radio, dropdown) and read/flatten them; embed pages from other PDFs, split and merge documents, add file attachments, and read/set document metadata.

Stale
Haskell

pdf-toolbox

Library

Haskell PDF library supporting on-demand/streaming parsing (without loading the whole file into memory) at both high-level (catalog, page tree, pages) and low-level (xref, trailer, objects, incl. xref/object streams) abstraction; extracts text with exact glyph positions; supports incremental-update editing, basic PDF generation, and partial support for encrypted documents.

C++

PDF-Writer

Library

C++ library (also published as PDFHummus/PDFWriter, and the underlying engine behind the HummusJS and Muhammara Node.js bindings) for creating, parsing, and modifying PDFs from the ground up. Handles JPEG/PNG/TIFF image embedding, PDF 2.0-compliant encryption via OpenSSL, and FreeType-based text rendering with real font metrics rather than approximated glyph widths. Designed as a low-level building block other language bindings wrap, rather than an end-user tool on its own.

Perl

PDF::API2

Library

Perl module for creating and modifying PDFs: page management (add/insert/import pages, page labels); built-in and embedded (TrueType/OpenType/Type1/bitmap) fonts; image import (GIF/JPEG/PNG/PNM/TIFF); barcode generation (Code128, Code39, EAN-13, QR, Codabar, ITF); spot/device colorspaces and custom color palettes; document metadata; outlines/bookmarks; and viewer preferences/page layout modes.

Perl

PDF::Create

Library

Pure-Perl (PDF 1.0–1.3), dependency-free module for creating PDFs: multi-page documents with standard paper sizes and page rotation/crop/bleed/trim boxes; built-in PostScript fonts with Unicode/international character support; lines, GIF/JPEG image embedding, and clickable URI link annotations; hierarchical outline/table of contents; and document metadata.

Stale
Perl

PDF::Reuse

Library

Perl module for building PDFs by reusing existing pages as templates/backgrounds: adds positioned/rotated text, embeds JPEG images, hyperlinks, and raw PDF operators; supports built-in and embedded TrueType (UTF-8) fonts, hierarchical bookmarks, attached/embedded JavaScript actions, form field value assignment, and content stream compression.

Perl

PDF::Template

Library

Perl module that generates PDFs from XML templates (an HTML::Template-style approach) using PDFlib as the rendering backend, with precise element positioning, parameter substitution with hierarchical scoping, automatic page breaks accounting for headers/footers, and one header/footer per page definition.

Stale
Python

PDFDocument

Library

Django-friendly wrapper around ReportLab for generating PDFs: report and letter templates (including a confidential-report variant with security markings), headings/paragraphs/lists/tables/rules/spacers/page breaks, a predefined style system, SVG drawing (via svglib), watermarks/confidentiality markers, mini-HTML markup, and direct ReportLab canvas access.

Stale
Swift

PDFGenerator

Library

Swift/iOS library that generates PDFs from UIViews (including full scrollable content of UIScrollView/UITableView/UICollectionView/UIWebView), UIImages, image file paths/binary data, CGImages, or blank pages; supports multi-page output to Data or disk, custom DPI (72/300), and password protection with separate user/owner passwords.

Stale
JavaScript

pdfjs

Library

PDF generation library targeting both server- and client-side JavaScript from a single codebase, for building PDFs programmatically with drawing primitives (text, shapes, images) rather than converting from another format. Not to be confused with Mozilla's PDF.js, a PDF rendering/viewing engine with an unrelated codebase that just happens to share this project's name — a common source of confusion when searching for either one.

JavaScript

PDFKit

Library

PDF generation library (Node and browser) with an HTML5-canvas-like vector graphics API (paths, SVG path parsing, gradients, transformations), text with line-wrapping and bulleted lists, embedded/subsetted TrueType/OpenType/WOFF/WOFF2 fonts, JPEG/PNG image embedding, tables, annotations (links, notes, highlights), AcroForms, document outlines, encryption with granular permission controls, and Tagged-PDF/PDF-UA accessibility support.

LaTeX

pdfLaTeX

Cli

TeX engine (pdfTeX running in LaTeX mode) that produces PDF output directly from LaTeX source, instead of the older DVI-then-convert-to-PostScript-then-to-PDF pipeline classic TeX used. The most common default LaTeX engine in TeX Live/MiKTeX distributions and the one most LaTeX tutorials assume, though XeLaTeX and LuaLaTeX have since become preferred for documents needing modern font handling or Unicode input pdfLaTeX doesn't natively support.

JavaScript

pdfmake

Library

Declarative, pure-JavaScript (client/server) PDF generation library: text with line-wrapping/alignment, numbered/bulleted lists, page breaks and sections, tables (auto/fixed/star column widths, spanning, repeating headers, multi-column snaking layouts), images and vector graphics, static/dynamic headers and footers, background layers, custom page size/orientation/margins, embedded fonts, table of contents, and PDF metadata.

JavaScript

pdfme

Cli

TypeScript PDF generation toolkit for Node.js and browsers: generates PDFs from simple JSON templates rather than imperative drawing code, and includes a WYSIWYG template designer plus a PDF viewer component for previewing the result. Also ships CLI tools for template validation, diagnostics, and image-based layout inspection. The template-driven approach suits use cases like invoices or certificates where non-developers need to adjust the layout.

Rust

PDFOxide

BindingsCliLibraryServer

PDF toolkit built around a Rust engine, exposed as native bindings for ~20 languages (Python, JavaScript/TypeScript, Go, C#/.NET, Java, and more), a CLI, and an MCP server for AI-assistant integration: text/character-level and image extraction, form-field reading and filling, Markdown/HTML conversion with heading detection, PDF creation and editing, watermarking, merging/splitting, regex-based search, and metadata access.

Tested
C#

PdfPig

Library

C# port of Apache PDFBox for reading and extracting content from PDFs: text, individual words and letters (with position and font data), images, annotations, hyperlinks, embedded files, and bookmarks, plus layout/reading-order analysis for reconstructing a page's visual structure. Also supports basic PDF creation, merging multiple files, read-only inspection of AcroForm fields, and opening password-protected documents. A pure-.NET alternative to shelling out to a native PDF binary.

C

pdfroff

Cli

Wrapper script bundled with GNU groff (the free reimplementation of the classic Unix `troff` typesetting system) that automates producing a finished PDF from groff source. Transparently handles multi-pass processing — formatting a table of contents and body text separately, then combining them in the correct final order — and post-processes groff's output stream through Ghostscript to produce the finished PDF. Commonly used for man pages and other troff-formatted technical documents that need a polished, paginated PDF alongside their plain-text form.

C#

PDFsharp / MigraDoc

Library

PDFsharp creates and processes PDFs on the fly using GDI+-style drawing routines (text, images, shapes) shared across screen, PDF, and metafile output — draw once, render to any of the three. MigraDoc layers a higher-level document object model on top (paragraphs, tables, charts, sections, styles) with automatic pagination, bookmarks, tables of contents, and indexes, rendering that same document model to either PDF or RTF. The two projects ship together and are commonly used as a pair.

C#

PdfSharpCore

Library

.NET Standard port of PDFsharp that strips out the original's Windows-only GDI+ dependency, substituting SixLabors.ImageSharp for image handling and SixLabors.Fonts for typography. Brought PDF creation and manipulation to Linux/macOS and other non-Windows .NET Core targets that the original PDFsharp couldn't reach at the time it was forked, while keeping PDFsharp's own drawing-routine-based API largely intact for easy migration between the two.

PHP

PHPWord

Library

Writes and reads OOXML (Word 2007+), ODF (ODT), RTF, HTML, and PDF documents: sections with headers/footers/page numbering, styled text runs and paragraphs, tables, images (local/remote/watermark), drawing shapes, charts (pie/bar/line/area/scatter/radar), OLE objects, TOCs, footnotes/endnotes, form fields, lists, template-based generation, and XSL transforms.

C++

podofo

Library

C++17 library for reading, writing, and modifying PDFs: full-featured low-level Unicode text extraction (with CJK support), text drawing with automatic CID encoding and font subsetting, incremental-update saving, PAdES-B digital signing (RSA/ECDSA, async), and PDF/A and PDF/UA compliance preservation when adding annotations or form fields. Does not yet render PDF content, and text shaping/kerning is limited.

Tested
Ruby

Prawn

Library

Pure-Ruby PDF generation library: vector drawing (lines, polygons, curves, ellipses); flowing text with inline formatting, builtin/embedded TrueType fonts, UTF-8, RTL, and fallback fonts; PNG/JPG image embedding; a basic grid layout system; encryption and password protection; repeatable headers/footers/page numbers; PDF outlines; and low-level PDF object access for extensions. Explicitly not an HTML-to-PDF generator, though it offers limited inline styling.

Perl

Prima::PS::PDF

Library

Part of the Prima Perl graphics toolkit (a cross-platform GUI toolkit predating most modern alternatives): provides a PDF output interface to `Prima::Drawable`, letting any code already using Prima's drawing API render the same drawing calls directly to PDF instead of a screen widget. Ships alongside sibling modules for PostScript and Type1 font output, so the same drawing code can target multiple output formats without rewriting it per format.

Python

PyFPDF

Library

Python port of the PHP FPDF library for generating PDFs: Unicode (UTF-8) TrueType font subset embedding, I2of5/Code39 barcodes (QR planned), PNG/GIF/JPG images (incl. transparency/alpha), and templates with a visual designer plus basic HTML-to-PDF.

Stale
Python

PyMuPDF

BindingsLibrary

Python bindings for MuPDF covering text extraction (plain, rich dictionary with font/size/color/bbox, HTML/XML, raw blocks, table-to-Markdown); embedded image extraction and high-DPI page rendering to Pixmaps; Tesseract-based OCR (100+ languages); reading/writing annotations (highlights, notes, stamps, ink) and redactions (with permanent apply); AcroForm reading and filling; page insert/delete/reorder, merge/split, and metadata editing; PDF creation and Markdown-to-PDF conversion; password protection/RC4/AES encryption; hyperlink and cross-reference handling; and outline/bookmark read-write.

Python

pypdfium2

BindingsLibrary

Python ctypes bindings to Google's PDFium: renders pages to images, extracts text, reads metadata/bookmarks/page properties, creates new PDFs and inserts images/pages, and searches for text — with both convenience helper classes and raw PDFium API access.

C#

QuestPDF

Library

Fluent-API PDF generation library for .NET: page layout, headers/footers, tables, columns, sections, watermarks, text/fonts/colors/backgrounds/borders, images, SVG, alignment/padding/scaling/rotation/layering, loops/conditionals/reusable components for data-driven documents, merging, encryption, metadata, page extraction, and PDF/A, PDF/UA, and EN 16931 (e-invoicing) compliance.

JavaScript

QuickBill

Web App

Free, registration-free invoice generator built as a React/Redux Progressive Web App: creates and live-previews invoices in the browser, then exports the result as a PDF. Works fully offline once loaded and can be installed to a device home screen like a native app, since it's a PWA rather than a server-backed service — no account, backend, or data collection involved in generating an invoice.

Stale
JavaScript

react-pdf

Library

Creates PDF files using React components (`Document`, `Page`, `Text`, `View`) with a StyleSheet/flexbox styling API; renders in-browser via `<PDFViewer>` or saves to file/buffer in Node. (Complementary to wojtekmaj/react-pdf, which displays existing PDFs rather than creating them.)

JavaScript

react-to-pdf

Library

Library for creating PDF documents directly from React components in the browser, capturing a rendered component's DOM output and converting it to PDF client-side rather than requiring a server-side rendering step. A convenient choice for 'export this part of my React UI as a PDF' use cases (invoices, certificates, reports rendered as normal React components) without setting up a separate PDF-generation backend.

Python

ReportLab

Library

Open-source Python library for programmatic PDF generation: precise low-level canvas drawing (text, vector graphics, images) plus a higher-level Platypus layout engine (flowables, paragraphs, tables, automatic pagination) for building complex reports and documents; widely used as the rendering engine underneath other PDF tools (e.g. the included PDFDocument wrapper).

JavaScript

Resumake

Web App

Free, open-source tool (resumake.io) that generated LaTeX resumes from a form-based editor and rendered them to PDF, explicitly built without ads, accounts, or data collection as a reaction against resume-builder services that gate the finished PDF behind a paywall or signup. The original hosted service is no longer running, but its source is preserved on the project's v2 branch for anyone who wants to self-host or fork it.

Depreciated
Ruby

RGhost

Library

Ghostscript-based document API that generates documents programmatically and converts between PDF, PS, GIF, TIF, PNG, and JPG, wrapping Ghostscript's own command-line interface behind a Ruby-friendly API rather than reimplementing format conversion. Supports EPS templates for merging generated content with pre-designed layouts, plus optimizations for handling large documents without loading everything into memory at once.

Stale
Python

rinohtype

Library

Pure-Python, batch-mode document processor that renders reStructuredText or CommonMark to PDF (and can run as a Sphinx builder in place of LaTeX): page layout with columns, running headers/footers, floats and footnotes; auto-generated TOC and index; auto-numbered/cross-referenced headings, figures, and tables; OpenType/TrueType/Type1 fonts with kerning/ligatures/small-caps (incl. 1000+ bundled Google Fonts); embedded PDF/PNG/JPEG images with preserved transparency/color profiles; and optional math typesetting.

C++

Scribus

Gui

Free, open-source desktop publishing (DTP) application for laying out newspapers, brochures, newsletters, posters, and books, with professional-grade PDF export: PDF/X-3 and PDF/X-4 support, native PDF 1.6 output with embedded OpenType fonts, transparency and encryption, and interactive PDF form fields, annotations, and bookmarks.

JavaScript

Serverless LibreOffice

Driver

Runs a precompiled LibreOffice binary inside AWS Lambda to convert documents to PDF (and between other office formats) at low cost, with Terraform examples, a Node.js Lambda handler (with S3 integration), and a Docker setup for compiling LibreOffice yourself.

Stale
JavaScript

svg-to-pdfkit

LibraryPlugin

Plugin for PDFKit that inserts SVG graphics directly into PDF documents generated with PDFKit, translating SVG path/shape elements into PDFKit's own drawing calls rather than rasterizing the SVG to an image first. Preserves the SVG as genuine vector content in the output PDF (scalable, crisp at any zoom level) instead of an embedded bitmap, at the cost of only supporting the subset of SVG features PDFKit's drawing API can represent.

Stale
JavaScript

svg2pdf.js

Library

JavaScript-only SVG-to-PDF conversion utility that runs in the browser, built on top of jsPDF for the actual PDF output. Parses and renders SVG path/shape elements as genuine vector PDF content rather than rasterizing to an image, so the result stays crisp at any zoom level. Being pure JavaScript with no native dependencies, it works entirely client-side with no server round-trip needed for the conversion.

PHP

tc-lib-pdf

Library

UTF-8/RTL text with TrueType/OpenType/Type1/CID-0 font support and subsetting; HTML/CSS and SVG rendering with multi-column layouts, headers/footers, bookmarks, and TOC; JPEG/PNG/SVG images (plus GIF/BMP/TIFF/etc. via GD); RC4/AES-256 encryption; PAdES/PKCS#7 digital signatures with RFC 3161 TSA timestamps and LTV; PDF/A, PDF/X, and PDF/UA compliance modes; page import/reordering; AcroForm fields; and companion-package barcode support.

PHP

TCPDF

Library

Pure-PHP PDF and barcode generation library requiring no external extensions, covering text and vector graphics, digital signatures, form fields, password and public-key encryption, and HTML/CSS rendering for converting simple markup directly into PDF layout. One of the most widely deployed PHP PDF libraries historically, bundled by default with several major PHP CMS and e-commerce platforms rather than needing separate installation.

Depreciated
Rust

Tectonic

Cli

Modernized, complete, self-contained TeX/LaTeX engine powered by XeTeX and TeXLive, written in Rust with a focus on reproducible builds and not requiring a separate, multi-gigabyte TeX Live installation — it fetches only the packages a given document actually needs, on demand, from a versioned bundle. Used by pandoc as one of its selectable PDF-producing backend engines. Aimed at users who find installing and maintaining a full TeX distribution more friction than the documents warrant.

Go

uniDoc

Library

Comprehensive Go PDF toolkit for reading, writing, and processing PDFs: text/image/table extraction, merging/splitting/rotating/rearranging pages, form creation and filling, encryption/decryption, digital signing, watermarking, and image-to-PDF conversion.

DepreciatedStale
Go

UniPDF

Library

Go PDF library (pure Go): generates reports/invoices with styled text and tables; creates and fills forms; merges, splits, reorders, and rotates pages (incl. N-up layouts); extracts text (with position/formatting), images, and tabular data to CSV; adds/converts images to PDF; removes or adds password protection; validates and applies digital signatures; compresses/optimizes files; adds watermarks; and supports CCITTFax/JBIG2 image decoding.

LaTeX

XeLaTeX

Cli

TeX engine (XeTeX running in LaTeX mode) with native support for Unicode text input and system fonts — TrueType and OpenType — accessed through the operating system's own font layout engine rather than TeX's traditional font metric files. The natural choice for LaTeX documents needing non-Latin scripts, emoji, or any font already installed on the system rather than a TeX-specific font package. One of pandoc's selectable PDF-producing backend engines alongside pdfLaTeX and LuaLaTeX.

Stale
C++

xournalpp

Gui

Handwriting notetaking application (GTK3) that annotates directly on top of imported PDFs: highlight, underline, or strike through selected/copied PDF background text, follow hyperlinks in the background PDF, and export the annotated result to SVG, PNG, or PDF from either the GUI or the command line. Supports pressure-sensitive pen and stylus input (e.g. Wacom tablets), positioning it as an open-source alternative to note-taking apps like GoodNotes or Notability.