All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

v0.23.0 (2026-10-16)

Features:

  • report a redaction-mark query's failure as a value instead of raising by @r8

Bug Fixes:

  • raise on a broken native library by @r8

  • fail whole-document text extraction on an unreadable page by default by @r8

  • refuse text and Markdown options that have no effect by @r8

  • report closed editors for empty form batches by @r8

  • contain native panics in handle-free operations by @r8

v0.22.0 (2026-10-05)

Features:

  • create a PDF from JPEG and PNG images by @r8

  • read certificates from PEM and PKCS#12 files by @r8

Bug Fixes:

  • decode CCITT images in raw data by @r8

v0.21.0 (2026-09-27)

Features:

  • create PDFs from Markdown, HTML or plain text by @r8

  • find a document's running headers and footers by @r8

  • convert edited documents to PDF/A by @r8

  • validate documents against PDF/A, PDF/UA and PDF/X by @r8

  • add splitting editor pages at bookmark boundaries by @r8

  • add PDF page extraction, splitting, and merging by @r8

  • add Office export and import by @r8

v0.20.0 (2026-09-22)

Features:

  • add page visible box getter by @r8

  • report a rotated run's physical rect by @r8

  • support editing password-protected PDFs by @r8

  • drop annotate_skipped_pages so a scanned page reports as a warning by @r8

  • upgrade pdf_oxide to 0.3.78 by @r8

Bug Fixes:

  • name :max_output_pixels when the caller's own budget is over the limit by @r8

  • let encryption own the refusal when an incremental save is encrypted by @r8

  • resolve the catalog /Metadata entry by @r8

  • correct render sizing by @r8

  • preserve process-wide warnings so document reads cannot claim them by @r8

v0.19.0 (2026-09-19)

Features:

  • expose matched spans by @r8

  • support table region modes and unify reading-order options by @r8

  • apply put_values under one lock by @r8

  • extract button's on-state names by @r8

  • add PDF text redaction and document sanitization by @r8

Bug Fixes:

  • return page count errors from Document.pages/1 by @r8

  • clamp non-finite glyph metrics at the NIF boundary by @r8

  • drop unused Error.details field by @r8

  • reject non-quadrant rotation deltas by @r8

  • refuse an incremental save that would drop a pending edit by @r8

v0.18.0 (2026-09-13)

Features:

  • add page rendering, ink separations and whole-document rasterizing by @r8

  • add structured warnings split by scope by @r8

  • add document metadata editing by @r8

  • add page-box editing by @r8

Bug Fixes:

  • refuse text and span options the filtered routes would silently drop by @r8

  • apply word boundaries to all regex alternatives by @r8

v0.17.0 (2026-09-06)

Features:

  • add region erasing by @r8

  • add structured page extraction with typed regions by @r8

  • add PDF encryption on save by @r8

  • add PDF file attachment support by @r8

  • add AcroForm data export as FDF or XFDF by @r8

v0.16.0 (2026-08-31)

Features:

  • add page rotation by @r8

  • add page deletion and reordering by @r8

  • add page label ranges extraction by @r8

  • enable JPEG 2000 extraction for JPXDecode images by @r8

  • add a form field's tooltip, box, default, limits and options by @r8

  • add plain text conversion with to_plain_text for Document and Page by @r8

Bug Fixes:

  • drop the unused :linearize save option by @r8

v0.15.1 (2026-08-25)

Bug Fixes:

  • forward captured log records without the flushing process's metadata by @r8

  • prevent diagnostics flush from replacing a call's result by @r8

v0.15.0 (2026-08-24)

Features:

  • add signature certificate parsing by @r8

  • verify adbe.pkcs7.sha1 signatures by @r8

  • validate timestamps structurally, include signed data in token scope by @r8

  • improve signatures with B-LTA, parsed signing times, and signer certs by @r8

  • identify signed and unsigned signature fields by @r8

  • report PAdES levels, timestamps, and security store data by @r8

  • verify PDF signatures and expose signer certificates by @r8

  • capture upstream log output so a silently degraded page says why by @r8

Bug Fixes:

  • escape document-controlled font names in inspect output by @r8

v0.14.0 (2026-08-20)

Features:

  • add digital signature reading by @r8

  • add form and annotation flattening by @r8

v0.13.0 (2026-08-10)

Features:

  • classify form fields from their flags by @r8

  • return the editor from every form write so filling a form is one pipeline by @r8

  • represent form fields as per-kind structs by @r8

  • add Form.field/2 and value/2 and key form fields by full name by @r8

