Modules
Pure-Elixir PDF parsing and lossless surgery engine.
A PDF hex string <...>; value holds the hex digits as text.
A PDF literal string (...); value holds the decoded bytes.
A PDF name object (e.g. /Type). value is an atom for the engine's known names, otherwise a binary (untrusted names never become atoms).
An indirect-object reference (id gen R).
A PDF stream object: its dictionary plus the raw (still filter-encoded) raw_bytes. Decode with PdfEx.Filter.
Run-level text replacement.
HTML projections of a document, and the reverse (HTML edit → PDF text ops).
The immutable in-memory representation of an opened PDF.
Structural page operations: delete, insert, reorder.
The single error struct returned across the public API.
Single entry point for stream filter dispatch.
Behaviour for a stream filter codec (e.g. Flate, LZW, ASCII85).
TrueType font surgery (Tier 3, T3.4). subset_truetype/2 produces a smaller
valid sfnt that retains a glyph set (+ composite dependencies) and empties all
other outlines. Glyph ids are preserved (cmap/hmtx untouched). CFF/OTTO is
refused. Not wired into PDF embedding (a separate integration layer).
Lazy glyph projection: builds doc.glyphs (per page-object ref) and
doc.uid_index ("p<page_obj_id>_g<seq>" -> {:glyph, contents_ref,
show_op_index, glyph_index}).
A positioned glyph in the page IDM (fix G).
Operational transformation for collaborative editing (Tier 3, T3.1).
Stable glyph address: survives seq-based UID renumbering.
An op in address space, tagged with the base version it was built against.
Collaborative edit operations as plain structs, plus a pure dispatcher.
Behaviour for a collaborative edit operation.
Delete the single glyph uid from its run.
Reposition the glyph uid to absolute text-space x/y.
Replace the text of the run containing glyph uid.
Represents a single resolved PDF page.
Serializes a PdfEx.Document back to PDF bytes, in one of two modes.
Public facade for collaborative editing sessions.
The telemetry events PdfEx emits, and the single source of truth for their
names. Attach handlers with :telemetry.attach/4 (or attach_many/4).