Free & open source · MIT license

The last mile of PDF accessibility,
without the enterprise price tag

LastMilePDF is a free desktop app for cleaning up the tag structure behind PDF/UA and WCAG compliance — built for the accessibility work that auto-taggers leave half-finished, and designed to make the manual pass fast and easy, especially for scanned PDFs.

LastMilePDF in its dark theme. A PDF page preview fills the left pane, with a bulleted list on the page outlined in teal and labelled /L. The tag tree in the middle has that list's /L tag selected and expanded to show its /LI, /Lbl and /LBody children. Tag properties on the right show the role "L", empty language and alt text fields, and a live list preview of the four bullet items.
Dark theme
The same window in the light theme: identical document, identical selected list tag, on a white background with darker text and outlines.
Light theme
Why it exists

Accessibility remediation is a mandate, and Acrobat alone doesn't cut it.

Universities and nonprofits are under real, growing pressure to make PDFs accessible — course materials, grant reports, public filings, scanned archives. Most of that work is manual tag cleanup, and most institutions doing it are stretched thin on both staff and software budget.

🎓

Built for the compliance reality

Title II ADA rules, Section 508, and WCAG 2.1 AA obligations apply to campus course content, public-facing documents, and grant deliverables alike. The gap is almost always in the tag tree, not the visible page.

💸

Not another per-seat license

LastMilePDF is free and open source under the MIT license. Use it on as many machines as you need — a disability services office, a library digitization lab, a one-person communications team — without a procurement cycle.

🤝

A companion, not a replacement

It doesn't OCR or auto-tag — it makes the manual review and cleanup pass fast. Keep using whatever auto-tagger or Acrobat license you already have; LastMilePDF covers the editing experience Acrobat's UI makes painful.

Features

Everything the last mile of tagging actually needs

Keyboard-first tag editing, built specifically around the repetitive cleanup work that scanned and auto-tagged PDFs generate.

/TagFast structural editing

Reorder, retype, merge, and delete tags with keyboard shortcuts built for doing it hundreds of times in a row — not for occasional use.

/TableTable editor with auto-scope

Fix table headers and scope automatically instead of hand-tagging every <TH>/<TD> relationship.

✏️ Tag straight from the page

Drag a rectangle over the page preview and press one key to tag what's underneath. It cuts text at the rectangle's edges, so a heading the auto-tagger swallowed into the paragraph below it comes out as a real heading — and a box drawn around a set of bullets — or around an academic reference list marked out by nothing but its hanging indents — becomes a properly structured list.

/TableDraw a table over a scan

Drag a rectangle over a scanned table for automatic row/column detection, or mark them manually with line tools for more controlled automatic tagging.

🔍 Find/Replace for tag types

Bulk-correct a mis-tagged role across the whole document in one pass.

🧩 Visual script builder

Sequence repeated cleanup actions into a saved script, then run the same fix across every document in a batch of scans.

🪄 One-click flatten

Strip extraneous span/div tags that auto-taggers leave behind, without touching the content that matters.

🤖 Optional AI-assisted OCR proofing

Clean up OCR errors in Actual Text fields with any AI provider you configure, with every change highlighted for your approval before it's applied.

🖼️ Catch missed figures

Tag figures on scanned pages that the auto-tagger skipped, and filter straight to figures when it's time to add alt text.

🗂️ Filters for every pass

Narrow the tree to Figures, Tables or Lists, to the tags still missing alt text, to empty ones, or to just the ones an AI fix changed.

🚶 Guided walk mode

Walk the tree automatically at the pace you set — no more holding down the arrow key through a 40-page document.

👁️ Proofread & AT-diff views

Compare OCR text against the source image side by side, and highlight any difference between Actual Text and OCR so you can review your own edits.

✨ Smartifact

Artifact full-page decorative figures in one click — the fix for auto-taggers that generate a spurious figure tag on every scanned page.

✅ Built-in accessibility check

Run the common PDF/UA and WCAG checks locally, jump straight to each failure, and repair the mechanical ones in a click.

♻️ Artifacts tab

List everything the file marks as an artifact, and tag it back into the tree when it was skipped by mistake.

📍 Picks up where you left off

Reopen a document and it comes back to the tag, the expanded branches and the page you left it on.

See it

A closer look at the parts that save the most time

Three of the places the manual pass usually gets slowest: proofreading OCR text against the page, sorting out table headers, and working out what still needs fixing.

Proofread Mode in the dark theme. The page preview sits on the left, a wide Actual Text field in the middle holds the selected tag's text with the words an AI pass changed highlighted in yellow, and a narrow tag tree strip on the right marks each corrected tag with an "AI fix" badge. A bar below the field reads "AI fix applied — changes highlighted" next to a Revert button.
Proofread Mode with AI-assisted OCR fixes. The page image and the text it produced sit side by side, every AI change is highlighted for approval, and Revert puts the original back. The tag strip flags which tags were touched.
The Table Editor dialog in the light theme, showing a five-row table as an editable grid. Header cells carry scope arrows — a down arrow for column scope, a down-and-right arrow for both — and a red cross marks one header with no scope set. The cell reading "Trieste, 1909-1912" is selected, with column span, row span, and "Convert to Header (TH) or Data (TD)" controls along the bottom.
Table editor with scope at a glance. Edit cells in place, add or delete rows and columns, set spans, and convert between header and data cells — with each header's scope shown as an arrow, so a missing one is obvious.
The Accessibility Check dialog in the light theme, reporting "4 failed checks". Results are grouped under Document, Bookmarks and Headings, and every row is marked with a tick, a cross or a dash beside its name: "Tagged PDF" passes, "Document title" fails with "No document title is set", and "Bookmarks present for long documents" is marked not applicable.
A checker that says what to fix next. Common PDF/UA and WCAG problems, grouped and explained, with an inline Repair button on the ones the app can fix for you. Each result is marked by shape as well as colour, so the report itself doesn't depend on distinguishing green from red.
Honest scope

What it's for, and what it's deliberately not

✅ What LastMilePDF is for

  • Cleaning up and correcting tag structure that a tagger already produced
  • Fast manual editing of roles, reading order, alt text, and Actual Text
  • Table structure and scope review
  • Bulk fixes via find/replace and saved scripts
  • OCR proofreading with optional AI assistance you control

⚠️ What it doesn't do (yet)

  • It can't run OCR
  • It can't auto-tag an untagged PDF from scratch
  • It doesn't currently support full manual tagging of a document with no structure at all

It's meant to complement the tools you likely already have — an auto-tagger and/or Adobe Acrobat — by making the manual review and correction pass fast.

Download

Get LastMilePDF

Free, MIT-licensed, no account required.

Windows & Linux
Checking the latest release…

Installers are unsigned, so Windows SmartScreen will show a warning on first launch — click "More info" → "Run anyway." Linux AppImages need chmod +x and, on some distros, libfuse2. macOS isn't packaged yet; running from source works, see the README. All releases are visible on the GitHub releases page.