project

Document Accessibility Remediation Tool (DART)

DART Logo

To help remediate documents that are not compliant with the Vermont Judiciary, I have developed a tool to address common issues such as field labeling, alternative text descriptions, and behind-the-scenes formatting, without altering the look, feel, or function of the document. This remediation tool also provides a robust manual remediation workflow that accounts for content and formatting that cannot be remediated automatically.

While this tool was developed with the help of Artificial Intelligence (AI), it is not AI but rather a tool that takes context clues from the document itself. I would like to keep developing and iterating through additional documents to help the tool become even more robust and be useful for many organizations.

What the tool looks at and why it matters:

  • Document title, language, and DisplayDocTitle — Screen readers announce the title as a person’s first orientation to a document, and the language setting selects the correct speech synthesizer voice and pronunciation. (SC 2.4.2 Page Titled; SC 3.1.1 Language of Page)
  • Form field tooltips and alternate descriptions from nearby visible text — Without an accessible name, a screen reader announces only “edit” — the person cannot know what to type. Labels are derived from the text a sighted person reads beside or above the field. (SC 1.3.1 Info and Relationships; SC 2.4.6 Headings and Labels; SC 3.3.2 Labels or Instructions)
  • No generic labels — MANUAL REMEDIATION NEEDED instead — A wrong-but-plausible name like “Fill-in field 3” actively misleads assistive-technology users; an honest gap routed to a human is safer than a guess. (supports SC 2.4.6)
  • Guided manual remediation with page highlight — The fields the tool refuses to guess are shown in place — highlighted on a schematic of the page — so a person can supply the correct wording quickly; the PDF only becomes a deliverable once every description is provided. (supports SC 2.4.6, SC 3.3.2)
  • Widget-to-structure linkage: /Form elements with OBJR, PrintField role, Placement — Assistive technology discovers form fields through the structure tree; unlinked widgets are invisible to document-order navigation. (SC 1.3.1; PDF/UA-1 / Matterhorn 15)
  • Link nesting and link completeness — including turning bare URL text into working links — Links must expose both their action and their text to assistive technology; URL text that is not a real link is a dead end for keyboard and screen-reader users. (SC 2.4.4 Link Purpose (In Context); SC 4.1.2 Name, Role, Value)
  • Untagged text tagged; decorative paths marked as artifacts — Untagged content simply does not exist for a screen reader — body text can be silently skipped; conversely, decorative lines read aloud are noise. (SC 1.3.1; Matterhorn 01-004/01-005)
  • Tagged-content-inside-artifact repair and whitespace-only tag removal — Content hidden inside artifacts disappears from assistive technology; empty tags add navigational noise between real content. (SC 1.3.1)
  • Heading level compaction and bookmarks generated from headings — Headings are the primary way screen-reader users skim; skipped levels break the outline, and bookmarks give long documents a navigable table of contents. (SC 1.3.1; SC 2.4.5 Multiple Ways; SC 2.4.10)
  • Table repairs: header scope, degenerate-table demotion, misplaced row groups — Correct table semantics let screen readers announce the header for each cell; false table semantics on layout grids cause confusing announcements. (SC 1.3.1)
  • Tab order follows structure; PDF/UA identifier; XMP metadata repair — Logical focus order keeps keyboard navigation predictable, and a well-formed XMP packet with the PDF/UA identifier lets checkers and AT trust the document’s claims. (SC 2.4.3 Focus Order; ISO 14289-1)
  • Word, PowerPoint, and email (.eml) remediation — The same standards apply beyond PDF: document titles and language, table header rows, heading level compaction, slide titles, and image alt text (missing alt goes to the manual list — never invented). Layout is never altered. (SC 1.1.1; SC 1.3.1; SC 2.4.2; SC 3.1.1)
  • Embedded accessibility scanner — results, structure tree, statistics, screen reader preview — Scan-remediate-rescan in one window; modeled on PAC by the PDF/UA Foundation, with one-click hand-off to the official PAC for certification. (workflow aid; see Copyright & resources)

Release Notes:

v2.1.2
Application graphics integrated: a document-with-accessibility-figure
icon (navy tile, white sheet, person-in-circle, green check badge)
ships as the executable/window icon at 16-256 px and as the in-app
header logo; favicon.ico (16/32/48) and a 512 px logo are provided
for paquin.dev/accessibility.

