← Back to Open-Source PDF Software

Open-Source PDF Software Capable of Reading PDF Files

Open and parse PDF files

21 tools

Command Line

Poppler

CliLibrary

PDF rendering library and command-line suite (pdftotext, pdfimages, pdftoppm, pdftocairo, pdftohtml, pdftops, pdfinfo, pdffonts, pdfdetach, pdfattach, pdfseparate, pdfunite, pdfsig) covering text/image extraction, page rendering, format conversion, metadata, attachments, and signature verification.

C#

PdfPig

Library

Reads and extracts text, words, letters (with position/font data), images, annotations, hyperlinks, embedded files, and bookmarks from PDFs (port of PDFBox); performs layout/reading-order analysis; supports basic PDF creation, merging, read-only AcroForm inspection, and opening password-protected documents.

C++

PDF-Writer

Library

C++ library (also known as PDFHummus/PDFWriter, the engine behind HummusJS/Muhammara) for creating, parsing, and modifying PDFs: JPEG/PNG/TIFF image embedding, PDF 2.0 encryption (via OpenSSL), and FreeType-based text 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.

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

Java

PdfBox-Android

Library

Android port of Apache PDFBox for reading and manipulating PDF documents on-device, with image handling (including optional JPX/JPEG2000 support via JP2Android).

Stale
JavaScript

HummusJS

BindingsLibrary

Fast Node.js module (native binding around the C++ PDFWriter/PDFHummus engine) for creating, parsing, and manipulating PDF files and streams.

JavaScript

PDF.js

Library

A general-purpose, web standards-based platform for parsing and rendering PDFs.

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.

OCaml

Caradoc

Cli

OCaml parser and validator for PDF file structure, with CLI analysis commands and an interactive console for exploration.

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

Stale
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

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

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.

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

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.

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.

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.

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