Open-Source PDF Software

Explore, compare, and evaluate a variety of tools, libraries, packages, and utilities so you can make informed choices about which technologies best meet your requirements.

266 of 266 tools

C++

AbiWord

CliGui

Cross-platform word processor whose CLI conversion mode (`abiword --to=txt`) doubles as a lightweight PDF text-extraction tool: imports a PDF's text content and exports it to plain text, HTML, ODT, DOCX, and other formats supported by its plugin system. Originally built as a free, cross-platform alternative to Microsoft Word, with PDF import/export handled through its own document-filter architecture rather than a dedicated PDF engine. Well-suited for batch format conversion where PDF is one of several formats needed.

Tested
Java

AndroidPdfViewer

Library

Android library (built on PdfiumAndroid/PDFium, the same rendering engine Chrome uses) for displaying PDF documents with animated page transitions, gesture-based pinch/double-tap zoom, and page navigation controls baked into the view. One of the more widely-adopted Android PDF-viewing libraries historically, though ownership recently transitioned to new maintainers and the project is actively seeking contributors to keep it current.

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 Tika

CliDriverLibraryServer

Content-analysis toolkit that detects file types and extracts text and metadata from over a thousand file formats (including PDF, DOCX, PPTX, XLSX) through a single parsing interface; supports OCR (via Tesseract), language detection, named-entity recognition, and parsing of embedded documents/attachments. Available as a Java library, CLI (tika-app), or REST server (tika-server).

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.

Perl

App::pdfsize

CliDriver

Thin CLI wrapper that reports a PDF's page dimensions by chaining three existing tools together rather than parsing the PDF itself: extracts the first page with pdftk, converts it to JPEG via ImageMagick, then measures the resulting image with imgsize. A small, single-purpose utility for scripts that just need a page's width/height without pulling in a full PDF-parsing library dependency.

Stale
Python

arXiv Vanity

Web App

Django web app (arxiv-vanity.com) that renders arXiv papers as responsive, mobile-friendly HTML web pages instead of PDF, using the companion Engrafo LaTeX-to-HTML converter to do the actual conversion; includes an arXiv scraping command and an admin interface.

Stale
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).

Go

Athenapdf

CliDockerServer

Docker-packaged drop-in alternative to wkhtmltopdf: a CLI (`athenapdf`, built on Electron) for direct HTML-to-PDF conversion with an 'aggressive mode' that strips page clutter like ads and navigation before rendering. Also ships a `weaver` HTTP microservice (written in Go) for running conversions as a scalable, horizontally-deployable service on Kubernetes or AWS ECS. Built on Electron/Chromium rather than the discontinued Qt WebKit engine wkhtmltopdf itself relies on.

DepreciatedStale
JavaScript

backslide

Cli

CLI tool that builds HTML slide presentations from Markdown (via Remark.js), with a live-reload dev server, Sass-based custom templates, static-site/self-contained-HTML export, presenter-notes stripping, and PDF export through DeckTape integration.

Stale
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.

PHP

browsershot

DriverLibrary

PHP package that drives headless Chrome (via Puppeteer, run through a small Node.js bridge script) to convert a URL, HTML string, or local HTML file into a PDF or image, getting genuine modern browser rendering rather than a PDF-specific rendering engine's approximation. Can also extract the rendered HTML body after JavaScript execution completes and list every network request the page triggered — useful for debugging what a page actually loaded before capture.

Python

Calibre

CliGui

E-book library management application built around organizing, converting, and reading large personal e-book collections; its bundled `ebook-convert` CLI happens to double as a capable PDF-to-plain-text (and PDF-to-other-e-book-format) converter, alongside dozens of other supported formats. Not a PDF-specific tool — PDF is just one of many formats its conversion pipeline handles — but a genuinely useful one when PDF-to-text conversion is needed as part of a broader e-book workflow.

Tested
Perl

CAM::PDF

Library

Perl module (PDF 1.0–1.5) for reading and writing PDFs: extract/delete/duplicate pages, get page text/content trees, append/prepend pages from other PDFs, handle password-protected documents and permissions, list/add fonts, list/fill form fields, remove annotations, detect linearized PDFs, remove unused objects, and apply compression filters.

Tested
Stale
Python

Camelot

CliLibrary

Extracts tables from text-based PDFs (not scanned documents) into pandas DataFrames, exportable to CSV/JSON/Excel/HTML/SQLite, with accuracy/whitespace quality metrics and a CLI. Five parsing strategies: `lattice` (ruled tables), `stream` (whitespace-based), `network`/`hybrid` (text-alignment), and an optional neural `ml` parser (Table Transformer) for hard borderless cases.

OCaml

Caradoc

Cli

OCaml parser and validator for PDF file structure, built by the French national cybersecurity agency (ANSSI) specifically for security-focused PDF analysis rather than general-purpose PDF processing. Offers CLI analysis commands and an interactive console for exploring a PDF's object graph directly, aimed at spotting structural anomalies (malformed objects, suspicious cross-references) that a normal PDF reader would silently paper over or reject outright.

DepreciatedStale
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
Python

cog-marker

Docker

Cog/Replicate-deployable packaging of Marker (see the separate Marker entry), converting PDFs — and EPUB, MOBI, XPS, FB2 — to Markdown via layout analysis and OCR, with table formatting and LaTeX-equation conversion carried over from the underlying Marker engine. Exists as its own entry because it's a distinct deployable artifact (a Cog container image runnable on Replicate's infrastructure) rather than a different tool — the actual conversion logic is Marker's.

Stale
OCaml

Coherent PDF (cpdf)

Cli

Command-line PDF manipulation toolkit: split, merge, and extract pages while preserving bookmarks; encrypt/decrypt (AES 128/256); scale, rotate, crop, and flip pages; stamp text, watermarks, and page numbers; manage annotations, metadata, and file attachments; rasterize pages to images; and produce PDF/UA-tagged output.

Tested
Ruby

CombinePDF

Library

Pure-Ruby (no external dependencies) library to merge PDFs, extract and recombine specific pages, overlay watermarks/stamps (e.g. logos), and add customizable page numbering; parses PDFs from files, memory, or remote sources. The maintainer has stepped back from active maintenance and is seeking a new steward.

Depreciated
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.

JavaScript

DeckTape

Cli

Puppeteer-based (headless Chrome) command-line tool that exports HTML slide presentations to high-quality PDF, with native support for 13 frameworks (reveal.js, impress.js, remark, Bespoke.js, deck.js, etc.) plus a generic mode for others; can also capture slides as PNG/JPG images, export slide ranges, and set PDF metadata.

Python

deepdoctection

Library

Apache-2.0 orchestration framework for document AI: combines layout detection and table recognition (via Detectron2/Transformers), OCR (Tesseract, DocTr, or AWS Textract), and document/token classification (LayoutLM family, LiLT, BERT-style models) into configurable pipelines for scanned documents and PDFs.

C++

diff-pdf

CliGui

Compares two PDF files page-by-page and reports whether they differ, either as a simple exit code for scripting or, with `--output-diff`, a new PDF that visually highlights every difference between the two inputs. Also offers a GUI mode for interactive side-by-side comparison with synchronized zoom and page-shifting, useful for spotting translation-only or formatting-only changes between two revisions of the same document. Commonly used in CI pipelines to catch unintended visual regressions.

Python

digital-born-pdf-scanner

Cli

CLI tool that checks whether PDF files are 'born-digital' (created directly from a digital source, with a real text layer) versus scanned images with no underlying text — a distinction that matters before running OCR or text extraction on a large batch of unknown-provenance PDFs. Scans single files or whole directories recursively, reporting results as TSV/CSV for easy filtering in a spreadsheet or further scripting.

Stale
Python

doc2text

Library

Extracts higher-quality OCR text from poorly scanned PDFs and images (PDF, PNG, JPG, BMP, TIFF) by fixing common scan errors: crops to estimated text regions, deskews tilted pages, and optimizes images before running Tesseract OCR; supports bulk processing (splitting multi-page PDFs) and language-code hints for accuracy.

Stale
Go

docconv

CliDriverLibraryServer

Go library, CLI, and HTTP service that converts PDF, DOC, DOCX, XML, HTML, RTF, ODT, Pages, and image files to plain text plus metadata (as JSON), aiming to be a single conversion entry point across many document formats rather than a PDF-specific tool. Optional OCR support (via Tesseract, enabled with the `ocr` build tag) handles image-based input. Its multi-format scope suits ingestion pipelines that need to normalize mixed document types into plain text.

Stale
Python

Docling

CliLibrary

Document-conversion toolkit that parses PDFs (and Office/image formats) into a unified structured representation, with layout analysis, OCR (EasyOCR by default), table structure recognition, and optional vision-language-model image description; exports to Markdown, HTML, or JSON.

Java

Docs to PDF Converter

CliLibrary

