← Back to Open-Source PDF Software

Open-Source PDF Software Capable of Extracting PDF Metadata

Read document metadata (XMP, Info dictionary, etc.)

51 tools

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

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

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

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

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

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

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.

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

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.

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.

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

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

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

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.

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

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

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

pypdfium2

BindingsLibrary

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

C#

QuestPDF

Library

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

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

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

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.