Skip to main content
WEB

Paper to searchable text without leaving the phone

An Android scanner that crops, reads and exports on device, with no internet permission in the manifest.

THE PROBLEM

What was in the way

Most phone scanners send the page to a server to read it. For a contract, a payslip or a letter from a clinic, that turns a two second chore into a question about where the document went and who kept a copy.

The honest answer for anyone handling other people's paperwork is that they cannot tell. The upload is invisible, and the privacy policy is the only evidence they get.

THE APPROACH

How it was built

Recognition runs on the handset through ML Kit, so the page never needs a network hop. The manifest asks for the camera and nothing else, no internet permission at all, and a network security config blocks cleartext in case a dependency ever reaches out.

The capture path reuses Google's document scanner, then assembles an A4 PDF that carries the recognised lines as an invisible text layer under the page image.

Room holds the scan record and the cached text. A background worker fills in text for older scans, so library search matches on body content instead of re-running recognition.

Capture to exported document
Capture to exported document
HIGHLIGHTS

How it works

Crop and confirm before anything is saved

Edge detection and cropping happen in the capture flow. The page is kept or rescanned before a record exists.

Every scan stays re-readable

A saved scan keeps its page image and PDF, so text can be pulled again later without going back to the paper.

Text out in the formats people ask for

Recognised text copies, shares, or writes to Downloads as .txt. Word, Excel and CSV sit behind a one time unlock.

RESULTS

What it does now

no internet permissionthe manifest declares camera and legacy storage only
searchable PDFsinvisible text layer sits under each page image
text cached for searcha background worker backfills older scans
STACK

What it is built on

Kotlinapp and coroutines
ML Kit Document Scannercapture, crop, rescan
ML Kit Text Recognitionon-device OCR
Android PdfDocumentsearchable PDF assembly
Roomscan store and cached text
WorkManagerbackground OCR backfill
Play Billingone time export unlock

Got something in your workflow that looks like this?