← Back to Open-Source PDF Software

Open-Source PDF Software Capable of Annotating PDFs

Add or manage annotations/comments/highlights

26 tools

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

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

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.

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

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

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.

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

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.

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

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

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

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.

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.

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.

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.