Skip to content

Print Accessibility Requirements

A normative requirements reference for paper-based document accessibility. This is a specification other Claude Code sessions and human engineers treat as authoritative β€” not a blog post, summary, or list of good ideas. Every entry is a discrete, sourced, testable requirement with a permanent ID.

Tracking issue: #2852.

The organizing thesis

Accessibility semantics live in a layer that does not print. PDF/UA tag trees, WCAG structure, alt text, reading order, link targets, ARIA, form field names and descriptions, table header associations, language attributes, and bookmark hierarchies are all ink-invisible. The moment a document is sent to a printer, that entire layer is discarded and only the visual layer survives.

Therefore: for any document that may be printed, the visual layer must independently carry every affordance the semantic layer carries. A document that is PDF/UA conformant on screen and unusable on paper has failed β€” the printed artifact is what the patient, student, or applicant actually holds. We assume anything our pipeline processes may eventually be printed. Forms especially: a fillable AcroForm becomes a hand-filled paper form the instant someone hits Print, and every assumption about auto-scaling text, tab order, tooltips, validation messages, and required-field indicators evaporates.

Print is regulated β€” just not by WCAG. It is governed by the effective-communication regime (ADA, Β§504, ACA Β§1557) and, in narrow domains, by codified minimum type sizes. See 00-legal-basis.md.

Scope & positioning

This KB is an internal print-safe guardrail and engineering reference. It exists to harden the output of our existing pipelines so a single document is conformant in both regimes at once β€” on screen (PDF/UA) and on paper. It is not a sellable print-compliance certification product; the validation section (09) is deliberately scoped to what our own tooling can enforce, and is honest about the boundaries.

Consumers of this KB:

  • PDF remediation pipeline β€” both the preserve-format β€œflyer” path and the HTML-rebuild β€œreflow” path (incl. WeasyPrint print-to-PDF)
  • docxβ†’AcroForm converter (tools/docx2acroform, marker-insertion approach)
  • Accessibility audit + ACR/VPAT generation tooling
  • Tag tree editor
  • Flipbook export path

This document is engineering guidance, not legal advice. Jurisdiction-specific questions go to counsel. See the disclaimer in 00-legal-basis.md (PRINT-LEGAL-018).

How to use

  • Find a requirement by its permanent ID (e.g. PRINT-FORM-014). IDs never change and are never renumbered once assigned; gaps in numbering are intentional insertion room.
  • Read the Level first: MUST = traceable to a statute, regulation, or a standard we contractually claim, or a hard rule we impose on our own output (source strength: our-implementation rule). SHOULD = strong consensus whose omission needs justification. MAY = optional enhancement. Two entries (PRINT-LEGAL-018, the legal disclaimer, and PRINT-LEGAL-019, the enforcement/remedies reference) are informational β€” they carry no requirement. RFC 2119 keywords are used precisely β€” a SHOULD is never inflated to a MUST to sound stronger, and no MUST rests on consensus standard / industry practice strength alone.
  • Read Source strength to know how much weight a requirement carries. Base vocabulary: statute / regulation / agency guidance / consensus standard / industry practice / our-implementation rule / unverified / n/a. A few legal entries compound or qualify these (e.g. statute + regulation, statute (scope note)) where the authority genuinely spans categories; the leading term is the primary basis. Much of the print-typography canon is consensus practice, not law, and is labeled as such.
  • For programmatic use, consume rules.json (see below).

How to cite

Cite by ID plus the requirement’s own Source line, which points to the primary authority (CFR section, standard clause, or named guideline). For procurement-facing defensibility, quote the primary source from the requirement, not this README. Every citation in the legal section was verified against a primary source (eCFR / govinfo / Cornell LII / DOJ ada.gov / CMS / FDA); anything that could not be confirmed is flagged Source strength: unverified with a note on what remains open.

Sections

