← Back to Open-Source PDF Software

Open-Source PDF Software Capable of Reading PDF Files

Open and parse PDF files

22 tools

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.

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

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.

Ruby

Origami

Cli

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

Stale
Go

pdf

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

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.

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.

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

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

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