LeanImg

Hoe kan ik tekst uit een PDF extraheren zonder deze te uploaden?

Een digitale PDF geeft zijn tekst precies vrij en een scan moet worden herkend. Welke je hebt, wat zes gemeten fixtures deden, de limiet van 25 pagina's en de download waarvoor je betaalt, maakt niet uit.

· Updated

Twee bestanden kunnen beide eindigen op .pdf en hebben totaal verschillende bewerkingen nodig om de woorden eruit te halen. De ene is naar PDF gedrukt door een tekstverwerker en bevat al de karakters. De andere is een foto van papier in een PDF-wrapper. Onze PDF naar tekst pagina opent het bestand in je browser tabblad, controleert elke pagina en kiest wat die pagina nodig heeft. Je document verlaat nooit de schijf.

Twee engines delen de tab. pdf.js, de PDF-lezer van Mozilla, parseert het document en geeft ofwel de opgeslagen tekst of een gerenderde afbeelding van de pagina door. Tesseract, gecompileerd naar WebAssembly, herkent een pagina wanneer deze blijkt een afbeelding te zijn. Beide worden vanuit dit domein aangeboden en gecached na je eerste run.

Waarom is de ene PDF exact en de andere herkend?

Een PDF is een container, en de ISO 32000-1 specificatie geeft het een plek om tekstoperators op te slaan, samen met hun positie op de pagina. Software die een PDF genereert, schrijft echte karakters daarin, zodat ze weer terug te halen zijn. Niets wordt geraden. Dat is de enige plek waar het woord exact bij hoort.

Een scan bevat helemaal geen karakters. Iets heeft elke pagina gefotografeerd en de afbeelding is in een PDF gewikkeld, zodat die pagina's één voor één worden gerenderd en door OCR worden gestuurd. Ze erven de nauwkeurigheid en de foutmodi van die engine, die we hebben gemeten op screenshots in de afbeelding naar tekst beschrijving. Zelfde engine, zelfde modellen.

Hoe beslist het dat een pagina een scan is?

Door te tellen, pagina voor pagina. Het leest eerst de tekstlaag en telt de karakters daarin die geen witruimte zijn. Meer dan 20 en de pagina wordt letterlijk genomen en gelabeld als exact. Twintig of minder en de pagina wordt gerenderd en naar OCR gestuurd. Een geboren digitale pagina overschrijdt die lijn met een ruime marge: de dichte fixture die we testen, bevat 426 karakters.

De lijn is er om de scan te vangen die nog een los tekstobject bevat, een paginanummer of een kopstempel, wat anders als de hele pagina zou worden teruggegeven. Het is een drempel en geen test, dus het heeft een rand. Een scan met meer dan 20 karakters van los tekst overschrijdt de lijn, en je krijgt het briefhoofd gelabeld als exact terwijl de inhoud in de afbeelding blijft vergrendeld. De pagina samenvatting is waar dat zichtbaar is: een document waarvan je weet dat het gescand is, dat pagina's rapporteert die zijn gelezen vanuit de tekstlaag, is de zaak om naar te kijken.

Bij welke resolutie wordt een gescande pagina gelezen?

200 DPI. Een PDF meet zijn pagina's in eenheden van een 72ste van een inch, dus het renderen van een pagina op schaal 1 plaatst de hoofdtekst rond de 10 pixels hoog, onder de ongeveer 20 pixels waar de herkenningsnauwkeurigheid afneemt. Renderen op 200 DPI plaatst die tekst nabij 28 pixels en maakt een US Letter pagina 1700 bij 2200, wat de scanconventie is die dit hulpmiddel volgt.

Er is een tweede limiet achter: 4096 pixels aan de langste zijde, toegepast na de DPI-schaal. Een gewone pagina komt daar niet in de buurt. Een pagina langer dan ongeveer 20 inch wordt teruggeschaald om te passen en gelezen op minder dan 200 DPI, in verhouding tot hoe ver deze is overschreden. Een plan set of een poster is wat dat raakt, en niets op de kaart waarschuwt je.

Wat hebben de gemeten runs laten zien?

Zes fixtures gingen door de engine op 2026-08-12, op desktophardware. Gelijkenis vergelijkt de output met de tekst waarvan we wisten dat deze in het document stond, karakter voor karakter.

Echte runs, 2026-08-12. Duur is weggelaten omdat dit desktopmetingen waren en een telefoon trager is.
FixtureGelezen pagina'sMethodeGelijkenis
Geboren digitale PDF1 van 1Tekstlaag100,0%
Gescande pagina1 van 1OCR100,0%
Drie pagina's digitale PDF3 van 3Tekstlaag100,0%
28-pagina document25 van 28Tekstlaagniet beoordeeld
Corrupt bestandgeenAfgewezenniet beoordeeld
Wachtwoordbeveiligd bestandgeenAfgewezenniet beoordeeld
Drie PDF-resultaatkaarten: digital.pdf gelabeld als Tekstlaag exact, scanned.pdf met een 93% vertrouwensscore van zijn OCR-pass en multipage.pdf die drie pagina's samenvat die zijn gelezen vanuit de tekstlaag.
De kaart noemt de methode voordat je een woord van de output leest. digital.pdf komt terug gelabeld als "Tekstlaag: exact" zonder score eraan verbonden. scanned.pdf ging door OCR en rapporteert 93% vertrouwen voor die pass. multipage.pdf leest "3 pagina's: 3 exact gelezen vanuit de tekstlaag, 0 via OCR."

