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, andPRINT-LEGAL-019, the enforcement/remedies reference) areinformationalβ 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 onconsensus standard/industry practicestrength 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
| File | Prefix | Covers |
|---|---|---|
00-legal-basis.md | PRINT-LEGAL | Effective-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.md | PRINT-TYPO | Point-size floors, typeface, weight, spacing, leading, measure, justification, case; general Clear Print floor vs large-print alternate |
02-color-contrast-and-ink.md | PRINT-COLOR | Why WCAG sRGB luminance is invalid on paper; reflectance-based contrast target; grayscale/monochrome survival; color as sole carrier |
03-layout-and-structure.md | PRINT-LAYOUT | Columns, visual heading hierarchy without tags, tables across page breaks, captions as the print substitute for alt text |
04-forms.md | PRINT-FORM | Flagship. 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.md | PRINT-SUBSTRATE | Paper weight/opacity/finish, duplex, binding, and the print-at-100% / shrink-to-fit trap |
06-alternate-formats.md | PRINT-ALT | Large-print production spec; braille/audio/tactile as hand-off pointers (we do not produce these); request-notice text + no-surcharge |
07-plain-language.md | PRINT-LANG | Reading-level targets and their limits; why cognitive accessibility is disproportionately a print problem |
08-digital-to-print-fidelity.md | PRINT-FIDELITY | Affordanceβprint-fateβvisual-compensation inventory; the print-safe profile; conflict-resolution rule; URL handling |
09-validation.md | PRINT-VALID | Automatable / assistable / human-only buckets; measurement methods; physical-print verification; audit-tooling extensibility map |
APPENDIX-state-law.md | PRINT-LEGAL-011..013 | US 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 isunverified(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 markedindustry practice.- Typography floors (
PRINT-TYPO-*) β general Clear Print and large-print numbers areconsensus standard(APH 2022, CNIB 2020, UKAAF, BS 8300-2:2018), not regulation. Do not represent them as legally binding outside the domains covered in00. - 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.