Wat een PDF eigenlijk is, en waarom je de tekst niet altijd kunt kopiëren

Hoe een PDF glyphs op coördinaten opslaat in plaats van woorden, hoe je een scan van echte tekst onderscheidt, en wat lettertypen, paginakaders, rotatievlaggen en wachtwoorden doen bij samenvoegen of splitsen.

Een PDF is een lijst met tekeninstructies. Hij zegt: zet deze glyph op deze coördinaat, in dit lettertype, op deze grootte, ga dan hierheen en teken de volgende. Hij zegt niet: dit is een kop, dit is een alinea, deze kolom komt vóór die andere. Alles wat een lezer over de structuur van een pagina lijkt te weten, is achteraf gereconstrueerd door de afstanden tussen de tekens te meten, en dat verklaart het meeste van wat er frustrerend is aan PDF's.

Wat een PDF werkelijk opslaat

Tekst op een pagina staat in een content stream, een korte reeks operatoren:

BT
  /F1 11 Tf
  72 708 Td
  [(In) -18 (v) 22 (oice)] TJ
  180 0 Td
  (2026-08-25) Tj
ET

Tf kiest een lettertype en een grootte, Td verplaatst de tekstcursor, en TJ tekent glyphs met kerningverschuivingen ertussen. Let op wat er ontbreekt: nergens een spatieteken. Het gat vóór de datum is een sprong van 180 eenheden, en een extractor moet beslissen of elke sprong een spatie, een tab, een kolomgrens of helemaal niets is. Een drempel die net verkeerd staat geeft je Invoice2026-08-25 of I n v o i c e.

De leesvolgorde heeft hetzelfde probleem: glyphs komen eruit in de volgorde waarin ze getekend zijn. Een opmaak met twee kolommen tekent vaak eerst de linkerkolom van boven naar beneden en daarna de rechter, en dan werkt kopiëren; tekende de generator regel voor regel dwars over het vel, dan vlecht kopiëren de kolommen tot onzin dooreen.

Een tekst-PDF van een scan onderscheiden

Een gescand document bevat helemaal geen tekst: het is een foto van een pagina, verpakt in een PDF. Optische tekenherkenning legt er een onzichtbare tekstlaag overheen, waarmee het bestand doorzoekbaar wordt, maar die laag is een gok, dus de fouten erin duiken op als mislukte zoekopdrachten en verminkte kopieën.

ControleTekst-PDFGescande PDF
Selecteer een woordMarkeert teken voor tekenEr selecteert niets, of de hele pagina
Zoom naar 400%Letters blijven scherpLetters worden zacht of blokkerig
Grootte per paginaVaak 20 tot 100 KBVaak 300 KB tot enkele MB
Extract Images from PDFGeeft de echte afbeeldingen terug, of nietsGeeft één paginabrede afbeelding per pagina terug

Lettertypen, insluiten en subsetten

Een lettertype is ofwel ingesloten, wat betekent dat het lettertypeprogramma in het bestand zelf zit, ofwel op naam en metriek genoemd, zodat de lezer iets vergelijkbaars zoekt op de machine die het toont. Genoemde lettertypen zijn de reden dat een document er goed uitziet waar het gemaakt is en verkeerd elders: de vervanger heeft andere tekenbreedtes, dus regels lopen anders af, tabellen lopen over en een brief van één pagina wordt er twee.

Ingesloten lettertypen zijn vrijwel altijd gesubset. Alleen de gebruikte glyphs zitten erin, en ze worden regelmatig hernummerd, zodat de glyph voor A op code 3 kan staan. De afbeelding terug naar echte tekens staat in een aparte ToUnicode-tabel, en wanneer die ontbreekt of verkeerd is, wordt de pagina perfect weergegeven terwijl de gekopieerde tekst als brabbeltaal aankomt, omdat je interne glyphcodes krijgt in plaats van tekens. Opnieuw opslaan repareert dat niet; de uitwegen zijn het brondocument of tekenherkenning over de weergegeven pagina's.

Paginaformaat, kaders en rotatie

Coördinaten zijn in punten, 72 per inch, en elke pagina draagt meerdere rechthoeken. De MediaBox is het volledige vel; de CropBox is het gebied dat daadwerkelijk getoond wordt, dat kleiner kan zijn.

FormaatPuntenMillimeters
A4595 x 842210 x 297
Letter612 x 792216 x 279
Legal612 x 1008216 x 356

A4 en Letter zien er op het scherm identiek uit en verschillen op papier, dus een Europees rapport samenvoegen met een Amerikaans geeft pagina's die in formaat afwisselen.