FilePrefixCovers
00-legal-basis.mdPRINT-LEGALEffective-communication regime (ADA II/III, Β§504, Β§508 scope, ACA Β§1557), 2024 DOJ web rule dual-regime exposure, codified point-size mandates (CMS ABN, 42 CFR Β§422/423.2267, FDA 21 CFR 201.66), enforcement/remedies
01-typography.mdPRINT-TYPOPoint-size floors, typeface, weight, spacing, leading, measure, justification, case; general Clear Print floor vs large-print alternate
02-color-contrast-and-ink.mdPRINT-COLORWhy WCAG sRGB luminance is invalid on paper; reflectance-based contrast target; grayscale/monochrome survival; color as sole carrier
03-layout-and-structure.mdPRINT-LAYOUTColumns, visual heading hierarchy without tags, tables across page breaks, captions as the print substitute for alt text
04-forms.mdPRINT-FORMFlagship. Fill-space geometry, comb fields, checkbox/radio dimensions, label proximity, required-field indication, lost metadata (tooltips/validation), the docx→AcroForm geometry gate
05-substrate-and-production.mdPRINT-SUBSTRATEPaper weight/opacity/finish, duplex, binding, and the print-at-100% / shrink-to-fit trap
06-alternate-formats.mdPRINT-ALTLarge-print production spec; braille/audio/tactile as hand-off pointers (we do not produce these); request-notice text + no-surcharge
07-plain-language.mdPRINT-LANGReading-level targets and their limits; why cognitive accessibility is disproportionately a print problem
08-digital-to-print-fidelity.mdPRINT-FIDELITYAffordance→print-fate→visual-compensation inventory; the print-safe profile; conflict-resolution rule; URL handling
09-validation.mdPRINT-VALIDAutomatable / assistable / human-only buckets; measurement methods; physical-print verification; audit-tooling extensibility map
APPENDIX-state-law.mdPRINT-LEGAL-011..013US state layer (NAIC insurance readability, contract conspicuousness, Texas) β€” jurisdiction-scoped, non-exhaustive
rules.jsonβ€”Machine-readable companion, strictly in sync with the markdown
INVENTORY.mdβ€”The approved requirement inventory (IDs + titles), retained for provenance

The machine-readable companion (rules.json)

One object per requirement, kept strictly in sync with the markdown (same IDs, same thresholds β€” 117 entries in both). Schema:

{
"id": "PRINT-FORM-014",
"title": "…",
"level": "MUST | SHOULD | MAY | informational",
"applies_to": "all documents | forms only | large-print alternates only",
"source": "…primary citation or 'our-implementation rule'…",
"source_strength": "statute | regulation | agency guidance | consensus standard | industry practice | our-implementation rule | unverified | n/a (leading term primary; a few legal entries compound)",
"machine_checkable": "yes | partial | no",
"validation_method": "…",
"parameters": { /* typed numeric thresholds, not prose; structured conditionals where a threshold varies by doc type/jurisdiction */ },
"related_ids": ["…"]
}

Linters and the audit pipeline consume rules.json. If you edit a threshold or level, edit both the markdown and rules.json in the same change β€” they must never diverge.

Sync contract (enforced): id, level, and numeric thresholds are identical in both. For source_strength, rules.json stores the normalized base term from the controlled vocabulary; the markdown may add a human gloss (statute β€” scope note, consensus standard / analytical) whose leading term equals the json value. No MUST rests on consensus standard or industry practice strength alone β€” MUSTs are backed by statute/regulation/agency-guidance or our-implementation rule.

Requirement count & level distribution (v1.1)

117 requirements. 18 MUST (all traceable to a verified statute/regulation/standard-we-claim, or a hard rule on our own output), 86 SHOULD, 11 MAY, 2 informational.

Known sourcing gaps (v1.0)

Flagged honestly rather than papered over:

  • PRINT-LEGAL-013 β€” the exact codified point size (if any) for Texas Medical Disclosure Panel consent forms is unverified (tmdp_consent_point_size: null); needs 25 TAC ch. 601 / current TMDP forms.
  • PRINT-FORM-001/002/003/007 β€” hand-completion fill-space and target-spacing minimums have no codified federal source; the numbers are ergonomic floors marked industry practice.
  • Typography floors (PRINT-TYPO-*) β€” general Clear Print and large-print numbers are consensus standard (APH 2022, CNIB 2020, UKAAF, BS 8300-2:2018), not regulation. Do not represent them as legally binding outside the domains covered in 00.
  • Converter geometry gate implemented (issues #2858, #2865, tools/docx2acroform/print_safe.py): checkboxes grow to the 14 pt floor; sub-floor field geometry, date/signature widths, unlabeled fields, required fields with no printed indicator, dropdowns (no print analogue), and crowded adjacent targets are all flagged in the conversion report (PRINT-FORM-001/002/004/005/007/014/017/023/024). Still deferred: the bound-edge margin gutter (PRINT-LAYOUT-012), which needs a binding-side input, and rendered-colour detection of colour-only required cues (we flag by the absence of a text/* marker instead).

Changelog

  • v1.0 (2026-09-09) β€” Initial knowledge base. 116 requirements across 10 sections + state-law appendix + rules.json. Legal citations verified against primary sources; consensus-vs-mandate distinction applied at the requirement level. Positioning: internal print-safe guardrail (not a certification product); braille/audio scoped to hand-off; state law in appendix.
  • v1.1 (2026-09-10) β€” Added PRINT-LEGAL-019 (enforcement, remedies, and penalties). The KB documented every duty and no consequence; this entry supplies the remedies structure per regime, the deliberate-indifference damages standard, the Barnes / Cummings limits, and the Title III DOJ civil-penalty figures as adjusted by 28 CFR 85.5. Reference-only: no gate, no output behavior. 117 requirements.