Standalone CLI tool and embeddable Java library that converts DOC, DOCX, PPT, PPTX, and ODT files to PDF without requiring a LibreOffice or Microsoft Office installation as a dependency — useful in server environments where installing a full office suite isn't practical. PPT/PPTX slides are converted to PDFs with each slide embedded as a rendered PNG image rather than reconstructed as native PDF content, preserving visual fidelity at the cost of the text no longer being selectable.

DepreciatedStale
Ruby

Docsplit

CliLibrary

CLI utility and Ruby library that extracts searchable UTF-8 plain text from documents, generates page images and thumbnails in any format, splits documents into single-page or full PDFs, and extracts metadata (title, author, page count). Built by DocumentCloud for processing large volumes of source documents in journalism/investigative-reporting workflows, wrapping several underlying tools (Poppler, ImageMagick, Tesseract) behind one consistent CLI.

PHP

Dompdf

Library

Pure-PHP (no external PDF library) HTML-to-PDF converter: CSS 2.1 (with some CSS3) including @import/@media/@page rules, most presentational HTML 4.0 attributes, external/inline stylesheets, complex table rendering (spans, border models), GIF/PNG/BMP/JPEG images, basic SVG, inline PHP, and embedded fonts (bundled DejaVu TrueType for Unicode). Does not support CSS Flexbox/Grid or multi-page table cells.

Python

Donut

Library

OCR-free document-understanding transformer (PyTorch/Hugging Face) that classifies document types, extracts structured information (e.g. from receipts), answers questions about document content, and reads text sequences directly from document images without a separate OCR engine.

Stale
Java

Eclipse BIRT

GuiWeb App

Open-source reporting and data-visualization project under the Eclipse Foundation, built around three cooperating pieces: a report design/engine/model for generating reports from arbitrary data sources, a charting module for standalone or embedded graphical visualizations, and a web viewer component for delivering interactive reports in a browser. Reports can be exported to PDF among other output formats. Widely used as the reporting layer embedded inside larger enterprise Java applications.

JavaScript

Electron-PDF

Cli

CLI tool and Node.js API (built on Electron/Chromium) that converts URLs, HTML files, or Markdown files to PDF or PNG, with custom CSS injection, page size/orientation/margin control, print-background support, custom request headers, and batch/concurrent job handling.

C

Evince

Gui

GNOME's default document viewer, built to replace the multiple format-specific viewers that used to ship across the GNOME desktop with one unified application. Uses Poppler as its PDF backend (plus Ghostscript for PostScript, and native support for DjVu, DVI, multi-page TIFF, and comic archive formats). Supports text/highlight annotations, text selection and copying (including from OCR'd scans), an optional override of a document's print restrictions, integrated search, thumbnails, and dual-page/full-screen slideshow viewing — though it has no form-filling support.

Ruby

FerrumPdf

Library

Rails-oriented gem (headless Chrome via Ferrum, no Node.js dependency) that renders HTML/URLs to PDF (`render ferrum_pdf: {}`) with paper size/margin/orientation/scale options and dynamic headers/footers, or captures PNG/JPEG screenshots (`render ferrum_screenshot: {}`) of the full page, viewport, or a CSS-selected element.

Java

Flying Saucer

Library

Renders well-formed XML/XHTML using CSS 2.1 layout/formatting to Swing panels, images, or PDF (via an OpenPDF-based renderer, or by delegating to a headless Chrome shell for modern HTML5/CSS3 support); also offers SWT output for Eclipse-based apps.

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.

Python

fulltext

Library

Extracts text from many file formats — PDF, Word, HTML, and more — for search indexing, via pluggable per-format backend modules rather than one monolithic parser. Each supported format is handled by delegating to an appropriate existing extraction library or system tool under the hood, with `fulltext` providing the unified API and format-detection layer on top. Aimed specifically at indexing pipelines that need one consistent text-extraction call across mixed document types.

Stale
R

fulltext

Library

rOpenSci package for searching and retrieving full-text academic articles across open-access and subscription journals: Crossref metadata lookup, PDF text extraction, academic-document XML parsing, and text mining.

DepreciatedStale
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
C

Ghostscript

CliLibrary

PostScript and PDF interpreter/renderer from Artifex — the reference engine that many other PDF tools build on or shell out to under the hood. Converts PostScript and PDF to raster images, plain text, DOCX, PCL, and XPS; compresses PDFs while preserving visual quality; converts to and validates against the PDF/A archival standard; and adds a searchable OCR text layer to scanned pages. Also handles imposition (N-up page layout), ICC color management, and ZUGFeRD/Factur-X e-invoicing embedding.

Tested
Ruby

Gimli

CliDockerDriver

CLI tool that converts GitHub-Markup-supported markup files (Markdown, Textile, etc., except roff) to PDF via wkhtmltopdf: embeds images (local/relative/remote), CodeRay syntax highlighting with a GitHub theme, custom CSS, Jekyll front-matter stripping, cover-page generation, direct wkhtmltopdf option passthrough (TOC, page numbering), and Docker support.

Stale
C#

Gios.PSM

CliGuiLibrary

Free, portable utility for splitting and merging PDF files, distributed as a reusable library, a console tool, and a GUI — pick whichever interface fits a given workflow. Also converts JPG images directly into PDF pages. Requires no installation, running as a self-contained portable executable, which is its main draw over heavier split/merge alternatives in the same niche.

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.

Go

gosseract

Library

Go wrapper around the Tesseract OCR C++ library via cgo bindings: feed it an input image and it returns the recognized text, with support for over 100 languages via Tesseract's trained-data files. Requires Tesseract itself (and its language data) installed as a system dependency, since gosseract only provides the Go-side binding rather than a self-contained OCR engine. A straightforward way to add OCR to a Go application without shelling out to the `tesseract` CLI directly.

Ruby

Grim

Library

Ruby gem (using ImageMagick and Ghostscript under the hood) that extracts a PDF page as an image — PNG or similar — or as page text, reports total page count, and iterates all pages in batch, with configurable image width/density/quality/colorspace/alpha and custom processor paths. Its text extraction is a thin wrapper around `pdftotext` rather than an independent implementation, so text-extraction fidelity matches whatever Poppler already produces.

Stale
Ruby

Grover

DriverLibraryPlugin

Ruby gem that uses Puppeteer/headless Chromium (or Firefox) to convert URLs, inline HTML, local files, or Rails view templates into PDF, PNG, or JPEG: configurable page layout/margins/viewport, cookies/headers, CSS/JS injection, cover pages, HTTP basic auth, remote-browser connections, wait conditions (network idle, element visibility), and Rack middleware for URL-extension-triggered conversion.

C++

GSview

Gui

Open-source graphical front-end for Ghostscript on Windows/Linux/macOS, giving Ghostscript's command-line PostScript/PDF interpreter a proper windowed UI: views and navigates PostScript and PDF files, and converts sequences of PDF pages to image files (from raw bitmap through TIFF-pack formats) at a selectable output resolution. Originally developed by Russell Lang alongside Ghostscript itself.

Stale
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

html-pdf-chrome

Library

Node.js library that renders HTML (local strings or remote URLs) to PDF using headless Chrome/Chromium, or exports as PNG/JPEG/WebP screenshots; supports templated headers/footers, custom HTTP headers, configurable viewport/device-scale, and multiple render-completion triggers (callbacks, DOM events, timers).

PHP

Html2Pdf

Library

Converts specially-cleaned HTML (not arbitrary web pages) into PDF using TCPDF as the underlying engine, for generating documents like invoices and documentation; requires the gd and mbstring PHP extensions. Not designed to render existing websites or WYSIWYG-generated HTML directly.

JavaScript

html2pdf.it

Server

Node.js web service (not a library — you deploy or call an already-running instance) that converts HTML into PDF, with the HTML passed as a data URI in the request rather than a file upload. Supports manual page breaks via the CSS `page-break-before: always` rule, giving callers explicit control over pagination rather than relying purely on automatic content-flow breaking. A minimal, single-endpoint alternative to running a full headless-browser rendering pipeline yourself.

Stale
JavaScript

html2pdf.js

Library

Client-side (browser-only) library built on html2canvas and jsPDF that converts a webpage, DOM element, or canvas into a PDF entirely in the browser, with configurable margins, page breaks, image quality/type, and a promise-based worker API. Renders content as images, so output text is not selectable/searchable and files can be large.

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.

Python

HURIDOCS PDF Document Layout Analysis

DockerServer

Self-hosted PDF layout-analysis service (choice of a VGT or LightGBM model) exposed over an HTTP API: segments and classifies page regions — text, titles, pictures, tables, and similar — as structured output rather than a flat text dump. Built by HURIDOCS, a human-rights documentation NGO, originally for processing large volumes of case files where a region's semantic type (not just its text) matters for downstream analysis. Runs as a Docker service you deploy and call, not a library you import.

Perl

Image::ExifTool::PDF

Library

Component of Image::ExifTool that reads metadata from PDF files, including support for PDF-1.5 object streams (limited Filter/Predictor algorithms) and all standard PDF encryption methods through PDF-2.0 (including AESV2/AES-128 and AESV3/AES-256).

