How it works

A plain-language walkthrough of what happens between dropping a PDF in and getting clean output, for both tools on the home page.

Tool 1: the text cleaner

Three stages run in sequence, entirely in your browser tab.

1. Reading positions, not words

A PDF stores text as glyphs positioned at coordinates, not as paragraphs. The first stage walks every page with PDF.js and groups glyph runs that share a baseline, meaning everything sitting on the same horizontal line, into a visual line, then sorts those lines top to bottom. Sorting by position rather than by file order is what keeps a two-column layout from interleaving into nonsense.

2. Applying the cleanup rules you selected

Each checkbox on the home page maps to one rule, applied in a specific order so the fixes don't conflict with each other:

3. Collapsing whitespace and producing the receipt

Runs of two or more spaces, the artifact of kerning and tab-stop positioning, are collapsed to one, without touching line breaks. The tool then counts exactly what it changed: hyphens rejoined, lines merged, space runs collapsed, and running heads dropped. It shows this as the cleanup receipt above the output, so nothing happens silently. If the PDF has no extractable text layer at all, the tool reports that directly instead of returning an empty box: that means the file is a scanned image and needs OCR before any of this can help.

Tool 2: the page extractor

  1. You enter a page range: single pages, comma-separated pages, or a range like 1-3, 5, 9-.
  2. The range is normalized: order is fixed, duplicates are dropped, and anything outside the document's actual page count is flagged before you build anything.
  3. pdf-lib opens the source file and copies the selected pages as complete PDF objects into a brand-new document. Fonts, vectors, and embedded images are copied as-is, never re-rendered or recompressed.
  4. The new, smaller PDF is offered as a direct download. The original file on your device is never touched.

Why none of this touches a server

Both tools run against libraries loaded into the page, namely PDF.js and pdf-lib, and operate on the file entirely in browser memory. There is no upload step in the code, no API call that carries file contents, and no server-side component that ever sees your document. Full detail is in the privacy policy. For the reasoning behind each cleanup rule and a longer look at why PDFs break the way they do, see the field guide on the home page.