Elke pagina draagt ook een rotatievlag van 0, 90, 180 of 270 graden, zodat inhoud die op zijn kant is opgeslagen rechtop getoond kan worden. Rotate PDF zet die vlag in plaats van iets opnieuw te tekenen, wat het direct en verliesvrij maakt, maar de coördinaten eronder blijven ongewijzigd: een tool die de vlag negeert haalt de tekst op zijn kant eruit, en pagina's met gemengde vlaggen samenvoegen geeft een document dat er samenhangend uitziet terwijl de inhoud in meerdere oriëntaties staat.

Samenvoegen, splitsen en de delen die breken

Pagina's staan in een paginaboom. Merge PDF kopieert pagina-objecten en alles waar ze naar verwijzen naar één bestand en bouwt die boom opnieuw op; Split PDF neemt er een tak uit. De pagina's komen intact door, wat aan het document hangt niet altijd.

  • Bladwijzers vormen een aparte inhoudsopgave die naar pagina-objecten wijst. Veel samenvoegtools laten hem helemaal vallen, en splitsen laat vermeldingen achter die naar pagina's wijzen die er niet meer zijn.
  • Formuliervelden krijgen hun naam op documentniveau, niet op paginaniveau, dus twee kopieën van één formulier samenvoegen geeft twee velden met de naam name, wat veel lezers behandelen als één veld met een gedeelde waarde: de een invullen vult de ander in. Vlak ze eerst af of hernoem ze.
  • Annotaties zoals links en opmerkingen reizen met hun pagina mee, maar een interne link waarvan de doelpagina bij het splitsen is weggelaten, kan nergens heen.

Een samengevoegd bestand is vaak groter dan de delen omdat gedeelde bronnen gedupliceerd worden: vier bronnen die elk een subset van hetzelfde lettertype insloten, geven vier subsets, plus vier kleurprofielen en vier metadatablokken. Het kan ook kleiner uitvallen, omdat het herschrijven ongebruikte objecten en de bewaargeschiedenis weggooit: een document dat dertig keer is opgeslagen, draagt elke eerdere versie eraan vastgeplakt mee.

Wachtwoorden, rechten en tags

Er zijn twee soorten wachtwoorden en ze zijn niet vergelijkbaar. Een gebruikerswachtwoord is nodig om het document te openen: de inhoud is werkelijk versleuteld met een sleutel die eruit is afgeleid, dus zonder dat wachtwoord valt er niets te lezen. Moderne bestanden gebruiken AES-256, heel oude 40-bits RC4, wat zwak is.

Een eigenaarswachtwoord zet rechtenvlaggen zoals niet afdrukken, niet kopiëren en niet bewerken. Het bestand is nog steeds versleuteld, maar met een sleutel die elke lezer zelfstandig kan afleiden, omdat het gebruikerswachtwoord leeg is. De vlaggen zijn een verzoek, dat sommige lezers honoreren en andere negeren: opent een bestand zonder dat er iets gevraagd wordt, dan zijn de beperkingen adviserend, wat het eigenschappenvenster ook zegt.

Tagging is een andere laag: een optionele structuurboom die koppen, lijsten, tabelcellen en beschrijvingen van afbeeldingen markeert en een leesvolgorde vastlegt. Een schermlezer leest bij een getagde PDF het document; bij een ongetagde gokt hij op basis van coördinaten, met hetzelfde dooreengegooide resultaat als bij kopiëren en plakken. Scans zijn per definitie ongetagd, tekenherkenning voegt tekst toe maar geen structuur, en uitvoer van Images to PDF of PDF to Images heeft geen van beide.

Waar de omvang zit, en wat de browser aankan

De bestandsgrootte zit vrijwel altijd in afbeeldingen. Een A4-pagina heeft ruwweg 1240 bij 1754 pixels nodig op 150 dpi en 2480 bij 3508 op 300 dpi, dus een foto die op 12 megapixel geplaatst is draagt veel meer data dan het drukwerk kan gebruiken, en terugschalen is de enige verandering die een document betrouwbaar verkleint. Een PDF met alleen tekst opnieuw opslaan levert erg weinig op, omdat de content streams al gecomprimeerd zijn; is er een onverwacht groot, kijk dan naar ingesloten lettertypen, bewaargeschiedenis of bijlagen.

Dit alles gebeurt lokaal in de browser, dus er wordt niets geüpload en de beperking is geheugen en niet bestandsgrootte. Het weergeven is het dure deel: een A4-pagina op schaal 4x is ongeveer 2380 bij 3368 pixels, ruwweg 32 MB aan ongecomprimeerde bitmap voor één pagina, dus vijftig pagina's op die schaal putten een browsertabblad uit lang voordat ze de machine last bezorgen. Splits een heel groot document eerst en werk daarna in porties.