Java

Images To PDF

Gui

Android PDF toolkit centered on creating PDFs from camera or gallery images (plus converting plain text files to PDF), alongside managing existing PDFs: merge, split, compress, remove/rearrange/rotate pages, extract images, and encrypt/decrypt. Aimed at the common mobile use case of turning photographed documents or receipts into a shareable PDF, with the page-management tools included as a secondary, more general-purpose capability.

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.

Python

invoice2data

Library

Extracts structured data from invoice PDFs: pulls text via pdftotext, pdfminer, or OCR (tesseract/tesseract4/Google Cloud Vision), then matches fields (invoice number, date, amount, line items) using regex patterns defined in per-supplier YAML templates; exports to CSV, JSON, XML, or renames files based on extracted content; supports batch folder processing.

Tested
Stale
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

jsPDF-AutoTable

LibraryPlugin

jsPDF plugin for generating PDF tables: parses existing HTML tables via CSS selectors or builds tables from JavaScript data (head/body/foot), with striped/grid/plain themes, custom colors/fonts/alignment, colspan/rowspan, automatic or manual page breaks (including horizontal breaks for wide tables), and lifecycle hooks for custom styling.

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
Lua

KOReader

Gui

Document viewer built for e-ink readers: fixed-layout (PDF, DjVu, CBT, CBZ) and reflowable (EPUB, FB2, Mobi, DOC, RTF, HTML, CHM, TXT) formats; reflows scanned PDFs via K2pdfopt; customizable typography (margins, line spacing, fonts); StarDict dictionary and Wikipedia lookups; Calibre/Wallabag/Google Translate integration; and built-in FTP client, SSH server, and OPDS catalog support.

PHP

Laravel Dompdf

Library

Laravel wrapper around Dompdf: converts HTML strings, files, or Blade views to PDF with paper size/orientation, DPI, fonts, CSS page breaks, and UTF-8 support; generates PDF/A-3b compliant output with embedded files and XMP metadata (for Zugferd/Factur-X e-invoicing); toggles JS/remote-content/PHP execution; outputs to disk, browser stream, download, or string.

PHP

Laravel PDF

Library

Laravel wrapper around mPDF: renders Blade views to PDF with data binding, custom headers/footers with page numbering, custom TTF fonts, document permission protection (copy/print/modify/extract/assemble), and per-file config overrides, with output via string, save, download, or browser stream.

DepreciatedStale
PHP

laravel-snappy

Library

Laravel wrapper around the Snappy library: generates PDFs or images from HTML strings, files, or Laravel views, with output to file/browser/download, wkhtmltopdf/wkhtmltoimage option passthrough (paper size, orientation, margins), and a fake mode for testing without real rendering.

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.

Python

Layout Parser

Library

Deep-learning toolkit for document image layout analysis: detects layout elements (text blocks, titles, tables, figures) using pre-trained models, filters/crops regions by spatial location, loads layout data from JSON/CSV/PDF, runs OCR on detected regions, and visualizes detected layouts.

Stale
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.

C++

LibreOffice

CliGui

Full office suite (Writer, Calc, Impress, Draw) that doubles as a batch PDF-conversion tool via its headless CLI mode (`--headless --convert-to`): imports PDF content through the `writer_pdf_import` filter and exports it to plain text, ODF, and dozens of other document formats it already supports natively. Since it's a general office suite rather than a PDF-specific tool, conversion fidelity depends on how cleanly a given PDF's layout maps back onto Writer's own document model.

Tested
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.

Python

malicious-pdf

Cli

Generates 48+ test PDF files for security research: phone-home/callback detection, SSRF, XSS injection, NTLM credential theft via UNC paths, data exfiltration, and XXE injection, with four levels of payload obfuscation and integration with Burp Collaborator/Interact.sh. For authorized penetration testing, bug bounty research, and security product validation only.

PHP

markdown-resume

CliDockerDriver

CLI/Docker tool that converts a Markdown resume into a responsive HTML5/CSS3 page and a matching PDF (rendered via wkhtmltopdf), with selectable visual themes and a live-reload watch mode for editing. Also generates word-frequency stats analysis of the resume content, a distinctive extra not found in most other Markdown-to-resume tools in this directory. Outputs a single self-contained HTML file with embedded styles alongside the PDF.

Stale
JavaScript

markdown-resume.js

CliDriver

CLI tool (`md2resume`) that converts a Markdown resume into both a responsive HTML page and a PDF version, rendering the PDF via wkhtmltopdf under the hood. Includes a watch mode for live-reload editing while writing the resume, plus Docker support for running it without a local wkhtmltopdf install. One of several Markdown-to-resume tools in this directory (see also Kitabu, Gimli) built around the same 'write once, get HTML and PDF' workflow.

Stale
Python

Marker

Library

Converts PDFs, images, PPTX, DOCX, XLSX, HTML, and EPUB to Markdown, JSON, HTML, or chunks, preserving reading order: reconstructs tables (heuristics with VLM fallback for complex cases), recognizes math/equations as LaTeX, extracts and saves images, performs multilingual OCR via the Surya VLM, strips headers/footers/artifacts, and can optionally use an LLM to improve accuracy.

Python

MarkItDown

CliLibrary

Converts PDFs, Office documents, images, audio, HTML, and other formats to Markdown for use as LLM input; ships both a CLI and a Python library, and can keep embedded images as base64 data URIs instead of discarding them.

Tested
Python

MinerU

CliLibraryServerWeb App

Converts PDF, DOCX, PPTX, XLSX, images, and web pages into Markdown or JSON: strips headers/footers/page numbers while preserving structure, converts formulas to LaTeX and tables to HTML, OCRs scanned/garbled PDFs in 109 languages, handles single/multi-column and complex layouts (incl. cross-page table merging), and extracts images with captions. Offers CLI, FastAPI, and Gradio WebUI, plus Python/Go/TypeScript SDKs; builds on PDF-Extract-Kit's models.

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.

PHP

mPDF

Library

Generates PDFs from UTF-8 HTML (including CJK content): headers/footers, page numbering, TOC, color handling, embedded fonts, zlib-compressed output, XML-driven charset conversion, basic SVG, and optional barcode generation (via bcmath). Notably lacks state-of-the-art CSS support compared to headless-Chrome-based alternatives.

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

neoFlyingSaucer

Library

Pure-Java HTML/CSS-to-PDF and HTML-to-image renderer, positioned as a modernization of the original Flying Saucer project with updated dependencies and continued maintenance. Takes well-formed XHTML/XML styled with CSS 2.1 and lays it out using the same core rendering approach as Flying Saucer, producing PDF via an underlying PDF library rather than a browser engine. A lighter-weight alternative to browser-based HTML-to-PDF tools when the input HTML is already clean/well-formed rather than arbitrary web pages.

DepreciatedStale
JavaScript

node-html-pdf

Library

PhantomJS-based library that converts HTML to PDF, PNG, or JPEG via a file/stream/buffer API, with configurable paper size, orientation, margin, zoom, and header/footer options. No longer maintained since PhantomJS itself was deprecated years ago; its own README now directs users to migrate to a headless-Chrome/Puppeteer-based alternative instead, several of which appear elsewhere in this directory.

DepreciatedStale
Python

Nougat

Library

Neural OCR model (Meta/Facebook Research) that parses academic PDF papers into Markdown (.mmd), understanding LaTeX math and tables; supports single or batch PDF processing, page-range selection, and failure-detection heuristics for problematic pages.

Python

OCRmyPDF

CliDriverLibrary

Adds a searchable OCR text layer beneath page images and produces a validated PDF/A file: deskews crooked pages, optionally cleans images pre-OCR, optimizes/compresses images, recognizes 100+ languages via Tesseract, rotates misrotated pages, edits output metadata, parallelizes across CPU cores, and processes multi-thousand-page files in place.

Tested
C++

Okular

Gui

KDE's universal document viewer: reads PDF (via Poppler), EPUB, DjVU, Markdown, images, and CBR/CBZ comic archives through a shared plugin architecture, so the same viewer UI works across formats. Adds inline and popup annotations, highlights, underlines, and freehand text; views and verifies embedded digital signatures and can sign PDFs itself; offers text selection with a magnifier tool; and provides thumbnail navigation alongside an auto-generated table of contents.

Java

Open HTML to PDF

Library

Renders a practical subset of XML/XHTML/HTML5 with CSS 2.1+ (incl. CSS3 transforms, gradients, multiple backgrounds) to PDF or images, with SVG and MathML plugin support, accessible/tagged PDF output (Section 508, PDF/UA, WCAG 2.0), PDF/A compliance, font fallback and embedding, RTL/bidi text, footnotes, and file embedding via link download attributes.

Stale
Python

Open Paperless

Gui