v2.1.1
Renamed to Document Accessibility Remediation Tool to reflect PDF,
Word, PowerPoint, and email support. The executable and project name
(PdfAccessibilityFixer) are intentionally unchanged so build scripts,
shortcuts, and the code-signing identity stay stable.

v2.1.0
Word (.docx), PowerPoint (.pptx), and email (.eml) remediation. Word:
title/language, table header rows, heading level compaction, image
alt-text audit (filename-only alt counts as missing). PowerPoint:
title/language, per-slide title check, image alt-text audit. Email:
HTML body language and title (from the Subject), image alt audit;
MIME structure and all other parts preserved byte-for-byte. Missing
alt text and slide titles go to MANUAL REMEDIATION NEEDED – never
guessed. Outlook .msg is a proprietary binary container: save as .eml
first.

v2.0.3
paquin.dev/accessibility identified as the official download site.
Release signing added: sign-release.ps1 publishes, Authenticode-signs
(Azure Trusted Signing or a certificate token), timestamps, verifies,
and emits a SHA-256 hash for the website. See README “Digitally
signing releases”.

v2.0.2
About window rebuilt with three tabs: what the tool fixes and why it
matters (with WCAG 2.1 AA links), these release notes, and copyright /
resources (application copyright, PAC attribution, open-source library
licenses, and paquin.dev/accessibility).

v2.0.1
Link completeness: bare URL text becomes a working link (URI annotation

  • inline Link element wrapping the existing text); OBJR-only Link
    elements adopt the text inside their rectangle and move inline.
    Ambiguous cases are listed under MANUAL REMEDIATION NEEDED. Matching
    scanner checks added.

v2.0
Embedded read-only accessibility scanner with PAC’s four-view workflow:
Results, Structure tree, Document statistics, and Screen reader
preview. Permanent attribution to PAC / PDF/UA Foundation, and an
“Open in PAC” button when the official tool is installed.

v1.9.1
Completion-gated saving: after any run with manual items the guided
workflow opens immediately; the PDF saves and the window closes
automatically when the last description is applied; abandoning the
session discards the incomplete output. Standalone Manual Fixes keeps
partial-save semantics for pre-existing files.

v1.9
Guided manual remediation: schematic page preview with the current
field highlighted, Enter-to-apply queue, descriptions written to /TU,
/Contents, parent-field /TU, and the /Form element’s /Alt; the PDF/UA
identifier is re-applied after save.

v1.8
Root-caused and repaired “tagged content inside artifacts” (a v1.7
scanner latch bug compounded by the whitespace pass); the repair pass
deletes offending artifact wrappers and restores original bytes.
Generic labels eliminated: fields with no derivable label go to a new
MANUAL REMEDIATION NEEDED report section. Button layout reordered.

v1.7
Untagged text objects tagged into the structure tree (34 on form
400-00825); XMP escape repair (unescaped “&” in titles broke the
whole packet, causing phantom identifier and title errors); bookmarks
generated from headings; version in title bar; About dialog.

v1.6
Misplaced THead/TBody/TFoot row groups unwrapped (root cause: v1.5’s
demotion left groups stranded under a Div); heading level skips
compacted with sibling-preserving renumbering (H1,H3,H3 -> H1,H2,H2).

v1.5
Placement:Block on Form/Link elements (resolved the 76 “possibly
inappropriate use” warnings); whitespace-only tagged elements removed
with content artifacted (57); degenerate header-only tables demoted;
multi-file batch remediation with per-file reports.

v1.4
Form elements gained OBJR children and PrintField role attributes;
self-healing legacy repair pass for documents processed by earlier
versions.

v1.3 / v1.3.1
PDF/UA identifier persisted via post-save XMP patcher (PdfSharp
regenerates metadata on every save, discarding pre-save edits); all
publish settings embedded in the project file.

v1.2
Link annotations nested in /Link structure elements; widgets linked
into the structure tree; untagged path content marked as artifacts.

v1.1
Label detection restricted to one visual line and the contiguous run
nearest the field (fixed merged multi-line labels); field-level names
for multi-widget fields.

v1.0
Initial release: document title, language, tab order, field tooltips
from nearby text, alternate descriptions, tagging check, remediation
report.