v0.12.0 (2026-08-05)

Features:

  • add Editor version, page count and modified getters by @r8

  • add text search by @r8

v0.11.1 (2026-08-01)

Bug Fixes:

  • accept any path the OS does, so a byte filename no longer raises by @r8

v0.11.0 (2026-07-30)

Features:

  • add rects and lines extractors by @r8

  • add layers and inks extractors by @r8

  • add page text layer detection by @r8

  • add page media box extraction by @r8

  • add page rotation extraction by @r8

v0.10.0 (2026-07-28)

Features:

  • read documents through a shared lock so one handle serves concurrent reads by @r8

Bug Fixes:

  • report the index and count when page/2 rejects an out-of-range page by @r8

  • unify bad option error handling by @r8

  • decode the open-option password as bytes so a non-UTF-8 password works by @r8

  • cap outline conversion depth so a hostile bookmark tree can't abort the VM by @r8

v0.9.0 (2026-07-26)

Features:

  • add strict has_structure_tree/1 and has_xfa/1 so a swallowed error is reachable by @r8

  • add on_page_error to fail whole-document text on an unextractable page by @r8

Bug Fixes:

  • return the version and page count from the open NIF so no handle can leak by @r8

  • match NIF success payloads loosely so a shape change can't raise CaseClauseError by @r8

  • read a single page label through a range-checked NIF by @r8

  • decode tables from a borrow instead of cloning for the resource by @r8

  • return JPEG-stored image bytes without cloning the stored blob by @r8

  • return an error instead of panicking when a binary allocation fails by @r8

  • decode Info strings as PDFDocEncoding, uniformly across all fields by @r8

  • cache page_count on the Document struct at open by @r8

  • schedule lock-taking document NIFs on dirty CPU schedulers by @r8

v0.8.0 (2026-07-25)

Features:

  • add options to the extractors by @r8

  • upgrade pdf_oxide to 0.3.75 by @r8

  • add to_markdown, to_html, and to_text for Table by @r8

  • add HTML conversion with to_html for Document and Page by @r8

  • add Markdown conversion with to_markdown for Document and Page by @r8

  • add cell, row, and Enumerable accessors to Table by @r8

  • add close/1 and closed?/1 functions for resource management by @r8

  • introduce color structs for CMYK, Gray, RGB, and Unknown by @r8

  • add annotations extraction by @r8

  • add metadata, permissions, and page labels extraction by @r8

  • add fonts extraction by @r8

  • add outline extraction by @r8

  • add XFA detection with Document.has_xfa?/1 by @r8

Bug Fixes:

  • re-raise non-ErlangError exceptions from Wrap.call/1 by @r8

  • sort extracted fonts by resource name for deterministic order by @r8

v0.7.0 (2026-07-23)

Features:

  • add image extraction by @r8

  • add path extraction by @r8

  • add structured PdfElixide.Error with matchable reason atoms by @r8

Bug Fixes:

  • force NIF build when PDF_ELIXIDE_BUILD is set by @r8

v0.6.0 (2026-07-20)

Features:

  • add table extraction by @r8

  • add span extraction by @r8

  • add char extraction by @r8

v0.5.0 (2026-07-14)

Features:

  • add text line extraction with nested words by @r8

  • add word extraction with bounding boxes by @r8

  • add Document.text/1 for whole-document text extraction by @r8

  • add text getter to Page by @r8

  • implement Enumerable protocol for Document by @r8

  • add width and height getters to Page by @r8

  • add Page module by @r8

v0.4.0 (2026-05-25)

Features:

  • add has_structure_tree? check to Document by @r8

  • add password authentication for opening encrypted PDFs by @r8

  • add PDF encryption handling and authentication functions by @r8

v0.3.1 (2026-05-20)

Bug Fixes:

  • relax elixir requirements by @r8

  • tune rustler dependencies by @r8

v0.3.0 (2026-05-20)

Features:

  • implement save to file with options by @r8

  • implement setting form field by @r8

  • add editor module by @r8

v0.2.0 (2026-05-19)

Features:

  • implement form fields extraction by @r8

v0.1.0 (2026-05-18)

Features:

  • implement extract_text method by @r8

  • implement version method by @r8

  • implement page_count method by @r8

  • implement PDF loading by @r8

Bug Fixes:

  • move git hooks configuration to dev config by @r8