Skip to main content

Feature survey, September 2026

What recognized PDF libraries and the PDF standards offer that this project's roadmap did not plan, as found on 2026-09-26, and what the maintainer decided about each. It is the source of the roadmap revision of that day, of ADRs 37 to 44, and of the comparison published with the documentation.

A snapshot, not a reference. Claims about third-party products and standards are what their public documentation said when the survey read it; each was checked once by an independent pass, not continuously. Verify one before relying on it.

Method​

Six researchers each covered one area, reading current public sources and, for every feature, searching this repository's documents to decide whether a milestone, a decision or a debt row already planned it:

AreaWhat was read
.NET librariesiText 9 and its add-ons, Aspose.PDF, Syncfusion, PDFsharp and MigraDoc, QuestPDF, Docotic.Pdf, GemBox.Pdf, Nutrient, Apryse, IronPDF, Spire.PDF, PdfPig, Telerik, DevExpress
Other ecosystemsPDFBox, OpenPDF, qpdf, MuPDF and PyMuPDF, pdfcpu, HexaPDF, pikepdf, pypdf, pdf-lib, pdf.js, PDFium, Poppler, Ghostscript, callas pdfToolbox, Acrobat Preflight, veraPDF
ISO 32000-2The PDF 2.0 specification clause by clause, with its errata
Standards around PDFISO/TS 32001 to 32005, PDF/A-1 to 4, PDF/UA-1 and 2, WTPDF, PDF Declarations, PDF/X, PDF/VT, PDF/E, PDF/R, XMP, the Arlington model, PAdES, Factur-X and ZUGFeRD, EN 16931, the French e-invoicing reform, payment QR codes
HTML to PDF enginesPrince, WeasyPrint, PDFreactor, Antenna House, Vivliostyle, Paged.js, iText pdfHTML, Chromium; CSS Paged Media, GCPM, Fragmentation, Text, Fonts, Color and the rest
Business workflowsLegal case files and French practice, redaction, Bates numbering, comparison, OCR, scans, sanitization, e-signature, batch generation, extraction for AI

A second agent per area then tried to refute each finding — on the roadmap (was it really absent?), on the facts, and on its relevance to business documents — and dropped 3. The 307 that survived were merged across areas and grouped into sixteen themes. A last pass, meant to look for what the six had missed, did not run: the session's usage limit stopped it. The maintainer then answered one question per decision, recorded below.

What was decided​