Simplified fork and UI rethink of Mayan EDMS aimed at home users rather than enterprise document-management deployments: scans, indexes, and archives paper documents for later retrieval, with a deliberately reduced feature set compared to the underlying Mayan EDMS platform it forked from. Predates and is unrelated to the now much more widely used Paperless-ngx project, despite the similar naming and overlapping goal of turning a scanner into a searchable document archive.

Stale
Python

OpenContracts

ServerWeb Api

Apache-2.0 self-hosted document-intelligence platform: manages document collections, automatically parses PDF layout and generates vector embeddings, provides a pluggable microservice analyzer architecture for automated annotation, and a human annotation interface (multi-page annotations) built on the PAWLS annotation format. Exposes a GraphQL+REST API, a Model Context Protocol server for agents, and a React UI.

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
JavaScript

pagedjs-cli

Cli

Command-line interface for Paged.js, a free and open-source library that paginates HTML/CSS content the way a browser would lay out a printed page, then produces print-ready PDFs from the result. Built specifically for CSS Paged Media use cases (page counters, running headers/footers, cross-references) that plain headless-browser screenshot-to-PDF pipelines don't handle correctly. Runs Paged.js inside a headless Chromium instance under the hood.

Haskell

Pandoc

Cli

Universal document converter between Markdown, HTML, LaTeX/ConTeXt, DOCX/RTF/ODT, EPUB, man/ms roff, DocBook, JATS, TEI, Jupyter notebooks, PowerPoint/reveal.js/Beamer slides, and dozens more formats. Uses external PDF-producing engines (context, latexmk, lualatex, pdflatex, xelatex, wkhtmltopdf, weasyprint, prince, pagedjs-cli, tectonic, pdfroff) to convert into PDF, and preserves metadata, footnotes, tables, math, syntax highlighting, and citations/bibliographies (via CSL) across formats.

Python

Paperwork

Gui

Personal document manager (Linux/Windows) for scanning, OCR'ing, indexing, and searching paper documents and PDFs; the project's own repository topics list OCR, scanning, PDF support, indexing, and document management as its core feature areas.

Ruby

ParseKit

Library

Zero-runtime-dependency document-parsing gem: parses PDFs, DOCX, XLSX, and images (with OCR), statically linking MuPDF and Tesseract directly into the compiled gem at install time, so no system libraries or external tools need to be separately installed. This trades a heavier, slower install (native compilation of two large C libraries) for zero runtime dependency headaches afterward — no version mismatches with a system-installed MuPDF or Tesseract to worry about.

Tested
Python

PAWLS

ServerWeb App

Web-based tool (built by AllenAI) for collecting human annotations on PDFs, purpose-built for academic papers but usable on any PDF collection: preprocesses PDFs into per-page token bounding boxes (optionally via GROBID), serves them in a browser viewer, assigns documents to specific annotators, enforces login/access control, and stores annotations via an API backend.

Stale
Go

pdf

Library

Go package (rsc.io/pdf) for reading PDF files: opens (optionally password-encrypted) files, reads the page tree, outline/bookmarks, per-page fonts and their metrics, and low-level page content (text runs and drawn rectangles) via a low-level Value/object API. A known unpatched stack-overflow DoS vulnerability is reported against it (GO-2026-5781).

DepreciatedStale
Python

PDF Arranger

Gui

Small python-gtk application, which helps the user to merge or split PDF documents and rotate, crop and rearrange their pages using an interactive and intuitive graphical interface. A GUI front-end for pikepdf; can also import images into a PDF when img2pdf is installed.

Python

PDF Craft

Library

Converts scanned-book PDFs to Markdown or EPUB using OCR (DeepSeek OCR locally, or DeepSeek/Baidu vendor backends), recognizing complex structure including tables and formulas; extracts body text while filtering headers/footers, preserves footnotes/images/assets, auto-generates an EPUB table of contents (optionally LLM-enhanced), and offers configurable table (HTML/image) and formula (MathML/SVG/image) rendering. Runs fully offline as of v1.0.0.

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.

Java

Pdf Viewer Plus

Gui

Simple Android PDF viewer app: opens PDFs from local device storage or internet links, and can download a remote PDF to the device before opening it. A minimal, single-purpose viewer without the annotation, form-filling, or editing features found in fuller-featured Android PDF apps — useful specifically when the only requirement is opening and reading a PDF on-device.

DepreciatedStale
Python

pdf-diff

Library

Compares the text layers of two PDFs and outputs the bounding boxes of changed text as JSON, identifying exactly which text regions differ between two versions of a document rather than just reporting that they differ. Then rasterizes the changed pages to a PNG with red outlines drawn around the differences, giving a visual diff alongside the structured JSON output. Useful for reviewing what actually changed between two revisions of a generated or edited PDF.

JavaScript

pdf-extract

Library

Set of tools (per its npm registry listing) that convert PDF files to usable formats for data processing: extracting text from searchable PDFs and performing OCR on scanned/image-only PDFs. Note: its GitHub source repository (nisaacson/pdf-extract) now returns 404 — likely deleted or made private; this description is sourced from the published npm package metadata instead.

DepreciatedStale
Python

PDF-Extract-Kit

Library

Model toolbox for extracting content from complex PDFs: layout detection (images/tables/text/titles/formulas), formula detection and LaTeX recognition, OCR with text location, and table recognition to LaTeX/HTML/Markdown. Provides the underlying models that MinerU builds its PDF-to-Markdown application on top of.

JavaScript

pdf-img-convert

Library

Node.js module that converts PDF files into image buffers (PNG) directly in memory, without writing any intermediate file to disk. Built on pdf.js for rendering, so it inherits pdf.js's own rendering fidelity rather than shelling out to a native binary like Ghostscript or poppler-utils. A convenient choice specifically when the calling code needs the resulting image bytes in-process rather than a file on disk.

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
JavaScript

pdf-merger-js

Library

Node.js and browser library that merges multiple PDF documents — or selected parts/pages of them — into a single new PDF, running in either environment from the same codebase. Built on pdf-lib rather than a native binding, so it works in browser contexts (including client-side merging with no server round-trip) where native-addon PDF libraries can't run at all.

JavaScript

pdf-parse

Library

Cross-platform TypeScript/JavaScript module extracting text, embedded images, tables, and document metadata/outline from PDFs, plus rendering pages to PNG screenshots — a broader capability set than most JS PDF-parsing libraries, which typically stop at plain text. A complete rewrite under new maintainership (mehmet-kozan) since the original gitlab.com/autokent/pdf-parse went unmaintained, actively published through late 2025.

Tested
Python

pdf-parser

Cli

Part of the Didier Stevens Suite of security tools: parses a PDF document to identify and inspect its fundamental elements/objects, with an option to search for specific strings within indirect objects — used for PDF malware analysis and forensic triage. Public domain.

Ruby

pdf-reader-turtletext

Library

Reads semi-structured positional text from PDFs, tracking each text fragment's on-page coordinates so downstream code can assemble structured data from invoices and similar documents where meaning depends on layout position (which column a number sits in, which line a label pairs with). Confirmed archived on GitHub; treat it as a documented approach rather than a maintained dependency.

DepreciatedStale
Rust

pdf-rs

Library

Rust library to read, manipulate, and write PDF files: stable reading with examples for extracting content/metadata/names/text, plus Pathfinder integration for rendering and a companion `inspect-prim` tool for hierarchically exploring PDF structure. Modification and writing support are still experimental.

C++

pdf-text-extraction

Cli

Command-line tool for extracting text and tabular data from PDF files, with table output written directly to CSV for further processing. Built as a focused, single-purpose alternative to heavier PDF libraries for when all that's needed is getting content out of a document, without pulling in a full parsing/rendering engine as a dependency. Written by the same author as the PDF-Writer/HummusJS engine, sharing some of its low-level PDF parsing code.

PHP

pdf-to-image

DriverLibrary

Converts PDFs to JPG, JPEG, PNG, or WebP images via ImageMagick and Ghostscript under the hood: render specific pages or all of them, control output quality/DPI/dimensions/background color, read page count and page dimensions, and handle password-protected PDFs. Requires ImageMagick 7 specifically (not the older ImageMagick 6 many systems still ship), since it relies on API changes introduced in that major version.

PHP

pdf-to-text

Cli

Thin PHP wrapper around the `pdftotext` CLI binary (from Poppler) that extracts text from a PDF, with support for a custom binary path, password-protected PDFs, and passthrough of `pdftotext`'s own options (e.g. layout preservation). Requires `pdftotext` installed as a system binary — this package is purely a PHP-friendly API over it, not an independent text-extraction implementation.

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.

JavaScript

PDF.js

Library

Community-driven, web-standards-based PDF engine maintained by Mozilla and built into Firefox as its native PDF viewer. Renders pages to canvas for in-browser viewing and exposes a document API (incl. `getTextContent()`) for reading page content programmatically. Ships as both an embeddable viewer UI and the underlying `pdfjs-dist` library, usable standalone in Node for headless processing without a browser.

Tested
JavaScript

pdf.js-extract

Library