De gescande fixture kwam ook terug op 100,0%, en die rij heeft een asterisk nodig. We hebben het gebouwd door een afbeelding door de eigen JPG naar PDF converter van deze site te duwen, zodat het scherpe gerenderde type is zonder lens en zonder vervorming. De scanner van je bank is de moeilijkere zaak. Een batch van vier bestanden met het 25-pagina document erin nam 3,0 seconden op de klok op een desktop.

Wat meet de vertrouwensscore eigenlijk?

Het meet de OCR-pass, en alleen op pagina's waar OCR heeft gedraaid. Tekstlaagpagina's komen gemiddeld op 100 per definitie, dus een bestand met één slechte scan begraven in een stapel digitale pagina's rapporteert nog steeds een comfortabel nummer. Op een gemengd document vertelt dat gemiddelde je hoeveel van de tekst betrouwbaar is. De pagina samenvattingsregel is wat de OCR-vraag beantwoordt. "3 pagina's: 3 exact gelezen vanuit de tekstlaag, 0 via OCR" betekent dat er niets is herkend. Een PDF die volledig vanuit zijn tekstlaag is gelezen, draagt geen score.

Wat gebeurt er bij pagina 26?

Een PDF heeft 25 pagina's. De oversize fixture heeft 28, en de run las de eerste 25 en drukte een melding op de kaart die dat aangaf. Niets faalt stilletjes. Voor iets langer wil je het splitsen in welke PDF-lezer je ook hebt, en dan de rest als een tweede run verzenden.

Twee soorten bestanden worden outright geweigerd. Een corrupte PDF wordt afgewezen met de eigen bewoording van pdf.js, "Ongeldige PDF-structuur.", die in het Engels arriveert op elke locale omdat het van de lezer komt in plaats van onze vertalingen. Een wachtwoordbeveiligde PDF wordt ook geweigerd, en deze pagina vraagt je niet om het wachtwoord. Verwijder de bescherming in de lezer die je al gebruikt, en voer dan de kopie uit.

Is het veilig om een bankafschrift hier doorheen te halen?

Dat is de zaak waarvoor het hulpmiddel is gebouwd. Loonstroken, contracten en scans van een ID zijn de documenten waar mensen het meest tekst uit willen halen, en dat zijn de laatste die je op de machine van een vreemde zou willen laten staan. Er is geen upload-eindpunt in deze codebase dat er een kan ontvangen. Open het netwerk tabblad tijdens een run: engine chunks komen van dit domein en niets draagt je document weg.

De grote PDF-diensten werken de andere kant op. Je bestand bereikt eerst hun machines, en hun antwoord op de privacyvraag is een retentiebelofte: de kopie wordt na een aantal uren verwijderd. We citeerden die bewoording in het eerste artikel in deze serie. Het vertelt je hoe lang je loonstrook op de schijf van iemand anders blijft staan. Of het daar komt is een aparte vraag. Onze privacy pagina vermeldt wat we verzamelen.

Wanneer is dit het verkeerde hulpmiddel?

Handschrift. Het Tesseract-project zegt het zo duidelijk: je kunt het richten op handschrift en het zal niet goed werken, omdat de engine is gebouwd voor gedrukte karakters. Een gescand formulier met getypte labels en handgeschreven antwoorden geeft je de labels en ruis waar de antwoorden waren. Zelden de moeite waard om de run uit te voeren.

Lay-out is de andere. Een tekstlaag registreert waar elke reeks karakters zit en niets over wat het ook maar betekent, zodat een pagina met twee kolommen of een blok voetnoten terug kan komen in een volgorde die je oog nooit zou nemen. Tabellen verliezen het raster en komen als celinhoud in volgorde aan. Rechte proza is bijna altijd goed. Een opnieuw opgebouwd document met de oorspronkelijke lay-out is niet iets dat deze pagina produceert.

Voor de gescande helft komen de Tesseract kwaliteitsnotities overeen met wat onze fixtures toonden: grotere en scherpere karakters worden beter gelezen. Als je papier fotografeert in plaats van het te scannen, verslaat de afbeeldingsextractor met een uitsnede naar het tekstblok het inpakken van die foto in een PDF eerst.

Waarom downloadt een digitale PDF nog steeds een OCR-engine?

Omdat dat pad nog niet is gesplitst. Een PDF-run haalt de pdf.js worker binnen, 1.262.398 bytes in de 6.2.108 build die we leveren, plus de OCR-engine en één taalmodule van ongeveer 6 MB. Die OCR helft laadt zelfs wanneer elke pagina blijkt geboren-digitaal te zijn en er niets hoeft te worden herkend, dus bij een bestand zoals dat is de download verspild. Het is een bekende beperking. De rest van de lezer is luier: karakterkaarten en afbeeldingscodecs komen alleen aan wanneer een document ze nodig heeft.

Wat doe ik daarna met de tekst?

Je krijgt platte tekst. Kopieer het met de knop, of download een .txt met de pagina's gescheiden en gelabeld. Als je bron een screenshot is, is het afbeeldings naar tekst hulpmiddel de pagina daarvoor, en de zes screenshot fixtures die we beoordeeld hebben dekken de 515 karakters die OCR heeft uitgevonden van een foto zonder tekst erin. De andere richting op, de JPG naar PDF converter bouwt een document uit afbeeldingen en de compressor krijgt ze eerst omlaag wanneer ze zwaar zijn.

Probeer het op de slechtste PDF die je hebt. Laat het vallen op de PDF naar tekst pagina, lees dan de pagina samenvattingsregel voordat je de tekst leest.