ThemeWhere it went
Case-file assembly completenessM06 (merge fidelity, page labels, attachments, viewer preferences) and M07 (split, image pages, pruning, outlines, links between pieces, portfolios).
Legal exhibit workflowM09 (exhibit stamps, Bates numbering) and M18, the AdCodicem.Pdf.CaseFile satellite (piece model, inventory, portal presets, integrity manifest, e-mail to PDF).
Redaction and sanitizationM19, in the core; the feature inventory in M15; pixel redaction once M22's decoders exist.
Signatures: validation, revisions, PAdES levelsM04 (revisions, byte-range coverage, change classification, in the core, no cryptography), M26 (PAdES B-B and B-T), M27 (B-LT, B-LTA, validation); ADR 41.
Security handlers and formsM16 (diagnostics, field creation, FDF/XFDF/JSON, AES-GCM and MAC read, public-key handler detected), M17 (HTML forms), M26 (public-key handler decryption); ADR 41.
Content on existing documents: annotations, layers, page geometryM09 (normalization, artifact stamps) and M11 (annotations, appearances, flattening, optional content).
Conformance targets and PDF 2.0M03 (output version, ADR 40), M02 (Arlington rules, ADR 44), M13 (PDF/UA-1), M14 (PDF/A-3, XMP), M20 (profiles A-1 to A-4, UA-1), M21 (conversion), M28 (PDF/UA-2, WTPDF, PDF/A-4); auto-tagging stays open.
Scans and imagesM07 (image pages without re-encoding), M22 (AdCodicem.Pdf.Imaging, OCR text layer), M23 (recompression); ADR 42.
CSS paged media and layoutM12.1 to M12.7; ADR 39 for forward references.
Typography, text and fontsM08 (fallback, WOFF2, standard-14 metrics), M12.2 (UAX #14, UAX #9, OpenType features, hyphenation), M15 (reading Type 1, CFF, Type 3); ADR 43. Variable fonts and color emoji are open questions.
Visual CSS and graphicsM12.5.
HTML engine production and integrationM12.5 and M12.6; ADR 38 for resource loading. A code-first layout API is an open question.
E-invoicing, payment codes and barcodesM10 (AdCodicem.Pdf.Barcodes) and M14 (AdCodicem.Pdf.FacturX, pulled ahead of extraction). 2D-Doc is an open question.
Extraction outputsM15 (search, exports) and M24 (comparison and templates).
Tooling and deploymentThe AdCodicem.Pdf.Tool track from M06; cancellation and progress designed in M03; WebAssembly and the container profile in M23; a JSON dump of the object graph stays open.
Weighed for exclusionADR 37 excludes active content and PDF to Office; print production went to M29, advanced typesetting to M30, DOCX to HTML to M31; mixed raster content compression is an open question.

The milestones were renumbered in the order they are worked; docs/roadmap.md keeps the mapping from the previous numbers, which the themes below still use where they quote the roadmap as it stood.

Inconsistencies the survey found in the roadmap​

Each was corrected by the revision, by an ADR, or by a debt row.

  • M4 (docs/milestones/M4.md, and roadmap.md in M4's text) assigns 'conformance remediation — embedding missing fonts, adding an output intent or XMP' to M12. M12's deliverables and acceptance list only generation, Factur-X, preservation on merge and profiles, so no milestone converts a received PDF to PDF/A.
  • CLAUDE.md D17 says 'PAdES later', ADR 18 says 'PAdES follows', architecture.md lists Signing as 'PAdES (late satellite)' and the site says 'PAdES signing, Planned, M14'. M14's deliverables name only IPdfSigner, a local implementation and an HSM path: no baseline level, no TSA, DSS or LTV, no certification or signature field. No milestone verifies a signature, although M3 and M14 both assert that existing signatures survive.
  • ADR 5 says SkiaSharp is allowed 'in .Html only', yet architecture.md §2 gives AdCodicem.Pdf.Rendering a SkiaSharp dependency and ADR 16 / M14 plan 'Skia rasterization'. ADR 5 needs amending before M14, and before any imaging satellite that uses Skia codecs.
  • ADR 5 lists 'bidirectional text' among what HarfBuzz provides. HarfBuzz does not implement UAX #9 (run resolution and reordering are the caller's job), so bidi is in fact unplanned.
  • M1 only passes DCT, JPX, CCITT and JBIG2 through. M10 promises 'extraction of images' (output format unstated), M13 'recompression' and M14 rasterization of the reference and scan documents, but Skia decodes neither JBIG2, CCITT nor (in SkiaSharp) JPEG 2000, and no milestone plans the decoders. M14's acceptance on scans depends on work nobody owns.
  • M12's title says 'PDF/A-3' but its deliverables say 'PDF/A-2b and PDF/A-3b', and 'PDF/A and PDF/UA profiles' name no parts. M12's acceptance ('the profiles agree with veraPDF on every corpus document') implicitly requires PDF/A-1a/1b, PDF/A-4f and PDF/UA-1 profiles, because corpus files claim them.
  • M8 requires passing 'PDF/UA validation' without naming the part. PDF/UA-2 requires PDF 2.0 output, but M3 specifies no output-version policy, and Factur-X (M12) still requires PDF/A-3 (PDF 1.7-based). The M8 choice constrains M3, and no document records it.
  • M8's acceptance names 'the two-column report' among the generated reference documents, yet M7 has no multi-column layout deliverable, and ADR 4's list (box model, tables, paged media, flexbox, simple grid, inline SVG) does not include it.
  • M11 plans the password (standard) security handler only, and its acceptance says every encrypted corpus document opens 'with its recorded password'. Invariant 12 says every PDF valid under ISO 32000 is readable, and the public-key handler (§7.6.5) is part of ISO 32000-2, so M11 should at least detect such files and report them under a stable code.
  • M5's merge list (bookmarks, links, annotations, attachments) and ADR 17's recombination list (structure trees, OutputIntents, metadata, fonts) both omit /PageLabels, /OCProperties, /AcroForm (with field-name collisions), the Names trees (Dests, EmbeddedFiles, JavaScript), /Extensions, /ViewerPreferences and /OpenAction. Each is silently dropped or misapplied on merge, against invariant 7, and M5's acceptance tests none of them.
  • CLAUDE.md makes 'table of contents, bookmarks, continuous pagination' the first business priority, but M5 depends only on M3: numbering stamps are M9 (which needs M6) and a TOC page needs M6/M7 text layout. The priority cannot be met at M5, and only /PageLabels, which are unplanned, could give continuous pagination there.
  • M9's acceptance ('every untouched object byte-identical', PDF/A loss reported) would pass while silently voiding a DocMDP P=1 certification or breaking the tag tree of a PDF/UA input. Invariant 7 covers tagged structure, but M9 tests PDF/A only, and signatures not at all.
  • M11 fills AcroForms, but the corpus notes list hybrid and dynamic XFA, Reader-extended (UR3) forms and JavaScript-calculated fields for M11. The milestone says nothing about stale XFA data after filling, UR3 breakage or stale calculated totals, all of which are silent losses.
  • architecture.md §3 describes Content/ as 'the content stream interpreter used by extraction (M8)', but extraction is M10 (M8 is tagged structure).
  • CLAUDE.md 'Known traps' lists Resources, MediaBox and Rotate as inherited page attributes but omits CropBox, which ISO 32000-2 Table 31 also makes inheritable and which stamping (M9), extraction and rasterization must use.
  • M7.2 'page counters' (page X of Y), M7.6 'a table of contents with real page numbers' and group totals are forward references. The forward-only writer (ADR 13) and M7's 'memory constant at 1000 pages' acceptance need a stated strategy (a two-pass anchor-to-page map, or late-filled Form XObjects), and none is recorded.
  • Debt T06 covers only PDFDocEncoding in PdfString.ToText, but the same shipped method also decodes PDF 2.0 UTF-8 text strings (BOM EF BB BF) as Latin-1, which garbles accented bookmarks, labels and Info values from PDF 2.0 producers.
  • ADR 36 defers a public rule API to M12 ('the first consumer that needs them public'), yet M12's deliverables do not mention it. ADR 36's severity scale (Information, Warning, Error) also has no outcome for PDF/UA conditions that need human judgment.
  • ADR 11 makes remote fetching opt-in for @font-face only. No ADR or milestone governs how the HTML engine loads images, stylesheets, SVG or attachments (http, file:, redirects, private addresses), and invariant 4's 'everything read is hostile' is stated for PDF input only.
  • ADR 4 names 'labels' in the intended use, but no milestone plans barcodes. M7.4's 'simple grid' is never defined, so users cannot know what degrades.
  • architecture.md §2 lists AdCodicem.Pdf.Signing as depending on AdCodicem.Pdf only, but CMS (SignedCms, Rfc3161TimestampToken, EnvelopedCms) lives in the out-of-band System.Security.Cryptography.Pkcs package. It also promises FacturX 'validation' without a rule set, and the official EN 16931 Schematron is XSLT 2.0, which .NET cannot execute.
  • M13's 'recompression' is undefined: lossless or lossy, whether images are decoded, which codecs. The small decision that copied streams travel encoded concerns copying only. For legal exhibits, the lossy policy (opt-in, reported, lossless-only JBIG2) needs to be written down.
  • M10's acceptance only requires a scan to report 'no extractable text'. No milestone ever adds text to scans, although scans are the majority of third-party material in case files.

Themes​

Coverage is the roadmap's as it stood before the revision: absent — nothing planned it; partial — a milestone touched it, not the part described. Relevance is to invoices, reports, contracts and case files.

Case-file assembly completeness​

Case-file assembly is the first business priority, and M5 lists only insert, remove, reorder, rotate, extract and a merge that keeps bookmarks, links, annotations and attachments. Several catalog-level structures are dropped or misapplied on merge today: page labels, name trees, AcroForm, optional content, /Extensions, viewer preferences. Invariant 7 forbids that silent loss. The 'continuous pagination' named in CLAUDE.md can only be delivered at M5 through /PageLabels, because numbering stamps need M6 fonts.

Decided: M6 (merge fidelity, page labels, attachments, viewer preferences) and M7 (split, image pages, pruning, outlines, links between pieces, portfolios).

FeatureWhatCoverageRelevanceEffortWho ships it
Page labels: read, write, remap on merge/extractHandle the /PageLabels number tree (i, ii, 'P3-1'), remapped when pages move so the viewer's page box matches the printed and exhibit numbering.absenthighSiText, PDFBox PDPageLabels, qpdf 11.8 --set-page-labels, PyMuPDF, Prince
Collision-safe merge of catalog trees (Dests, Names, AcroForm, OCProperties, Extensions)Merge /Dests and every Names tree with key renaming and rewriting of the actions that use them. Merge /AcroForm fields and /DR with fully qualified field-name collision handling, and union /OCProperties and /Extensions. Today two merged forms with a field called 'Name' silently share one value.partialhighMPDFBox PDFMergerUtility (JOIN_FORM_FIELDS_MODE, merges labels, dests, OutputIntents), iText PdfMerger
Viewer preferences, page mode/layout, open actionTyped catalog accessors and a merge policy: PageMode UseOutlines (the case file opens on its bookmarks), DisplayDocTitle (required by PDF/UA-1), PrintScaling None (QR-bills, labels), Duplex, OpenAction.partialmediumSiText PdfViewerPreferences, PDFBox, pdfcpu, Prince -prince-pdf-*
General attachments and Associated Files APIAdd, list, extract, replace and remove document-level and FileAttachment files with MIME type, /UF and /Params, and set /AF plus AFRelationship at catalog, page, annotation and structure level. Streamed, and reused by FacturX.partialhighSqpdf --add-attachment, pikepdf, PDFBox, iText, QuestPDF AddAttachment
Split strategies and page-selection grammarSplit by top-level bookmark (one file per exhibit), by maximum bytes (portal caps), by page count, label range or separator page, with a page-range grammar and collate/interleave for duplex scans. Each part keeps its outline subtree.partialhighMiText PdfSplitter (SplitByOutlines, SplitBySize), qpdf --split-pages/--collate, pdfcpu, hexapdf
Image to page without re-encodingPass-through JPEG (DCT), JPEG 2000 (JPX), single-strip TIFF G3/G4 (CCITT) and PNG IDAT (Flate+predictor), one page per TIFF frame, DPI-true size, EXIF orientation, optional PDF/R-1. Needs container parsing only, no codec.partialhighMimg2pdf, hexapdf image2pdf, iText ImageDataFactory, PDFBox FromImage
Prune unreferenced page resources on extract/splitScan content-stream names (Tf, Do, gs, cs, sh, BDC) and drop fonts and images a page never uses, so a 3-page extract does not carry a 500-page shared /Resources.partialhighMqpdf --remove-unreferenced-resources, pypdf, PyMuPDF garbage=3
Outline editing and import/export on existing documentsMove, restyle and delete bookmarks after assembly, import/export them as JSON, and optionally generate an outline for an untagged third-party file.partialmediumMpdfcpu bookmarks, PyMuPDF set_toc, pikepdf
Cross-document links: GoToR rewrite, GoToE, fragment identifiersRewrite GoToR links between pieces as internal GoTo after assembly, support GoToE and RFC 8118 fragments (#page=, #nameddest=), and optionally auto-link 'pièce n° 12' (needs M10 search).absentmediumMiText PdfAction.CreateGoToR/GoToE, PDFBox PDActionRemoteGoTo
Portfolios: unpack into an assembled volume (create optional)Read /Collection schema and members and flatten a received portfolio into one paginated, bookmarked case file. Authoring portfolios is secondary.partialmediumMiText PdfCollection, pdfcpu portfolio, Syncfusion, Acrobat

Every French contentious file carries numbered pieces, a bordereau or inventaire, and signets that courts check. Télérecours inadmissibility follows CJA R. 414-3 and CE 5 Oct 2018 Finamur. A whole niche of French SaaS (Kleos, Hub-Avocat, L'Autotamponneur) sells exactly this, so a .NET library that ships these primitives, with a case-file model driving stamp, bookmark and index together, turns the first business priority into a product.

Decided: M9 (exhibit stamps, Bates numbering) and M18, the AdCodicem.Pdf.CaseFile satellite (piece model, inventory, portal presets, integrity manifest, e-mail to PDF).

FeatureWhatCoverageRelevanceEffortWho ships it
Exhibit ('pièce') stamp with hierarchical numberingA reusable form-XObject stamp (firm, 'Pièce n° 2.1', date) on the first or every page, per-piece 'p. 3/12' numbering and separator pages. Can be rendered from an HTML fragment.partialhighSKleos, Hub-Avocat Stamp, L'Autotamponneur, TamponNumerique
Bates numbering across a set, with range mapContinuous prefix/padded/suffix counter across files, emitted as a /Pagination /Bates artifact (PDF/A- and UA-safe), with a document-to-range map and idempotent update or removal of our own stamps.partialmediumSAspose.PDF BatesNArtifact (25.3), Acrobat Pro, pdfcpu stamp update/remove
Bordereau / inventaire generated from one case-file modelOne model drives the stamps, one signet per piece named from the inventory, hyperlinked index pages with page labels, and a JSON export, so stamp, bookmark and index cannot disagree. Requires a two-pass layout for the index's own page count.partialhighMKleos, L'Autotamponneur, Hub-Avocat (Word/e-Barreau exports), Acrobat by hand
Data-driven court-portal presets (Télérecours, e-Barreau/RPVA, PLEX)Validate and shape output (signet naming, one file per piece, size caps, compression) against portal rules kept as data. The numeric limits are unverified portal practice and must be checked against current guides.absentmediumMNo library; Hub-Avocat and Kleos exports; manual Acrobat
Integrity manifest of pieces (SHA-256, optional seal/timestamp)Hash each source piece and the volume into an attached JSON manifest (AF Supplement) and XMP. /Params /CheckSum is MD5-only. Optional sealing or timestamping through Signing supports 'copie fiable' (décret 2016-1673).absentmediumSe-discovery load files, NF Z42-013/Z42-026 archiving vendors
E-mail (EML, MSG optional) to PDF exhibit, EA-PDF profileHeader block and HTML or plain body through .Html, attachments as AF or appended sub-pieces, original .eml hash, and optionally the EA-PDF 1.0 (PDF Association, 2025) archival profile.absentmediumLNutrient/GdPicture, Aspose.Email, BFO Publisher (EA-PDF)

Redaction and sanitization​

Anonymizing pieces (GDPR, published decisions, disclosure to the other side) and stripping hidden data before sending are core legal needs, and every commercial competitor ships them. A black box over live text is the classic leak, and it is all M9 overlays could produce today. It also extends invariant 4 from how a file parses to what it does: JavaScript, Launch actions and hidden text are also a prompt-injection channel for LLM ingestion.

Decided: M19, in the core; the feature inventory in M15; pixel redaction once M22's decoders exist.

FeatureWhatCoverageRelevanceEffortWho ships it
Content-stream editing pipeline (tokenize, filter, rewrite)A streaming operator reader and writer to remove or replace text runs, images and paths, recolor, and externalize inline images. It is the shared enabler for redaction, sanitization and image replacement.partialhighLpikepdf parse_content_stream, PDFBox PDFStreamParser, Apryse ElementReader/Writer, PyMuPDF
True redaction (mark with /Redact, review, apply)Remove glyphs (rewriting TJ arrays), paths and image pixels under the regions. Scrub the same text from annotations, form values, bookmarks, metadata, Alt and ActualText, draw the overlay with /OverlayText, and verify by re-extraction. Tagged documents use the /Redaction artifact.absenthighXLiText pdfSweep (PdfCleaner), PyMuPDF apply_redactions, Apryse Redactor, Aspose, Syncfusion, DevExpress 25.1
Search-and-redact with PII detectorsRegex with a timeout or NonBacktracking, term lists, and built-in detectors (IBAN, French NIR, SIREN/SIRET, e-mail, phone, dates of birth) produce a reviewable list of /Redact annotations before they are applied.absenthighMiText RegexBasedCleanupStrategy, Apryse, Aspose, Acrobat pattern redaction
Inspect-then-sanitize (hidden data and active content)Report, then remove by category: JavaScript and /AA, Launch, SubmitForm, ImportData, GoToR, embedded files, XFA, RichMedia, hidden OCG layers, invisible text (Tr 3, off-page, white on white), Info/XMP, PieceInfo, thumbnails, comments, form data and earlier revisions. Losses of PDF/A, UA or signatures are reported.absenthighMApryse Sanitizer, Aspose 25.11 HiddenDataSanitizer, PyMuPDF Document.scrub, qpdf --remove-*, Acrobat Sanitize
Feature inventory and active-content triage reportOne lazy inventory (fonts, images with effective ppi, color spaces, annotations, forms/XFA, signatures, attachments, OCGs, conformance claims, active content, space usage by category) to triage exhibits before assembly.partialmediumMveraPDF features report, hexapdf info/usage, mutool audit, pdffonts/pdfimages
Detect/remove existing watermarks; FixedPrint watermark annotationsRecognize Watermark annotations, /Artifact /Watermark marked content, OCG watermarks and Acrobat PieceInfo markers to remove 'DRAFT'. Optionally emit FixedPrint watermark annotations.partiallowSiText PdfWatermarkAnnotation, Acrobat Remove Watermark

Signatures: validation, revisions, PAdES levels​

Contracts and case files arrive signed (eIDAS seals, DocuSign, notarial deeds), and whether an exhibit is authentic and unmodified is a core legal question. Yet no milestone verifies a signature, and M14 names no PAdES level, TSA, DSS or certification. iText's 2025-26 releases center on validation, and PDFsharp 6.2 now signs for free. The core already walks the /Prev chain, so revision history and byte-range coverage are cheap and need no cryptography.

Decided: M4 (revisions, byte-range coverage, change classification, in the core, no cryptography), M26 (PAdES B-B and B-T), M27 (B-LT, B-LTA, validation); ADR 41.

FeatureWhatCoverageRelevanceEffortWho ships it
Revision history API (core)Enumerate incremental revisions, open revision N read-only as a lazy index cut at its startxref, report which revision each /ByteRange covers, and diff objects between revisions. Fixing T25 comes first.absenthighMAspose 25.12 UnsignedContentAbsorber, iText SignatureUtil.extractRevision, Acrobat 'View signed version'
Post-signature change classification (DocMDP/FieldMDP, shadow/ISA attacks)Classify each later change (form fill, annotation, DSS, new signature, or content replacement), reject by default, and check it against the MDP permissions.absenthighLpyHanko difference analysis, iText DocumentRevisionsValidator, EU DSS
Signature validation with ETSI-style reportCheck CMS digest over ByteRange, the chain against caller anchors or EU LOTL/TS 119 612 lists, revocation (DSS first, online opt-in), timestamps, PAdES level, legacy adbe.pkcs7.*, ECDSA and RSASSA-PSS, and emit a TS 119 102-2 verdict.absenthighXLiText 9 SignatureValidator (LOTL 9.3), EU DSS, pyHanko, Aspose 26.7, Docotic 9.7, pdfcpu (basic)
PAdES B-B, B-T, B-LT, B-LTA with augmentation and LTV-enablingProduce ETSI.CAdES.detached signatures at each baseline level, write the DSS/VRI, renew document timestamps, and add LTV material to third-party signatures before archiving. EN 319 142-1 V1.3.0 is in draft.partialhighLiText PdfPadesSigner, EU DSS, pyHanko, GemBox, Docotic 9.7
RFC 3161 TSA client and standalone document timestampsAn injectable TSA client for signature timestamps, and /DocTimeStamp on unsigned files as proof of existence at filing (horodatage).partialhighMiText TSAClient, pyHanko, PDFsharp 6.2, .NET Rfc3161TimestampRequest
Certification (DocMDP P=1/2/3) and FieldMDP, honored by M5/M9Author certification signatures and field locks. M5 merges and M9 stamps must also refuse, or report, a change that voids an existing certification, which M9's current acceptance would miss.absentmediumMiText, pyHanko certify, PDFBox SigUtils, Acrobat
Signature fields, Lock/SV, conformant visible appearances, placement from HTMLEmpty /Sig fields for external signers, placed from the HTML layout (Prince input type=prince-pdf-signature), with /Lock and /SV, image/name/date appearances that keep PDF/A and UA, and sequential signers.partialhighMiText PdfSignatureFormField, Prince 16, PDFsharp 6.2, GemBox PdfSigner, Aspose
Deferred (two-step) signing and CSC API clientPrepare the hash, obtain the CMS or raw signature, then inject it. Ship a CSC API v2.2 / TS 119 432 client for QTSP remote QES and seals, and leave a path for EUDI Wallets.partialmediumMiText 8.0.3+ two-step, EU DSS, pyHanko CSC signer, Telerik external signing
Algorithm coverage: ECDSA (NIST/Brainpool), RSASSA-PSS; EdDSA, SHA-3, PQC laterECDSA and PSS are required to validate EU eID and seal signatures already in the corpus. EdDSA (no BCL API), SHA-3 (OS-dependent) and ML-DSA (experimental SYSLIB5006) need an algorithm-neutral IPdfSigner now.partialmediumMiText 9 (ISO/TS 32001/32002), pyHanko, BFO (ML-DSA with Adobe, 2025)

Security handlers and forms​

M11 covers the password handler and AcroForm fill and flatten. The corpus already holds forms M11 would silently damage: hybrid and dynamic XFA, Reader-extended (UR3) Cerfa, and JavaScript-calculated fields. Invariant 12 also asks that a valid public-key-encrypted file at least be recognized. Field creation (programmatic and from HTML) and data exchange are the business-facing additions.

Decided: M16 (diagnostics, field creation, FDF/XFDF/JSON, AES-GCM and MAC read, public-key handler detected), M17 (HTML forms), M26 (public-key handler decryption); ADR 41.

FeatureWhatCoverageRelevanceEffortWho ships it
XFA detection, removal and datasetsDistinguish static, hybrid and dynamic XFA. Report placeholder-only pages before M5 merges them, drop or sync /XFA on fill so Acrobat does not show stale data, and read datasets. Dynamic flattening stays out.absentmediumSiText removeXfaForm/pdfXFA, PDFBox PDXFAResource, Aspose Form.HasXfa, qpdf 12.3 --remove-acroform
Usage rights (UR3) detection and removalDetect Reader-extension /Perms /UR3 and remove it, with a diagnostic, when a save would break it, so Adobe Reader does not disable features.absentmediumSqpdf 11.3 --remove-restrictions, Acrobat Save a Copy
Standard AF* formats and simple calculations without a JS engineRecognize AFNumber_Format, AFDate_FormatEx, AFPercent and AFSimple_Calculate by pattern to build correct appearances. Report any unrecognized script or stale calculated field.absentmediumMNone without a JS engine (pdf.js and Apryse execute JS)
Creating fields, including from HTML controlsProgrammatic text, checkbox, radio, choice, button and signature fields with appearances, plus opt-in mapping of input, select and textarea to AcroForm fields, tagged under a Form element with /TU.partialmediumLiText pdfHTML setCreateAcroForm, WeasyPrint --pdf-forms, Prince --pdf-forms, IronPDF
FDF/XFDF/JSON import-export and batch fillExchange values and annotations as XFDF (ISO 19444-1) or FDF, use JSON/CSV multi-fill (one output per record), and lock or reset fields. Hostile XML is parsed with DTD off.absentmediumMPDFBox FDFDocument, iText XfdfObjectFactory, pdfcpu form multifill, Syncfusion
Public-key (certificate) security handlerAlways detect Adobe.PubSec (adbe.pkcs7.s3/s4/s5) and report it under a stable code. Decrypt with a caller certificate and encrypt to recipients through CMS EnvelopedData.partiallowMPDFBox PublicKeySecurityHandler, iText setPublicKeyEncryption, Acrobat
Unencrypted wrapper documents (e.g. Purview/MIP) detectionRecognize an EncryptedPayload wrapper, report 'wrapper for handler X' instead of assembling or extracting the placeholder page, and expose the payload as an attachment.absentmediumSMicrosoft Purview producers, Acrobat MIP plug-in
AES-GCM (ISO/TS 32003) and MAC integrity (ISO/TS 32004)Read V6/R7/AESV4, where a failed tag becomes a diagnostic, and optionally write GCM plus a MAC patched into a reserved placeholder by the forward-only writer. Acrobat cannot read these files yet.absentlowMiText 9.0 (AES-GCM, MacProperties)
Crypt-filter writing options (EFF-only, EncryptMetadata false)Encrypt only attachments, or keep XMP clear for DMS indexing. Reading is already forced by M11's acceptance.partiallowSiText EMBEDDED_FILES_ONLY/DO_NOT_ENCRYPT_METADATA, Acrobat

Content on existing documents: annotations, layers, page geometry​

M9 adds page content only. Reviewing exhibits, freezing them before filing, and stamping onto mixed-size or tagged third-party pages need annotations with appearances, general flattening, optional-content awareness and page normalization. Two items bear on correctness: stamps on tagged documents must become artifacts (invariant 7 today covers PDF/A only in M9's acceptance), and extraction and rasterization must honor hidden OCGs.

Decided: M9 (normalization, artifact stamps) and M11 (annotations, appearances, flattening, optional content).

FeatureWhatCoverageRelevanceEffortWho ships it
Page normalization: fit to A4, boxes, crop, rotation flatteningScale or fit pages into a form XObject with margins, set CropBox/TrimBox/BleedBox (CropBox is inherited), crop to content, and flatten /Rotate, transforming annotations and links consistently.partialhighMiText 9.4 PageResizer, Aspose ResizeContents, pdfcpu resize/crop/boxes, qpdf --flatten-rotation
Tag-preserving stamping (Pagination/Watermark artifacts)Headers, numbers, watermarks and stamps added to a tagged document become /Artifact /Pagination (Header, Footer, PageNum, Bates) and the ParentTree stays coherent, so a PDF/UA input stays PDF/UA. M9's acceptance should also test UA inputs.partialhighMiText CanvasArtifact/TagTreePointer, Acrobat, callas pdfToolbox
Flatten any annotation type, selectivelyBake highlights, stamps, notes, ink and signature appearances into content, honoring /F flags and /OC, selectable by subtype (e.g. keep links). Missing appearances are generated first.partialmediumSqpdf --flatten-annotations, PyMuPDF bake, iText PdfAnnotationFlattener, PDFium
Markup annotation authoring and removalHighlight, underline, strikeout and squiggly (quads from search), notes with replies, FreeText, shapes, ink, stamps ('RECEIVED', 'PAID') and caret, with generated appearances. Remove by subtype or author.partialmediumMPyMuPDF add_*_annot, PDFBox, iText, Apryse, Telerik (TextMarkup, Stamp)
Appearance streams for every annotation subtypeGenerate /AP for FreeText (from /DA), markup, shapes, line endings and ink. PDF/A-2/3 require /AP /N on every annotation except Popup and Link, so preserving conformance on merge depends on it. The core cannot shape complex scripts.partialmediumMPDFBox constructAppearances, PyMuPDF Annot.update, iText
Link annotations on third-party pagesAdd Link annotations with QuadPoints to existing pages, e.g. bordereau lines and 'Pièce n° 12' references pointing to the piece's first page.absentmediumSPyMuPDF insert_link, PDFBox PDAnnotationLink, iText
Optional content: honor, merge, create, removeRead OCGs, OCMDs and configurations. Honor visibility in M10 and M14 (text on hidden layers is otherwise extracted), merge /OCProperties in M5, create print-only 'COPIE' stamps in M9, and flatten or remove layers. ISO 19593 packaging metadata is out.absentmediumMPyMuPDF add_ocg/set_layer, PDFBox PDOptionalContentProperties, iText PdfLayer, Aspose Layer
Comments summary reportList annotations by page, author, date and type with the highlighted text, as JSON or a rendered PDF.absentlowSAcrobat Summarize comments, PDF-XChange

Conformance targets and PDF 2.0​

M8 names no PDF/UA part and M12 names only PDF/A-2b/3b, while the corpus and the market already carry PDF/A-1a, PDF/A-4f and PDF/UA-2. The choice between UA-1 and UA-2 changes the structure tree M8 emits, and UA-2 or A-4 require a PDF 2.0 writer mode that M3 does not specify. Converting received documents to PDF/A is assigned to M12 by M4 but absent from M12. The u and a levels come almost free after M6 and M8. Factur-X still mandates PDF/A-3 (1.09.2, August 2026), which pins invoices to PDF 1.7 plus UA-1.

Decided: M3 (output version, ADR 40), M2 (Arlington rules, ADR 44), M13 (PDF/UA-1), M14 (PDF/A-3, XMP), M20 (profiles A-1 to A-4, UA-1), M21 (conversion), M28 (PDF/UA-2, WTPDF, PDF/A-4); auto-tagging stays open.

FeatureWhatCoverageRelevanceEffortWho ships it
Writer version policy, PDF 2.0 mode, /ExtensionsThe caller chooses 1.7 or 2.0 output. 2.0 means deprecated Info entries dropped, XMP authoritative and V5/R6 encryption. The version is raised when a merge needs it, the minimum required version is computed, and /Extensions is unioned and written.absenthighSqpdf --min-version/--force-version, pikepdf, iText PdfVersion.PDF_2_0
PDF 2.0 UTF-8 text strings (defect in PdfString.ToText)Decode EF BB BF text strings and UTF-16 language escapes. Today they read as Latin-1, which garbles accented bookmarks. Fold into T06 before the first stable release.partialmediumSpdf.js, qpdf, Acrobat
PDF/A-2u/3u/2a/3a and dual PDF/A-3a + PDF/UA-1 claimsNearly free once M6 writes ToUnicode and M8 writes tags. PDF/A-3a or 3u plus UA-1 is the only accessible Factur-X.partialhighSiText PdfAConformance, QuestPDF (2A/2U/3A/3U), Docotic 9.9, LibreOffice
PDF/A-4, 4f, 4ePDF 2.0-based archiving with pdfaid:rev=2020. 4f is the successor of A-3 for attachments, but Factur-X does not accept it. Start with validation, since the corpus holds a 4f Factur-X.partialmediumMiText, veraPDF, Docotic 9.9, Aspose, PDFlib
PDF/A-1a/1b profile and A-1-preserving writesM12's 'agree with veraPDF on every corpus document' implies an A-1 profile. Stamping or updating an A-1 file must avoid object and xref streams, JPX and transparency, or report the loss.partialmediumMveraPDF, PDFBox Preflight (1b), 3-Heights
Converting received PDFs to PDF/A with a reportEmbed or substitute fonts from the registry (reported), add an output intent, rebuild XMP, remove JavaScript, encryption and forbidden actions, generate missing /AP, fix attachments (MIME, AF), and report whatever cannot be converted.partialhighLAspose, Syncfusion ConvertToPDFA, Docotic Conformance add-on, Apryse, Ghostscript -dPDFA, callas pdfaPilot
PDF/UA-2, ISO/TS 32005 namespaces, WTPDF 1.0 and PDF DeclarationsPDF 2.0 structure namespace, RoleMapNS, the new types, structure destinations for internal links, MathML via AF, and pdfd: declarations. WTPDF's reuse level matches ADR 15's preference for extracting from tags.partialmediumLiText 9.2+ (UA-2), 9.6 WellTaggedPdfDocument, veraPDF 1.28+, BFO, PDFlib
PDF/UA-1 profile with a 'needs human review' outcomeMap findings to ISO 14289-1 clauses and Matterhorn checkpoints, and add an outcome for failure conditions only a person can judge. ADR 36's three severities cannot express this.partialmediumMaxes4 PAC (Matterhorn), veraPDF (clause-keyed), PDFix
Object-shape rules generated from the Arlington PDF ModelBuild-time generation from the Apache-2.0 TSVs gives version-aware 'required key per /Type', deprecated-key and type checks. This implements M2 slice 3 at spec breadth, with severities mapped to Warning.partialmediumLveraPDF Arlington checker, PDFix, BFO 2.27.2+, arlington.py
Caller-defined policies (public rule API or declarative policy)Let ingestion gates say 'no JavaScript, fonts embedded, max A3, PDF/A claimed' in the same report, in a caller rule namespace that never collides with built-in identifiers.partialmediumMveraPDF policy (Schematron), callas pdfToolbox profiles, Acrobat Preflight
Public XMP model with custom and extension schemasTyped read/write of XMP (DC, xmp, pdf, pdfaid, pdfuaid, custom namespaces such as case or matter numbers), Info sync, automatic PDF/A extension schemas (also needed by fx:), and packet padding for in-place updates.partialmediumMPDFBox XmpBox, iText XMPMeta, pikepdf open_metadata, Docotic SyncMetadata
Author-level tagging overrides from CSSTag-type override, role map, artifact marking and alt text for generated content, so layout-div templates can be tagged without rewriting their HTML.partialmediumSPrince -prince-pdf-tag-type/-role-map, iText pdfHTML
Structure editing API and heuristic auto-tagging of untagged PDFsEdit tags, alt text and language on existing files, and infer a structure tree from M10 layout with a confidence per element and a review report. Conformance is never claimed automatically.absentlowXLAspose AutoTaggingSettings, Apryse AutoTagging, Adobe Auto-Tag API, PDFix
Transparency detection per Annex Q (detection only)A normative page-transparency check as a validation rule, for A-1 targets and legacy printers. Flattening needs rasterization and is excluded.absentlowMAcrobat Flattener, callas pdfToolbox

Scans and images​

Case-file exhibits are mostly scans (CCITT, JBIG2, JPX in the corpus), yet M1 only passes those filters through, and M10 promises only to report 'no extractable text'. M14's Skia rasterizer cannot decode JBIG2, CCITT or JPX, so its acceptance on scans silently depends on decoders nobody has planned. Image export, blank detection, pixel redaction, downsampling to portal caps and OCR all stall on the same gap. Recompression is where nearly all size reduction in scanned case files comes from.

Decided: M7 (image pages without re-encoding), M22 (AdCodicem.Pdf.Imaging, OCR text layer), M23 (recompression); ADR 42.

FeatureWhatCoverageRelevanceEffortWho ships it
Managed decoders: CCITT G3/G4, JBIG2 (globals), DCT (CMYK/YCCK), JPXBounded decoders for image export, blank detection, pixel redaction, downsampling, OCR and rasterizing scans. These are classic attack surfaces (FORCEDENTRY was a JBIG2 exploit) and need fuzzing from day one.partialhighXLpdf.js (JS; JPX via OpenJPEG wasm), PDFBox (+plugins), MuPDF, PDFium
Invisible OCR text layer (core writer) plus pluggable engineWrite Tr 3 text with a glyphless font and ToUnicode aligned to word boxes from hOCR, ALTO or TSV, optionally tagged, for PDF/A-2u on scans. Tesseract or ONNX adapters live in a satellite, with engine versions pinned and recorded (invariant 6).absenthighMOCRmyPDF (fpdf2 renderer v17), iText pdfOCR 5.x, Syncfusion, Aspose 26.6, PyMuPDF
Downsample and recompress images, with a target-size modeCap effective DPI, re-encode JPEG at a set quality, convert near-bitonal scans to 1-bit, and iterate to 'fit under N MB'. Every lossy change is reported, since it can affect copie-fiable and PDF/A claims.partialhighLqpdf 12.1 --jpeg-quality, PyMuPDF rewrite_images, Ghostscript, OCRmyPDF -O2/-O3, iText pdfOptimizer
Bilevel encoders: CCITT G4 and lossless JBIG2 genericRecode monochrome scans for large size gains. Lossy or pattern-matching JBIG2 is excluded by default (OCRmyPDF v17 removed it).absentmediumLjbig2enc via OCRmyPDF, Syncfusion, iText pdfOptimizer, LEADTOOLS
Blank page detectionContent-level detection (no painting, white-only, nothing in the CropBox) on the M10 interpreter, and an ink threshold on scans once decoders exist. Used to drop duplex blanks or split on separators.absentmediumSAspose Page.IsBlank, Spire.PDF, scanprep, Dynamsoft
Full color-space model and function evaluation for readingCalGray/RGB, Lab, ICCBased, Indexed, Separation, DeviceN, Pattern and Type 0/2/3/4 functions (Type 4 with a bounded stack and budget) for correct image export and rasterization.partialmediumLPDFBox PDColorSpace/PDFunction, pdf.js, MuPDF
Scan orientation fix (deskew and despeckle in a satellite)Orientation from glyph directions or the OCR layer, applied as /Rotate in the core. Pixel deskew, despeckle and binarize belong in an imaging satellite.absentlowLOCRmyPDF --rotate-pages/--deskew, Syncfusion OCR preprocessing, ABBYY

CSS paged media and layout​

M7 names '@page, headers and footers, counters, tables, flex, simple grid' but none of the GCPM and fragmentation mechanics that separate a paged-media engine from a browser. That covers footnotes (heavy in French legal writing), running HTML headers, per-invoice page groups in batch runs, landscape named pages, widows and orphans, and cross-references. M8's acceptance even names a two-column report that M7 has no multicol to produce. Modern template tooling (Tailwind v4, design systems) also needs var(), calc(), @layer and nesting. Forward references (page X of Y, target-counter, TOCs) meet the forward-only writer and the constant-memory acceptance, and need a stated strategy.

Decided: M12.1 to M12.7; ADR 39 for forward references.

FeatureWhatCoverageRelevanceEffortWho ships it
Fragmentation: break-*, widows/orphans, break-inside: avoid, box-decoration-breakKeep signature blocks, rows and captioned figures whole and avoid stranded headings or single lines. Backtracking is bounded to one page, falling back to a break with a diagnostic.partialhighMPrince, WeasyPrint, PDFreactor, Antenna House, Chromium
Running elements: position: running() / element()Rich HTML headers and footers (logo, address block, legal mentions) laid out once and reused as a Form XObject per page, emitted as Pagination artifacts.partialhighMPrince, WeasyPrint, PDFreactor, Vivliostyle, Paged.js, iText pdfHTML
Page selectors and page groups (:blank, :nth(), per-group counters)Each invoice in a one-PDF batch run gets its own first page and 'page 1 of 2'. Per-group totals are forward references.partialhighMPrince 16 :first-of-group, WeasyPrint :nth(), Vivliostyle, PDFreactor
Named pages, mixed sizes, page-orientationThe page: property selects a named @page (landscape annex inside a portrait report), and page-orientation writes /Rotate.partialhighMPrince, WeasyPrint, PDFreactor, Chromium 85+
target-counter/target-counters/target-text and leader()'See Article 7.2 on page 12', TOC lines with dotted leaders (marked as artifacts), lists of figures, generalizing M7.6's TOC.partialhighMPrince, WeasyPrint, PDFreactor, Antenna House, iText pdfHTML
Footnotes (float: footnote, ::footnote-call/-marker)A footnote area at the page bottom with per-page or document counters, tagged Note/FENote. The page area shrinks iteratively as notes are added.absenthighLPrince, WeasyPrint 54+, PDFreactor 12, Antenna House, iText 9.7 layout
Multi-column layout with paginationcolumn-count, column-span and balancing, for general terms of sale (CGV) in small print and two-column reports (named in M8's acceptance).absenthighLPrince, PDFreactor, Antenna House, Vivliostyle, iText pdfHTML 6.3, WeasyPrint (partial)
Floats, clear, absolute/relative/fixed positioningLegacy template floats and millimeter-exact window-envelope address blocks. Fixed elements repeat per page as one XObject.partialhighMPrince, WeasyPrint, PDFreactor, iText pdfHTML, Chromium
Counters, @counter-style, ::marker, quotes, attr(), ::first-letterNested counters() for '7.2.a', roman, alpha and custom numbering of contract clauses, French guillemets, and generated content with alt text (Lbl or artifact tagging).partialhighMPrince 17, Antenna House, Vivliostyle, WeasyPrint, iText pdfHTML
Table pagination: repeated tfoot, caption, row splitting, rowspan across breaksMulti-page invoices need 'continued overleaf' footers, unsplit line items and coherent rowspans.partialhighMPrince caption-page, iText skipLastFooter, WeasyPrint, Chromium
Modern CSS syntax as a declared levelvar(), calc/min/max/clamp/round, @layer, @property, nesting, :is/:where/:has, @media print, @supports, rem/ch/lh units and logical properties, with a diagnostic for anything unsupported.partialhighMPrince 17, WeasyPrint 67-69, Chromium; iText pdfHTML lacks custom properties
Named strings: string-set / string()The current article title or 'Invoice F-0042 (continued)' in margin boxes.partialmediumSPrince, WeasyPrint, PDFreactor, Vivliostyle
Flex/grid fragmentation and a defined grid level (areas, subgrid later)Let flex lines and grid rows break across pages, and define 'simple grid' (template areas, named lines, auto-placement).partialmediumLWeasyPrint 67, Prince 17, PDFreactor, Chromium
Carry-forward subtotals ('à reporter' / 'Übertrag')A page-scoped decimal accumulator shown in repeated table footers and headers, as a vendor extension with no CSS equivalent.absentmediumMAntenna House (fo:retrieve-table-marker), JasperReports
Shrink-to-fit wide tables and text in fixed boxesScale overflowing ERP tables to the page and auto-size text in address windows and labels, reported.absentmediumMPDFreactor -ro-scale-content, Prince resize-options, Puppeteer scale

Typography, text and fonts​

Several text-quality gaps are visible on first contact: IBANs and URLs overflowing table cells (no UAX #14 plan), Arabic or Hebrew names on French invoices (ADR 5 wrongly credits HarfBuzz with bidi), untabulated amounts, rivers in justified French contracts, and silent tofu for a Cyrillic customer name. Variable and WOFF2 fonts are how brand fonts arrive now. On the reading side, legacy Type 1 and Type 3 fonts and ToUnicode-less CJK affect M10 correctness.

Decided: M8 (fallback, WOFF2, standard-14 metrics), M12.2 (UAX #14, UAX #9, OpenType features, hyphenation), M15 (reading Type 1, CFF, Type 3); ADR 43. Variable fonts and color emoji are open questions.

FeatureWhatCoverageRelevanceEffortWho ships it
UAX #14 line breaking, overflow-wrap, word-break, line-breakUnbreakable IBANs, SKUs and URLs break inside narrow cells. The property tables are generated as static span data.partialhighMPrince, WeasyPrint, Vivliostyle, PDFreactor, Chromium
Per-character fallback and missing-glyph diagnosticsFall back from the CSS family list to registry script coverage and the embedded OFL set, then draw a visible .notdef and emit a diagnostic listing the code points.partialhighMQuestPDF 2026.9 (coverage check), PDFreactor, WeasyPrint 67, iText FontProvider
OpenType features from CSS (tabular-nums, small-caps, sups, locl)Aligned amount columns and real superscripts for 1er, Mme and n°, mapped to HarfBuzz features.partialhighSWeasyPrint, PDFreactor, Antenna House, Chromium, Prince 17
Bidirectional text (UAX #9), direction, unicode-bidi, logical propertiesResolve levels and reorder runs before HarfBuzz and keep logical order for extraction (ActualText). ADR 5 must stop attributing bidi to HarfBuzz.partialmediumLPrince 16, PDFreactor, Antenna House, Chromium, iText pdfCalligraph
Automatic hyphenation (hyphens: auto, Liang patterns)Per-language patterns selected by lang, hyphenate-limit-*, soft hyphens, and a pattern trie loaded lazily and shared.absentmediumMPrince, WeasyPrint (Pyphen), PDFreactor, Antenna House, iText
Variable fonts: instancing before subsetting (glyf+gvar, CFF2)Map weight, stretch and opsz to axis coordinates and write static outlines deterministically, since PDF has no variable fonts.absentmediumLPrince 16, WeasyPrint 57, Skia/Chromium
WOFF/WOFF2, unicode-range and local() in @font-faceDecode brand-kit web fonts with the BCL Brotli decoder, with decompressed size bounded under ADR 34.partialmediumMPDFreactor 12.2, WeasyPrint 65, Prince, Chromium
Synthetic bold, oblique and small-caps (reported)<strong> still shows when only one weight is registered: fill-and-stroke bold, a skewed Tm, and a diagnostic.absentmediumSPrince, WeasyPrint (Pango), Chromium
Justification quality: text-justify, text-align-last, text-wrap balance/prettyGreedy line breaking first, then paragraph-level optimal breaking with pooled arrays and a length cap.partialmediumMWeasyPrint, Prince, Chromium
Text decoration, ellipsis/line-clamp, language-aware casing, French spacingUnderline offset and thickness, truncated cells, and opt-in automatic narrow no-break spaces before ; : ! ?, which change the extracted text and must be reported.partialmediumSPrince 16, WeasyPrint 68
Reading Type 1, bare CFF, Type 3 and standard-14 AFM metricsCorrect positions and widths for TeX, Ghostscript and SAP bitmap-font output in M10, and AFM metrics for M9 stamps in standard-14 fonts. Charstrings and procedures are bounded.partialmediumLPDFBox FontBox, pdf.js, PdfPig
Color fonts and emoji as Type 3COLR, CBDT and sbix glyphs with ToUnicode kept, for chat or e-mail transcripts in case files.absentlowLWeasyPrint 70, Prince 17, PDFreactor 12.1
Predefined CMaps and CJK CID-to-Unicode mapsExtraction from ToUnicode-less CJK fonts, shipped as on-demand data because the maps weigh several MB.partiallowMPDFBox, pdf.js bcmaps, PDFium, MuPDF

Visual CSS and graphics​

Templates designed for the web first use oklch() palettes and color-mix() (Tailwind v4 compiles opacity to them), gradients, rgba() alpha, rounded cards, rotated 'PAID' stamps and SVG charts referenced by <img>. Their absence shows immediately in the visual-diff acceptance against Chromium-era templates. Phone-photo exhibits with EXIF orientation come out sideways if a JPEG is passed through naively.

Decided: M12.5.

FeatureWhatCoverageRelevanceEffortWho ships it
CSS Color 4/5: lab/lch/oklab/oklch, color-mix(), relative colors, light-dark()Cheap to add, and without it Tailwind v4 templates lose every color. Conversion uses deterministic rounding.absenthighSWeasyPrint, Prince 17, Chromium
SVG completeness for charts (img/background SVG, real text, markers, clipPath, use)Chart-library SVG as vectors with extractable text in registry fonts. Every Skia fallback is reported.partialhighLPrince, WeasyPrint 68-70, PDFreactor, Antenna House
opacity, rgba alpha, blend modes, soft masksSemi-transparent watermarks and translucent stripes as ExtGState /ca /CA, groups and /BM, with a page-group color space for PDF/A.partialmediumMPrince, WeasyPrint, PDFreactor, Chromium
Gradients as native shadings, tiling patternslinear, radial and repeating gradients as Type 2/3 shadings with stitching functions, and SVG gradients and patterns.partialmediumMPrince, WeasyPrint, PDFreactor, iText pdfHTML
border-radius clipping, box/text-shadow, border-image, outlineRounded cards and badges, with shadows rasterized deterministically or approximated.partialmediumMWeasyPrint 70 box-shadow, Prince, PDFreactor, Chromium
CSS 2D transformsRotated stamps and vertical column headers through cm, with link QuadPoints transformed.absentmediumMPrince, WeasyPrint, PDFreactor, Antenna House
object-fit/position, EXIF orientation, image-resolution, pixelatedLogos fit their boxes and passed-through phone photos are not sideways (the rotation goes in the placement matrix).partialmediumSWeasyPrint, Prince, Chromium
GIF, WebP, BMP via Skia; TIFF/JPX pass-through; AVIF if the build allowsWebP from CMS pipelines and TIFF scans in HTML. Stock SkiaSharp may lack AVIF and JPEG XL, and HEIC has patent issues.partialmediumMPrince (JPEG, PNG, TIFF, GIF, WebP, AVIF), PDFreactor 12, iText 9.7 WebP
clip-path, mask, filter effectsBasic-shape clip-path early. Filters rasterize and are rarely needed.absentlowLVivliostyle, Prince (partial), Chromium

HTML engine production and integration​

The dominant production workload is batch invoicing and statements, where stylesheet parsing and font loading dominate and a managed engine can beat Chromium visibly. HTML fed with user data is an SSRF and file-disclosure vector ('<img src=http://169.254.169.254>'), and no ADR governs resource loading beyond ADR 11's web fonts. Metadata, bookmark, destination and attachment declarations from HTML, letterhead PDFs as images, and a Puppeteer-options migration path are cheap adoption levers.

Decided: M12.5 and M12.6; ADR 38 for resource loading. A code-first layout API is an open question.

FeatureWhatCoverageRelevanceEffortWho ships it
Hardened resource resolver (SSRF, file:, limits)One IResourceResolver for images, CSS, fonts, SVG and attachments, allowing only data: and caller bases by default, blocking private and metadata addresses, capping redirects, sizes and counts, confining file: to a root, and recording each refusal.partialhighSWeasyPrint 67-69 URL fetcher, Prince --no-network/--no-local-files
Batch generation with compiled templates and shared cachesParse and cascade once, share fonts, shaped glyphs and decoded images across thousands of records, and output N files or one run with page groups, under a throughput budget in CI.partialhighMWeasyPrint reusable CSS/FontConfiguration, Prince multi-input, PDFreactor, Docmosis
Metadata from <title>, <meta>, langSynchronized Info and XMP, /Lang, DisplayDocTitle, with dates only as supplied (invariant 6).partialmediumSWeasyPrint, Prince, PDFreactor
bookmark-level/label/state and named destinations from idsOutlines driven by CSS ('Pièce 3 - Bail' is not a heading) and a /Dests entry per id for deep links and merge-safe renaming.partialmediumSPrince, WeasyPrint, PDFreactor, Antenna House
Attachments and notes declared in HTML<link rel=attachment> and <a rel=attachment> with MIME type and AFRelationship, going through the resource resolver.partialmediumSWeasyPrint, Prince
PDF pages as vector images and @page letterheads<img src=letterhead.pdf#page=2> and @page backgrounds as Form XObjects, artifact-tagged, with PDF/A losses reported.partialmediumMPDFreactor 12, pdf-lib embedPage, PDFsharp XPdfForm, iText copyAsFormXObject
Generation-time image dedup, DPI cap, JPEG qualityThe header logo is written once across 1,000 pages and 4,000-px photos are capped at their laid-out size, deterministically.partialmediumSWeasyPrint --dpi/--jpeg-quality/--optimize-images, Prince 17 --pdf-dpi
Puppeteer/Playwright option compatibilityMap headerTemplate/footerTemplate (pageNumber, totalPages), format, margin and preferCSSPageSize onto margin boxes, to ease migration from PuppeteerSharp and IronPDF. This is option compatibility, not browser fidelity.absentmediumSPuppeteer, Playwright, IronPDF
Code-first fluent layout API over the same engineQuestPDF-style typed composition carrying semantics (heading, table, figure with alt text) for M8. Allowed by ADR 8 but not scheduled.partialmediumLQuestPDF, Docotic.Pdf.Layout, MigraDoc, iText layout

E-invoicing, payment codes and barcodes​

French reception has been mandatory for every VAT-registered company since 1 September 2026 (large companies and ETIs issue now, SMEs from September 2027), and Factur-X 1.09.2 = ZUGFeRD 2.5.2 has been current since August 2026, with MINIMUM to EXTENDED plus EXTENDED-CTC-FR. M12 treats the XML as caller input with no profile, version or business-rule awareness, and no .NET model feeds both the visible invoice and the XML. ADR 4 names labels, and invoices carry EPC or Swiss QR codes, yet no milestone plans barcodes; an inline-SVG workaround with ZXing exists but is not deterministic by our guarantee.

Decided: M10 (AdCodicem.Pdf.Barcodes) and M14 (AdCodicem.Pdf.FacturX, pulled ahead of extraction). 2D-Doc is an open question.

FeatureWhatCoverageRelevanceEffortWho ships it
Profile- and version-aware Factur-X/ZUGFeRD embeddingChoose the right file name, AFRelationship per profile and country, and the fx: extension schema (DocumentType, Version, ConformanceLevel) for 1.07-1.09.2 and ZUGFeRD 2.x/XRechnung. Warn when MINIMUM or BASIC WL is used where a legal invoice is expected.partialhighMMustang, ZUGFeRD-csharp, factur-x (Akretion), PDFlib, iText
EN 16931 and profile business-rule validation of the embedded XMLCheck XSD, BR-, BR-FR- and BR-DE-*, and consistency between XMP ConformanceLevel and the XML guideline, before handing the invoice to a Plateforme Agréée.partialhighLMustang validator, KoSIT validator, FNFE-MPE artifacts
Typed EN 16931 invoice model producing CII and UBLOne model feeds the HTML template and factur-x.xml, including the four French mentions (buyer SIREN, delivery address, operation category, VAT-on-debits), so the PDF and XML cannot disagree.absenthighLMustang Invoice, ZUGFeRD-csharp InvoiceDescriptor
Vector barcodes: QR, DataMatrix, Code 128/GS1-128, PDF417, EANPure managed encoders painting Form XObjects, exposed to HTML (element or 'barcode:' scheme) and stamping, tagged as Figure with the payload as alt text.absenthighMiText Barcodes, PDFsharp BarCodes, PDFreactor, Syncfusion, Antenna House
EPC SEPA credit-transfer QR (GiroCode)A BCD payload builder with ECC level M, placed on invoices, common in DE, AT, BE and NL.absentmediumSQRCoder Girocode, segno, ERPs
Readable PDF rendition of received CII/UBL/XRechnungTurn a received structured invoice into an archivable exhibit or approval PDF through .Html templates (KoSIT's stylesheets are XSLT 2.0).absentmediumMKoSIT visualization, Mustang
Swiss QR-bill payment part and receiptAn A6 payment part plus receipt with the Swiss cross, SPC payload and permitted fonts (IG 2.3; 2.4 in force 14 Nov 2026). Only for CH/LI creditors.absentlowMSwissQRBill (Codecrete), QRCoder
French 2D-Doc (signed DataMatrix)C40 header and message signed with ECDSA from an ANTS-approved certificate, for proof-of-address documents. A niche for approved issuers.absentlowMANTS-certified issuers, Certigna

Extraction outputs​

M10 produces an object model only. Search with positions is the building block for redaction, highlighting, auto-linking and exhibit indexing. Feeding contracts and case files to LLMs with page-anchored citations (piece, page label, Bates) is the dominant 2025-26 extraction use, and the tools are Python-only. Redlining a returned signed contract against the draft is a daily legal task.

Decided: M15 (search, exports) and M24 (comparison and templates).

FeatureWhatCoverageRelevanceEffortWho ships it
Text search with quads (literal, regex, normalized)Case, diacritic and ligature folding, and matches across hyphenated line breaks, returning page, quads and structure element. Regex has a timeout or NonBacktracking.partialhighSPyMuPDF search_for, iText RegexBasedLocationExtractionStrategy, Aspose TextFragmentAbsorber, PDFium
Markdown/JSON/ALTO/hOCR export with page-anchored chunksReading order, headings (tags first), tables and images with boxes, chunked per section or page with citation anchors (page, label, Bates, bbox).partialhighMPyMuPDF4LLM, Docling, MarkItDown, Aspose 26.5 chunking, PdfPig ALTO/hOCR
Document comparison (text redline, visual diff)A page-windowed word diff with move detection, output as annotated PDF or JSON, and a raster diff through Rendering.absentmediumLAspose TextPdfComparer/GraphicalPdfComparer, Apryse, Acrobat Compare, Draftable
Zone/template extraction and key-value detectionDefine fields by zone or anchor on one supplier invoice and extract them from every document with that layout. Useful for non-Factur-X invoices.partialmediumLiText pdf2Data, Syncfusion Smart Data Extractor, Apryse, Nutrient

Tooling and deployment​

The library's positioning against Chromium wrappers rests on footprint, cold start and font-less containers, but no acceptance measures them. Every reference toolkit ships a CLI, which lowers the adoption barrier for scripted case-file pipelines and helps corpus triage. Long server-side operations need cancellation and progress.

Decided: The AdCodicem.Pdf.Tool track from M6; cancellation and progress designed in M3; WebAssembly and the container profile in M23; a JSON dump of the object graph stays open.

FeatureWhatCoverageRelevanceEffortWho ships it
Command-line toolinfo/validate/repair as JSON, assemble from a case-file manifest, stamp and Bates, split and compress to a profile, html2pdf, and extract text, Markdown, attachments and Factur-X XML.absentmediumMqpdf, pdfcpu, mutool, hexapdf, cpdf, OCRmyPDF
Cancellation, progress and per-operation budgetsA CancellationToken checked without allocating in long loops (render, assemble, optimize, OCR), progress reporting, and optional time or memory budgets for server hosts.absentmediumSAspose InterruptMonitor
Tested container/serverless profileChiseled images without fontconfig, read-only file system, AOT cold start and a 512 MB cap measured in CI against the Chromium baseline.partialmediumSGotenberg, IronPDF guides, QuestPDF
browser-wasm support for the coreClient-side stamping and assembly of confidential files with no upload. The core qualifies, while .Html depends on the Skia and HarfBuzz WASM assets.absentlowSPDFsharp in Blazor, Syncfusion Blazor; QuestPDF unsupported
Lossless JSON dump/update of the object graphqpdf JSON v2-style inspection and --update-from-json for support and readable fixtures, streamed with Utf8JsonWriter.absentlowLqpdf JSON v2, pikepdf, mutool show

Weighed for exclusion​

These are features competitors headline but that sit outside ADR 4's business-document target, need a second layout engine, need JavaScript (ADR 2 and ADR 4), or serve print production. Several only require 'preserve on merge and strip when sanitizing', which the object model already does. Recording the exclusions, with their reopen conditions, stops them from being relitigated.

Decided: ADR 37 excludes active content and PDF to Office; print production went to M29, advanced typesetting to M30, DOCX to HTML to M31; mixed raster content compression is an open question.

FeatureWhatCoverageRelevanceEffortWho ships it
DOCX/XLSX/PPTX/ODT to PDFA second layout engine in its own right, which conflicts with ADR 2 and ADR 4. Document LibreOffice or Gotenberg upstream of M5 assembly instead.absentmediumXLAspose.Words/Cells, Syncfusion DocIO, Apryse, Gotenberg
PDF to DOCX/XLSX/HTML reconstructionLossy and off the generate-and-manipulate axis. M10 plus Markdown export serves machine uses.absentlowXLAspose.PDF, Spire.PDF, Apryse
Executing JavaScript (form scripts, canvas and JS charts)Excluded by ADR 2 and ADR 4. Charts arrive as SVG; M11 reports calculated fields it cannot update.excludedlowXLAcrobat, pdf.js, Prince, PDFreactor
Rendering or flattening dynamic XFANeeds a separate XFA layout engine plus JavaScript. Detect and report only.absentlowXLiText pdfXFA, Aspose
PDF/X-4/X-6 and PDF/VT print productionMarks, bleed, spot colors, overprint and DPart records for print shops, a print-industry niche. Revisit if outsourced invoice printing asks for it.absentlowLPrince, PDFreactor, PDFlib, callas
ICC color conversion, CMYK/spot output from CSSNeeds a color-management engine (managed or native, invariant 1). Only reconciling output intents on merge, already covered by ADR 17, matters for business documents.absentlowLGhostscript, mutool recolor, PyMuPDF recolor, Prince device-cmyk
Prepress features and transparency flatteningTrapping, separations, OPI, halftones and flattening need rasterization. Preserve and strip only.absentlowLAcrobat Print Production, PitStop, Ghostscript
Mixed raster content compressionSegmentation plus a JPEG encoder, too heavy for the value in a frugal managed library.absentlowXLFoxit/LuraTech, LEADTOOLS, GdPicture
Legacy or niche PDF structures (multimedia/3D, geospatial, web capture, reference XObjects, requirements, threads, DParts)Preserve on merge, keep consistent on page removal (beads, thumbnails), strip in sanitization, and report Reference XObjects to external files. Never author.absentlowSAcrobat, iText, PDFBox
Typesetting niches (vertical CJK, ruby, MathML, page floats, change bars, line numbers, index, pronunciation)Outside invoices, contracts and French case files. Degrade with a diagnostic.absentlowLAntenna House, Vivliostyle, PDFreactor, Prince
Legal attestation dictionary and e-signature audit-trail pagesRarely inspected, or an application concern. Composable from sanitization findings and M7 when needed.absentlowSAcrobat, DocuSign, Yousign

Market notes, by area​

What each researcher found the market emphasizing, and what it could not check.

.NET libraries​

Method: I read CLAUDE.md, docs/roadmap.md, docs/architecture.md, the ADR index and the scope ADRs (3, 4, 8, 11, 15, 16, 18), M2.md, M4.md and the status.md debt table. For every candidate I grepped roadmap, architecture, ADRs, milestones, status and website/docs for the feature's name and synonyms; the result is in roadmapEvidence. No candidate is marked 'excluded': no ADR rules any of them out. The nearest are ADR 4 (no JavaScript), which constrains forms and XFA, and ADR 8 (a fluent API only as a secondary layer).

Market trends (2025-2026): 1. Signatures have moved from signing to validation. iText 9.0 to 9.6 added a validation API, EU trusted lists (LOTL), qualified-status checks and non-EU lists. Aspose added TryVerifySignature, compromise detection and UnsignedContentAbsorber. Docotic, GemBox and Syncfusion all advertise LTV and B-LTA. 2. PDF 2.0 profiles are now sold: PDF/UA-2 (iText, Syncfusion, IronPDF), WTPDF (iText 9.6), PDF/A-4 (Docotic 9.9, Aspose, iText, Syncfusion). DevExpress is still researching PDF 2.0 and UA-2. 3. OCR is being built in: Aspose 26.6 native OCR, iText pdfOCR with an ONNX engine, Syncfusion Tesseract 5 with preprocessing. 4. AI and RAG extraction: Aspose PDF-to-Markdown plus chunking and embedding (26.5); Syncfusion markets a deterministic Smart Data Extractor with no AI dependency (2026 Vol 1); Apryse and Nutrient sell AI key-value extraction. A deterministic, managed, layout-aware export is a defensible niche for this library. 5. Security hygiene is packaged: redaction everywhere, and sanitization (Apryse; Aspose HiddenDataSanitizer in 25.11). 6. Memory frugality has become a selling point: Docotic 9.8 and 9.9, Telerik's PdfStreamWriter, DevExpress's cross-platform rewrite. 7. HTML engines split three ways. Chromium-based: IronPDF, Syncfusion Blink, Docotic HtmlToPdf (Chrome 147). Own engine: iText pdfHTML, Aspose.HTML. Skia-based code-first: QuestPDF, whose DocumentOperation manipulation delegates to native qpdf. A fully managed engine with a managed manipulation core has no direct .NET competitor.

Strongest case-file gaps (all absent or partial): page labels, Bates numbering, page resize and normalization, split strategies, OCR, image and TIFF to PDF, e-mail to PDF, conversion of third-party PDFs to PDF/A, font subset consolidation, image optimization, redaction and sanitization, signature validation, and viewer preferences (open on the bookmark pane).

Deliberately not listed as candidates (low relevance or out of scope, but competitors sell them): printing (GemBox, Aspose batch printing 25.4, DevExpress, IronPDF, Spire), viewer and UI components, JavaScript actions (ADR 4), 3D, rich media and multimedia (Syncfusion), cloud-storage connectors, AI chat and summarization assistants (Aspose AI Copilot, Nutrient), Aspose custom security handlers and text fitting, OFD to PDF, PDF/E (Aspose 25.9). A CLI tool (qpdf- or veraPDF-style) is also absent from the roadmap but was not found among these .NET competitors, so it is left out.

Architecture points the orchestrator may want to ask the maintainer about: - System.Security.Cryptography.Pkcs (CMS) is an out-of-band NuGet package, not part of the shared framework. Signature validation, PAdES and public-key encryption therefore either stay in the Signing satellite or need a minimal CMS implemented over System.Formats.Asn1, which is in the shared framework. - Image codecs (JBIG2, JPX, JPEG encoding, resampling) bear on invariant 1 and ADR 5. ADR 5 says Skia is allowed in .Html only, while architecture.md §2 also gives Rendering a SkiaSharp dependency. Using Skia for optimization or OCR preprocessing would need that clarified. - OCR engines (Tesseract native, ONNX Runtime) conflict with AOT, trimming and determinism, so they belong in a satellite behind an engine abstraction. - Office-to-PDF would reopen ADR 2 and ADR 4. - Online OCSP, CRL, LOTL and TSA access conflicts with determinism (invariant 6). It should follow the ADR 11 model: off by default, with inputs the caller can inject.

Could not verify: - Spire.PDF's What's-New page returned HTTP 403, so Spire's 2025-26 feature list comes from its README and tutorials only. - Apryse's feature-index page returned 404; its product page, sanitization and redaction docs were used instead. - The exact current CSS support list of pdfHTML: running elements and footnotes are asserted from secondary sources; target-counter and page margin boxes are confirmed. - Whether GemBox.Pdf generates PDF/A. - Whether Telerik has redaction. - Whether QuestPDF hyphenates. - iText's support for ISO/TS 32001 and 32002: only 32003 and 32004 are confirmed for 9.0. SHA-3 is confirmed for Aspose 25.1.

Spec anchors used: ISO 32000-2:2020, the dated revision, with Errata Collection 3 per the PDF Association (https://pdfa.org/resource/iso-32000-2/, https://pdf-issues.pdfa.org/32000-2-2020/).

Other ecosystems​

Coverage method: for each feature I grepped docs/ (roadmap.md, milestones M1/M2/M4, adr/, architecture.md, status.md debt table, validation-rules.md, corpus*.md, website docs) for the feature name, its synonyms and its ISO section name. Deliberately left out because covered: linearization (M13), overlay/underlay and watermarks (M9), N-up/imposition (M9), object streams and xref streams on write (M3), dedup (M5/M13), AES-256 standard handler (M11), form fill/flatten (M11), table extraction with confidence (M10), rasterization (M14), the deterministic /ID (M3), and structure-tree merging (architecture.md §6).

What the market stresses (2025-2026): (1) Stripping and redaction are now expected in open-source tools. qpdf added --remove-metadata and --remove-info in 11.10, --remove-structure in 12.1 and --remove-acroform in 12.3. pdfToolbox 16 (March 2025) added a 'Remove data' fixup. PyMuPDF has scrub() and apply_redactions(). (2) Signature validation is spreading. pdfcpu 0.14/0.15 reports PAdES, DSS, timestamp and revocation evidence. HexaPDF (1.11.0, 2026-09-22) verifies signatures. pdfsig both verifies and signs. (3) Documents are being fed to AI: PyMuPDF4LLM exports Markdown, and OpenPDF 3.0 (Aug 2025) added HTML and batch modules. (4) Accessibility, driven by the EAA (in force since 28 June 2025): veraPDF 1.28 added WTPDF profiles and checks several claims in one run; PDF/UA-2 exists. (5) Every reference toolkit ships a CLI and uses JSON for exchange (qpdf JSON v2, pdfcpu form/bookmark JSON). (6) Size reduction through image resampling is standard: Ghostscript, PyMuPDF rewrite_images, qpdf --optimize-images/--jpeg-quality, OCRmyPDF JBIG2. (7) PDFBox's merger shows how far a merge must go: AcroForm join mode, page labels, structure/parent tree, output intents, threads, OpenAction.

Cross-cutting gap: image decoding (CCITT/JBIG2/DCT/JPX). It blocks image export, redaction of images, downsampling, OCR, blank-page detection and rasterization, and no milestone owns it.

Could not verify directly: pdfium.googlesource.com returned 503; github.com and pdfa.org returned 403 through the proxy. For PDFium and Arlington I relied on search-result snippets and known header names. The pikepdf feature list came from a summarizer, so only well-known APIs are cited. The iText 9 add-ons (pdfSweep, pdfOCR, pdfHTML) were outside this area but are the commercial references for redaction and OCR.

Questions worth putting to the user: (a) Is true redaction and sanitization in scope, and in a new milestone? It needs image codecs, which the core only passes through today. (b) Is OCR acceptable as a satellite wrapping a native or cloud engine? (c) Is signature validation, not only signing, wanted for case-file evidence? If so, with network revocation checks off by default? (d) Which filing channels are targeted (e.g. French RPVA/e-barreau, German beA/ERV, UK e-bundles, US CM/ECF)? They set the PDF/A level, size limits, bookmark and page-size rules, and Bates or exhibit numbering. (e) Should there be a dotnet-tool CLI? (f) Where should image resampling and color conversion live: managed code in the core, or a Skia satellite like Rendering? (g) Should converting third-party files to PDF/A be part of M12? (h) For XFA: detect and report only, or also remove? (i) Should a public custom-rule/policy API come before M12?

ISO 32000-2​

What the specification is today: there is no new ISO edition of 32000-2 since December 2020. The '2024 revision' is the PDF Association's no-cost sponsored edition, carrying Errata Collection 2 (errata to 2024-07-20; 265 corrections, 603 edits). That was replaced on 2026-06-18 by Errata Collection 3 (356 corrections, 766 edits, 86 % ISO-approved), which also absorbs the ISO/TS 32005 namespace-mapping corrections that affect PDF/UA-2. Around the core sits a family of extensions: ISO/TS 32001 (SHA-3), 32002 (ECDSA/EdDSA), 32003 (AES-GCM), 32004 (MAC integrity for encrypted files), 32005 (1.7/2.0 structure-namespace inclusion) and 32007 (glTF in RichMedia).

Sources: https://pdfa.org/pdf-2-0-errata-collection-3-now-available/, https://pdfa.org/pdf-2-0-errata-collection-2-is-now-available/, https://pdf-issues.pdfa.org/32000-2-2020/.

Method: - I walked clause 7 to clause 14 and Annexes A-Q from the heading index of the 2020 sponsored text (Internet Archive, https://archive.org/details/iso-32000-2-2020-sponsored). - Clause and table numbers above come from that text; the EC2/EC3 renumbering, if any, was not checked edit by edit. - pdfa.org and the ANSI preview returned 403, so errata-collection facts come from search snippets and a third-party summary (zenn.dev). - Library claims were checked against current documentation where cited (iText 9 security and validation, qpdf 12 CLI, pyHanko, PyMuPDF scrub/bake/redactions, pdfcpu, pypdf, PDFBox, Prince, WeasyPrint forms, PDFsharp 6.2 signatures, BFO and iText PDF/UA-2). A few are from knowledge and should be spot-checked: iText PdfAnnotationFlattener, qpdf's UTF-8 handling, PDFBox's name-tree merge.

Three things found in the repository rather than the specification: 1. src/AdCodicem.Pdf/Objects/PdfString.cs ToText() decodes PDF 2.0 UTF-8 strings (EF BB BF) as Latin-1. Debt T06 covers only PDFDocEncoding. 2. CLAUDE.md 'Known traps' lists Resources, MediaBox and Rotate as inherited but not CropBox, which ISO 32000-2 Table 31 also makes inheritable. 3. The CMS APIs (SignedCms, EnvelopedCms) are in the System.Security.Cryptography.Pkcs NuGet package, not the shared framework (https://www.nuget.org/packages/System.Security.Cryptography.Pkcs/). Signature validation, public-key encryption and the ISO/TS 32004 MAC therefore cannot live in the dependency-free core unless CMS is parsed over the inbox System.Formats.Asn1.

Where the market is moving: - Security: iText 9 shipped ISO/TS 32003/32004 and a signature-validation module. - Size reduction: qpdf 12.1 added --remove-structure and --jpeg-quality for smaller files. - Accessibility: PDF/UA-2 and WTPDF (2024) plus the European Accessibility Act (in force since 2025-06-28) are pushing libraries to PDF 2.0 tagging. BFO, iText, PDFlib and veraPDF already support it. - Manipulation: sanitize and redact are the headline features of PyMuPDF (scrub, apply_redactions) and iText (pdfSweep). - Signatures: pyHanko's revision diff analysis is the reference design for 'what changed since signing'.

Highest-value gaps for this roadmap: - redaction - page labels - signature validation with revision history - OCR text layer and scan compression - sanitization - tag-preserving stamping and the PDF/UA-2 choice - name-tree collisions on merge - general embedded-file and XMP APIs

Questions for the maintainer: - Default output version (PDF 1.7 or 2.0), and whether to target PDF/UA-1 or PDF/UA-2 before M8 starts. - Is true redaction in scope, and in which milestone after M10? - Is signature validation in scope, and does CMS live in the Signing satellite or a new one? - Do image codecs (JBIG2, JPX, CCITT, DCT) go in a new managed satellite, and do we accept a managed JPEG encoder outside .Html (D04)? - Should OCR be supported as 'accept external OCR results' only? - Should sanitization be a first-class feature? - Should the prepress, multimedia/3D, web-capture, navigator and XFA-rendering items be excluded explicitly by ADR, so they stop coming back?

Standards around PDF​

Market trends (September 2026): - iText 9 (9.0 through 9.6.0, April 2026) is the only mainstream library shipping the whole modern family: ISO/TS 32001-32004, PDF/A-4, PDF/UA-2, WTPDF, a PAdES signer and a signature-validation module with EU and non-EU trusted lists. It uses its own validation of its output (release notes produced as A-4f + UA-2 + WTPDF) as marketing. - veraPDF 1.30 (2026-04-21) validates PDF/A-1..4, PDF/UA-1/2 and WTPDF (wt1r, wt1a), and checks pdfaid:rev and pdfuaid:rev. 1.28 added validation of several claims in one run and ships an Arlington-model checker. - PDFsharp 6.2 added CMS signatures with a TSA, PDF/A and PDF/UA. PDFBox 3 Preflight remains PDF/A-1b only. - The PDF Association agreed at PDF Days 2025 to add ML-DSA and SLH-DSA; .NET 10 has MLDsa and SlhDsa (experimental). - E-invoicing moves fast: Factur-X 1.08/ZUGFeRD 2.4 (2025-12), 1.09 (2026-06) and the 1.09.2/2.5.2 corrigendum (2026-08-04, effective 2026-09-01), now on a twice-yearly cadence. The French mandate is live since 2026-09-01; formats are Factur-X, UBL and CII, with the EXTENDED-CTC-FR profile in AFNOR XP Z12-012. Germany issues from 2027/2028; ViDA brings EN 16931 intra-EU from 2030-07-01. - The European Accessibility Act (since 2025-06-28) is the main pull for PDF/UA on invoices, statements and contracts. - Swiss QR-bill: structured addresses have been mandatory since 2025-11-22 (IG 2.3, then 2.4). - ISO/TS 32007:2024 (glTF 3D) exists; no ISO/TS 32006 was found.

Key structural finding: nothing in the roadmap plans PDF 2.0 output, yet PDF/A-4, PDF/UA-2, WTPDF, PDF/X-6, PDF/VT-3 and all ISO/TS 320xx depend on it. Also, Factur-X (PDF/A-3, PDF 1.7) cannot be combined with PDF/UA-2, so an accessible e-invoice means A-3a/u + UA-1.

What could not be checked: - pdfa.org pages return HTTP 403 to WebFetch, and curl was refused by the permission layer, so pdfa.org content comes from search-result summaries. - The ETSI EN 319 142-1 PDF downloaded but could not be read as text (no poppler). The PAdES level details (no CMS signing-time in B-B, optional VRI) come from prior knowledge. - Some ISO 32000-2 clause numbers (12.8.4.3 DSS, 14.12 DPart, 14.13 AF, 7.12 Extensions) are from memory. - Two claims from search summaries are unverified: that EN 16931-1:2026 was published in March 2026, and that DGFiP accepts MINIMUM/BASIC WL in France (sources conflict; Germany rejects both). - Claims about Prince and PDFreactor PDF/X, and PDFlib PDF/VT, come from prior knowledge.

Open questions for the maintainer: 1. Should the library write PDF 2.0 at all, and when (M3 or M12)? 2. Should the Signing satellite also validate signatures (EU trusted lists, diff analysis), or only produce them? 3. Should the FacturX satellite generate CII/UBL from a typed model, or only embed a caller's XML? 4. Is a barcode/QR satellite in scope (Swiss QR-bill, EPC, 2D-Doc)? 5. Which PDF/UA part is the M8 target: UA-1 (compatible with Factur-X and PDF/A-3) or UA-2? 6. Should converting third-party files to PDF/A be a deliverable (M12 or a new milestone)? 7. Are portal presets (Télérecours) wanted in M5? 8. May the Signing satellite depend on System.Security.Cryptography.Pkcs, or on BouncyCastle for EdDSA?

HTML to PDF engines​

Method: I read CLAUDE.md, docs/roadmap.md (M7 is only the six-line sub-milestone list; there is no docs/milestones/M7.md), ADRs 2-7, 11 and 18, architecture.md, the status.md debt table, corpus.md and corpus-contributions.md. I grepped docs/ for about 110 feature keywords; the evidence in each candidate quotes the result. Almost nothing in the CSS/typography/graphics space is written down beyond the M7.1-M7.6 headings, so most items are 'partial' (named by an M7 heading with no mechanism) or 'absent'.

Inconsistencies found in the repo docs: (1) ADR 5 credits HarfBuzz with 'bidirectional text'. HarfBuzz does not implement UAX #9 (its manual says the buffer must already be in visual order), so bidi is unplanned work. (2) M8's acceptance names 'the two-column report' among the generated reference documents, but M7 has no multi-column deliverable. (3) M7.6 promises a TOC with real page numbers and M7.2 page counters. counter(pages), target-counter and TOCs are forward references, which conflict with the forward-only writer and the 'memory follows the heaviest page' invariant unless a two-pass layout (keeping only an anchor-to-page map) or deferred Form XObjects are designed in. This deserves an ADR before M7.2. (4) 'Simple grid' (ADR 4, M7.4) and 'borders and backgrounds' (M7.5) are undefined, so users cannot know what degrades. Stating the supported CSS levels as M7.1 exit criteria would fix that.

Market trends, from current sources: - WeasyPrint has the fastest cadence: v65 (2025-03) flex gap, unicode-range; v66 (2025-07) PDF/UA; v67 (2025-12) CMYK, PDF/X, color profiles, calc(), @layer, ::first-line, grid row breaks, PDF/A-1a/2a/3a/4e/4f; v68 (2026-01) a Factur-X/ZUGFeRD CLI, a URLFetcher API; v69 (2026-06) logical properties, viewport units, user output intent; v70 (2026-09-08) the CSS Notes draft, COLR emoji, box-shadow. - Prince 16/16.1 added CSS Grid (single page), variable fonts and CFF2, bidi isolate and plaintext, :is() and :where(), CSS Color 4 including device-cmyk, math functions, <input type=prince-pdf-signature>, prince-pdf-role-map and ES6 JavaScript. - PDFreactor 12 added side notes, CSS Shapes, WAI-ARIA, WOFF2 and hyphenate-limit-chars; 12.4 moved to ECMAScript 2025; 12.6 added AcroForm check styles. - iText pdfHTML 6.3.3 (iText Core 9.7) supports flex and grid, multicol and PDF/UA-2, but not custom properties, transforms, box-shadow, filters or box-decoration-break. - Chromium gained @page margin boxes in Chrome 131, and Puppeteer now defaults to tagged output with an experimental outline, so the bar for 'basic paged media' has risen. - Tailwind CSS v4 emits @layer, @property, color-mix() and oklch() palettes, which makes modern CSS syntax a practical requirement for templates built with current tooling. - Aspose.HTML for .NET (26.8, 2026-08) is the closest managed .NET competitor and uses -aspose- CSS extensions for page marks.

Business-document features no CSS engine standardizes but users need: - vector barcodes and QR codes: the Swiss QR-bill is mandatory (IG 2.3 since 2025-11-22, IG 2.4 from 2026-11-14), EPC069-12 v3.0 GiroCode, French 2D-Doc; - carry-forward subtotals; - signature-field placeholders placed by layout; - /PageLabels for case files; - PrintScaling None, so QR-bills and labels print at 100 %.

Honest low-relevance items: vertical writing, MathML, page floats, print production/PDF/X, clip, mask and filters, color emoji. Charts through JS or canvas are excluded by ADRs 2 and 4; the SVG path should be documented instead.

Could not verify: - the web search budget ran out mid-task, so the Paged.js per-feature support list and the Antenna House CSS-mode support for change bars, line numbers, retrieve-table-marker and index are unconfirmed (the AH entries come from its XSL 1.1 conformance); - whether SkiaSharp's stock native binaries include AVIF or JPEG XL (Skia registers them only under SK_CODEC_DECODES_AVIF and SK_CODEC_DECODES_JPEGXL); - whether HarfBuzzSharp exposes hb-subset instancing; - whether Prince can use a PDF as an <img> source (a forum thread says no), so only PDFreactor is cited for that. The ISO 32000-2 clause numbers are from the 2020 edition's structure and should be checked against the 2024 dated revision before being cited in an ADR.

Business workflows​

MARKET SIGNALS (2025-2026) - E-invoicing in France: receiving e-invoices has been mandatory for every VAT-registered company since 1 September 2026, and issuing them for large companies and ETIs. SMEs follow in September 2027. The format base is UBL, CII and Factur-X; Factur-X 1.09 / ZUGFeRD 2.5 has applied since 1 July 2026 and still requires PDF/A-3. M12 covers embedding the XML; producing the XML itself (the EN 16931 model) is the gap. - Accessibility: the EAA has applied since 28 June 2025, and ADA Title II applies to US public entities from April 2026. Vendors (Apryse, PDFix, Adobe) now sell auto-tagging and remediation of existing documents, not only accessible generation. - AI/RAG: PDF-to-Markdown/JSON with page-anchored chunks is the fastest-growing extraction use (PyMuPDF4LLM, Docling, MarkItDown). Apryse's Spring 2025 and Spring 2026 releases were about data extraction and handwriting (ICR) for enterprise AI. No dependency-free .NET option exists. - Security and CDR: Apryse shipped a dedicated Sanitization API (inspect then sanitize) in April 2026, aimed at legal, government and health. - Signatures: iText 9.0 (November 2024) finalized signature validation and added ISO/TS 32003/32004; 9.3 (October 2025) added EU LOTL trust-list validation and ONNX OCR. PDFsharp 6.2 (May 2025) brought signing to the free managed .NET tier. QuestPDF added PDF/A-2/3 (a/b/u) and PDF/UA-1, plus merge, attachments and encryption through a native qpdf. eIDAS 2 EUDI wallets offering QES are due from late 2026, and the CSC API v2.2 was published in November 2025. - French legal practice: - A niche of SaaS tools (Kleos, Hub-Avocat Stamp, L'Autotamponneur, TamponNumerique, ISIDOC, Projustis) exists only to stamp and number pieces, generate the bordereau, compress, split and name files for e-Barreau and Télérecours. Those are exactly the functions a .NET library could power. - e-Barreau: PDF attachments of at most 10 MB. - Télérecours (FAQ as of 2026): one file per piece, at most 32 MB per file, named with the inventory number first, at most 80 characters, no accents or special characters. Case law also accepts a single file whose bookmark titles carry at least the inventory number (CE 5 October 2018; CE 14 October 2019 n° 432543). - PLEX (criminal matters): files up to 1 GB. - Probative-value frameworks tie PDF work to hashing, timestamping and sealing: décret 2016-1673 (copie fiable), NF Z42-026 (faithful digitization), NF Z42-013 / ISO 14641 (archiving). - Standards to track: ISO 32000-2:2020 (Errata Collection 3) is free from the PDF Association together with ISO/TS 32001-32005. The roadmap never states which PDF version the writer outputs, and this decides PDF/A-4, PDF/UA-2 and WTPDF.

COVERED AND LEFT OUT OF THE LIST Continuous pagination across merged files (M5 + M9, CLAUDE.md priority), headers and footers after the fact (M9), linearization (M13), streaming huge reports (M7 acceptance), thumbnails via rasterization (M14), Factur-X embedding and extraction (M12), password encryption and permissions (M11), and merge preserving bookmarks, links and attachments (M5).

COULD NOT VERIFY (the web search budget ran out mid-research) - The exact current wording of art. 954 CPC; it was cited from knowledge. - The SIX QR-bill guideline version number. - The complete pdfcpu command list: the usage.go URL is cited without reading it. - Apryse release-notes details; the page returned 404. - Whether Télérecours still accepts the single-file-with-bookmarks mode: its current FAQ says one file per piece is mandatory, while the 2018-2019 case law discussed bookmarks. - The status of post-quantum (ML-DSA) PDF signatures.

DEPENDENCY CONSTRAINTS AFFECTING PLACEMENT - System.Security.Cryptography.Pkcs (CMS) is a NuGet package, not part of the BCL. Anything CMS-based (public-key encryption, signature validation) therefore cannot live in the core without hand-written CMS parsing. - EN 16931 Schematron rules need XSLT 2.0, which .NET lacks. - Image-level features (redaction of scans, blank detection, downsampling, JBIG2/CCITT encoding, MRC) all depend on managed image decoders, which the roadmap does not plan; today they are pass-through (M1).

SUGGESTED QUESTIONS FOR THE MAINTAINER 1. Should the case-file assembly API (M5) model French court platforms explicitly (e-Barreau, Télérecours, PLEX profiles; bordereau; tampon), or stay generic and leave that to a satellite? 2. Is redaction and sanitization in scope, and if so should it be a new milestone after M10? It forces full rewrites and managed image codecs. 3. Should the core get managed image decoders and encoders (CCITT, JBIG2, JPEG, JPX), or should all pixel work go to Skia satellites? 4. Is OCR in scope as an import-and-hook feature (hOCR/ALTO to an invisible text layer) without bundling an engine? 5. Does the Factur-X satellite generate the EN 16931 XML (CII/UBL) or only embed what the caller gives it? 6. Signing scope: is signature validation (and LTV-enabling of third-party signatures) wanted, or only creation? Should timestamps come before full PAdES? 7. Which PDF version does the writer target by default (1.7 or 2.0)? This decides PDF/A-4, PDF/UA-2 and WTPDF. 8. Should Office to PDF be excluded explicitly in an ADR, pointing to Gotenberg or LibreOffice? 9. Barcodes (QR, Data Matrix, EPC, QR-bill, 2D-Doc): core, .Html, or a payments satellite? 10. Is a CLI tool wanted, and when? 11. Is AI/RAG export (Markdown/JSON with page and Bates anchors) a product priority for M10?

Every verified candidate​

The 307 candidates the verification kept, before merging, with their sources. Coverage is as corrected by the verifier.

AreaFeatureWhatCoverageRelevanceEffortSpecSources
Business workflowsAnnotation authoring, editing, and flatteningCreate markup annotations (highlight, underline, strikeout with quads; sticky notes with replies; FreeText; rubber stamps with appearance streams; ink), edit and delete them, and flatten any annotation (not only form widgets) into page content before filing or archiving.partialmediumMISO 32000-2:2020 12.5 (Annotations), 12.5.5 (Appearance streams), 12.5.6.10 (text markup)1
Business workflowsAttachments and Associated Files API (document, page, and annotation level)Add, list, extract, replace, and remove embedded files at document level (EmbeddedFiles name tree), page level, and via FileAttachment annotations, with /Subtype MIME, /Params (size, dates, CheckSum), and /AF relationships (Source, Data, Alternative, Supplement). Keep the original .docx or .eml beside its PDF rendering in PDF/A-3.partialmediumSISO 32000-2:2020 7.11.4 (Embedded file streams), 14.13 (Associated files), 12.5.6.15 (File attachment annotations)1 2 3
Business workflowsAudit-trail / certificate-of-completion pageAppend a generated page (or attached JSON) listing the signers, times, methods, document hashes, and signature fields, as e-signature platforms do, bound to the signed revision.absentlowS1
Business workflowsAuto-tagging and accessibility remediation of untagged PDFsInfer a structure tree for received untagged PDFs from M10 layout analysis: headings, paragraphs, lists, tables, and reading order, with running headers and footers marked as artifacts and alt-text hooks. Each inferred element carries a confidence score, and a remediation report says what needs human review.absentlowXLISO 32000-2:2020 14.7-14.8 (logical structure, tagged PDF); ISO 14289-1/-21 2 3
Business workflowsBatch and variable-data generation (compiled templates, shared caches, merge runs)Parse a template's stylesheet and fonts once and render thousands of documents from data with bounded memory and parallel workers, sharing resolved fonts, shaped-glyph caches, and optionally identical resources. Output is N files or one merged print run. The API is template-agnostic (HTML strings or IAsyncEnumerable), with a throughput budget in CI.partialhighM1
Business workflowsBates numbering across a document setStamp a legal production number on every page of a set of documents: prefix, zero-padded counter, and suffix, continuous across files, with start number, position, and margins. Return a range map (document -> first/last number) for load files and indexes. The stamp is emitted as an artifact-marked, PDF/A-safe XObject.partialmediumSISO 32000-2:2020 14.8.2.2 (artifacts); 12.4.2 (page labels, optional mirror)1 2 3
Business workflowsBilevel image encoders: CCITT G4 and lossless JBIG2Managed encoders for monochrome scans: CCITT Group 4 (simple and universally supported) and JBIG2 generic-region lossless, with optional symbol mode. Pattern-matching/lossy JBIG2 is excluded by default because of the known character-substitution risk.absentmediumLITU-T T.6 (G4); ITU-T T.88 / ISO/IEC 14492 (JBIG2); ISO 32000-2:2020 7.4.6, 7.4.71 2 3
Business workflowsBlank page detectionClassify pages as blank. At content level: no painting operators, or only white fills, nothing inside the crop box, and no text in visible render modes. At pixel level for scans: ink coverage below a threshold after decoding and despeckling. Used to remove blanks or as split separators.absentmediumM1 2 3
Business workflowsBordereau / inventaire / exhibit index generated from the assembly inputsFrom one case-file model (pieces with number, title, date, source), generate the bordereau de communication de pièces, the Télérecours inventaire, or an exhibit list. It shows page counts, the start page or page label in the assembled volume, and hyperlinks to each piece. Per-piece outline entries (signets) are generated from the same model, so stamp, bookmark, and index can never disagree. Export: PDF page(s), plus the data (JSON) for a Word template produced elsewhere.partialhighMISO 32000-2:2020 12.3.3 (document outline), 12.3.2 (destinations); CJA art. R. 412-2; CPC art. 9541 2 3
Business workflowsBrowser WebAssembly (Blazor) supportVerify and document that the core runs in browser-wasm (no threads assumed, no file-system assumptions, trimmed size). Evaluate .Html with the SkiaSharp and HarfBuzzSharp WebAssembly native assets, so invoices and forms can be generated and stamped client-side.absentlowS1 2
Business workflowsCertificate-based encryption, AES-GCM (ISO/TS 32003), and integrity MAC (ISO/TS 32004)The public-key security handler (encrypt to recipients' X.509 certificates, adbe.pkcs7.s5), PDF 2.0 AES-256-GCM crypt filters, and MAC-based integrity protection for encrypted documents. Optionally, unencrypted wrapper documents.partiallowMISO 32000-2:2020 7.6.5 (Public-key security handlers), 7.6.7 (Unencrypted wrapper document); ISO/TS 32003:2023; ISO/TS 32004:20241 2
Business workflowsCommand-line tool (dotnet tool / AOT single file)An 'adpdf'-style CLI: info and diagnostics as JSON, validate, repair, assemble from a case-file manifest (JSON), stamp and Bates, split and compress to a platform profile, html2pdf, and extract (text, Markdown, attachments, Factur-X XML). Useful for law-firm IT, CI pipelines, and corpus triage.absentmediumS1 2
Business workflowsComments summary reportList every annotation by page, author, date, type, and text (with the highlighted passage), as JSON or a generated PDF summary, like Acrobat's 'Summarize comments'.absentlowSISO 32000-2:2020 12.5.6.4 (text annotations), 12.5.6.101
Business workflowsContainer and serverless deployment profile (tested budgets)A tested and documented profile: chiseled Linux images without fontconfig or system fonts (the embedded OFL set covers this), read-only file systems, cold-start time with Native AOT, and memory caps (e.g. 512 MB functions). This is the explicit contrast with headless-Chromium converters.partialmediumS1
Business workflowsConvert received PDFs to PDF/A (remediation)Bring an arbitrary third-party PDF to PDF/A-2b/2u/3b: embed or substitute missing fonts (metric-compatible OFL), add an sRGB output intent, rebuild XMP from /Info, remove JavaScript, encryption and forbidden actions, generate missing annotation appearances, and fix transparency issues. A report states what was changed and what could not be converted.partialhighLISO 19005-2:2011, ISO 19005-3:2012; ISO 14641:2018 / NF Z42-0131 2
Business workflowsCross-document links (GoToR/GoToE), named destinations, auto-linking of 'pièce n° X'Create remote go-to links with relative file specifications and named destinations to separately filed pieces, embedded go-to into attached PDFs, and one named destination per piece. Optionally detect textual references ('pièce n° 12', 'Exhibit C-4') in generated or received conclusions and link them. The HTML path supports href='piece-12.pdf#nameddest=...'.partialmediumSISO 32000-2:2020 12.6.4.3 (Remote go-to), 12.6.4.4 (Embedded go-to), 12.3.2.4 (Named destinations); RFC 8118 (PDF fragment identifiers)1 2
Business workflowsCustom metadata: /Info keys, XMP custom schemas, PDF/A extension schemasRead and write custom document properties and XMP in custom namespaces (case number, client, court, piece number, confidentiality), with automatic PDF/A extension-schema declarations. Page and object-level metadata, and merge rules for metadata when assembling.partialmediumSISO 32000-2:2020 14.3 (Metadata); ISO 16684-1 (XMP); ISO 19005-2 6.6.2.3 (extension schemas)1 2
Business workflowsDocument comparison (text redline and visual diff)Text comparison: word-level diff in reading order, with move detection and whitespace/hyphenation normalization, producing a redline report (a PDF with highlight and strike annotations, or JSON). Visual comparison: page raster diff with a threshold, and color overlays or side by side.absentmediumL1 2
Business workflowsDownsample and recompress received scans and photos (with a target-size mode)Detect the effective DPI of each image and downsample above a threshold (e.g. 300 to 150 dpi). Convert color to gray or bilevel when the content allows, and re-encode JPEG at a chosen quality. A 'fit under N MB' mode iterates the policy per file. Every lossy change is reported.partialhighMISO 32000-2:2020 8.9.5 (image dictionaries)1 2 3
Business workflowsE-mail (EML, and optionally MSG) to PDF exhibitRender an RFC 5322/MIME message as a PDF exhibit: a header block (From/To/Cc/Date/Subject), the HTML or plain body through the HTML engine, and inline images. Attachments are embedded as file attachments or AF, or converted and appended as sub-pieces, with a hash of the original .eml.absentmediumMRFC 5322, RFC 2045-2049 (MIME); MS-OXMSG (MSG)1 2 3
Business workflowsEN 16931 invoice model with CII/UBL serialization and validation (Factur-X data side)A typed EN 16931 invoice model that serializes to CII (Factur-X / ZUGFeRD profiles MINIMUM to EXTENDED, and EXTENDED-CTC-FR) and to UBL. It is validated against XSD and EN 16931 business rules and feeds both the HTML rendering and the embedded factur-x.xml, so the visible invoice and the XML cannot disagree.partialhighLEN 16931-1:2017; UN/CEFACT CII D16B; OASIS UBL 2.1; Factur-X 1.09 / ZUGFeRD 2.51 2 3
Business workflowsExhibit stamp ('tampon de pièce') with piece and sub-piece numberingA configurable firm stamp (shape, firm name, bar or court, 'Pièce n° X', optional date) on the first page or every page of each piece. Supports hierarchical numbering (1, 2.1, 2.2), per-piece page numbering 'p. 3/12', and optional separator (intercalaire) pages. The stamp design is a reusable form XObject, and it can be rendered from an HTML fragment.partialhighSISO 32000-2:2020 8.10 (form XObjects)1 2 3
Business workflowsImage to PDF (JPEG, PNG, multi-page TIFF/CCITT, JPEG 2000) with pass-throughDirect conversion without re-encoding where possible: JPEG goes to DCTDecode, JPEG 2000 to JPXDecode, TIFF G3/G4 strips to CCITTFaxDecode, and PNG IDAT to Flate with a PNG predictor. One page per TIFF frame, DPI-aware page size, EXIF orientation, fit-to-A4 option, optional PDF/R-1 conformance.partialhighSISO 32000-2:2020 8.9 (Images), 7.4.6 (CCITTFaxDecode), 7.4.8 (DCTDecode), 7.4.9 (JPXDecode); ISO 23504-1:2020 (PDF/R-1)1 2 3
Business workflowsIntegrity manifest for case files (hashes of every piece, optionally timestamped)Compute SHA-256 of each source piece and of the assembled volume. Record them in the bordereau, in the file specifications' /Params /CheckSum, in an attached JSON manifest (AF Supplement), and in custom XMP. Optionally seal and timestamp the result to support 'copie fiable' and archive-ingestion claims.absentmediumSISO 32000-2:2020 7.11.4.2 (embedded file parameter dictionary, CheckSum), 14.13; ISO 14641:2018; NF Z42-026:2017; décret n° 2016-16731 2 3
Business workflowsManaged image decoders (CCITT G3/G4, JBIG2 with globals, JPEG, JPEG 2000)Hardened, bounded managed decoders for every PDF image filter. They let the core redact image areas, detect blank pages, downsample, extract images as pixels, and give the Rendering satellite formats Skia does not decode (JBIG2, CCITT, JPX).partialmediumXLISO 32000-2:2020 7.4.6-7.4.9; ITU-T T.4/T.6, T.88, T.81; ISO/IEC 15444-11
Business workflowsMixed raster content (MRC) compression of color scansSegment a color scan into a bilevel text mask (JBIG2 or G4) plus low-resolution JPEG background and foreground layers, recombined through ImageMask or SMask, for 5-20x smaller color scans at legible quality.absentlowXLITU-T T.44 (MRC); ISO 32000-2:2020 11.6.5 (soft masks), 8.9.6 (masked images)1 2
Business workflowsOCR integration: invisible text layer from hOCR/ALTO/TSV, plus an IOcrEngine hookWrite an invisible (render mode 3) text layer aligned to word boxes, using a glyphless font with ToUnicode, from hOCR, ALTO XML, Tesseract TSV, or a cloud OCR JSON. Expose an engine hook so callers can plug in Tesseract, ONNX, Azure, or Google. The layer is optionally tagged, and the page image is never touched.absenthighMISO 32000-2:2020 9.3.6 (Text rendering mode 3), 9.10 (ToUnicode); hOCR 1.2; ALTO (Library of Congress)1 2 3
Business workflowsOffice (DOCX/XLSX/ODT) to PDF conversionConvert word-processing and spreadsheet documents to PDF: pieces and conclusions are often drafted in Word, and Télérecours still accepts DOC and DOCX.absentmediumXLISO/IEC 29500 (OOXML); ISO/IEC 26300 (ODF)1 2
Business workflowsOptional content (layers): print-only or screen-only stamps, layer removalCreate OCGs for watermarks and stamps that print but do not display, or the reverse, for example a 'COPIE' or 'CONFIDENTIEL' mark. Read OCG visibility so extraction and redaction treat hidden content correctly, and remove or flatten layers during sanitization.absentlowSISO 32000-2:2020 8.11 (Optional content), 8.11.4.4 (usage and usage application dictionaries)1
Business workflowsOutput profiles for French court platforms (e-Barreau/RPVA, Télérecours, PLEX, Portalis)Named profiles that validate and shape a case-file output. e-Barreau: PDF attachments of at most 10 MB. Télérecours: one file per piece, at most 32 MB, named '001_title', at most 80 characters, no accents or special characters. PLEX: up to 1 GB. The profile splits, compresses, renames, and reports what it could not meet.absentmediumMArrêté du 20 mai 2020 (CPVE cours d'appel); Arrêté du 24 octobre 2019 (PLINE/PLEX); CJA art. R. 412-21 2 3
Business workflowsPAdES baseline B-LT/B-LTA and LTV-enabling of existing signaturesWrite a DSS with certificates, OCSP responses, and CRLs (and VRI where needed) and archive timestamps, and add LTV material to third-party signatures already in a received document before archiving. Periodic re-timestamping is supported, as seen in the Legilux seal renewed in 2018 and 2020 in the corpus.partialmediumMISO 32000-2:2020 12.8.4.3 (Document security store); ETSI EN 319 142-1 (PAdES baseline B-LT, B-LTA)1 2 3
Business workflowsPage labels (logical numbering: i, ii, A-1, 'P12-3')Read, write, and remap the /PageLabels number tree: roman or alphabetic styles, prefixes, and start values. Labels are preserved and re-offset when merging, so viewers show 'Pièce 12 - 3' or 'Annexe A-2', and bordereaux and Bates references can quote labels.absentmediumSISO 32000-2:2020 12.4.2 (Page labels); 7.9.7 (number trees)1
Business workflowsPage size normalization (fit to A4/Letter, crop to content, normalize rotation)Scale or fit every page to a target size with margins, center it, and normalize /Rotate and inverted or offset MediaBoxes, so that stamps, Bates numbers, and headers land in the same place across heterogeneous exhibits. Includes crop-to-content and pdfcpu-style resize.partialmediumSISO 32000-2:2020 14.11.2 (page boundaries), 7.7.3.3 (page objects: Rotate, UserUnit)1
Business workflowsPayment and authenticity payloads: Swiss QR-bill, EPC SEPA QR, French 2D-DocPayload builders and layout helpers on top of barcodes-2d. Swiss QR-bill: payment part and receipt at A6 size (210×105 mm), Swiss cross, SPC payload. EPC069-12 v3.1 SEPA credit-transfer QR: BCD payload, ECC level M, version 13 at most. ANTS 2D-Doc: a C40 header and message signed with ECDSA, as used on French proof-of-address documents and some invoices.absentmediumSEPC069-12 v3.1; SIX Swiss Payment Standards (QR-bill implementation guidelines); ANTS 2D-Doc technical specification v3.3.x1 2 3
Business workflowsPDF portfolio (collection) creation, editing, and flatteningCreate /Collection portfolios with a schema (piece number, date, description columns), folders, sort order, and initial document. Add or remove members, and linearize a portfolio into one continuous volume with bookmarks (the reverse direction).partiallowMISO 32000-2:2020 12.3.5 (Collections), 7.11.6 (Collection items)1
Business workflowsPDF to DOCX/XLSX (reflow export)Reconstruct editable Word or Excel documents from PDF layout analysis: paragraphs, styles, and tables to cells.absentlowXLISO/IEC 295001
Business workflowsPDF/A-4 (4f), and the 'u' and 'a' levels of PDF/A-2/3Beyond the planned A-2b and A-3b: A-2u and A-3u (Unicode mapping guaranteed, natural with M6 ToUnicode), A-2a and A-3a (with M8 tagging), and PDF/A-4 / 4f on PDF 2.0 (embedded files allowed; the 'u' requirement folded in).partialmediumMISO 19005-4:2020 (incl. Annex A PDF/A-4f); ISO 19005-2/-3 conformance levels a/b/u1 2 3
Business workflowsPDF/UA-2 and Well-Tagged PDF (WTPDF 1.0) with PDF DeclarationsTarget PDF 2.0 tagging: the PDF 2.0 structure namespace, the new structure types (e.g. Title, FENote, Aside), MathML via associated files, and a PDF Declaration in XMP for PDF/UA-2 and WTPDF reuse/accessibility. Validation profiles to match.partialmediumMISO 14289-2:2024; WTPDF 1.0 (PDF Association, 2024); ISO 32000-2:2020 14.8; ISO/TS 32005:20231 2 3
Business workflowsPrint-production output: PDF/X-4 and PDF/VT (document parts)Output-intent CMYK, TrimBox and BleedBox, spot colors, PDF/X-4 conformance, and PDF/VT DPart metadata that marks record boundaries in a merged variable-data run, so print and mail providers can impose and route each invoice.absentlowLISO 15930-7:2010 (PDF/X-4); ISO 16612-2:2010 (PDF/VT-1); ISO 32000-2:2020 14.11 (prepress), 14.12 (document parts)1
Business workflowsRemote and deferred signing (CSC API v2, two-step/external CMS, EUDI Wallet)Prepare-hash then inject-signature (deferred) signing, so any external signer can be used. Includes a Cloud Signature Consortium API v2.x client (credentials/list, credentials/authorize, signatures/signHash) for qualified remote signatures and seals from TSPs, and a path for EUDI Wallet QES.partialmediumMCSC API v2.2 (Cloud Signature Consortium, 2025); ETSI TS 119 432; Regulation (EU) 2024/1183 (eIDAS 2)1 2 3
Business workflowsRFC 3161 timestamps: signature timestamps (B-T) and document timestamps (horodatage)An RFC 3161 TSA client (URL, authentication, nonce, policy OID) behind an interface, used for signature timestamps and for standalone /DocTimeStamp (ETSI.RFC3161) that proves a case file existed at a date without a personal signature. Supports eIDAS qualified TSAs.partialhighSISO 32000-2:2020 12.8.5 (Document timestamp dictionary); RFC 3161; ETSI EN 319 142-1 (B-T)1 2 3
Business workflowsSanitization / content disarm and reconstruction (inspect, then clean)An inspect step reports hidden or risky content: JavaScript (Names/JavaScript, OpenAction, /AA), Launch, SubmitForm, ImportData, GoToR and URI actions, embedded files, XFA, hidden OCG layers, invisible text (render mode 3, off-page, or white-on-white), Info/XMP/PieceInfo metadata, earlier incremental revisions, unreferenced objects, comments, and form data. A clean step removes the selected categories through a full rewrite, and can optionally flatten pages to images.absenthighMISO 32000-2:2020 12.6.4 (action types), 7.11.4 (embedded file streams), 14.3 (metadata), 7.5.6 (incremental updates), 8.11 (optional content), 9.3.6 (text rendering mode)1 2 3
Business workflowsScan clean-up: auto-rotate, deskew, despeckle, binarizeAuto-rotate pages by detected text orientation (from the OCR layer or glyph directions, via /Rotate only) and deskew scanned images by a detected angle, with optional despeckle and bilevel conversion before OCR or compression.absentlowL1 2
Business workflowsSearch-and-redact by pattern (regex, PII detectors, term lists)Find candidates with regexes and built-in detectors (IBAN, French NIR/social security number, SIREN/SIRET, e-mail, phone, dates of birth), term lists, and a pluggable detector hook (e.g. an external named-entity model). Produce a reviewable list of Redact annotations with page and quads, then apply them through redaction-true-removal.absenthighMISO 32000-2:2020 12.5.6.231 2 3
Business workflowsSignature validation of received documents, with a reportVerify byte-range coverage and integrity, the CMS signature, the certificate chain against caller trust anchors or the EU LOTL/trusted lists, revocation (embedded DSS or online), and timestamps. Analyze what changed after each signature (DocMDP compliance, shadow-attack patterns) and extract the signed revision. Emit a machine-readable report aligned with ETSI TS 119 102-2.absenthighLISO 32000-2:2020 12.8.1-12.8.4; ETSI EN 319 102-1 (validation procedures); ETSI TS 119 102-2 (validation report); ETSI TS 119 612 (trusted lists)1 2 3
Business workflowsSigning workflow: fields, visible appearance, multiple signers, certification (DocMDP/FieldMDP), sealsCreate empty signature fields (placeholders for external signers such as Yousign or DocuSign), a visible appearance (image, name, date, reason, location; PDF/UA-correct), sequential signers through incremental updates, certification signatures (DocMDP P=1/2/3), FieldMDP locks, and organization e-seals with the same machinery.partialhighMISO 32000-2:2020 12.8 (Digital signatures), 12.8.2.2 (DocMDP), 12.8.2.4 (FieldMDP), 12.7.5.5 (signature fields); ETSI EN 319 142-11 2 3
Business workflowsSplit by page count, file size, bookmarks, page labels, blank or barcode separatorsSplitters that produce several documents from one: every N pages, at most X MB (size-aware, accounting for shared resources), at each top-level or level-n bookmark (with bookmark titles as file names), by page-label range, at blank separator pages, or at barcode separator sheets. Every output keeps its inherited attributes, links, and bookmarks.partialhighMISO 32000-2:2020 12.3.3 (outlines), 12.4.2 (page labels)1 2 3
Business workflowsStructured export for AI/RAG (Markdown/JSON, chunking with page anchors)Serialize M10's analysis as Markdown or JSON: reading order, headings (from tags, or font heuristics otherwise), lists, tables as Markdown/HTML/CSV, and images with bounding boxes. Chunk by section or page with citation anchors (page, page label, Bates number, bounding box). The tagged structure is preferred where present (ADR 15).partialhighMISO 32000-2:2020 14.8 (tagged PDF); WTPDF 1.0 (reuse conformance)1 2 3
Business workflowsText search API with quads (literal, regex, normalized)Search for text with case, diacritic, and ligature folding and hyphenation across line breaks, returning page, quads, and the structure element. Works lazily page by page. It is the foundation for redaction, highlights, auto-linking of references, Bates lookup, and compare.partialhighSISO 32000-2:2020 12.5.6.10 (QuadPoints for text markup)1 2
Business workflowsTrue redaction (content removal under a region)Remove, not just cover, everything under a redaction region: glyphs are cut from text-showing operators (TJ arrays rewritten), vector paths are clipped away, and image pixels are overwritten in the decoded image, which is then re-encoded. Uses the mark-then-apply workflow with Redact annotations (/QuadPoints, /OverlayText, /IC) and writes a report of what was removed.absenthighLISO 32000-2:2020 12.5.6.23 (Redaction annotations); 9.4 (text objects); 8.9 (images)1 2 3
Business workflowsVector barcode and 2D code generation (QR, Data Matrix, Code 128/GS1-128, PDF417, EAN)Managed, deterministic encoders producing vector paths (form XObjects): QR with ECI/UTF-8, Data Matrix ECC200 including C40 encodation, Code 128/GS1-128, PDF417, and EAN/UPC. Exposed in HTML (e.g. a custom element or 'barcode:' image source) and in the core content API.absenthighMISO/IEC 18004 (QR), ISO/IEC 16022 (Data Matrix), ISO/IEC 15417 (Code 128), ISO/IEC 15438 (PDF417), GS1 General Specifications1 2 3
Business workflowsXFDF/FDF import and export of annotations and fields; JSON/CSV form data and batch fillImport and export annotations and field values as XFDF (ISO 19444-1) and FDF, plus JSON/CSV field data with a multi-fill mode (one output per row, or merged). Supports review round-trips and server-side form pipelines.absentmediumMISO 19444-1:2016 (XFDF); ISO 32000-2:2020 12.7.8 (FDF)1 2 3
.NET librariesA code-first (fluent) layout API beside HTMLA strongly typed C# composition API (containers, rows and columns, tables, text, images, page headers and footers) that drives the same layout engine without writing HTML, as QuestPDF does.partialhighL1 2 3
.NET librariesAccessibility remediation of existing PDFs (auto-tagging, structure editing)Make existing untagged or badly tagged PDFs accessible: infer tags from layout analysis (headings, lists, tables, reading order), edit the structure tree (add or modify tags, alt text on images, artifacts, language), and convert to PDF/UA with a report.partialmediumXLISO 14289-1:2014; ISO 14289-2:2024; ISO 32000-2:2020 §14.7-14.8 (logical structure, tagged PDF)1 2 3
.NET librariesAutomatic hyphenationhyphens: auto driven by lang, with Liang pattern dictionaries per language, hyphenate-character and soft hyphens, so that justified text has even spacing.absentmediumMCSS Text 3 §6 (hyphenation); Unicode UAX #14 (line breaking)1
.NET librariesBarcode and 2D code generation (QR, Swiss QR-bill, EPC, DataMatrix, Code 128)Generate barcodes as vectors: QR (including the Swiss QR-bill and EPC/GiroCode payloads), DataMatrix, PDF417, Code 128/GS1-128, Code 39 and EAN/UPC. Usable from HTML (an image source or custom element) and as a stamp on existing pages, e.g. a tracking code on every page of a case file.absentmediumMISO/IEC 18004 (QR); ISO/IEC 16022 (DataMatrix); ISO/IEC 15417 (Code 128); ISO/IEC 15438 (PDF417); Swiss Payment Standards QR-bill IG; EPC069-121 2 3
.NET librariesBates numbering across a document setStamp a continuous counter across several documents with prefix and suffix, zero padding, date and position. The stamp is a tagged Pagination artifact, can be mirrored in page labels, and comes with an index mapping each source document to its Bates range, which feeds the case file's exhibit list.partialhighSISO 32000-2:2020 §14.8.2.2 (real content and artifacts, Pagination subtype)1 2 3
.NET librariesBlank page detectionDetect blank or near-blank pages: no painted content, or a scan below an ink threshold. Used to drop the blanks of duplex scans, or to split on separator sheets.absentmediumS1 2
.NET librariesCancellation, progress and per-operation budgets on long operationsCancellationToken support and progress reporting on long operations (rendering 1,000 pages, OCR, optimization, assembling 100 documents), plus optional time and memory budgets per operation for server hosting.absentmediumS1
.NET librariesCertificate-based (public-key) encryptionEncrypt with the public-key security handler so that only holders of the listed recipients' private keys can open the file, with permissions per recipient. Also decrypt such files with a certificate the caller supplies.partiallowMISO 32000-2:2020 §7.6.5 (Public-key security handlers)1 2
.NET librariesColor-space conversion (to grayscale, CMYK to RGB, ICC)Convert a document's colors: RGB or CMYK to grayscale, CMYK to RGB, or through ICC-based transforms against an output intent. Separation and DeviceN spot colors are kept or converted.absentlowMISO 32000-2:2020 §8.6 (color spaces), §14.11.5 (output intents); ICC.1:20221 2
.NET librariesConsolidating font subsets across merged documentsAfter a merge, combine different subsets of the same font program into one (the union of their glyphs), remove duplicate full fonts, and optionally unembed or replace standard fonts.partialmediumLISO 32000-2:2020 §9.6-9.9 (fonts and embedded font programs), §9.10.3 (ToUnicode CMaps)1 2
.NET librariesConverting existing third-party PDFs to PDF/A (remediation)Bring an arbitrary received PDF to PDF/A and report what could not be fixed. That means embedding or substituting missing fonts, adding an OutputIntent with an ICC profile, regenerating XMP from Info, removing forbidden constructs (JavaScript, encryption, external references), creating missing annotation appearances, flattening transparency for PDF/A-1, and fixing embedded files (PDF/A members for 2, AF relationships for 3).partialhighLISO 19005-2:2011 §6; ISO 19005-3:2012; ISO 19005-4:20201 2 3
.NET librariesCreating form fields, including from HTML form elementsCreate AcroForm fields programmatically (text, check box, radio, combo or list, push button, signature) with appearances. In the HTML engine, map input, select, textarea and button elements to interactive fields, tagged with /TU for PDF/UA.partialmediumMISO 32000-2:2020 §12.7 (Interactive forms), §12.7.4 (field types); ISO 14289-1:2014 (form fields and the Form structure element)1 2 3
.NET librariesCSS paged media beyond margin boxes: footnotes, leaders, cross-references, named pagesFootnotes (float: footnote, ::footnote-call and ::footnote-marker), leader() for dotted table-of-contents lines, target-counter() and target-text() cross-references, and string-set, string() and running elements (position: running(), element()) for dynamic headers. Also named pages (page:), :blank, orphans, widows, break-inside, and bookmark-level and bookmark-label.partialhighLW3C CSS Generated Content for Paged Media 3 (running elements, string-set, leaders, cross-references, footnotes); CSS Paged Media 3 (named pages); CSS Fragmentation 3 (orphans, widows, breaks)1 2 3
.NET librariesCSS visual effects: gradients, opacity, border-radius, shadows, transformslinear-gradient and radial-gradient mapped to PDF shading types 2 and 3, opacity and transparency groups, border-radius clipping, box-shadow, 2D transforms (rotated 'PAID' or 'COPY' stamps) and @media print.partialmediumMISO 32000-2:2020 §8.7.4.5 (shading types), §11 (transparency); CSS Images 3; CSS Transforms 1; CSS Backgrounds and Borders 31 2
.NET librariesDecoding the image filters now passed through (CCITT, JBIG2, JPX, DCT)Decoders for CCITTFaxDecode (G3 and G4), JBIG2Decode (with globals), JPXDecode (JPEG 2000) and DCTDecode (including CMYK, YCCK and the Adobe transform). They are needed to export images as PNG or TIFF, detect blank scans, feed OCR and rasterize.partialmediumLISO 32000-2:2020 §7.4.6-7.4.9; ITU-T T.4 and T.6; ISO/IEC 14492 (JBIG2); ISO/IEC 15444-1 (JPEG 2000)1 2
.NET librariesDirect image-to-PDF conversion, including multi-page TIFFAn API that turns images into PDF pages: JPEG passed through, PNG, multi-page TIFF (CCITT G3/G4 strips wrapped as CCITTFaxDecode without decoding, LZW or Deflate re-wrapped) and JPEG 2000 passed through. Pages can fit the page or keep true DPI size, optionally as PDF/A.partialhighMISO 32000-2:2020 §8.9 (images), §7.4.6 (CCITTFaxDecode), §7.4.9 (JPXDecode); TIFF 6.01 2 3
.NET librariesDocument comparison (text or semantic diff, and visual diff)Compare two PDFs: a text diff in reading order (inserted, deleted, modified, with positions) and a visual diff (pixel or vector overlay). Output an annotated PDF with highlights and strike-throughs, a side-by-side document, or a structured result.absenthighL1 2 3
.NET librariesE-mail (EML, MSG) to PDF with attachmentsConvert EML/MIME and Outlook MSG messages to PDF: a header block, the HTML or plain-text body rendered by the HTML engine, inline images, and attachments embedded as files or appended as converted pages, optionally as PDF/A-3.absentmediumLRFC 5322; RFC 2045-2049 (MIME); [MS-OXMSG]; [MS-CFB]1 2 3
.NET librariesEditing existing content (replace text, replace or delete images)Rewrite the content of existing pages: find and replace text runs (within the glyphs of the embedded subset, or by re-embedding), delete or replace images, remove vector objects and recolor, through an API that reads, filters and rewrites content-stream elements.absentmediumLISO 32000-2:2020 §8.2 (graphics objects), §9.4 (text objects)1 2 3
.NET librariesFDF and XFDF import and export (form data and annotations)Import and export form field values and annotations as FDF and XFDF (optionally JSON). Data can then be merged into a template PDF, and comments exchanged with Acrobat-based reviewers.partiallowMISO 32000-2:2020 §12.7 (Interactive forms; Forms Data Format subclause); ISO 19444-1:2019 (XFDF)1 2
.NET librariesFlattening any annotation type, selectivelyBurn the appearance of any annotation type (highlights, stamps, notes, ink), not just form widgets, into page content, selectable by subtype, for example keeping links. Used to finalize a document before sharing, printing or PDF/A conversion.partialmediumSISO 32000-2:2020 §12.5.5 (appearance streams), §8.10 (form XObjects)1 2
.NET librariesGeneral attachment API and PDF 2.0 Associated FilesAdd, remove and list document-level /EmbeddedFiles and file-attachment annotations with MIME type, dates, checksum and description. Support PDF 2.0 Associated Files (/AF with AFRelationship Source, Data, Alternative or Supplement) at document, page or structure-element level, not only for Factur-X XML.partialmediumSISO 32000-2:2020 §7.11.4 (embedded file streams), §14.13 (Associated files), §12.5.6.15 (file attachment annotations)1 2 3
.NET librariesImage optimization: downsampling, bilevel recoding, MRCDownsample images to a target DPI, re-encode JPEG at a chosen quality, and recode bilevel scans as CCITT G4 or lossless JBIG2. Convert color to gray, and apply MRC hyper-compression (a text mask plus background and foreground layers).partialhighLISO 32000-2:2020 §7.4.6 (CCITTFaxDecode), §7.4.7 (JBIG2Decode), §7.4.8 (DCTDecode); ISO/IEC 14492 (JBIG2); ITU-T T.61 2 3
.NET librariesMarkup annotation authoring with generated appearancesCreate and edit markup annotations with appearance streams: Highlight, Underline, StrikeOut and Squiggly (quad points taken from text search), Text notes with replies, FreeText with rich text, Square, Circle, Polygon and PolyLine (including cloudy borders), Ink, Stamp (standard names such as Approved and Confidential), Caret and FileAttachment.partialmediumMISO 32000-2:2020 §12.5 (Annotations), §12.5.5 (appearance streams), §12.5.6.10 (text markup annotations)1 2 3
.NET librariesMetadata authoring: XMP with custom schemas and Info synchronizationRead and write document information and XMP, including custom schemas (case number, matter ID, retention class), keep Info and XMP synchronized, declare PDF/A extension schemas automatically, and handle page- and object-level metadata.partialmediumSISO 16684-1:2019 (XMP); ISO 32000-2:2020 §14.3.2 (metadata streams); ISO 19005-2:2011 §6.6.2.3 (extension schemas)1 2 3
.NET librariesMore image formats in the HTML engineSVG through img and CSS backgrounds (not only inline), GIF, WebP, BMP, TIFF, JPEG 2000 passed through, CMYK JPEG, data: URIs and EXIF orientation.partialmediumSSVG 1.1 / SVG 21 2
.NET librariesOCR to a searchable, invisible text layerRecognize text on image-only pages and write it as an invisible, correctly positioned text layer (render mode 3), producing a searchable PDF or PDF/A-2u/3u. Includes image preprocessing (deskew, denoise, binarize, detect orientation) and a pluggable engine (Tesseract, ONNX models, cloud).absenthighXLISO 32000-2:2020 §9.3.6 (text rendering mode 3, invisible); ISO 19005-2 conformance level u1 2 3
.NET librariesOffice documents (DOCX, XLSX, PPTX, RTF) to PDFConvert Word, Excel, PowerPoint and RTF files to PDF without Microsoft Office.absenthighXLISO/IEC 29500 (OOXML)1 2 3
.NET librariesOptional content (layers): create, toggle, flatten, mergeCreate optional content groups, for example a watermark shown on screen but not printed, or a print-only 'COPY'. Read and set default visibility, flatten or delete a layer, and merge /OCProperties when assembling. Extraction and redaction must respect hidden content.absentmediumMISO 32000-2:2020 §8.11 (Optional content)1 2 3
.NET librariesPAdES baseline levels B-T, B-LT and B-LTA (timestamps, DSS, LTV)Produce PAdES B-B, B-T (RFC 3161 signature timestamp), B-LT (Document Security Store with certificates, OCSP, CRL and VRI) and B-LTA (document timestamps, with later renewal) signatures. Also produce standalone document timestamps.partialhighLISO 32000-2:2020 §12.8.4.3 (Document Security Store), §12.8.5 (document timestamp dictionary); ETSI EN 319 142-1 (PAdES baseline); RFC 31611 2 3
.NET librariesPage labels (logical page numbering)Create, read and edit the /PageLabels number tree: roman numerals for front matter, 'Pièce 3-1', 'A-1' and so on. Remap label ranges when pages are merged, extracted or reordered, so each appended exhibit keeps or receives its own labels.absenthighSISO 32000-2:2020 §12.4.2 (Page labels), §7.9.7 (number trees)1 2 3
.NET librariesPage resizing, normalization and cropping during assemblyScale pages to a target size (for example uniform A4) keeping the aspect ratio, fit and center, add binding or stamping margins, and edit CropBox, TrimBox and BleedBox. Annotations, links, form fields, patterns and shadings are transformed consistently.partialhighMISO 32000-2:2020 §14.11.2 (page boundaries), §7.7.3.3 (page objects, inheritance), §8.10 (form XObjects), §12.5.2 (annotation Rect)1 2 3
.NET librariesPDF 2.0 output and its profiles: PDF/A-4 (4f, 4e), PDF/UA-2, WTPDFWrite PDF 2.0 files: a 2.0 header, namespaces and PDF 2.0 structure types in the structure tree, structure destinations, and an Info dictionary reduced to dates. Target PDF/A-4 (4f with embedded files), PDF/UA-2 and Well-Tagged PDF (WTPDF 1.0).partialmediumMISO 32000-2:2020 (dated revision, errata collections 2 and 3); ISO 19005-4:2020; ISO 14289-2:2024; WTPDF 1.0 (PDF Association, 2024)1 2 3
.NET librariesPDF 2.0 security extensions: AES-GCM, MAC integrity, SHA-3AES-GCM encryption (ISO/TS 32003), integrity protection of encrypted documents with a message authentication code (ISO 32004), SHA-3 digests (ISO/TS 32001) and EdDSA signatures (ISO/TS 32002).partiallowMISO/TS 32003:2023; ISO 32004:2024; ISO/TS 32001:2022; ISO/TS 32002:20221 2
.NET librariesPDF portfolios (collections)Create a portfolio: a cover PDF whose /Collection schema (exhibit number, date, author, sort order) indexes embedded member files. Read portfolios, extract members, and convert a received portfolio into one assembled PDF.partiallowMISO 32000-2:2020 §12.3.5 (Collections), §7.11.6 (Collection items); portable collection navigators are deprecated in PDF 2.01 2
.NET librariesPDF to DOCX, XLSX, PPTX, HTML or SVGReconstruct editable Office, HTML or SVG documents from PDF pages.absentlowXL1 2
.NET librariesPDF/A conformance levels a and u (2a, 3a, 2u, 3u)Offer the accessible level (a) and the Unicode level (u) of PDF/A-2 and PDF/A-3 as generation targets, not only level b. M8 already produces the structure tree that level a needs.partialmediumSISO 19005-2:2011 clause 2 (conformance levels a, b, u); ISO 19005-3:20121 2 3
.NET librariesPDF/X print conformance (X-1a, X-3, X-4)Create or convert documents to PDF/X for print production.absentlowMISO 15930-1, -3, -71 2
.NET librariesPer-glyph font fallback, missing-glyph reporting and color emojiWhen the chosen font lacks a glyph, fall back glyph by glyph through an ordered list of registered fonts (Cyrillic, CJK or Arabic names inside a Latin invoice), end with a guaranteed last-resort font, and report glyphs that are still missing. Render color glyphs (COLRv0/v1, CBDT, sbix, SVG) as Type 3 fonts or vectors.partialmediumMOpenType 1.9 (COLR, CPAL, CBDT, sbix, SVG tables); CSS Fonts 4 (font matching)1 2
.NET librariesRevision history API and detection of changes after signingTreat incremental-update revisions as first-class: list them, open or extract revision N as a standalone document, and diff two revisions (objects, pages, annotations, form values). Flag content that no signature covers.absentmediumMISO 32000-2:2020 §7.5.6 (incremental updates), §12.8.2.2 (DocMDP modification rules)1 2
.NET librariesSanitization: inspect, then remove hidden informationAn inspect-then-sanitize pass removes metadata (Info and XMP), JavaScript and Launch actions, embedded files, invisible text (Tr 3, zero alpha, clipped, off-page, white on white), hidden optional-content layers, comments, form data, earlier incremental revisions, PieceInfo private data and thumbnails. The inspection step returns a report before anything is removed.absenthighMISO 32000-2:2020 §14.3 (metadata), §12.6.4 (actions, including JavaScript and Launch), §7.11.4 (embedded files), §8.11 (optional content), §14.5 (page-piece dictionaries), §7.5.6 (incremental updates)1 2 3
.NET librariesSignature fields, visible appearances, certification and deferred signingCreate signature fields, including empty fields for others to sign, with visible appearances (image, name, date, reason). Support certification signatures (DocMDP P=1/2/3), FieldMDP locks, several signers in sequence, and two-phase (deferred) signing, where the hash goes out and the CMS comes back from a remote service or cloud HSM.partialhighMISO 32000-2:2020 §12.7.5.5 (signature fields), §12.8.1 (ByteRange), §12.8.2.2 (DocMDP), §12.8.2.4 (FieldMDP)1 2 3
.NET librariesSplit strategies: by bookmark, size, page count or separatorSplit by top-level bookmarks (one file per exhibit), by maximum file size (e-filing limits), by page count or ranges, or by separator and blank pages. Each part keeps its outline subtree and attachments, and its cross-part links are rewritten or turned into remote GoToR links.partialhighSISO 32000-2:2020 §12.3.3 (document outline), §12.6.4.3 (remote go-to actions)1 2
.NET librariesStructured export of extraction results (Markdown, JSON, hOCR, ALTO) and RAG chunkingSerialize what M10 extracts: Markdown (headings, lists, tables), JSON with bounding boxes and confidence, HTML, and hOCR, ALTO or PageXML. Optionally split the output into chunks for retrieval-augmented generation.partialmediumMALTO v4 (Library of Congress); hOCR 1.2; PAGE XML1 2 3
.NET librariesTemplate (zone) extraction and key-value detectionDefine fields by zone or anchor on one sample invoice, then extract them from every document with that layout. Also detect key-value pairs and form-like regions in flat PDFs.partialmediumL1 2 3
.NET librariesText search with positions (literal and regex)Search the text of pages (literal, case- or accent-insensitive, or regex) and return page numbers and quads, matching across line breaks and hyphenation. It is the building block for highlighting, redaction, auto-linking of cross-references and the Bates index.partialhighSISO 32000-2:2020 §9.10 (extraction of text content)1 2 3
.NET librariesTrue redaction (search or region, with irreversible content removal)Irreversible redaction removes the text glyphs, vector paths and image pixels under given regions or search matches (regex, plus presets for IBAN, SSN, e-mail and phone numbers) and paints an overlay that can carry a label. The same content is also scrubbed from annotations, form values, bookmarks and metadata. It supports a two-phase workflow: mark with /Redact annotations, review, then apply.absenthighLISO 32000-2:2020 §12.5.6.23 (Redaction annotations)1 2 3
.NET librariesValidation of existing digital signaturesCheck each signature on a received PDF: ByteRange coverage and digest, the CMS signature, the chain to trust anchors, revocation (embedded DSS, or OCSP and CRL online), timestamps, DocMDP and FieldMDP permissions across later revisions, and shadow or incremental-save attacks. Supports EU LOTL and national trusted lists, reports qualified (QES) status, and produces an ETSI-style validation report.absenthighLISO 32000-2:2020 §12.8 (digital signatures), §12.8.2.2 (DocMDP), §12.8.2.4 (FieldMDP); ETSI EN 319 102-1; ETSI TS 119 612 (trusted lists)1 2 3
.NET librariesViewer preferences, page mode and open actionCatalog-level presentation settings: /PageMode (UseOutlines, so the bookmark pane opens; UseAttachments), /PageLayout, /ViewerPreferences (DisplayDocTitle, PrintScaling None, Duplex, PickTrayByPDFSize, NumCopies) and /OpenAction (open at a page and zoom). Set explicitly on generation and chosen deliberately on merge.partialmediumSISO 32000-2:2020 §12.2 (Viewer preferences), §7.7.2 (Document catalog: PageMode, PageLayout, OpenAction); ISO 14289-1:2014 §7.1 (DisplayDocTitle)1 2
.NET librariesXFA handling: detect, fill, remove, flattenDetect XFA (static or dynamic), fill XFA datasets, and remove the XFA stream so hybrid forms fall back to their AcroForm. The heavy option is flattening dynamic XFA into a static PDF.absentlowMISO 32000-1:2008 §12.7.8 (XFA forms); XFA 3.3 (Adobe); deprecated in ISO 32000-2:20201 2 3
HTML to PDF enginesAttachments and annotations declared in HTML (<link rel=attachment>, <a rel=attachment>, note annotations)<link rel=attachment href> adds a document-level embedded file (the EmbeddedFiles name tree) and <a rel=attachment> a FileAttachment annotation, with MIME type, description and, under PDF/A-3, AFRelationship (Source, Data, Supplement) and /AF arrays. Optionally, reviewer notes from HTML elements become Text annotations (Prince -prince-pdf-annotation-*).partialmediumSISO 32000-2 §7.11.4 embedded file streams, §7.9.6 name trees, §12.5.6.15 file attachment annotations, §14.13 associated files1 2 3
HTML to PDF enginesAutomatic hyphenation (hyphens: auto) with language patternsLiang/TeX pattern hyphenation chosen by the lang attribute, with hyphenate-character, hyphenate-limit-chars, hyphenate-limit-lines and hyphenate-limit-zone, plus soft hyphens (­). Patterns from hyph-utf8 (tex-hyphen) ship as embedded resources for each language.absentmediumMCSS Text 3 §6 hyphens; CSS Text 4 hyphenate-character, hyphenate-limit-* properties1 2 3
HTML to PDF enginesBack-of-book index generationCollect index terms marked in the HTML, sort them with culture-aware collation, and produce entries whose page lists are target-counter based and merged into ranges ('12, 15-17'), with 'see also' entries. XSL-FO has this natively (index-page-citation-list); CSS engines do it through target-counter plus a pre-pass.absentlowMXSL 1.1 §7.24 (index properties), §6.10 (index formatting objects)1 2
HTML to PDF enginesBatch generation: parsed-stylesheet and template caching, one document per record or one PDF for the whole runAn engine API that parses and cascades a template's stylesheets once and reuses the font cache and decoded images across thousands of records (a monthly invoice run). The output is either one PDF per record or one PDF per run with page groups (per-record numbering, a bookmark per record).partialhighM1 2
HTML to PDF enginesBidirectional text and RTL layout (UAX #9, direction, unicode-bidi, <bdi>, :dir(), logical properties)Run the Unicode Bidirectional Algorithm before shaping (HarfBuzz shapes runs but does not reorder them), support direction: rtl, unicode-bidi: isolate|plaintext|isolate-override, <bdi>, :dir(), mirrored tables, flex and margins, and logical properties. The PDF must also keep logical order for extraction (marked content, ActualText).partialmediumLUAX #9; CSS Writing Modes 3 §2 (direction, unicode-bidi); CSS Logical Properties 1; ISO 32000-2 §14.9.4 replacement text (ActualText)1 2 3
HTML to PDF enginesbookmark-level, bookmark-label and bookmark-state CSS propertiesDrive the outline from CSS rather than from h1-h6 alone: any element can become a bookmark at a given level, with label content(text), counter() or attr(), open or closed state, and optionally the color and style of the outline item (/C, /F).partialmediumSCSS Generated Content 3 (bookmark-level, bookmark-label, bookmark-state; moved from GCPM §6); ISO 32000-2 §12.3.3 document outline1 2 3
HTML to PDF enginesborder-radius clipping, box-shadow, text-shadow, border-image, outlineElliptical per-corner border-radius with backgrounds and images clipped to it; box-shadow (outer and inset) and text-shadow, where the blur has no PDF primitive and must be rasterized through Skia into an image with a soft mask, or approximated; border-image; outline; dashed, dotted and double styles.partialmediumMCSS Backgrounds and Borders 3 §5 border-radius, §6 border-image, §7 box-shadow; CSS Text Decoration 3 text-shadow1 2 3
HTML to PDF enginesChange bars and line numberingVertical bars in the margin beside modified passages (for example marked by <ins>/<del> or a class), for contract revisions and redlines, and line numbers in the margin for legal documents (pleadings, deeds, statutes). Proprietary in every engine, since CSS has no standard.absentlowMXSL 1.1 §6.13.2/6.13.3 fo:change-bar-begin/end (no CSS equivalent)1 2
HTML to PDF enginesCharts through JavaScript or <canvas> (Chart.js, D3, Prince canvas 2D)Prince (a 2D canvas context and ES6 JavaScript) and PDFreactor (an ECMAScript 2025 engine) render charts by running JS chart libraries inside the converter. Without JS, charts must arrive as SVG or images.excludedlowXL1 2 3
HTML to PDF enginesclip-path, mask and filter effectsclip-path (basic shapes and url(#svgClip)) as PDF clipping paths; mask and mask-image as soft masks; filter functions (grayscale, brightness, blur, drop-shadow), mostly by rasterizing the subtree, since PDF has no filter primitives.absentlowLCSS Masking 1; Filter Effects 1; ISO 32000-2 §8.5.4 clipping paths, §11.6.5 soft masks1 2 3
HTML to PDF enginesColor fonts and emoji (COLRv0/v1, CBDT/CBLC, sbix, SVG-in-OpenType)Render color glyphs as PDF Type 3 fonts: COLRv0 layers as filled paths, COLRv1 gradients as shadings, CBDT and sbix bitmaps as images. Keep ToUnicode so the text still extracts. Honor font-palette, @font-palette-values and font-variant-emoji.absentlowLCSS Fonts 4 §9 color fonts (font-palette), §9.3 font-variant-emoji; ISO 32000-2 §9.6.5 Type 3 fonts; OpenType COLR, CPAL, CBDT, sbix, SVG tables1 2 3
HTML to PDF enginesCounters, lists and generated content: counters(), @counter-style, ::marker, quotes, attr(), ::first-letterFull CSS counters (counter-reset, counter-increment, counter-set, nested counters() for '1.2.3'), all predefined list-style-types (lower/upper-roman, lower/upper-alpha, decimal-leading-zero, lower-greek), @counter-style (symbols, additive, suffix, extends), ::marker styling, ::before/::after with attr() and language-aware quotes (French guillemets), ::first-letter, ::first-line and initial-letter, and alternative text on generated content.partialhighMCSS Lists 3 (counters, ::marker); CSS Counter Styles 3 (CR); CSS Generated Content 3 (quotes, alt text); CSS Inline 3 initial-letter1 2 3
HTML to PDF enginesCSS 2.1 floats, clear, and absolute, relative and fixed positioning (plus shape-outside)float: left/right with text wrapping and clear; position: relative/absolute (for example an address block placed at exact millimeter coordinates for a window envelope); position: fixed, which Chromium repeats on every printed page; z-index stacking. shape-outside (CSS Shapes) is a low-priority extra.partialhighMCSS 2.2 §9.5 floats, §9.6 absolute positioning, §9.9 z-index; CSS Positioned Layout 3; CSS Shapes 11 2 3
HTML to PDF enginesCSS 2D transforms (transform, transform-origin)rotate, scale, translate, skew and matrix applied at paint time through the cm operator, with link annotation areas and structure bounding boxes transformed (QuadPoints). 3D transforms stay out of scope.absentmediumMCSS Transforms 1; ISO 32000-2 §8.3.4 transformation matrices, §12.5.6.5 link annotations (QuadPoints)1 2 3
HTML to PDF enginesCSS and SVG gradients as native PDF shadingslinear-gradient, radial-gradient, conic-gradient and their repeating forms on backgrounds and border-images, plus SVG linearGradient and radialGradient. Mapped to axial and radial shadings (types 2 and 3) with stitching functions for multiple stops, soft masks for stops with alpha, and a mesh or approximation for conic gradients.partialmediumMCSS Images 3 §3 gradients; CSS Images 4 conic-gradient; ISO 32000-2 §8.7.4.5.3 axial, §8.7.4.5.4 radial shadings, §7.10.4 stitching functions, §11.6.5 soft masks1 2 3
HTML to PDF enginesCSS Color 4/5: lab(), lch(), oklab(), oklch(), color(), color-mix(), relative colors, light-dark()Parse and compute the Color 4/5 functions and convert to the output space: sRGB with gamut mapping for DeviceRGB or ICCBased, or exact values in PDF's own Lab color space for lab(). Includes hex with alpha and hwb().absenthighSCSS Color 4 (lab/lch/oklab/oklch, color(), gamut mapping); CSS Color 5 (WD 2026-09-13) §3 color-mix(), §4 relative colors, §7 light-dark(); ISO 32000-2 §8.6.5.4 Lab color spaces1 2 3
HTML to PDF enginesCSS control of OpenType features: font-variant-numeric (tabular-nums), font-feature-settings, font-variant-*Map font-variant-numeric (tabular-nums, lining-nums, oldstyle-nums, slashed-zero, ordinal), font-variant-caps (small-caps: smcp/c2sc), font-variant-position (sups/subs), font-variant-ligatures, font-kerning and font-feature-settings to HarfBuzz features. Also honor the lang attribute for locl.partialhighSCSS Fonts 4 §6 (6.4 ligatures, 6.5 position, 6.6 caps, 6.7 numeric, 6.12 font-feature-settings)1 2
HTML to PDF enginesCSS-level control of PDF tagging (tag type overrides, role map, artifacts, alt on generated content)Properties that let authors fix the structure without changing the HTML: a tag-type override (Prince -prince-pdf-tag-type), a custom role map (prince-pdf-role-map), marking decoration as an artifact, and alternative text for CSS-generated content. Page-margin content is emitted as Pagination artifacts (Header, Footer).partialmediumSISO 32000-2 §14.8.2.2 artifacts, §14.7.3 role maps, §14.8.4 standard structure types; ISO 14289-1/-21 2 3
HTML to PDF enginesdevice-cmyk(), @color-profile and CMYK output (DeviceCMYK, CMYK images, output intent choice)Write device-cmyk() colors with k/K operators, keep CMYK JPEGs in CMYK (handling Adobe APP14 inverted CMYK with /Decode), allow @color-profile and a page color space (Prince -prince-pdf-page-colorspace), and let the caller choose the output intent profile.absentlowMCSS Color 5 §5.3 @color-profile, §5.4 calibrated CMYK in print, §6 device-cmyk(); ISO 32000-2 §8.6.4.4 DeviceCMYK, §14.11.5 output intents1 2 3
HTML to PDF enginesDocument metadata from HTML (<title>, <meta>, <html lang>) into the Info dictionary and XMPMap <title> to Title (with DisplayDocTitle), <meta name=author|description|keywords|generator>, dcterms.created and dcterms.modified to the Info dictionary and a synchronized XMP packet (dc:, xmp:, pdf:), and <html lang> to the catalog /Lang. Custom meta names map to custom XMP or Info keys (WeasyPrint custom_metadata). Dates only as supplied.partialmediumSISO 32000-2 §14.3.2 metadata streams, §14.3.3 document information dictionary, §14.9.2 natural language (/Lang), §12.2 viewer preferences (DisplayDocTitle)1 2
HTML to PDF enginesEmpty signature fields placed by layout (<input type=signature> or a CSS property)Generate unsigned /FT /Sig fields whose widget rectangle comes from layout (a signature block in the contract HTML), plus optional initials and date fields per page, so that M14 signing, or an external e-signature service, signs exactly there without coordinates computed by hand.partialhighSISO 32000-2 §12.7.5.5 signature fields, §12.8 digital signatures1
HTML to PDF enginesExisting PDF pages as images and letterheads (<img src=x.pdf>, @page background)Import a page of an existing PDF as a vector Form XObject wherever an image may appear: <img src='logo.pdf'>, <img src='letterhead.pdf#page=2'>, <object data>, background-image, and @page { background: url(letterhead.pdf) } for full-page stationery. Resources are deep-copied and deduplicated with M5's machinery.partialmediumMISO 32000-2 §8.10 Form XObjects, §8.10.4 reference XObjects1 2
HTML to PDF enginesFont synthesis: fake bold, oblique, small-caps and super/subscriptWhen a family lacks a face, synthesize it: bold by fill-and-stroke (text render mode 2 with a line width proportional to size), oblique by a skewed text matrix, and small-caps and sub/superscript by scaled glyphs. font-synthesis controls which of these is allowed.absentmediumSCSS Fonts 4 §2.8 font-synthesis; ISO 32000-2 §9.3.6 text rendering mode, §9.4.2 Tm1
HTML to PDF enginesFootnotes (float: footnote, ::footnote-call, ::footnote-marker, @footnote area)GCPM footnotes: an element with float: footnote is moved to a footnote area at the bottom of the page where its call appears, numbered by the footnote counter (reset per page or per document), with footnote-display (block/inline/compact) and footnote-policy (auto/line/block). The newer CSS Notes draft adds ::note-call and ::note-marker, and extends the model to endnotes and margin notes.absenthighLCSS GCPM 3 (WD 2024-01-25) §2 (2.2 float: footnote, 2.6 ::footnote-call, 2.7 ::footnote-marker, 2.8 footnote-policy); CSS Notes draft (CSS Print Lab); ISO 32000-2 §14.8.4 standard structure types (FENote)1 2 3
HTML to PDF enginesFragmentation controls: break-before/after/inside, orphans, widows, box-decoration-break, margin-breakHonor break-before/after (page, left, right, recto, verso, avoid, avoid-page), break-inside: avoid (keep a signature block, a table row, a figure with its caption together), orphans and widows, box-decoration-break: slice|clone for borders and backgrounds split across pages, and margin-break (Level 4).partialhighMCSS Fragmentation 3 (CR 2018-12-04) §3.1-3.3, §4.4 unforced breaks, §5.4 box-decoration-break; CSS Fragmentation 4 margin-break1 2 3
HTML to PDF enginesFragmentation of flex and grid containers across pagesAllow flex lines, flex items and grid rows to break across pages under the fragmentation rules, instead of treating a flex or grid container as a monolith. Prince 16 lays grid out on a single page only; WeasyPrint 67 added page breaks between grid rows.partialmediumLCSS Flexbox 1 §12 (fragmenting flex layout); CSS Grid 2 §12 (fragmenting grid layout); CSS Fragmentation 31 2 3
HTML to PDF enginesFull CSS Grid (template areas, named lines, auto-placement, subgrid)Beyond 'simple grid': grid-template-areas, named lines, repeat(auto-fill/auto-fit, minmax()), dense auto-placement, alignment, and subgrid (Grid Level 2) for aligning nested rows such as label and value pairs in invoice headers.partialmediumLCSS Grid Layout 2 (CR; §9 subgrid, §12 fragmentation)1 2 3
HTML to PDF enginesFull page selectors and page groups (:blank, :nth(An+B of name), :first-of-group, per-group page counters)Selectors beyond :first/:left/:right: :blank for pages left empty by a forced left/right break, :nth(An+B [of <name>]), and page groups (Prince :first-of-group and :nth-of-group(), GCPM 'of' syntax). With these, page counters can restart per group, so each invoice in a batch PDF gets 'page 1 of 2' and its own first-page letterhead.partialhighMCSS Paged Media 3 (WD 2023-09-14) §4 page selectors; CSS GCPM 3 §3.1 :nth(), §3.2 page groups1 2 3
HTML to PDF enginesGeneral cross-references: target-counter(), target-counters(), target-text()Resolve 'see clause 7.2 on page 12' from a link: target-counter(attr(href url), page), target-counters(..., section, '.'), target-text(attr(href url), content(before)). The same mechanism builds TOCs, lists of figures and 'continued on page N'.partialhighMCSS Generated Content 3 (target-counter, target-counters, target-text; moved there from GCPM §5)1 2 3
HTML to PDF enginesHardened resource loading: scheme allow-list, SSRF protection, size, time and redirect limits, data: URIsOne resource resolver for images, stylesheets, fonts, SVG and attachments. Schemes are denied by default except data: and caller-supplied bases, redirects are limited and loops detected, cloud metadata and private addresses are blocked, response size and count are capped, and every refusal is recorded in the diagnostics. file: access is confined to a root directory.partialhighS1 2 3
HTML to PDF enginesImage optimization at generation: downsampling to a DPI cap, JPEG quality, lossless PNG re-encoding, per-URL deduplicationOptions to downsample oversized images to a maximum effective DPI at their laid-out size, set the JPEG quality for re-encoded images, re-encode PNG losslessly with the best predictor, and write each distinct image once (the header logo on 1,000 pages written as one XObject).partialmediumSISO 32000-2 §8.9.5 image dictionaries, §7.4.4 FlateDecode predictors1 2
HTML to PDF enginesInteractive PDF forms generated from HTML <input>, <select>, <textarea> and <button>Turn form controls into AcroForm fields: text, multiline, checkbox, radio group, combo and list box, push button. Field names come from name, values from value or checked. Generate appearance streams (NeedAppearances must not be relied on), styled from CSS (accent-color, check style, auto font size), set a tab order, and tag the fields for PDF/UA. Opt-in, as with WeasyPrint appearance: auto and pdf_forms, Prince --pdf-forms, or iText setCreateAcroForm.partialmediumLISO 32000-2 §12.7 forms (12.7.4 field types), §12.5.6.19 widget annotations, §14.8.4 Form structure element1 2 3
HTML to PDF enginesJustification quality: text-justify, text-align-last, text-wrap: balance/pretty, hanging-punctuationtext-justify (inter-word or inter-character), text-align-last, justify-all; text-wrap-style: balance for headings and pretty (paragraph-level optimal breaking, Knuth-Plass style, avoiding short last lines); hanging-punctuation for quotes and bullets.partialmediumMCSS Text 3 §7 alignment and justification; CSS Text 4 text-wrap-style, hanging-punctuation1 2 3
HTML to PDF enginesleader() function (dotted, solid and space leaders)content: leader(dotted) fills the rest of the line with a repeated pattern between a label and a right-aligned value, which is the classic look of a TOC line and of price lists.partialmediumSCSS Generated Content 3 leader() (moved from GCPM §4)1 2 3
HTML to PDF enginesMathML Core rendering (OpenType MATH) and MathML in tagged PDFLay out <math> with the OpenType MATH table (fractions, radicals, scripts, stretchy operators). For PDF 2.0 and PDF/UA-2, keep the MathML as structure (the MathML namespace, or an associated file on the Formula element).absentlowLMathML Core (W3C CR 2025-06-24); ISO 32000-2 §14.8.6 (namespaces), §14.13 associated files; ISO 14289-2 (PDF/UA-2) formula requirements1 2 3
HTML to PDF enginesMigration layer from Chromium/Puppeteer/Playwright: headerTemplate/footerTemplate, position: fixed repetition, print optionsAccept Puppeteer-style options (format, landscape, margin, printBackground, preferCSSPageSize, pageRanges, scale, displayHeaderFooter) and header/footer templates whose span classes pageNumber, totalPages, date, title and url are filled per page, mapped onto margin boxes and running elements. Repeat position: fixed elements on every page as Chromium does, since many templates use that trick for headers.absentmediumSCSS Paged Media 3 §5 page-margin boxes (the target of the mapping)1 2 3
HTML to PDF enginesModern CSS syntax: var(), calc()/min()/max()/clamp()/round(), @layer, nesting, :is()/:where()/:has(), @supports, @media print, logical properties, container queriesCustom properties with var() fallback, the math functions of CSS Values 4, cascade layers (@layer), @property, native CSS nesting, Selectors 4 (:is, :where, :has, :not() lists), @media print and @supports, modern units (rem, ch, lh, rlh, cap), logical properties, and (low priority) @container queries. Unsupported features degrade with a diagnostic.partialhighMCSS Custom Properties 1; CSS Values and Units 4; CSS Cascade 5 (@layer); CSS Nesting 1; Selectors 4; CSS Conditional 3/5; CSS Logical Properties 1; CSS Containment 31 2 3
HTML to PDF enginesMore raster formats: GIF, WebP, BMP, TIFF (CCITT G4 passthrough, multi-page), AVIF/HEIC, JPEG 2000, JPEG XLDecode GIF (first frame), WebP and BMP through SkiaSharp. TIFF needs its own decoder, since Skia has none: bilevel CCITT G4 strips can go straight to CCITTFaxDecode, JPEG-in-TIFF to DCTDecode, and a multi-page TIFF becomes several pages. AVIF, HEIC and JPEG XL only if the Skia build includes them. JPEG 2000 can be passed through as JPXDecode.partialmediumMISO 32000-2 §7.4.6 CCITTFaxDecode, §7.4.8 DCTDecode, §7.4.9 JPXDecode, §8.9 images1 2 3
HTML to PDF enginesMulti-column layout (columns, column-span, column-fill, column-rule) with paginationcolumn-count, column-width, column-gap and column-rule; column-span: all; column-fill: balance; column breaks (break-before: column); and multicol continuing across pages.absenthighLCSS Multi-column Layout 1 (CR)1 2 3
HTML to PDF enginesNamed destinations for every HTML id (external deep links file.pdf#section)Emit a /Dests name tree entry for each element id (or each id that is a link target) so that links from other documents, e-mails or a case-file index ('report.pdf#annex-3') land on the right place, and so M5 merging can keep and rename them.partialmediumSISO 32000-2 §12.3.2.3 named destinations, §7.9.6 name trees1 2
HTML to PDF enginesNamed pages, mixed page sizes and page-orientationThe page property (page: annex-landscape) selects a named @page with its own size, margins and margin boxes. page-orientation: rotate-left|rotate-right rotates the page after layout, written as /Rotate, so a wide table can sit on a landscape page inside a portrait report.partialhighMCSS Paged Media 3 §6 page properties, §7 size, page-orientation, 'page' property; ISO 32000-2 §7.7.3.3 /Rotate1 2 3
HTML to PDF enginesNamed strings: string-set and string()string-set: chapter content(text) captures text from the flow, and string(chapter, first|start|last|first-except) displays it in margin boxes, e.g. the current article title in a contract header or 'Invoice F-2026-0042 (continued)' on later pages.partialmediumSCSS GCPM 3 §1.1 (1.1.1 string-set, 1.1.1.1 content(), 1.1.2 string())1 2
HTML to PDF enginesobject-fit/object-position, EXIF orientation, image-resolution, image-renderingobject-fit and object-position for logos and photos in fixed boxes. image-orientation: from-image: a passed-through JPEG is never decoded, so the EXIF rotation must be applied in the placement matrix. image-resolution and dpi-aware sizing (Prince -prince-image-resolution). image-rendering: pixelated, written as /Interpolate false, for bitmap QR codes.partialmediumSCSS Images 3 §5.5 object-fit, §5.6 object-position, image-orientation; CSS Images 4 image-resolution; ISO 32000-2 §8.9.5.3 /Interpolate1 2 3
HTML to PDF enginesopacity, alpha colors, mix-blend-mode, background-blend-mode, isolationMap opacity and rgba/hsla alpha to ExtGState /CA and /ca inside transparency groups, mix-blend-mode and background-blend-mode to /BM (all separable and non-separable CSS modes exist in PDF), and isolation to isolated groups.partialmediumMCompositing and Blending 1; ISO 32000-2 §11.3.5 blend mode, §11.6.4 shape and opacity, §11.6.6 transparency group XObjects, §8.4.5 ExtGState1 2
HTML to PDF enginesPage floats and sidenotesFloat figures to the top or bottom of the page or column (float: top/bottom, float-reference: page, float-defer), and put margin notes in side areas (Prince @leftnote/@rightnote/@outsidenote, PDFreactor 12 side notes, the CSS Notes draft's @note-area).absentlowLCSS Page Floats 3 (FPWD 2015-09-15); CSS GCPM 4 (ED); CSS Notes draft1 2 3
HTML to PDF enginesPDF page labels (/PageLabels) driven by CSS page numbering and by assemblyWrite the catalog's /PageLabels number tree so that viewers show the logical page numbers ('i, ii, iii', '1-25', 'A-1', 'Exhibit 3 - p. 2') rather than physical indexes. On the HTML side the labels come from the page counter style of each group or named page (Prince exposes -prince-pdf-page-label); on the assembly side, from the case-file structure.absenthighSISO 32000-2 §12.4.2 Page labels; §7.9.7 number trees1 2
HTML to PDF enginesPer-character font fallback chains and missing-glyph diagnosticsWhen the chosen face lacks a code point, fall back through the CSS family list, then the registry's script-coverage fallbacks (the embedded OFL set, such as Noto). If nothing covers it, draw a visible .notdef ('tofu') and record a diagnostic listing the unrenderable code points and where they occur.partialhighMCSS Fonts 4 §5 font matching algorithm (per-character fallback)1 2
HTML to PDF enginesPer-page carry-forward subtotals ('à reporter' / 'report', 'Übertrag')Running totals computed after pagination: the sum of a column's amounts up to the bottom of each page, shown in a repeated table footer ('carried forward') and in the next page's header ('brought forward'). XSL-FO has fo:retrieve-table-marker. CSS has nothing, so this needs a vendor extension (for example a page-scoped accumulator counter over a data attribute) or a documented running-element pattern.absentmediumMXSL 1.1 §6.13.7 fo:retrieve-table-marker (no CSS equivalent)1 2
HTML to PDF enginesPrint production: PDF/X-4/X-6 output, spot colors, overprint, crop marks, bleed and page boxesCSS marks: crop cross and bleed, written with TrimBox/BleedBox/ArtBox per page. Spot colors through Separation/DeviceN (Prince prince-color(), PANTONE options) and overprint control (-prince-overprint maps to ExtGState /OP /op /OPM). A PDF/X-4 or PDF/X-6 output profile with a validator profile.absentlowLCSS Paged Media 3 marks, bleed; ISO 32000-2 §14.11.2 page boundaries, §14.11.3 printer's marks, §8.6.6.4 Separation, §8.6.6.5 DeviceN, §8.6.7 overprint control; ISO 15930-7 (PDF/X-4), ISO 15930-9 (PDF/X-6)1 2 3
HTML to PDF enginesRunning elements: position: running() with content: element()Take an element out of the flow (position: running(header)) and repeat it, with full HTML/CSS layout, in page-margin boxes via content: element(header, first|start|last|first-except). This is how rich headers (logo, address block, small table) are built, as opposed to plain text and counters.partialhighMCSS GCPM 3 §1.2 (1.2.1 running(), 1.2.2 element())1 2 3
HTML to PDF enginesShrink-to-fit: scale overflowing content, auto-size text in fixed boxesScale a table or block that is wider than the page area down to fit (PDFreactor -ro-scale-content, Prince resize-options, Puppeteer scale), and shrink text to fit a fixed box (an address window, a form field, a label cell) instead of overflowing. Every scaling is reported.absentmediumMNo CSS standard (vendor extensions); CSS 'zoom' is now specified in CSS Viewport 11 2 3
HTML to PDF enginesSVG completeness for charts: <img src=.svg>, CSS background SVG, SVG text with real fonts, markers, patterns, clipPath, use/symbolBeyond inline <svg>: SVG as <img> and as background-image, <text>/<tspan> written as real extractable text in registry fonts, gradients, patterns, clipPath and mask, markers (arrowheads, data points), <use>/<symbol>, stroke-dasharray, viewBox and preserveAspectRatio, and CSS inside SVG. SVG filters are rasterized or dropped with a diagnostic.partialhighLSVG 2 (W3C CR); ISO 32000-2 §8.10 Form XObjects1 2 3
HTML to PDF enginesTable pagination details: repeated <tfoot>, caption on continuation pages, row splitting, rowspan across breaksRepeat table-footer-group at every page break, not only the header. Control whether the caption repeats (Prince caption-page) and whether the last footer is skipped. Split tall rows across pages or keep them whole (break-inside on tr). Keep rowspan cells coherent across a break, border-collapse included.partialhighMCSS 2.2 §17.2 (header and footer groups repeat on each page); CSS Tables 3 (WD); CSS Fragmentation 3 §3.21 2 3
HTML to PDF enginesText decoration details, text-overflow and line-clamp, language-aware text-transform, French spacingtext-decoration-thickness, text-underline-offset (from-font), text-decoration-skip-ink, letter- and word-spacing, tab-size, white-space variants, text-overflow: ellipsis and line-clamp for truncated table cells, and language-specific text-transform (Turkish dotted i, Greek final sigma). Optionally, French typographic spacing: a narrow no-break space before ; : ! ? and inside guillemets (a Prince -prince-text-replace style substitution).partialmediumSCSS Text Decoration 3/4; CSS Overflow 3 text-overflow, CSS Overflow 4 line-clamp; CSS Text 3 §2.1 text-transform (language-sensitive)1 2 3
HTML to PDF enginesUAX #14 line breaking, overflow-wrap, word-break and line-breakImplement the Unicode line breaking algorithm (UAX #14, with UAX #29 grapheme clusters) plus overflow-wrap: anywhere|break-word, word-break: break-all|keep-all and line-break strictness. Long IBANs, URLs, e-mail addresses and product references then break inside narrow table cells instead of overflowing.partialhighMUAX #14; UAX #29; CSS Text 3 §5 line breaking and word boundaries (word-break, line-break, overflow-wrap)1 2 3
HTML to PDF enginesVariable fonts (fvar/gvar/avar/HVAR, CFF2): instancing before embeddingAccept OpenType variable fonts in the registry and @font-face. Map font-weight, font-stretch, font-style, font-optical-sizing and font-variation-settings to axis coordinates, and instantiate static outlines (apply gvar deltas to glyf, or CFF2 blends) before subsetting, since PDF has no variable-font embedding.absentmediumLCSS Fonts 4 §8 font-variation-settings, §8.1 font-optical-sizing; OpenType fvar/gvar/avar/HVAR/CFF2; ISO 32000-2 §9.9 embedded font programs (no variable fonts)1 2 3
HTML to PDF enginesVector barcodes and QR codes (QR, DataMatrix, Code 128/GS1-128, EAN-13, PDF417)A dependency-free encoder that paints barcodes as vector paths (Form XObjects), usable from the core (M9 stamping) and from HTML through a custom element or URL scheme resolved by the resource loader (for example <img src='barcode:qr?data=...'>). It includes the business payload builders: EPC QR (SEPA credit transfer) and Swiss QR-bill with its Swiss cross.absenthighMISO/IEC 18004 (QR), ISO/IEC 16022 (DataMatrix), ISO/IEC 15417 (Code 128), ISO/IEC 15420 (EAN/UPC), ISO/IEC 15438 (PDF417); EPC069-12 v3.0; Swiss QR-bill IG 2.3/2.4; ANTS 2D-Doc technical specifications1 2 3
HTML to PDF enginesVertical writing modes, CJK typography and rubywriting-mode: vertical-rl/lr, text-orientation, text-combine-upright, ruby annotations, and CJK spacing (text-spacing-trim, text-autospace).absentlowXLCSS Writing Modes 4; CSS Ruby 1; CSS Text 4 text-spacing1 2 3
HTML to PDF enginesViewer preferences, page mode and layout, open action, print scaling, duplexCatalog /PageMode (UseOutlines, so a case file opens with its bookmarks panel), /PageLayout (TwoPageRight for recto-verso reports), /OpenAction (initial page and zoom), and /ViewerPreferences: DisplayDocTitle, PrintScaling None (so QR-bills and labels print at 100 %), Duplex, PickTrayByPDFSize, PrintPageRange. Exposed through the options API and CSS (Prince -prince-pdf-page-mode, -prince-pdf-page-layout, -prince-pdf-print-scaling, -prince-pdf-duplex).absentmediumSISO 32000-2 §7.7.2 document catalog (/PageMode, /PageLayout, /OpenAction), §12.2 viewer preferences1 2 3
HTML to PDF enginesWOFF/WOFF2 web fonts, unicode-range and local() in @font-faceDecode WOFF 1.0 (zlib) and WOFF2 (Brotli, which .NET provides as System.IO.Compression.BrotliDecoder, plus glyf/loca transform reconstruction). Honor the unicode-range descriptor to pick faces per character, and local() to reference registry fonts.partialmediumMW3C WOFF 2.0 (Recommendation); CSS Fonts 4 §4.5 unicode-range1 2 3
ISO 32000-2Active-content sanitization (disarm)Report, then remove, risky content in third-party files: document-level and field JavaScript (Names/JavaScript, OpenAction, /AA triggers), Launch, SubmitForm and ImportData, optionally URI, embedded executables, RichMedia, 3D, Screen, Sound and Movie, and XFA. Optionally also hidden text, thumbnails and metadata. The result states what was removed.absenthighM12.6.3 trigger events (Tables 197-200); 12.6.4.6 Launch; 12.6.4.8 URI; 12.6.4.17 JavaScript; 12.7.6 form actions; 13.2-13.7; Annex K1 2
ISO 32000-2Adding link annotations to existing pages (auto-linking cross-references)Create Link annotations (with /QuadPoints and a /Dest or action) on third-party pages. For example, turn each 'Pièce n°12' found by extraction into a link to that piece's first page, and link bordereau lines to their pieces.absentmediumS12.5.6.5 Link annotations; 12.3.2 destinations1 2
ISO 32000-2AES-GCM encryption (ISO/TS 32003) and MAC integrity protection (ISO/TS 32004)Read and write AES-256-GCM encrypted documents (ISO/TS 32003). Support the ISO/TS 32004 MAC, CMS AuthenticatedData keyed from the file key, which detects tampering with an encrypted document without a signature.absentlowMISO/TS 32003:2023; ISO/TS 32004:2024; ISO 32000-2 7.6.61 2 3
ISO 32000-2Annotation authoring (markup and comment annotations)A typed API to create and edit markup annotations: Text (sticky notes), FreeText, Highlight/Underline/StrikeOut/Squiggly, Square/Circle, Line, Polygon/PolyLine, Ink, Caret, Stamp (e.g. 'PAID', 'RECEIVED') and Popup. It covers author, dates, /IRT replies, review states and /RC rich text.absentmediumM12.5.2; 12.5.6.2-12.5.6.14; 12.5.6.3 annotation states1 2 3
ISO 32000-2Appearance-stream generation for non-widget annotationsGenerate /AP appearance streams for annotations that lack them (FreeText from /DA, text markup, Square/Circle, Line with line endings, Ink). They then render the same everywhere, can be flattened, and satisfy PDF/A, which requires appearances on visible annotations.partialmediumM12.5.5 appearance streams; 12.5.6.x per subtype1 2
ISO 32000-2Article threads, presentations/transitions and page thumbnailsArticle threads and beads (page /B), page transitions and durations (/Trans, /Dur), sub-page navigation (/PresSteps) and page thumbnails (/Thumb). Keep them consistent when pages are removed or assembled, and strip thumbnails when optimizing.absentlowS12.3.4 thumbnails; 12.4.3 articles (Table 162); 12.4.4 presentations (Table 164); 12.4.4.2 sub-page navigation1
ISO 32000-2Associated files at every level (AF, AFRelationship)Attach files through /AF with an /AFRelationship (Source, Data, Alternative, Supplement, EncryptedPayload, FormData, Schema) at every level the spec allows: catalog, pages, XObjects, structure elements, annotations, DParts and marked content. Examples: the CSV behind a chart, a formula's MathML.partiallowS14.13 (14.13.2-14.13.9); 7.11.3 Table 43 AFRelationship1 2 3
ISO 32000-2Certification signatures (DocMDP) and FieldMDPProduce author (certification) signatures with a DocMDP transform referenced from the catalog /Perms. P=1 allows no changes, 2 allows form filling and signing, 3 also allows annotations. Add FieldMDP transforms that lock chosen fields when signing.partialmediumM12.8.2.2 DocMDP (Table 257); 12.8.2.4 FieldMDP (Table 259); 12.8.6 permissions1 2 3
ISO 32000-2CMYK and spot-color output from HTML/CSSEmit DeviceCMYK and Separation/DeviceN colors from CSS (device-cmyk(), @color-profile, named spot colors), with overprint control, for print-ready letterheads and brochures.absentlowM8.6.4.4 DeviceCMYK; 8.6.6.4 Separation; 8.6.6.5 DeviceN; 8.6.7 overprint control1 2
ISO 32000-2Color conversion, rendering intents, black point compensation and page-level output intentsConvert documents or pages to grayscale, sRGB or CMYK under an ICC profile, honoring rendering intents (ri operator, /Intent) and black point compensation (/UseBlackPtComp, new in PDF 2.0). Read and write page-level /OutputIntents (PDF 2.0), and reconcile differing output intents when merging.partiallowL8.6.5.8 rendering intents; 8.6.5.9 black point compensation; 14.11.5 output intents (Table 401); 11.7.5.31 2
ISO 32000-2Complete color-space model and function evaluationInterpret every color space: CalGray, CalRGB, Lab, ICCBased (/N, /Alternate), Indexed, Separation, DeviceN with attributes, and Pattern. Evaluate functions of Types 0, 2, 3 and 4 (the PostScript calculator, with a bounded stack and operation count) for tint transforms, shadings and transfer functions, and provide a managed ICC-to-sRGB path.partialmediumL8.6.4-8.6.6; 7.10 functions; 10.3-10.41
ISO 32000-2Cross-document links: GoToR/GoToE rewriting and PDF fragment identifiersWhen pieces link to each other as separate files (GoToR with a /F file spec and a page or named destination), rewrite the links as internal GoTo actions to the merged pages. Support GoToE into embedded PDFs. Parse and emit Annex O fragment identifiers (page=, nameddest=, structelem=), so HTML href='annexe.pdf#page=3' becomes a GoToR.absentmediumM12.6.4.3 Remote Go-To; 12.6.4.4 Embedded Go-To; Annex O (normative) Fragment identifiers, Table O.31
ISO 32000-2Crypt filters: attachments-only encryption, Identity, unencrypted metadataThe full crypt-filter model: /CF with named filters, /StmF, /StrF, and /EFF for encrypting embedded files only. Also a per-stream /Crypt filter with /Name, Identity, and /EncryptMetadata false so XMP stays indexable.partiallowS7.6.6 crypt filters; 7.4.10 Crypt filter; 7.6.4.2 EncryptMetadata1
ISO 32000-2Document parts (DPart) and GoToDpRepresent each piece of an assembled document as a DPart node (DPartRoot, page ranges, DPM metadata), with GoToDp actions, and preserve DParts on merge. This is the basis of PDF/VT batch output: one DPart per invoice or statement.absentlowM14.12 document parts (Tables 408-409); 12.6.4.5 GoToDp; 14.13.81 2
ISO 32000-2Document requirements dictionaryRead and write the catalog /Requirements array, which declares what a processor must support to handle the document (EnableJavaScripts, Attachment, Collection, Encryption, DigSig, DigSigValidation, Geospatial, Markup, Multimedia…).absentlowS12.11 (Tables 273-276)1
ISO 32000-2Embedded files (attachments) APIAdd, list, extract, replace and remove embedded files. That covers file specifications with /UF Unicode names and /Desc, embedded file streams with a MIME /Subtype and /Params (Size, dates, CheckSum), /RF related files, and both the document-level EmbeddedFiles tree and page-level FileAttachment annotations.partialhighS7.11.3 (Table 43); 7.11.4 (Table 44); 7.11.4.2 related files; 12.5.6.151 2 3
ISO 32000-2Empty signature fields with Lock and seed-value dictionariesCreate unsigned signature fields, at generation or on existing documents. /Lock names the fields that become read-only once signed. /SV seed values constrain the filter, subfilter, digests, certificates, reasons, MDP level and timestamp server.absentmediumS12.7.5.5 signature fields (Tables 236-238)1 2
ISO 32000-2FDF/XFDF import-export and form actionsExport and import form values and annotations as FDF and XFDF (ISO 19444-1). Model the SubmitForm, ResetForm and ImportData actions for reading, preserving and generating (e.g. a reset button). Named pages and templates are only preserved.absentlowM12.7.6 form actions; 12.7.7 named pages; 12.7.8 forms data format; ISO 19444-1 (XFDF)1
ISO 32000-2Field formatting and calculation without a JavaScript engineWhen filling AcroForms, build appearances with the formatting the field's /AA format and keystroke scripts would apply, by recognizing Acrobat's standard functions (AFNumber_Format, AFDate_FormatEx, AFPercent_Format, AFSpecial_Format). Recompute simple /CO fields (AFSimple_Calculate SUM, PRD, AVG, MIN, MAX) without executing JavaScript.absentmediumM12.7.3 (CO); 12.6.3 Table 199 form-field additional actions; 12.7.4.3 variable text1
ISO 32000-2Fillable form fields generated from HTMLMap HTML controls (input text, checkbox, radio, select, textarea, and a signature placeholder) to AcroForm fields with widgets and appearances. A CSS property controls it (WeasyPrint uses appearance: auto), and fields are tagged as /Form structure elements for PDF/UA.absentmediumM12.7.3-12.7.5; 12.7.4.3 variable text; 14.8.4.8 Form structure type1 2
ISO 32000-2Flattening every annotation type into page contentMerge the appearance streams of printable, visible annotations into the page content as form XObjects, honoring the /F flags (Hidden, NoView, Print) and /OC, then remove the annotations. This covers every annotation type, not just form widgets.partialmediumM12.5.3 annotation flags; 12.5.5; 8.10 form XObjects1 2 3
ISO 32000-2General XMP metadata API (read/write, custom schemas)Parse and write the catalog /Metadata XMP packet with a typed model: Dublin Core, xmp, pdf, pdfaid, pdfuaid, custom namespaces and PDF/A extension schemas. Include object-level metadata streams (pages, images, fonts) and reconciliation with /Info, which PDF 2.0 deprecates except for its dates.partialmediumM14.3.2 metadata streams; 14.3.3 information dictionary; 14.3.4 reconciling the two; ISO 16684-11 2
ISO 32000-2Gradients and patterns in generation (shadings, tiling patterns)Emit axial and radial shadings (Types 2 and 3, with stitching functions for multiple stops) for CSS linear-gradient and radial-gradient and for SVG gradients. Emit tiling patterns for repeated backgrounds and SVG <pattern>.partialmediumM8.7.3 tiling patterns; 8.7.4.5.3-8.7.4.5.4 axial and radial shadings; 7.10.3-7.10.41
ISO 32000-2Invisible text layer over scans (OCR results)Write an invisible, extractable text layer (text render mode 3) over scanned page images, from external OCR output (hOCR, ALTO, or an IOcrEngine abstraction). Use a glyphless or subset font with ToUnicode, optionally tagged, so scanned pieces become searchable.absenthighM9.3.6 text rendering mode (Tr 3, 7); 9.10.3 ToUnicode; 14.8.2.61
ISO 32000-2Legal content attestationsCompute and write the /Legal attestation dictionary for certification signatures, and read it back during validation. It counts what could alter appearance: JavaScript, non-embedded fonts, external references, optional content, transparency, dynamic content.absentlowS12.8.7 (Table 264)1
ISO 32000-2Long-term validation: DSS/VRI and document timestamps (PAdES B-LT/B-LTA)Add validation data (certificates, OCSP responses, CRLs) to the Document Security Store, with optional VRI entries. Add document-timestamp signatures (SubFilter ETSI.RFC3161) in incremental updates. Together they keep signatures verifiable after the certificates expire.partialmediumL12.8.4 (Tables 261-262 DSS, VRI); 12.8.5 document timestamp; 12.8.3.4 PAdES1 2 3
ISO 32000-2Managed decoders for CCITTFax, JBIG2, JPX and DCTDecode the four image filters the reader only passes through today: CCITTFaxDecode (G3 1D/2D, G4), JBIG2Decode (generic, refinement, text and halftone regions, with /JBIG2Globals), DCTDecode (baseline and progressive, Adobe CMYK/YCCK) and JPXDecode (with SMaskInData). They feed image export, pixel redaction, recompression and rasterization.partialmediumXL7.4.6 CCITTFaxDecode; 7.4.7 JBIG2Decode; 7.4.8 DCTDecode; 7.4.9 JPXDecode; ITU-T T.4/T.6; ISO/IEC 14492; ISO/IEC 10918-1; ISO/IEC 15444-11
ISO 32000-2Measurement and geospatial features (viewports, measure dictionaries, GEO)Page viewports (/VP), rectilinear measure dictionaries with their scale number formats, and geospatial measure dictionaries with GCS/PCS and point data. Preserve and transform them on crop, scale and N-up so measurements stay right; read them for extraction.absentlowS12.9 measurement properties; 12.10 geospatial features1
ISO 32000-2Modern signature and digest algorithms (ISO/TS 32001, 32002)Support SHA-3 and SHAKE256 digests (ISO/TS 32001), plus ECDSA on NIST and Brainpool curves and EdDSA Ed25519/Ed448 (ISO/TS 32002), in signing and validation, with the matching /Extensions entries.absentlowMISO/TS 32001:2022; ISO/TS 32002:2022; ISO 32000-2 7.121 2 3
ISO 32000-2Multimedia, 3D and RichMedia (including glTF, ISO/TS 32007)Screen, Sound and Movie annotations and renditions; 3D annotations with U3D or PRC streams and views; RichMedia annotations with glTF assets (ISO/TS 32007:2024). Preserve on merge, report, strip for sanitization or PDF/A; no playback.absentlowS13.2-13.7; 12.5.6.16-12.5.6.18; 12.6.4.14-12.6.4.18; ISO/TS 32007:20241 2
ISO 32000-2Named destinations and name-tree merge with collision handlingResolve /Dests (catalog, PDF 1.1) and the /Names /Dests name tree. When merging, combine every name tree (Dests, EmbeddedFiles, JavaScript, AP, Templates, IDS/URLS), rename colliding keys, and rewrite the GoTo actions and outline items that use them.partialhighS12.3.2.4 named destinations; 7.7.4 (Table 32 name dictionary); 7.9.6 name trees1 2
ISO 32000-2Optional content (layers)Read /OCProperties, OCGs and OCMDs with their visibility expressions, and the default and alternate configurations (Usage: View, Print, Export). Honor them in extraction and rasterization. Create layers (e.g. a watermark visible only in print), flatten or remove layers, and merge OCProperties on assembly.absentmediumM8.11 (Table 98 and the OC dictionaries); 12.6.4.13 Set-OCG-state actions1 2 3
ISO 32000-2Page boundaries (Crop/Bleed/Trim/Art, UserUnit) and page-size normalizationTyped access to all five page boxes, with CropBox resolved through inheritance (it is inheritable, like MediaBox and Rotate), plus BoxColorInfo and UserUnit. Operations to crop, set boxes, and scale or fit pages to a target size (Letter or odd scans to A4) inside a transformed form XObject.partialmediumM14.11.2 page boundaries; 7.7.3.3 Table 31 (CropBox, UserUnit); 7.7.3.4 inheritance1 2 3
ISO 32000-2Page labels (logical page numbering)Read, write and rebase the catalog /PageLabels number tree (style D/R/r/A/a, prefix /P, start /St), so the viewer shows 'i, ii, P3-1…' instead of physical indices. On assembly, merge and renumber each input's label ranges. In HTML→PDF, set labels from CSS, as Prince's prince-pdf-page-label does.absenthighSISO 32000-2:2020 12.4.2 (Table 161); 7.9.7 number trees1 2 3
ISO 32000-2Page-piece dictionaries (PieceInfo)Read, preserve (with /LastModified) or strip the private application data in /PieceInfo on pages, form XObjects and the catalog: Illustrator and InDesign editing data, Acrobat's header, footer and watermark markers.absentlowS14.5 page-piece dictionaries1
ISO 32000-2PDF 2.0 output mode, version management and the Extensions dictionaryA writer policy for PDF 1.7 or 2.0 output: the header and catalog /Version (raised in incremental updates), and the PDF 2.0 deprecations (/Info except CreationDate and ModDate, non-embedded standard 14 fonts, PostScript XObjects, NeedsRendering). Plus the catalog /Extensions developer-extensions dictionary, required when ISO/TS 32001-32004 are used, and computing the minimum version a document needs.absentmediumS7.5.2 header; 7.7.2 /Version; 7.12 Extensions (Tables 48-49); Annex E Extending PDF; Annex I PDF versions and compatibility1 2 3
ISO 32000-2PDF 2.0 UTF-8 text strings and language escapesDecode text strings that start with the UTF-8 byte order mark EF BB BF (PDF 2.0), and the ESC language-code escapes inside UTF-16BE strings. Decide when the writer may emit UTF-8.partialmediumS7.9.2.2 text string type; Annex D (PDFDocEncoding)1 2
ISO 32000-2PDF/A-4 (4, 4f, 4e) and the PDF/A-2u/3u/2a/3a levelsExtend PDF/A generation and validation beyond 2b/3b: to the Unicode (u) and accessible (a) levels of parts 2 and 3, and to PDF/A-4 (ISO 19005-4, on PDF 2.0: 4, 4f with embedded files, 4e for engineering). PDF/A-4 brings PDF 2.0 metadata rules (XMP only, pdfaid:rev) and page-level output intents.partialhighMISO 19005-2/-3 levels u and a; ISO 19005-4:2020; ISO 32000-2 14.3, 14.11.51 2 3
ISO 32000-2PDF/UA-2 and WTPDF (PDF 2.0 tagging)Generate and validate tagging in the PDF 2.0 standard structure namespace. That means namespace dictionaries, RoleMapNS, the new types (DocumentFragment, Aside, Title, FENote, Sub, Em, Strong, the Artifact element, H7+) and attribute owners. It also means the ISO/TS 32005 containment rules, structure destinations for internal links, and MathML with AF, conforming to ISO 14289-2:2024 / WTPDF 1.0.partialhighL14.7.4 namespaces; 14.8.4-14.8.6; 12.3.2.3 structure destinations; 14.13; Annex L; Annex M; ISO 14289-2:2024; ISO/TS 32005:20231 2 3
ISO 32000-2Portfolios (collections): unpack, create, preserveRead a /Collection (schema, sort, folders, initial document, view) and its collection items. Unpack a portfolio's member PDFs into an assembled case file, and optionally produce a portfolio of pieces. Navigators (Flash-based, deprecated) are only reported.partialmediumM12.3.5 (Tables 153-158); 12.3.6 navigators (Table 160); 7.11.6 (Tables 46-47)1 2
ISO 32000-2Predefined CMaps and CJK character collectionsShip or load the predefined CMaps (UniGB-UCS2-H, 90ms-RKSJ-H, UniJIS-UTF16-H, KSC-EUC-H…) and the CID-to-Unicode maps of the Adobe-GB1, CNS1, Japan1 and Korea1 collections. Text in ToUnicode-less CJK fonts then extracts correctly, vertical (-V) variants included.partiallowM9.7.5.2 predefined CMaps (Table 117); 9.7.6; 9.10.21
ISO 32000-2Prepress and device-dependent features (printer's marks, trapping, separations, OPI, halftones, transfer functions)Printer's-mark and trap-network annotations, trapping, separation dictionaries, OPI (deprecated), halftones, transfer functions, black generation and undercolor removal, flatness and smoothness. Read, preserve, or strip them (PDF/A forbids several); never author them.absentlowS10.4-10.7; 12.5.6.20-12.5.6.21; 14.11.3-14.11.7; Annex N best practice for halftones1
ISO 32000-2Pronunciation hintsEmit /PhoneticAlphabet and /Phoneme structure attributes, optionally with a pronunciation lexicon attached as an associated file, from HTML hints, so text-to-speech reads names and acronyms correctly.absentlowS14.9.6 pronunciation hints; 14.131
ISO 32000-2Public-key (certificate) security handlerDecrypt and encrypt with the public-key security handler (SubFilter adbe.pkcs7.s3/s4/s5): recipient certificates, per-recipient permissions, and a seed wrapped in CMS EnvelopedData, with crypt filters.absentlowM7.6.5 public-key security handlers (7.6.5.2, 7.6.5.3)1 2 3
ISO 32000-2Reference XObjectsForm XObjects with /Ref, pointing at a page of an external PDF by file specification and page index or label, with the proxy content as fallback. Resolve, preserve, or import the referenced page.absentlowS8.10.4 reference XObjects1
ISO 32000-2Revision history of incremental updatesEnumerate the revisions defined by incremental updates and open any earlier revision read-only. Tell which revision each signature's /ByteRange covers and whether it covers the whole file. Diff revisions (objects added, changed, deleted) and classify each change as allowed or not under DocMDP and FieldMDP.absenthighM7.5.6 incremental updates; 12.8.1 (ByteRange, Table 255); 12.8.2.2.2 validating DocMDP1 2 3
ISO 32000-2Scan recompression: CCITT G4, JBIG2 generic and JPEG re-encodingEncode bitonal images as CCITT G4 or lossless JBIG2 generic regions. Downsample and re-encode color scans as JPEG at a chosen quality, and convert near-bitonal scans to 1 bit. These are the operations that cut scanned case files by an order of magnitude.partialhighL7.4.6, 7.4.7, 7.4.81 2
ISO 32000-2Signature validation (integrity, certificate chain, revocation, LTV)Validate existing signatures. Parse the CMS in /Contents and check its digest over /ByteRange. Build the certificate chain against a trust store the caller provides. Check revocation from embedded DSS/VRI data, or online when enabled. Evaluate timestamps and DocMDP/FieldMDP, and report a status per signature following the PAdES model (ETSI EN 319 102-1).absenthighL12.8.1; 12.8.3 signature interoperability (PAdES profiles 12.8.3.4); 12.8.4; 12.8.51 2 3
ISO 32000-2Tag-preserving stamping of tagged documents (artifacts)When M9 adds headers, footers, numbers, watermarks or stamps to a tagged document, wrap them as Artifacts (/Type /Pagination with /Subtype Header or Footer, or /Watermark). Real content gets structure elements instead. Update the ParentTree and keep /Tabs S, so a PDF/UA input stays PDF/UA.partialhighM14.8.2.2 Real content and Artifacts; 14.7.5.4 ParentTree; 14.8.2.5 /Tabs1 2
ISO 32000-2Transparency detection (Annex Q) and flatteningDetermine whether a page uses transparency by the normative method of Annex Q and report it. Optionally flatten transparent regions into opaque content for PDF/A-1, PDF/X-1a/3 or legacy printers.absentlowLAnnex Q (normative) Method for determining transparency on a page; 11.4.7 page group1
ISO 32000-2Transparency in generation (opacity, soft masks, groups, blend modes)Emit constant alpha (/ca, /CA), transparency groups for element opacity, soft masks for PNG alpha and CSS mask-image, isolated and knockout groups where needed, and blend modes for mix-blend-mode. Include a page-group color space for PDF/A.partialmediumM11.3.5 blend modes; 11.4 groups; 11.6.4-11.6.6; 11.7.21
ISO 32000-2True redaction (Redact annotations and irreversible content removal)Support Redact annotations (QuadPoints, IC, OverlayText, RO, Repeat) as a mark-for-redaction step. Applying them removes the glyphs, paths and image pixels under the marked areas from content streams, form XObjects and annotations. It also removes the same text from metadata, bookmarks, attachments, form values and the structure tree (ActualText/Alt), draws the overlay, and verifies by re-extracting.absenthighXL12.5.6.23 Redaction annotations (Table 195); 14.9.3-14.9.4 Alt/ActualText cleanup1 2 3
ISO 32000-2Type 1, bare CFF, Type 3 and standard 14 fonts when readingFor extraction and rasterization of third-party files, parse Type 1 programs (FontFile: eexec, charstrings, built-in encoding), bare CFF (FontFile3 Type1C and CIDFontType0C) and Type 3 glyph procedures, with recursion bounds. Ship AFM metrics for the standard 14 fonts for when /Widths is absent; PDF 2.0 no longer guarantees those fonts unembedded.partialmediumL9.6.2 Type 1 fonts (9.6.2.2 standard 14); 9.6.4 Type 3; 9.6.5 encodings; 9.9 embedded font programs1
ISO 32000-2Unencrypted wrapper documents and encrypted payloadsRecognize PDF 2.0 wrapper documents: a Collection with View H, one EmbeddedFiles entry with AFRelationship EncryptedPayload, and an /EP dictionary naming the crypt filter. Report 'wrapper for handler X' instead of returning the wrapper page as the content, and expose the payload. Optionally write such wrappers.absentmediumS7.6.7 Unencrypted wrapper document (Table 28); 12.3.5; 14.131 2 3
ISO 32000-2Usage rights (UR3) detection and removalDetect Reader-extension usage rights (/Perms /UR3 with the UR transform). Remove them when a document is modified outside an incremental form fill, so Adobe Reader does not warn that extended features were disabled. Remove DocMDP restrictions on request.absentmediumS12.8.2.3 UR (Table 258); 12.8.6 permissions1 2
ISO 32000-2Viewer preferences, page mode, page layout and open actionRead and write the catalog /ViewerPreferences: DisplayDocTitle, FitWindow, PrintScaling, Duplex, PickTrayByPDFSize, PrintPageRange, NumCopies, Direction. Also /PageMode (UseOutlines, UseAttachments), /PageLayout and /OpenAction. Reconcile them on merge.absentmediumS12.2 (Table 147); 7.7.2 (PageMode, PageLayout, OpenAction)1 2 3
ISO 32000-2Watermark annotations (FixedPrint), and detecting and removing existing watermarksOffer watermarks as Watermark annotations with FixedPrint (Matrix, H, V), which print at a fixed size whatever the page scaling, alongside page-content watermarks. Detect and remove existing watermarks, whether stored as Watermark annotations, as /Artifact /Subtype /Watermark marked content, as an OCG, or through Acrobat's PieceInfo markers.partiallowS12.5.6.22 (Tables 193-194); 14.8.2.2.2 (Artifact Subtype Watermark); 14.5 page-piece dictionaries1
ISO 32000-2Web capture structuresWeb capture information (/SpiderInfo, content database, page and image sets with digital identifiers, source information, command settings) that records where pages captured from URLs came from. Preserve on merge; report on extraction.absentlowS14.10 web capture1
ISO 32000-2XFA detection, removal and hybrid-form fallbackDetect XFA (deprecated in PDF 2.0) and tell static or hybrid forms from dynamic ones. Remove the XFA packet so viewers fall back to the AcroForm, or report that a dynamic form's only page is a placeholder. Read the values in the XFA datasets.absentmediumSAnnex K XFA forms; 12.7.3 (XFA entry)1 2
Standards around PDF2D-Doc / visible digital seal (ISO 22376)Produce a 2D-Doc (France Titres/ANTS; AFNOR XP Z42-105; ISO 22376:2023 VDS): a DataMatrix carrying typed fields (holder, address, amounts) and an ECDSA signature from a certificate issued by a referenced CA. Printed on invoices and certificates, it proves authenticity even on paper.absentlowMISO 22376:2023; AFNOR XP Z42-105; ANTS 2D-Doc specifications1 2
Standards around PDFCertification signatures, field locks and seed valuesAuthor certification signatures (DocMDP transform, P=1/2/3), FieldMDP locks, signature-field /Lock dictionaries and seed values (/SV) that constrain later signers. Honor them elsewhere: M9 stamping or M5 merging on a certified file must refuse or report.absentmediumMISO 32000-2:2020 12.8.2.2, 12.8.2.4, 12.7.5.5 (signature fields: Lock, SV)1 2
Standards around PDFConverting an existing PDF to PDF/A (conformance remediation)Turn a third-party PDF into PDF/A-2b/3b/2u. Embed or substitute missing fonts, add an output intent ICC, synthesize XMP from Info, remove forbidden constructs (JavaScript, LZW, encryption, and transparency for A-1), and return a report of what changed, what was substituted and what could not be fixed. Driven by M12 findings, as PdfRepair is driven by M2 findings.partialhighLISO 19005-2:2011 / 19005-3:2012 (all clauses)1 2
Standards around PDFCourt e-filing preset for case files (Télérecours bookmarks and splitting)A preset and validator for case files filed with French administrative courts (Décret 2016-1481, Télérecours): one bookmark per exhibit named '001_nom de la pièce' (at most 80 characters, no special characters or periods, accents stripped), matching the inventory, with splitting into files of 32 MB or less. It could extend to other portals (RPVA/e-Barreau).partialhighSDécret n° 2016-1481; Télérecours filing documentation1 2
Standards around PDFDetecting and stripping active content (safe copy)Report and optionally remove active or risky content: JavaScript actions at document, page, annotation and field level (the ISO 21757 entry points), Launch, SubmitForm, ImportData and GoToE actions, file: URIs, embedded executables, XFA and RichMedia. The result is a 'safe copy' mode for third-party files, and the first step of PDF/A conversion.absentmediumMISO 32000-2:2020 12.6 (actions), 12.6.4.x; ISO 21757-1:2020 (script entry points); ISO 19005-2 6.6 (actions)1 2
Standards around PDFDeveloper extensions dictionary (/Extensions, ISO_ prefix)Read, validate and write the catalog /Extensions dictionary, including the ISO_ array of developer-extension dictionaries (BaseVersion /2.0, ExtensionLevel 32001..32007, ExtensionRevision, URL) that files using ISO/TS 320xx features declare.absentlowSISO 32000-2:2020 7.12 (Extensions dictionary)1 2
Standards around PDFDocument parts (DPartRoot/DPart) to mark exhibits and recordsWrite and read the PDF 2.0 document-part hierarchy: /DPartRoot in the catalog, and /DPart nodes with page ranges and /DPM metadata. It records each exhibit of an assembled case file (and each record of a PDF/VT batch, or each message of an EA-PDF) in a machine-readable way.absentlowSISO 32000-2:2020 14.12 (document parts)1 2
Standards around PDFEA-PDF: archival email renditionProduce EA-PDF (PDF Association specification v1.0, February 2025) from EML or MBOX: headers, body and attachments on separate pages, as PDF/A-3 or A-4f. The source MIME is kept as associated files, with document parts per message and the required XMP (UTF-8).absentmediumLEA-PDF 1.0 (PDF Association, 2025-02), on ISO 19005-3 and ISO 19005-41 2 3
Standards around PDFEN 16931 business-rule validation of the embedded XMLValidate the embedded CII (and UBL) against the XSDs, the CEN EN 16931 Schematron rules (BR-, BR-CO-) and the profile rules (French BR-FR-, XRechnung BR-DE-). Check that the XMP ConformanceLevel agrees with the XML's GuidelineSpecifiedDocumentContextParameter, and that the XML file name matches the XMP.partialhighLEN 16931-1:2017+A1:2019 (a 2026 revision is reported); CEN/TS 16931-3-3 (CII syntax binding); XP Z12-0121 2 3
Standards around PDFEPC QR (GiroCode) SEPA credit-transfer codeBuild the EPC069-12 SEPA credit-transfer payload (service tag BCD, version, BIC, name, IBAN, amount, remittance) and render it as a QR code on invoices.absentmediumSEPC069-12 'Quick Response Code: Guidelines to Enable Data Capture for the Initiation of a SEPA Credit Transfer'1 2
Standards around PDFFactur-X/ZUGFeRD profile- and version-aware embedding (incl. EXTENDED-CTC-FR, XRECHNUNG)Embed, extract and check with full awareness of profiles (MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED, the French EXTENDED-CTC-FR of XP Z12-012, ZUGFeRD XRECHNUNG) and versions (Factur-X 1.07.x, 1.08, 1.09.2 = ZUGFeRD 2.3.x, 2.4, 2.5.2; CII D22B, backward compatible with D16B). That means the right file name (factur-x.xml; zugferd-invoice.xml for ZUGFeRD 2.0; xrechnung.xml), the right AFRelationship per profile and country (Data, Source, Alternative), and the fx: XMP extension schema (DocumentType, DocumentFileName, Version, ConformanceLevel). It warns when MINIMUM or BASIC WL is used where a legally valid invoice is expected.partialhighMFactur-X 1.09.2 / ZUGFeRD 2.5.2 (2026-08-04); AFNOR XP Z12-012; EN 16931-1; ISO 19005-31 2 3
Standards around PDFGeneral Associated Files API (AF + AFRelationship)Attach files at document, page, annotation or structure-element level: /AF with AFRelationship (Source, Data, Alternative, Supplement, EncryptedPayload, FormData, Schema, Unspecified), /Subtype MIME type, and /Params (ModDate, Size, CheckSum). Read them back. This goes beyond the single Factur-X XML.partialhighSISO 32000-2:2020 14.13 (associated files), 7.11.4 (embedded file streams); ISO 19005-3:20121 2 3
Standards around PDFISO 21757-1 ECMAScript for PDF (execution)The ISO JavaScript API for PDF 2.0 (form calculation and validation scripts, document actions), published December 2020.excludedlowXLISO 21757-1:20201 2
Standards around PDFISO/TS 32001: SHA-3 and SHAKE256 in signaturesRecognize, verify and produce signatures whose message digest is SHA3-256/384/512 or SHAKE256 (used with Ed448), declared through the ISO_ 32001 developer extension.partiallowSISO/TS 32001:20221 2 3
Standards around PDFISO/TS 32002: ECDSA (NIST P, Brainpool) and EdDSA (Ed25519, Ed448) signaturesCreate and verify PDF signatures with ECDSA over the NIST P and Brainpool curves, and EdDSA Ed25519 (digest SHA-512) or Ed448 (digest SHAKE256), as ISO/TS 32002 specifies.partialmediumMISO/TS 32002:20221 2 3
Standards around PDFISO/TS 32003: AES-256-GCM encryptionDecrypt and encrypt with AES-GCM: Encrypt dictionary /V 6 with /R 7 and a crypt filter whose /CFM is /AESV4. Key derivation is as for V5/R6, with authenticated per-object encryption.partiallowSISO/TS 32003:2023; ISO 32000-2 7.61 2 3
Standards around PDFISO/TS 32004: MAC integrity protection for encrypted documentsVerify on read and produce on write a message authentication code over an encrypted file. Its key is derived from the file encryption key, and extensions to the Encrypt and trailer dictionaries hold it, either standalone or attached to a signature. It is backward compatible with ISO 32000-2.absentlowMISO/TS 32004:20241 2 3
Standards around PDFISO/TS 32005 structure namespacesWrite and read structure namespaces: the /Namespaces array on the StructTreeRoot, /NS on structure elements, and namespace role maps, combining the PDF 1.7 and PDF 2.0 namespaces as ISO/TS 32005 specifies. PDF/UA-2 and WTPDF require every element to be in, or role-mapped to, the PDF 1.7, PDF 2.0 or MathML namespace.partialmediumMISO 32000-2:2020 14.7.4 and 14.8.6; ISO/TS 32005:2023 (revision ISO/DTS 32005.2 in progress)1 2 3
Standards around PDFObject-shape validation generated from the Arlington PDF ModelGenerate, at build time, M2 rules from the PDF Association's Arlington PDF Model: a TSV grammar of every PDF 1.0-2.0 dictionary, array and map (keys, types, required-ness, possible values, predicates such as fn:SinceVersion, fn:Deprecated, fn:IsRequired). This gives version-aware findings such as a key newer than the header version, a deprecated key, or a wrong type, without writing hundreds of rules by hand.partialmediumLISO 32000-2:2020 (all object definitions) and its resolved errata; Arlington TSV grammar1 2 3
Standards around PDFOptional content and ISO 19593-1 processing stepsOptional content groups (layers) with /Usage, for example a watermark visible only when printed. Also the ISO 19593-1 GTS_Metadata (GTS_ProcStepsGroup/Type) that marks dielines, varnish or white underprint layers in packaging and labels.absentmediumSISO 32000-2:2020 8.11 (optional content); ISO 19593-1:20181 2
Standards around PDFPAdES baseline levels B-B, B-T, B-LT and B-LTA, with augmentationProduce ETSI EN 319 142-1 V1.2.1 (2024-01) baseline signatures. B-B: SubFilter ETSI.CAdES.detached, ESS signing-certificate-v2, no CMS signing-time. B-T: a signature timestamp. B-LT: validation data in the DSS. B-LTA: a document timestamp over the DSS. Also raise an existing signature from one level to the next by incremental update, keeping PDF/A conformance.partialhighLETSI EN 319 142-1 V1.2.1 (2024-01); ETSI EN 319 142-2 V1.2.1 (2025-07); ISO 32000-2:2020 12.81 2 3
Standards around PDFPDF 2.0 output mode (prerequisite for the 2.0-based standards)A writer mode that emits %PDF-2.0 documents: catalog /Version, no deprecated constructs, the Info dictionary reduced to CreationDate/ModDate, and metadata carried in XMP. PDF/A-4, PDF/UA-2, WTPDF, PDF/X-6, PDF/VT-3 and every ISO/TS 320xx extension require it.absentmediumMISO 32000-2:2020 7.5.2 (file header), 7.7.2 (catalog /Version), 14.3.3 (document information dictionary deprecated)1 2
Standards around PDFPDF Declarations (pdfd: XMP claims)Read and write PDF Declarations: pdfd:declarations in the document XMP, with the conformsTo URI and claimData (by, date, credentials, report), plus the XMP extension schema that PDF/A-1..3 files need to carry them.absentlowSPDF Declarations (PDF Association, 2019)1 2 3
Standards around PDFPDF/A-1a/1b profile, and keeping A-1 intact through manipulationA PDF/A-1 profile (ISO 19005-1:2005) for third-party documents, plus writer settings that keep A-1 files within A-1 when stamped or merged: no object or cross-reference streams, no transparency, no JPEG 2000, no embedded files.partialmediumMISO 19005-1:2005 (with Cor 1:2007, Cor 2:2011)1 2
Standards around PDFPDF/A-2u/3u and PDF/A-2a/3a, with dual PDF/A + PDF/UA-1 claimsBeyond the 'b' level: 'u' (every glyph maps to Unicode, almost free once M6 writes ToUnicode) and 'a' (tagged, from M8). Also combined claims such as PDF/A-3a + PDF/UA-1, which PDFlib's reference invoice in the corpus carries.partialhighMISO 19005-2:2011 and ISO 19005-3:2012, conformance levels a, b, u; ISO 14289-1:20141 2 3
Standards around PDFPDF/A-4, PDF/A-4f and PDF/A-4eGenerate and validate PDF/A-4 (ISO 19005-4:2020, based on PDF 2.0). PDF/A-4f allows embedded files of any type, making it the 2.0 successor of A-3; PDF/A-4e adds 3D/RichMedia. The part is identified by pdfaid:part=4 with pdfaid:rev=2020. There are no a/b/u levels, and Unicode mapping is required.absentmediumMISO 19005-4:20201 2 3
Standards around PDFPDF/R-1 and image-to-PDF without re-encodingBuild a PDF from scanned images (JPEG, CCITT G4 from TIFF, uncompressed) by passing their data through without re-encoding, optionally in the strict PDF/R-1 (ISO 23504-1:2020) structure, and recognize PDF/R input.partialmediumSISO 23504-1:20201 2 3
Standards around PDFPDF/UA-1 profile mapped to the Matterhorn Protocol, with manual checksImplement the PDF/UA-1 profile along Matterhorn Protocol 1.1: 31 checkpoints and 136 failure conditions, of which 87 are machine-checkable and 47 need human judgment. Findings are keyed to Matterhorn identifiers, with a distinct outcome for conditions that need a person.partialmediumMISO 14289-1:2014; Matterhorn Protocol 1.1 (2021)1 2
Standards around PDFPDF/UA-2 (ISO 14289-2:2024) generation and validationPDF 2.0 tagged output under the PDF 2.0 standard structure types (Title, FENote, Aside, DocumentFragment...), structure destinations for internal links, the full attribute and annotation requirements, and pdfuaid:part=2 with rev=2024. Includes a matching validation profile.partialmediumLISO 14289-2:20241 2 3
Standards around PDFPDF/VT for batch transactional output (statements, invoices at scale)Emit PDF/VT-1/-2 (ISO 16612-2, on PDF/X-4/X-5) or PDF/VT-3 (ISO 16612-3:2020, on PDF/X-6): one file with thousands of recipient records, a DPart per record carrying its metadata, shared artwork as reusable XObjects, and a PDF/X output intent.absentlowLISO 16612-2:2010; ISO 16612-3:20201 2 3
Standards around PDFPDF/X-4 and PDF/X-6 print-ready outputPDF/X-4 (ISO 15930-7) and PDF/X-6 (ISO 15930-9:2020, PDF 2.0): an embedded output-intent ICC (or an external profile for X-4p/X-6p/X-6n), TrimBox/BleedBox on every page, CMYK and spot colors reachable from CSS (device-cmyk(), @page bleed/marks), no encryption, fonts embedded. Includes a validation profile.absentlowMISO 15930-7:2010 (PDF/X-4); ISO 15930-9:2020 (PDF/X-6)1 2 3
Standards around PDFPost-quantum PDF signatures (ML-DSA, SLH-DSA)Sign and verify with ML-DSA (FIPS 204) and SLH-DSA (FIPS 205). BFO and Adobe exchanged the first ML-DSA-signed PDF in May 2025, and PDF Days 2025 agreed to add both algorithms to the PDF specification.absentlowMFIPS 204, FIPS 205; PDF Association agreement at PDF Days 2025 (no ISO text yet)1 2
Standards around PDFPublic-key (certificate) security handlerOpen and produce documents encrypted to recipients' X.509 certificates rather than a password: the /Adobe.PubSec handler, SubFilter adbe.pkcs7.s4/s5, with /Recipients as CMS EnvelopedData.partiallowMISO 32000-2:2020 7.6.5 (public-key security handlers)1 2
Standards around PDFQR, DataMatrix, Code 128 and PDF417 as vector contentEncode QR (ISO/IEC 18004), DataMatrix (ISO/IEC 16022), Code 128 and PDF417 symbols and paint them as vector paths in content streams. In .Html they could be exposed as an element or image scheme. Deterministic and dependency-free.absenthighMISO/IEC 18004:2024 (QR); ISO/IEC 16022:2024 (DataMatrix); ISO/IEC 15417 (Code 128); ISO/IEC 15438 (PDF417)1 2
Standards around PDFReadable PDF rendition of CII, UBL or XRechnung invoicesRender a received or generated CII/UBL/XRechnung XML into a readable PDF, or into a Factur-X PDF/A-3 hybrid with the XML attached (the equivalent of KoSIT's XRechnung visualization), through the HTML engine.absentmediumMEN 16931-1; XRechnung (KoSIT)1 2
Standards around PDFRemote and qualified signing via the CSC API / ETSI TS 119 432 (deferred signing)A ready IPdfSigner for remote signing services through the Cloud Signature Consortium API v2 (v2.0 is referenced by CIR (EU) 2024/2979) and ETSI TS 119 432. It uses a two-step flow (prepare the ByteRange hash, obtain the CMS or raw signature, inject it), so a QTSP's qualified signature or seal on a remote QSCD can be applied.partialmediumMCSC API v2.x; ETSI TS 119 432 V1.3.1 (2026-03); CEN EN 419 241; Regulation (EU) 2024/11831 2 3
Standards around PDFRevision diff analysis (DocMDP/FieldMDP, shadow and ISA attacks)Classify every change a later revision makes to a signed revision (form fill, annotation, DSS, new signature, versus content or object replacement), reject by default, and check against DocMDP/FieldMDP permissions. This detects incremental saving attacks, shadow attacks and signature wrapping.absenthighLISO 32000-2:2020 12.8.2.2 (DocMDP), 12.8.2.4 (FieldMDP), 7.5.6 (incremental updates)1 2
Standards around PDFRFC 3161 timestamps and document timestampsAn RFC 3161/RFC 5816 TSA client for the signature-time-stamp unsigned attribute, and document timestamps (/Type /DocTimeStamp, SubFilter ETSI.RFC3161). A document timestamp also works alone on an unsigned file, as proof that it existed at a date, for example at filing.partialhighMRFC 3161; RFC 5816; ISO 32000-2:2020 12.8.5 (document timestamp dictionary)1 2
Standards around PDFSwiss QR-bill payment partGenerate and validate the Swiss QR-bill payment part and receipt under IG QR-bill v2.3 (in force 22 November 2025, structured addresses only; banks expected to reject non-compliant payments from 30 September 2026) and v2.4 (24 February 2026). That covers the A6 slip layout, the Swiss QR Code with its Swiss cross, the scissors or perforation lines, the permitted fonts (Arial, Frutiger, Helvetica, Liberation Sans) and QR-IBAN/QRR/SCOR references.absentlowMSwiss Implementation Guidelines QR-bill v2.3 (2025-11-21) and v2.4 (2026-02-24)1 2 3
Standards around PDFTyped EN 16931 invoice model producing CII and UBLA typed invoice model serializing to CII D22B (for Factur-X/ZUGFeRD) and UBL 2.1. It covers seller and buyer with SIREN/SIRET, the VAT breakdown (BG-23, now repeatable per category), lines and sub-lines (added in 1.08), payment terms, and the four mentions the French reform adds (buyer SIREN, delivery address, category of operation, VAT-on-debits option). The same model feeds the HTML template of the visible invoice, so the XML and the PDF cannot disagree.absenthighLEN 16931-1; UN/CEFACT CII D22B; OASIS UBL 2.1; AFNOR XP Z12-0121 2 3
Standards around PDFValidating existing signatures (EN 319 102-1, EU trusted lists)Verify each signature: ByteRange covers the whole revision, CMS digest and signature, signing-certificate attribute, chain to trust anchors (EU LOTL and national trusted lists per ETSI TS 119 612, AATL, custom), revocation (DSS first, then OCSP/CRL), timestamps, PAdES level detection, and legacy adbe.pkcs7.* forms. The result is an ETSI TS 119 102-2-style report (TOTAL-PASSED / INDETERMINATE / TOTAL-FAILED) under EN 319 102-1 procedures.absenthighXLETSI EN 319 102-1 V1.4.1 (2024-06); ETSI TS 119 102-2; ETSI TS 119 612; Regulation (EU) 2024/1183 and its 2025 implementing acts1 2 3
Standards around PDFVisible signature fields that stay PDF/A and PDF/UA conformantCreate signature fields and visible appearances (name, date, reason, image). They keep PDF/A intact (appearance stream present, fonts embedded) and PDF/UA intact (widget tagged under a Form element, /TU alternate name). Signing a Factur-X PDF/A-3 invoice must not break its conformance.partialhighMISO 32000-2:2020 12.7.5.5 (signature fields), 12.5.5 (appearance streams); ISO 19005-2 6.3 (annotations); ISO 14289-1 7.181 2
Standards around PDFWell-Tagged PDF 1.0 (reuse and accessibility levels)Conform to and validate WTPDF 1.0 (PDF Association, March 2024). The 'reuse' level targets extraction and reflow, such as PDF to HTML; the 'accessibility' level mirrors UA-2. Conformance is declared through PDF Declarations, and WTPDF mandates ISO/TS 32005.absentlowSWell-Tagged PDF (WTPDF) 1.0, PDF Association 20241 2 3
Standards around PDFXMP data model API (ISO 16684) with PDF/A extension schemasA public XMP model: parse and serialize RDF/XML packets with padding (for in-place incremental updates), typed properties (simple, struct, arrays, language alternatives), and Info/XMP synchronization. It also generates the PDF/A extension schemas (pdfaExtension/pdfaSchema/pdfaProperty) that custom properties such as fx: and pdfd: require. ISO 16684-2 RELAX NG descriptions could drive the checks.partialmediumMISO 16684-1:2019; ISO 16684-2:2014; ISO 16684-3:2021 (JSON-LD); ISO 19005-2/3 extension-schema rules1 2 3
Other ecosystemsAccessibility remediation of existing documents (auto-tagging)Add a structure tree to untagged third-party PDFs (headings, paragraphs, lists, tables, figures, artifacts), set language and title, and produce a report of what needs human review.absentmediumXLISO 14289-1/-2 (PDF/UA-1/-2); ISO 32000-1 §14.7-14.81 2
Other ecosystemsAnnotation authoring and removal (markup annotations with appearances)Create, read, edit and remove markup annotations — highlight, sticky note, FreeText, ink, square/line, stamp, file attachment, link — and generate their appearance streams; remove by subtype or author.partialmediumLISO 32000-1 §12.5 Annotations, §12.5.5 Appearance streams, §12.5.6 Annotation types1 2 3
Other ecosystemsAttachment management and associated filesList, add, extract and remove embedded files (document-level and FileAttachment annotations), with MIME type, dates, checksum and /AFRelationship, independent of Factur-X.partialmediumSISO 32000-1 §7.11.3-7.11.4 file specifications and embedded file streams, §12.5.6.15 file attachment annotations; ISO 32000-2 §14.13 associated files1 2 3
Other ecosystemsBarcode and QR code generation (vector)Deterministic vector barcodes: QR (EPC/SEPA QR, Swiss QR-bill), DataMatrix, PDF417, Code 128/GS1-128, EAN, exposed to HTML generation and to stamping.absentmediumMISO/IEC 18004 (QR), ISO/IEC 16022 (DataMatrix), ISO/IEC 15438 (PDF417), EPC069-12 (EPC QR)1 2 3
Other ecosystemsBates numbering and exhibit stamping across a document setStamp continuous identifiers (prefix, zero-padded number, suffix, endorsement text) across a set of documents, record the range per document for an exhibit list, and update or remove a previous stamp idempotently.partialhighMISO 32000-1 §14.5 Page-piece dictionaries (marking our own stamps); §14.8.2.2 artifacts1 2
Other ecosystemsCertificate-based (public-key) encryptionEncrypt for named recipients' X.509 certificates with per-recipient permissions (Adobe.PubSec, adbe.pkcs7.s5 subfilter) and decrypt with a private key.partiallowMISO 32000-1 §7.6.4 Public-key security handlers (ISO 32000-2 §7.6.5)1 2
Other ecosystemsColor conversion (to gray, sRGB, CMYK or output intent)Convert all content (vector, text, images) to a target color space through ICC profiles, e.g. gray for print, or device-independent color matching a PDF/A output intent when merging mixed sources; PDF/X output is the print-production variant.absentlowLISO 32000-1 §8.6 Color spaces, §14.11.5 Output intents; ISO 15076-1 (ICC); ISO 19005-2 §6.2.41 2 3
Other ecosystemsCommand-line tool (dotnet tool, Native AOT)A CLI exposing check/validate, merge/split, stamp, encrypt/decrypt, attachments, extract, optimize and info, like every reference toolkit ships.absentmediumM1 2 3
Other ecosystemsContent stream editing API (tokenize, filter, rewrite)Parse a page's content into an operator list, filter or replace operators (remove an image or text object, replace an image XObject, coalesce streams, externalize inline images), and write it back.partialmediumMISO 32000-1 §7.8.2 Content streams; §8.9.7 Inline images1 2 3
Other ecosystemsConverting third-party documents to PDF/A (fixups)Turn an arbitrary received PDF into PDF/A-2b/3b (or 4): embed missing fonts, add an output intent, fix XMP and /Info, remove forbidden actions and JavaScript, handle transparency and encryption, then validate — the fixup side of preflight.partialhighXLISO 19005-2/-3 (PDF/A-2, PDF/A-3), ISO 19005-4 (PDF/A-4)1 2 3
Other ecosystemsCustom policies over the validation engine (business ingestion rules)Let callers express their own rules ('no JavaScript', 'all fonts embedded', 'max page size A3', 'not encrypted', 'PDF/A claimed') and get findings in the same report; veraPDF does this with Schematron over its feature and validation reports, pdfToolbox and Acrobat with custom preflight profiles.partialmediumM1 2
Other ecosystemsDecoders for CCITT G3/G4, JBIG2, DCT and JPEG 2000Managed, bounded decoders so images can be exported as PNG/TIFF, analyzed (ppi, blankness), redacted, downsampled, OCRed and rasterized.partialhighXLISO 32000-1 §7.4.6 CCITTFaxDecode, §7.4.7 JBIG2Decode, §7.4.8 DCTDecode, §7.4.9 JPXDecode; ITU-T T.4/T.6, ISO/IEC 14492, ISO/IEC 15444-11 2 3
Other ecosystemsDocument comparison (text and visual diff)Compare two versions of a document and report added, removed and changed text, images and annotations per page, as a report or an annotated PDF.absentmediumL1 2
Other ecosystemsDocument feature inventory and active-content triage reportA machine-readable inventory of what a document contains: fonts (type, embedded/subset, encoding, ToUnicode), images (size, bpc, color space, filter, effective ppi), color spaces and output intents, annotations by subtype, form type (AcroForm/XFA), signatures, attachments, optional content, page boxes, conformance claims, and active content (JavaScript, Launch, URI, SubmitForm, RichMedia) — plus a space-usage breakdown.partialmediumM1 2 3
Other ecosystemsFlatten annotations (not only form fields) into page contentBake the appearance streams of annotations — comments, highlights, stamps, signature appearances, widgets — into page content and remove the annotations, regenerating missing appearances first.partialhighMISO 32000-1 §12.5.5 Appearance streams; §12.5.3 annotation flags (Hidden, NoView, Print)1 2 3
Other ecosystemsForm data import/export (FDF, XFDF, JSON), batch fill, lock and resetExport and import field values as FDF/XFDF/JSON, fill one template from many records (one PDF per record, optionally merged), lock fields after filling, reset to defaults.partialmediumMISO 32000-1 §12.7.7 Forms Data Format; ISO 19444-1:2019 (XFDF)1 2 3
Other ecosystemsForm-aware and structure-aware merge (AcroForm, /DR, field collisions)When merging, merge /AcroForm (fields, /DR default resources, /NeedAppearances, /SigFlags, /CO) and resolve fully qualified name collisions (rename or join), as well as the structure tree, page labels, output intents, threads and named destinations.partialhighMISO 32000-1 §12.7.2 Interactive form dictionary, §12.7.3.2 field names1 2
Other ecosystemsImage downsampling and recompressionResample images above a ppi threshold to a target ppi, re-encode as JPEG at a quality, convert bitonal scans to CCITT G4 or JBIG2, optionally convert to gray; with presets like Ghostscript's -dPDFSETTINGS.partialhighLISO 32000-1 §8.9 Images; §7.4 filters1 2 3
Other ecosystemsImages to PDF without re-encoding (JPEG, JPEG 2000, multi-page TIFF)Turn image files into pages with the codec data passed through (JPEG as DCT, JPEG 2000 as JPX, TIFF G4 as CCITT), EXIF orientation honored, page size and margins chosen.partialhighMISO 32000-1 §8.9.5 Image dictionaries; §7.4.6/§7.4.8/§7.4.9 filters1 2 3
Other ecosystemsLossless JSON representation of a document (inspect and update)Dump the object graph (objects, streams optionally decoded, page and outline helpers) to JSON and apply edits back from JSON, as qpdf JSON v2 does with --json-output, --json-input and --update-from-json.absentlowL1 2
Other ecosystemsMetadata editing with Info/XMP synchronization and custom schemasRead and write document metadata as one model, keeping /Info and XMP in sync, with custom properties and namespaces, PDF/A extension schemas, and per-object XMP.partialmediumMISO 32000-1 §14.3 Metadata; ISO 16684-1 (XMP); ISO 19005-2 §6.6.2.3 (extension schemas)1 2 3
Other ecosystemsObject-model validation derived from the Arlington PDF ModelCheck every dictionary against the PDF Association's machine-readable Arlington model (TSV per object type: keys, types, required-ness, versions, possible values) instead of hand-writing 'required entries per /Type' rules.partialmediumLISO 32000-2:2020 (as modeled by Arlington)1 2 3
Other ecosystemsOCR: add an invisible text layer to scanned pagesRasterize or decode scanned pages, run an OCR engine behind an abstraction, and write an invisible (render mode 3) text layer aligned with the word boxes, making scans searchable, extractable and closer to accessible.absenthighLISO 32000-1 §9.3.6 Text rendering mode 3 (invisible)1 2 3
Other ecosystemsOptional content (layers): create, toggle, merge, removeRead and write /OCProperties and OCGs/OCMDs: put a stamp or watermark in a layer (view-only or print-only), change default visibility, merge layer configurations on assembly, and remove or flatten hidden layers.absentmediumMISO 32000-1 §8.11 Optional content1 2
Other ecosystemsOutline (bookmark) editing, import/export and generation for existing documentsCreate, edit, move, style (color, bold/italic) and delete bookmarks in an existing document; import/export an outline as JSON; generate an outline for an untagged third-party file from its tags or font-size heuristics.partialmediumMISO 32000-1 §12.3.3 Document outline, §12.3.2 Destinations1 2 3
Other ecosystemsPAdES baseline levels, LTV, document timestamps, certification and visible signaturesBeyond a basic signature: RFC 3161 signature and document timestamps, DSS/VRI with certificates, OCSP and CRLs (B-LT, B-LTA), certification signatures (DocMDP) and field locks (FieldMDP), empty signature fields, visible appearances.partialhighLISO 32000-2:2020 §12.8 (DSS, document timestamps); ETSI EN 319 142-1 (PAdES baseline); RFC 31611 2 3
Other ecosystemsPage boxes: crop, trim, bleed, art; auto-crop to contentRead and set CropBox/TrimBox/BleedBox/ArtBox, crop margins, and crop to the content bounding box.partiallowSISO 32000-1 §14.11.2 Page boundaries1 2 3
Other ecosystemsPage labels: read, write, and renumber on mergeRead and set /PageLabels (decimal, roman, letters, prefix, start), and offset or merge label ranges when pages are inserted, removed or merged, so the viewer's page box shows 'i, ii, 1, 2' or 'P-1, P-2'.absenthighSISO 32000-1 §12.4.2 Page labels1 2 3
Other ecosystemsPage resize, fit-to-paper, zoom, rotation flattening and poster tilingScale pages to a target paper size (fit, fill, with margins), zoom content, bake /Rotate into content, and tile an oversized page (A0 plan) onto several A4 sheets.partialhighMISO 32000-1 §8.10 Form XObjects, §14.11.2 page boundaries1 2 3
Other ecosystemsPDF pages as vector images in generated documents (letterhead, stationery, thumbnails)Use a page of an existing PDF as a Form XObject in HTML generation (<img src=letterhead.pdf>, CSS background, @page background) and place third-party pages scaled inside generated pages.partialmediumMISO 32000-1 §8.10 Form XObjects1 2
Other ecosystemsPDF portfolios (collections): read, unpack, createRead a /Collection's schema, folders and member files, unpack a portfolio into an assembled paginated document, or create one.partialmediumMISO 32000-1 §12.3.5 Collections, §7.11.6 Collection items1 2
Other ecosystemsPDF/A-4 (4f/4e), PDF/UA-2 and WTPDF profilesGenerate and validate the PDF 2.0-based standards: PDF/A-4 and 4f (attachments), PDF/UA-2 and Well-Tagged PDF (reuse and accessibility), with several claims checked in one run.partialmediumLISO 19005-4:2020; ISO 14289-2:2024; WTPDF 1.0 (PDF Association, 2024); ISO 32000-2:20201 2
Other ecosystemsRemoval of unreferenced page resourcesAfter extraction or split, drop fonts, images and XObjects that a page's content (and its nested forms) never names, so a 3-page extract of a 500-page report does not carry every shared resource.partialhighMISO 32000-1 §7.8.3 Resource dictionaries1 2
Other ecosystemsRevision history: enumerate, extract and diff incremental revisionsList the incremental revisions of a file, open the document as it was at revision N (e.g. the signed version), report which objects each update changed, and optionally undo edits (journaling).absentmediumSISO 32000-1 §7.5.6 Incremental updates; §12.8.1 /ByteRange1 2
Other ecosystemsSanitization: remove hidden informationOne configurable operation that removes JavaScript and actions (OpenAction/AA/Launch/SubmitForm), embedded files, metadata (/Info, XMP), thumbnails, hidden text, private application data (/PieceInfo), reviewer annotations, form data, links, structure tree, AcroForm, and superseded revisions kept by incremental updates, with a report of what was removed.absenthighMISO 32000-1 §7.5.6 incremental updates, §7.7.4 name dictionary (/JavaScript, /EmbeddedFiles), §12.6.4.16 JavaScript actions, §14.3 metadata, §14.5 page-piece dictionaries1 2 3
Other ecosystemsSignature validation (integrity, chain, revocation, modification analysis)Verify existing signatures: byte-range coverage, CMS digest and signature, certificate chain against a trust store, revocation (embedded or fetched), timestamps, DSS evidence, and whether changes after signing are allowed by DocMDP/FieldMDP.absenthighLISO 32000-1 §12.8 Digital signatures (§12.8.2.2 DocMDP); ETSI EN 319 102-1; ETSI EN 319 142-11 2 3
Other ecosystemsSplit strategies, page-selection grammar and collationSplit by every N pages, by top-level bookmark, by maximum file size or by page size; a page-range expression language ('1-3,7,r1', 'z', exclusions); collate/interleave pages of several files (duplex scans: odd pages file + reversed even pages file).partialmediumM1 2 3
Other ecosystemsStructured export: Markdown, HTML or JSON of text, tables and structureSerialize extraction results (reading order, headings from tags or fonts, tables, images) to Markdown/HTML/JSON chunks for indexing and LLM pipelines.partialmediumMISO 32000-1 §14.8 Tagged PDF1 2 3
Other ecosystemsText search with hit geometry (and highlight)Search a document for strings or regular expressions and return hits with page and quadrilaterals, handling hyphenation, ligatures and TJ-kerning spaces; optionally add highlight annotations or feed redaction.partialmediumM1 2 3
Other ecosystemsTrue redaction (content removal under redaction areas)Mark areas (or search hits) with /Redact annotations, then apply them: remove the glyphs, vector paths and image pixels underneath from the content streams, draw the overlay, and scrub what else leaks the redacted text (annotations, form values, bookmarks, metadata, earlier revisions). Options per content type, as in PyMuPDF's apply_redactions(images=, graphics=, text=).absenthighXLISO 32000-1:2008 §12.5.6.23 Redaction annotations (ISO 32000-2:2020 same clause)1 2 3
Other ecosystemsViewer preferences, page mode, page layout and open actionSet /ViewerPreferences (DisplayDocTitle, FitWindow...), /PageMode (UseOutlines, UseAttachments), /PageLayout and /OpenAction, and merge or drop them sensibly on assembly.partialmediumSISO 32000-1 §12.2 Viewer preferences; §7.7.2 Table 28 (/PageMode, /PageLayout, /OpenAction); ISO 14289-1 §7.1 (DisplayDocTitle)1 2 3
Other ecosystemsXFA forms: detect, report, extract datasets, removeDetect static vs dynamic XFA, report when the PDF pages are only a placeholder ('Please wait...'), extract the XFA datasets XML, and drop the XFA packet so AcroForm fallbacks render; full XFA layout stays out.absentmediumSISO 32000-1 §12.7.8 XFA forms (deprecated in ISO 32000-2)1 2 3