Simple async Node.js PDF text reader built directly on Mozilla's PDF.js, extracting text content along with each item's x/y position on the page rather than just a flat text dump. Useful when downstream code needs to know where text sits on the page — for reconstructing tables or matching extracted text back to its visual location — without dealing with pdf.js's own lower-level rendering API directly.

Python

pdf2docx

CliGuiLibrary

Converts PDF files to DOCX (Word) format, preserving formatting and layout — fonts, positioning, images — rather than dumping plain text into a Word document, and extracts tables as genuine Word tables rather than flattened text. Offers both a CLI and a GUI, covering scripted batch conversion and one-off interactive use. A common need for taking a PDF that needs further editing back into an editable Word document.

C++

pdf2htmlEX

Library

Converts PDF to HTML while preserving text/layout fidelity (native positioned text with original fonts), producing a single self-contained file or a paged on-demand-loading version; carries over hyperlinks, outlines/bookmarks, SVG backgrounds, Type 3 and CJK fonts, and print support. Built on Poppler and FontForge; this pdf2htmlEX/pdf2htmlEX fork continues the original coolwanglu/pdf2htmlEX as an open community effort.

Python

pdf2image

Library

Wraps Poppler's `pdftoppm`/`pdftocairo` to convert PDFs (whole documents or page ranges) into PIL Image objects: PPM/JPEG/PNG output, multi-threaded batch conversion, grayscale mode, custom sizing, and password-protected PDF support.

Stale
JavaScript

pdf2json

CliLibrary

Node.js library/CLI (built on Mozilla's pdf.js engine) that converts PDFs to JSON: extracts text (with position, rotation, styling, color, and font metadata), page layout, and interactive AcroForm field data (text inputs, checkboxes, radio buttons, dropdowns, signature fields); also outputs plain-text files, and runs as a REST service or stream-based parser.

Tested
JavaScript

pdf2pic

Library

Node.js utility for converting PDF pages to image formats, with output written directly to a file, returned as base64, or handed back as an in-memory buffer depending on what the caller needs. Built on GraphicsMagick/ImageMagick via Ghostscript for the actual PDF rasterization rather than a pure-JS rendering path, meaning both need to be installed as system dependencies alongside the Node package.

JavaScript

pdf2xml-viewer

Library

Displays and inspects individual text boxes within PDF documents by converting them to pdf2xml format (via poppler-utils) and rendering the boxes with D3.js in a browser — useful for examining OCR-processed 'sandwich' PDFs before extraction. Companion tool to pdftabextract, for viewing the row/column grids it detects.

DepreciatedStale
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
Ruby

PDF::Inspector

Library

PDF::Reader-based analysis library built primarily to support Prawn's own test suite — verifying that Prawn actually produced the PDF content it was supposed to — but usable on any PDF for the same kind of low-level inspection. Extracts text as an array of per-operation string fragments (closer to the PDF's raw content stream than a clean text dump) and counts document pages, aimed at test assertions rather than end-user text extraction.

Ruby

PDF::Reader

Library

Low-level Ruby library for programmatic PDF access (not a renderer): document version, metadata/info, and page count; per-page text and font extraction; raw page content access; direct PDF object access via ObjectHash; custom receiver objects to walk page rendering programs; UTF-8 text normalization; and Ascii85 stream decoding.

Tested
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
Perl

PDF::WebKit

Library

Perl port of the Ruby PDFKit library: converts HTML strings, URLs, or files to PDF using wkhtmltopdf's WebKit rendering engine as the actual conversion backend, with external stylesheet injection and PDF options (page size, margins, orientation) settable via constructor args, global config, or HTML meta tags embedded directly in the source document. Requires wkhtmltopdf itself installed as a system binary, since this module is a Perl API layer over it rather than a native PDF renderer.

Stale
Python

Pdfalyzer

Cli

PDF forensics/analysis tool that visualizes a PDF's internal tree-like object structure as large, color-coded diagrams, scans embedded binary streams for suspicious/malicious content using YARA rules (via the companion Yaralyzer), and force-decodes suspicious font binaries.

Java

PdfBox-Android

Library

Android port of Apache PDFBox for reading and manipulating PDF documents on-device, without needing a server round-trip for PDF processing. Handles the same core PDFBox operations — text extraction, content editing, image handling — adapted to run within Android's runtime constraints, with optional JPX/JPEG2000 image support via the separate JP2Android library. Used where an Android app needs real PDF manipulation capability, not just viewing.

Stale
Go

pdfcpu

CliLibrary

Go PDF processor (CLI + library) supporting PDF up to 2.0 (ISO 32000-2): validate, optimize, split, trim, and merge PDFs; encrypt/decrypt; resize, rotate, and crop pages; extract/manipulate images, fonts, and metadata; manage attachments and portfolios; validate, report, and remove digital signatures; add/remove stamps and watermarks; process forms, bookmarks, and annotations; and generate booklets, N-up/N-down layouts, grids, and posters.

Tested
C#

PDFCreator

Gui

Source code of the well-known PDFCreator from pdfforge, a free virtual-printer application: install it once and any application's own Print dialog can output directly to PDF. Supports merging and reordering pages, password and digital-signature protection, PDF/A archival compliance, custom cover pages, and automated post-processing actions (FTP upload, email delivery, custom scripting) triggered on every conversion. Widely used as a default 'print to PDF' tool on Windows.

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
C++

PDFedit

GuiLibrary

PDF editing library, GUI application, and command-line tools for viewing and directly editing the internal structure of PDF documents — raw objects, streams, and cross-reference tables — rather than just visual page content. Particularly useful for inspecting and repairing malformed or non-standard PDFs that better-behaved editors refuse to open. A Flatpak build is available for running it on modern Linux distributions despite the project itself being unmaintained since 2020.

DepreciatedStale
Ruby

pdfextract

Library

Tool and library for extracting distinct text areas from PDFs, particularly scholarly article PDFs — isolating body text, references, and headers from the rest of the document rather than treating the page as one undifferentiated text blob. Built by CrossRef specifically for processing academic paper metadata and citation extraction at scale, reflecting its research/citation-indexing origin rather than general-purpose PDF text extraction.

DepreciatedStale
Scala

PDFFigures 2.0

Library

Extracts figures, tables, captions, figure names/numbers, section titles, and in-figure text from scholarly (computer science) PDFs, with page location and bounding boxes; renders extracted figures as raster (PNG/JPEG) or vector (SVG/PS/EPS, via pdftocairo) images; supports multi-threaded batch processing and includes debugging visualization tools.

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

pdfh5

Plugin

Framework-agnostic (with Vue/React support) web PDF preview plugin built on PDF.js: touch gestures (pinch-zoom, double-tap, scrolling), selectable/searchable text layer, annotations (highlights, freetext, ink, stamps, signatures), password-protected PDF support, page caching for large files, print support, and a sandbox mode blocking JS injection/XSS.

C

PdfiumViewer

Library

WinForms control wrapping Google's PDFium rendering engine (the same engine behind Chrome's built-in PDF viewer), for embedding PDF viewing directly inside .NET desktop applications. Split into three cooperating pieces: `PdfDocument` for loading and querying page/document data, `PdfRenderer` for rendering pages with zoom and scroll support, and `PdfViewer` for a ready-made toolbar UI covering printing and saving. No longer maintained.

DepreciatedStale
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.

C#

PDFKeeper

Gui

Open-source .NET document management application purpose-built around PDF storage and retrieval, with full-text-indexed search across either a single-user SQLite database or a shared multi-user database (on-premises or cloud). Supports bulk or automated ingestion via watched folders, metadata tagging (title, author, subject, category, keywords), splitting ('bursting') multi-page PDFs, per-document state flags, and inline notes with search-term-snippet previews. Aimed at personal or small-team archives rather than enterprise DMS platforms.

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.

Ruby

PDFKit

DriverLibrary

Ruby gem that generates PDFs from HTML+CSS via wkhtmltopdf (WebKit rendering): converts HTML strings, URLs, or files; attaches stylesheets; passes cookies; configures default/global wkhtmltopdf options; and provides Rack/Rails middleware for `.pdf`-suffixed routes with forced-download support.

Stale
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.

Java

PDFLayoutTextStripper

Library

Subclass of Apache PDFBox's own `PDFTextStripper` specifically built to preserve a PDF's original layout and spatial positioning when converting it to plain text — where PDFBox's default stripper reflows text into reading order and loses column/table alignment, this one keeps whitespace positioned to match the source layout. Makes it noticeably easier to extract structured data such as tables and form content from the resulting plain text, at the cost of extra leading whitespace in the output.

Tested
Stale
Python

pdfly

Cli

Pure-Python CLI (companion to pypdf) with commands including 2-up/booklet page layout, cat (extract/merge pages), check-sign (verify signatures), compress/uncompress, extract-annotated-pages, extract-images, extract-links, extract-text, meta/pagemeta, rm (delete pages), rotate, sign, update-offsets (repair simple PDFs), and x2pdf (convert other formats to PDF pages).

Tested
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.

Python

PDFMathTranslate

CliDockerGuiLibraryPlugin

Translates scientific PDF documents while preserving layout, formulas, charts, tables of contents, and annotations; supports Google Translate, DeepL, Ollama, OpenAI, and other translation backends via CLI, GUI, Docker, or a Zotero plugin, with batch/directory translation and partial-document translation.

Python

pdfmd

Cli

CLI that converts a PDF to Markdown, built as a thin wrapper around PyMuPDF4LLM — the actual conversion logic lives in PyMuPDF4LLM, with pdfmd providing a simple, single-command CLI entry point over it rather than requiring a Python script. A lightweight choice for command-line/shell-script workflows that just need 'PDF in, Markdown out' without writing any Python code.

Tested
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.

Python

PDFMiner

Library

Original PDFMiner: text extraction with location, font, and size data, layout analysis for reconstructing reading order from a page's raw content stream, format conversion to HTML/XML, table-of-contents/outline extraction, RC4/AES decryption, and multi-font/CJK text support. Python 2-only and unmaintained since its author moved on; fully superseded by the community-maintained Pdfminer.six fork, which carries the same core engine forward with Python 3 support and active development.

DepreciatedStale
Python

Pdfminer.six

Library

Pure-Python PDF-1.7 parser/extraction library: text, images, HTML, or hOCR output with exact text location/font/color data; AcroForm and tagged-content extraction; outline/TOC extraction; embedded image extraction (JPG, PNG, TIFF, JBIG2, bitmaps); CJK and vertical-writing support; Type1/TrueType/Type3/CID fonts; RC4/AES decryption; and decoding of ASCIIHex/ASCII85/LZW/Flate/RunLength/CCITTFax compression filters.

Tested
JavaScript

PDFObject

Library

Lightweight JavaScript utility for dynamically embedding PDFs in web pages via an iframe, with automatic detection of inline-PDF browser support, graceful fallback content for unsupported browsers/mobile, base64 PDF handling, and support for Adobe PDF Open Parameters (e.g. linking to a specific page).

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
Python

pdfparanoia

CliLibrary

PDF watermark-removal library/CLI targeting academic-publisher watermarks (institution names, personal identifiers, IP addresses, timestamps) for AIP, IEEE, JSTOR, RSC, and SPIE papers; also removes arbitrary user-specified strings from page content and/or XMP/DocInfo metadata, with in-place overwrite support.

PHP

PdfParser

Library

Parses PDF objects and headers to extract text (page by page) and metadata (author, description, and similar fields), with support for compressed PDFs, Mac OS Roman charset encoding, and hex/octal-encoded text — all implemented in pure PHP with no external binary dependency. Does not support secured/encrypted documents or form data extraction, a real limitation worth knowing before reaching for it on PDFs that might be password-protected.

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.

Python

pdfplumber

Library

Extracts text (with layout preservation, tolerance settings, regex search, and word bounding boxes), detects and extracts tables (via ruling-line or text-alignment strategies), and provides low-level access to characters, lines, rectangles, curves, images, annotations, hyperlinks, and form fields, with page cropping/filtering, password-protected PDF support, and visual debugging (page-to-image rendering with overlay annotations, incl. Jupyter display). Does not generate, modify, or OCR PDFs.

Tested
Python

PDFQuery

Library

Python library (built on pdfminer, lxml, and pyquery) for scraping PDF data using jQuery-like or XPath selectors: select elements by bounding-box location or text content, bulk-extract multiple fields at once, target specific page ranges, batch-process multiple PDFs, and cache parsed results for speed.

Stale
JavaScript

pdfreader

Library

Node.js library that reads text from PDFs and parses tabular data using automatic column detection combined with rule-based parsing rather than a fixed grid layout. Aimed specifically at extracting structured data (tables, forms) from PDFs programmatically, rather than general-purpose text dumping — the rule-based parser lets callers define matching patterns for specific document layouts they expect to process repeatedly.

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.

Python

pdfrw

Library

Reads and writes PDFs: subset/merge/rotate pages, modify metadata, build reusable Form XObjects, N-up and booklet layouts, watermarking (overlay/underlay), image and Form-XObject extraction, poster-sized output, and splitting 2-up PDFs; integrates with ReportLab (embedding existing PDF content into newly generated documents) and rst2pdf. No encryption/decryption support, and limited compression-filter support (external tools like pdftk needed for full decompression).

Stale
Java

PDFsam

Gui

Free, cross-platform desktop app (JavaFX, self-contained with a bundled JRE since v4) for splitting, merging, mixing, rotating, and extracting pages from PDF files through a simple drag-and-drop GUI. Built around PDFBox and other open-source PDF libraries under the hood, packaging their capabilities into point-and-click tools rather than requiring command-line usage. A free, basic-operations counterpart to PDFsam's own commercial 'Enhanced' edition, which adds more advanced features.

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.

Python

pdftabextract

Library

Toolkit for extracting tabular data from OCR'd ('sandwich') PDFs already converted to pdf2xml format: splits scanned double pages, detects lines via image processing, corrects page skew/rotation, clusters lines/text into table columns and rows, and exports to pandas DataFrames (CSV, Excel, etc.). Not an OCR tool itself — requires pre-OCR'd input from Tesseract/ABBYY; the authors recommend trying `pdftotext` first.

DepreciatedStale
C#

PDFTK Builder

CliGui

Free Windows GUI front-end for the PDFtk command-line tool, exposing its operations — split, merge, stamp, add page numbers, rotate, edit metadata, manage bookmarks and attachments — through point-and-click dialogs instead of the command line. Aimed at users who want PDFtk's capabilities without writing or remembering CLI invocations, or learning PDFtk's own multi-flag command syntax for routine batch operations.

Stale
Java

PDFtk Server

Cli

Command-line tool to merge, split, and rotate PDFs; fill forms with FDF/XFDF data and flatten them (or generate an FDF stencil from a form's fields); encrypt and decrypt with passwords; add watermarks and stamps; manage bookmarks, metadata, and attachments; repair damaged PDFs; and recompress page streams. The Java-rewritten 'Server' edition of the classic PDFtk command-line tool, maintaining the same CLI interface and command syntax as the original.

Tested
C++

pdftohtml (SourceForge)

Cli

Standalone PDF-to-HTML/XML converter built on Xpdf 2.02's parsing code, producing an HTML or XML rendering of a PDF's text and layout — not to be confused with the same-named `pdftohtml` binary bundled with Poppler, a separate, newer implementation that superseded this project. Distributed only as source and Windows binaries via its old SourceForge project page, with no activity since Xpdf 2.02's era.

Stale
C++

pdftojson

Cli

Command-line tool built on the Xpdf library that extracts per-word text with bounding-box coordinates (top, left, width, height) from every page of a PDF, outputting the result as structured JSON alongside page dimensions and page count. Useful when downstream code needs to know exactly where each word sits on the page — for reconstructing tables, matching form-field positions, or any layout-aware processing that plain-text extraction throws away.

Stale
R

pdftools

BindingsLibrary

R bindings for extracting content from PDFs: `pdf_text()` for per-page text, `pdf_info()` for metadata (author, creation date, tags), `pdf_toc()` for table of contents/section headers, `pdf_fonts()` for font info, embedded-attachment access, and `pdf_render_page()` to rasterize pages to bitmap (e.g. PNG/WEBP). Does not handle table extraction (recommends the `tabulizer`/`tabulapdf` package) or OCR of scanned text (recommends the `tesseract` package).

Java

pdftoxml (SourceForge)

Cli

Data-extraction application that converts PDF files into XML, built on an old snapshot of the JPedal library rather than being independently maintained. An abandoned, CVS/SourceForge-era project with no development activity since — kept here for completeness rather than as a recommended active tool, since Poppler's own `pdftohtml -xml` and similar actively-maintained tools now cover the same ground more reliably.

Stale
Java

PdfViewPager

Library

Android widget that displays PDF documents — from app assets, SD card, or remote URLs — inside Activities or Fragments, with built-in pinch-zoom and panning gestures baked into the widget itself. Requires Android API 21+, since it's built directly on the platform's own `PdfRenderer` class rather than bundling a separate rendering engine like PDFium or pdf.js. A lightweight choice specifically because it leans on what Android already ships rather than adding a rendering dependency.

Stale
Python

PDFx

Cli

CLI tool and Python package that extracts metadata (creation date, creator, page count, producer) and detects references (other PDFs, URLs, DOIs, arXiv IDs) within a PDF, with parallel downloading of referenced PDFs, plain-text extraction, and broken-hyperlink detection; outputs plain text or JSON, and accepts local files or URLs.

Tested
DepreciatedStale
PHP

phpgearbox/pdf

DriverLibrary

Generates PDFs two ways from the same package: DOCX templating (variable substitution like `${FOO}`, block cloning, table row duplication, then converted to PDF) for template-driven document generation, or direct HTML-to-PDF conversion via PhantomJS for cases where a DOCX template isn't the right fit. The DOCX-templating path is the more distinctive of the two, letting non-developers design the template layout directly in Word.

DepreciatedStale
PHP

PHPPdf

Cli

Converts XML (or Markdown) documents to PDF or images (JPEG/PNG via GD/Imagick/Gmagick) with HTML-like tags (div, p, table, headings, lists, images, links); supports auto-breakable/fixed pages, multi-column layouts, headers/footers/watermarks, page numbering, metadata, internal/external links, bookmarks, sticky notes, barcodes (via Zend), simple pie charts, borders, backgrounds, rotation/transparency, and stylesheets; usable via web or CLI, with Symfony2 integration.

Stale
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.

Python

pikepdf

Library

Pythonic wrapper around qpdf for reading, writing, and manipulating PDFs: merge, split, rotate, rearrange, and delete pages; read/write XMP and DocumentInfo metadata (auto-synced); losslessly extract or replace embedded images (preserving original JPEG compression); open password-protected files and save with RC4, AES-128, or AES-256 encryption (or remove it); linearize for 'fast web view'; direct object-level/content-stream access; automatic repair on open; access to qpdf's Job API; and Jupyter notebook preview rendering.

Python

PipesHub

ServerWeb App

Self-hostable enterprise search and agentic-workflow platform that unifies business data (PDF, Word, Excel, PowerPoint, and more) into a searchable knowledge layer: parses PDFs via pdfplumber, with optional Docling-based multimodal parsing and LLM-based OCR for scanned documents.

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
C++

Poppler

CliLibrary

PDF rendering library and command-line suite — a fork of Xpdf that's become the de facto standard PDF engine underlying much of the open-source PDF ecosystem, powering tools like Evince, Okular, and countless downstream wrappers. Ships pdftotext, pdfimages, pdftoppm, pdftocairo, pdftohtml, pdftops, pdfinfo, pdffonts, pdfdetach, pdfattach, pdfseparate, pdfunite, and pdfsig, covering text/image extraction, page rendering, format conversion, metadata, attachments, and signature verification.

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.

Ruby

Princely

Library

Rails wrapper around the PrinceXML PDF generator: renders PDF templates via a `:pdf` render option, registers PDF as a respond_to MIME type, provides a `make_and_send_pdf` helper, and supports custom layouts/stylesheets/locals, asset path rewriting, inline/attachment disposition, JS and PDF-form flags, and configurable timeouts.

Python

pydoxtools

Library

Pipeline library for extracting information from unstructured documents with low memory/CPU overhead: PDF table extraction, image analysis with OCR, document question-answering via LLM integration, vector index creation, and support for most common document formats.

Stale
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

PyMuPDF4LLM

Library

Markdown-conversion layer built on PyMuPDF: converts PDF pages to Markdown while preserving headings, tables (ruled-line or text-position-based detection), and images, specifically tuned for feeding PDF content to LLMs as clean, structured Markdown rather than raw extracted text. A sibling package to base PyMuPDF rather than a separate engine — it reuses PyMuPDF's own C-level parsing and adds the Markdown-shaping layer on top.

Tested
Python

pypdf

Library

Pure-Python PDF library: split, merge, crop, and transform pages; add passwords/encryption and decrypt (with optional AES support); read and add metadata; extract text; read and create annotations; and attach custom data/viewer settings. Companion CLI tool `pdfly` offers additional command-line operations.

Python

pyPdf

Library

Original pure-Python PDF manipulation library: reading, merging, cropping, and rotating pages, encryption/decryption, and text extraction — the ancestor codebase that both PyPDF2 and, eventually, today's pypdf were built from. The project's own page states it is 'no longer updated,' with its last release dating to December 2012; kept here for historical completeness rather than as something to newly adopt.

DepreciatedStale
Python

pypdf2xml

Cli

Converts PDF text to XML, built on pdfminer rather than a from-scratch parser; created as an alternative to Poppler's `pdftoxml` specifically because of better handling of CID Type2 font decoding that the Poppler tool got wrong on certain PDFs. Ships three separate CLI utilities — `pdf2xml`, `pdfxml2csv`, and `headerfilter` — covering the conversion itself plus two post-processing steps for turning the XML output into cleaner tabular data.

Stale
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.

Python

Python-PDFKit

DriverLibrary

Python wrapper around wkhtmltopdf: converts HTML from URLs, files, or strings (single or multiple at once) to PDF, with configurable wkhtmltopdf options, TOC generation, cover pages, external CSS, and HTML meta-tag-based settings.

DepreciatedStale
C++

qpdf

Library

Low-level, content-preserving PDF structure tool: linearizes PDFs for fast web view, encrypts and decrypts, splits and merges files, inspects and edits PDF object structure directly, and repairs damaged files without altering actual page content. Explicitly does not render pages or extract text — its own documentation is clear this is a structural transformation tool, not a content-reading one, and points elsewhere (e.g. the `pdftools` R package) for extraction needs.

Tested
R

qpdf

BindingsLibrary

R bindings for the qpdf C++ library, exposing content-preserving PDF transformations from R: splitting, combining/merging, and compressing PDF files (e.g. `pdf_compress()`). Does not read PDF content itself — the maintainers point to the 'pdftools' R package for text/data extraction.

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-native-pdf

GuiPlugin

React Native PDF viewer component: loads PDFs from URLs, local files, assets, blob data, or base64 (with optional caching); page jumping, page-by-page or continuous scrolling, pinch/double-tap zoom, and password-protected PDF handling. Uses PDFKit on iOS, PDFium on Android, and a native implementation on Windows; also supports Expo via a config plugin.

JavaScript

React-PDF

Library

Displays existing PDFs in React apps (built on PDF.js): renders pages via `<Document>`/`<Page>` with canvas, custom, or no rendering; shows outline/table of contents and thumbnails; selectable text and annotation/link layers; form rendering; page rotation and zoom; password-protected PDF handling; JPEG2000 and non-Latin (cMap) support. (Complementary to @react-pdf/renderer, which creates PDFs rather than displaying them.)

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.

Ruby

Ruby/Poppler

BindingsLibrary

Ruby-GNOME project's binding of poppler-glib, exposing Poppler's PDF rendering and parsing capabilities — text/image extraction, page rendering, metadata — to Ruby through GObject Introspection bindings rather than a Ruby-native reimplementation. Requires the system poppler-glib library installed separately, since this package is purely the Ruby-side binding over it. Gets Poppler's actual rendering fidelity, at the cost of that native dependency.

JavaScript

scissors

Driver

Node.js wrapper around PDFtk, Ghostscript, and ImageMagick for PDF manipulation: split/select/reorder/reverse pages, filter even/odd pages, join multiple PDFs, rotate (90/180/270/360°), crop (noted as unreliable), extract text and embedded images, extract metadata/properties, and render pages to PNG at a given DPI.

Stale
JavaScript

Scribe.js

CliLibrary

OCR and text-extraction library for images and PDFs: extracts existing text from text-native PDFs, runs OCR on image-native PDFs/scans, and can insert a text layer into an existing PDF to make it searchable. Usable from the browser, Node.js, or its own CLI; a hosted GUI is available separately at scribeocr.com.

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
Java

Simple Android PDF Viewer

Gui

Android PDF viewer (built on pdf.js) that opens PDFs via Android content providers without requiring app permissions, rendering them inside a sandboxed WebView with no network/filesystem/content-provider access and a restrictive Content-Security-Policy for security.

Objective-C

Skim

Gui

Open-source (BSD) macOS PDF reader and note-taker for reading and annotating scientific papers: adding/editing notes and highlights (with one-swipe highlighting), exporting notes as text, TOC/thumbnail navigation with visual history, full-screen presentation mode with transitions, snapshots, bookmarks, Spotlight search, LaTeX/SyncTeX/PDFSync integration, BibDesk compatibility, Keychain-saved passwords, and extensive AppleScript support.

PHP

Snappy

DriverLibrary

PHP wrapper around wkhtmltopdf/wkhtmltoimage that generates PDFs or image snapshots/thumbnails from URLs or HTML, merges multiple URLs into a single PDF, supports XSL-based tables of contents, and passes through wkhtmltox options (page size, margins, cookies, JS); includes Symfony, Laravel, and Zend Framework integrations.

Scala

sPDF

DriverLibrary

Scala wrapper around wkhtmltopdf that generates PDFs from HTML/CSS/JS: accepts input as files, streams, URLs, Scala XML elements, or raw strings; writes to files or output streams; supports wkhtmltopdf's extended parameters (orientation, page size, margins); referenced images/stylesheets; async conversion via Scala `Future`; and a `WrappedPdf` mode for headless environments (e.g. via xvfb-run).

Stale
Ruby

squid

Library

Extends the Prawn PDF library with a `chart()` method for drawing bar, line, and other graph types directly into PDF documents from hash-based data, without needing a separate charting library or image-generation step. Built specifically as a Prawn plugin rather than a standalone charting tool, so it only makes sense in a project already using Prawn for its PDF generation.

Stale
Java

Stirling-PDF

Web ApiWeb App

Self-hostable PDF toolkit with 50+ tools: edit, merge, split, sign, redact, and convert PDFs; OCR scanned pages; compress files; validate signatures; apply watermarks; and automate workflows via no-code pipelines, a REST API, and webhooks. Offered as a browser-based UI, desktop client, or self-hosted server (incl. air-gapped deployment).

C++

SumatraPDF

Gui

Free, multi-format document reader for Windows built for speed and a minimal footprint rather than feature breadth: supports PDF, EPUB, MOBI, CBZ, CBR, FB2, CHM, XPS, and DjVu viewing in one lightweight application with near-instant startup. Popular as a fast default PDF viewer replacement on Windows, particularly among developers who want a no-frills reader without the overhead of a full office-suite-adjacent PDF application.

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.

Java

tabula-java

CliLibrary

Table-extraction library (powers the Tabula tool) that pulls tabular data out of PDFs using lattice mode (ruled cell borders) or stream mode (no borders), exporting to CSV, TSV, or JSON; usable as a CLI for batch processing or as a Java API, with support for selective pages, custom extraction areas, and password-protected files.

Tested
R

tabulapdf

BindingsLibrary

R bindings to the Tabula Java library (an R clone of the Tabula CLI) that computationally extracts tables from PDF documents via `extract_tables()`, returning results as R tibbles/data frames. Requires a Java runtime (rJava, OpenJDK 11 recommended).

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.

JavaScript

textract

CliDriverLibrary

Node.js module (CLI + API) that extracts text from HTML, PDF, DOC/DOCX, ODT, RTF, XLS/XLSX/XLSB/XLSM, CSV, ODS, PPTX/ODP, XML, Markdown, EPUB, and image formats (PNG/JPG/GIF via Tesseract OCR); wraps external tools (pdftotext, antiword, tesseract, unrtf) and supports password-protected PDFs and configurable OCR language.

Stale
Ruby

textractor

Library

Ruby wrapper providing a simple, unified API over several external CLI tools (rather than reimplementing extraction itself) to pull text from PDF and Word documents, delegating the actual parsing to whichever underlying tool is installed and available. A thin convenience layer for Ruby code that just wants one consistent method call rather than shelling out to different tools per document type.

Stale
Python

TextRank

Cli

Graph-based keyword/keyphrase extraction and extractive text summarization implementing the TextRank algorithm, exposed via `extract_summary` and `extract_phrases` CLI commands. Operates on plain text files — the README describes no PDF-specific handling, so PDF content needs to be extracted to text by a separate tool first before TextRank can summarize or extract keyphrases from it.

Stale
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.

JavaScript

Universal Viewer

Library

Open-source, IIIF-based media viewer for sharing books, manuscripts, newspapers, film, audio, and 3D objects on the web — used widely by libraries, archives, and museums as their public-facing digitized-collection viewer. Renders images, PDFs, audio, video, and 3D files through a single embeddable npm package driven by the IIIF (International Image Interoperability Framework) presentation API, rather than format-specific custom viewers for each media type.

Python

Unstructured

DriverLibrary

Open-source ETL library that converts complex documents (including PDFs) into clean, structured data for LLM ingestion: PDF text extraction, OCR on scanned pages (via tesseract-ocr/poppler-utils), document layout detection, and partitioning into logical elements via a single `partition()` auto-detection function.

JavaScript

url-to-pdf-api

Server

Microservice (Puppeteer/headless Chrome) that converts URLs or posted HTML into PDFs or PNG/JPEG screenshots, with configurable viewport, PDF page size/orientation/margins/scale, header/footer templates, page-range selection, cookies/headers, SPA network-idle waiting, and optional API-key auth; deployable via Heroku or Docker.

Stale
Java

veraPDF

CliLibrary

Industry-backed, open-source validation library and CLI for checking PDF files against the PDF/A and PDF/UA standards, developed by a consortium including the PDF Association and major archives/libraries specifically to be the reference validator for these standards. Produces a detailed machine-readable validation report identifying exactly which conformance rules a file violates, rather than a simple pass/fail result. Widely used in digital-preservation workflows where formal PDF/A compliance is a hard requirement.

JavaScript

vue-pdf

Library

Vue 2 component for displaying PDFs from URLs, file paths, or binary data: page navigation, 90°-increment rotation, password-protected PDF handling, per-page or range printing, load-progress tracking, text extraction/selection, clickable internal links, and rendering multiple page instances at once.

Stale
Python

WeasyPrint

Library

Python library that renders HTML and CSS to PDF using a custom Python-built CSS layout/pagination engine (not WebKit/Gecko), targeting print-oriented CSS/HTML standards for generating reports, invoices, tickets, and similar structured documents.

Ruby

Wicked PDF

DriverLibraryPlugin

Rails plugin that uses wkhtmltopdf to render standard HTML views (or raw HTML/URLs/files) as PDF, avoiding a specialized PDF DSL: `format.pdf` controller responses, saving/emailing PDFs, CSS styling and JS execution, custom headers/footers, Rack middleware for `.pdf`-suffixed URLs, and an HTML debug-preview mode.

C++

wkhtmltoimage

CliLibrary

Headless command-line tool (and C library) that renders HTML into image files using the Qt WebKit rendering engine, without requiring a display server or window manager — useful for automated screenshot/thumbnail pipelines running on a server. Can capture live URLs or local HTML files, applying the same CSS/JavaScript rendering a real browser would. Shares its rendering engine and codebase with the companion wkhtmltopdf; both are archived and unmaintained, since Qt WebKit itself was deprecated in favor of Chromium-based headless rendering.

DepreciatedStale
C++

wkhtmltopdf

CliLibrary

Headless command-line tool (and C library) that renders HTML into PDF using the Qt WebKit rendering engine, without requiring a display server or window manager — long the default choice for server-side 'print this webpage to PDF' pipelines before headless Chrome existed. Can capture live URLs or local HTML files, applying the same CSS/JavaScript rendering a real browser would. Archived and unmaintained since Qt WebKit was deprecated; numerous language wrappers throughout this directory still drive it as a subprocess.

DepreciatedStale
Java

XDocReport

Library

Merges DOCX/ODT template documents (authored normally in MS Word or OpenOffice/LibreOffice, with placeholder fields marked up directly in the document) with a Java data model to generate populated reports, then converts the result to PDF, XHTML, or back to the original office format. Ships an iText-based PDF converter alongside its own DOCX/ODT-native converters, so template authors can design reports visually rather than programmatically laying out PDF content.

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
Python

xhtml2pdf

Library

Pure-Python HTML-to-PDF converter built on ReportLab, html5lib, and pypdf, supporting HTML5 and CSS 2.1 (with partial CSS3) without any external browser or native rendering engine dependency. Offers a choice of cairo or the legacy RenderPM graphics backend for bitmap/vector output. Being pure Python with no headless-browser dependency eases deployment in restricted environments, at the cost of less complete modern-CSS support.

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.

C++

Xpdf

CliGui

PDF viewer plus a full command-line toolset (pdftotext, pdftops, pdftoppm, pdftopng, pdftohtml, pdfinfo, pdfimages, pdffonts, pdfdetach) for viewing PDFs and converting them to text, PostScript, image, or HTML, alongside metadata, image, font, and attachment extraction. The original codebase Poppler itself forked from; poppler-utils has since become the more actively maintained fork of these same tools, but Xpdf continues independent development under its original author.

Java

YARG

Library

Java reporting library (developed by Haulmont for the CUBA Platform) that fills templates with data (loaded via SQL, Groovy, or other sources) and generates reports in Office formats (doc/docx/xls/xlsx), HTML, FreeMarker, CSV, or custom text — headless, with no built-in UI, for embedding into host applications.

Ruby

Yomu

Library

Ruby library built on Apache Tika that extracts text, metadata (as a hash, e.g. Content-Type), and MIME type from PDFs, Microsoft Office, OpenDocument, Apple iWork, and RTF files; accepts local paths, remote URLs, streams, or raw binary data as input.

Stale
JavaScript

zerox

Library

OCR/document-ingestion library (Node/TypeScript and Python implementations) that converts PDFs, Word/Excel/PowerPoint files, and images to page images, then sends each to a vision-language model (OpenAI, Azure OpenAI, AWS Bedrock, Google Gemini, or Vertex AI) to produce Markdown, preserving tables/charts; supports structured JSON-schema extraction, page selection, concurrent processing, and orientation/edge correction.

JavaScript

zotero-pdf-translate

Plugin

Zotero plugin that translates PDFs, EPubs, webpages, metadata, annotations, and notes via 20+ pluggable translation services: popup translation on text selection, adding translations to annotation comments, translating item titles/abstracts, single-word dictionary lookups, sentence-by-sentence mode, and a standalone multi-service comparison window.