Waarom werd mijn PDF nauwelijks kleiner?
Ik heb mijn PDF door een compressor gehaald en die ging van 4,1 MB naar 4,0 MB. Is de tool kapot?
Een PDF is een archiefkast
Het mentale model dat de teleurstelling veroorzaakt, is een PDF zien als een plaatje van een document. Dat is het niet. Een PDF is, zoals gedefinieerd in ISO 32000, een container met genummerde objecten: paginabomen, contentstreams vol tekenoperatoren, ingesloten fontprogramma's, afbeeldings-XObjects, formuliervelden, annotaties, bladwijzerstructuren en een kruisverwijzingstabel die aangeeft waar elk object begint.
De meeste van die objecten zijn al gecomprimeerd. Contentstreams zijn meestal Flate-gecodeerd, hetzelfde algoritme dat een ZIP-bestand gebruikt. Ingesloten foto's staan er meestal in als DCT-streams, wat neerkomt op JPEG-data die ongewijzigd is doorgegeven. Wanneer een algemene compressor naar een PDF kijkt, kijkt hij dus naar een doos met dingen die elk al één keer gecomprimeerd zijn.
Zoek uit waar de bytes zitten voordat je iets comprimeert
De nuttigste diagnose is weten wat voor soort document je hebt, want dat voorspelt het resultaat vrijwel volledig.
| Documenttype | Waar de bytes zitten | Wat structureel opslaan kan doen |
|---|---|---|
| Tekstrapport uit een tekstverwerker | Ingesloten fontprogramma's en kleine contentstreams | Heel weinig; de inhoud is al compact |
| Gescande pagina's | Eén grote afbeelding per pagina | Vrijwel niets zonder de afbeeldingen aan te raken |
| Presentatie-export | Ingesloten foto's en kleurverlopen | Iets, als afbeeldingen op meerdere dia's gedupliceerd zijn |
| Technische tekening | Lange vectorcontentstreams | Iets, door streams opnieuw te coderen en ongebruikte objecten te verwijderen |
| Formulier met bijlagen | Ingesloten bestanden, JavaScript, annotatiedictionaries | Veel, als de extra's verwijderbaar zijn |
Wat structureel opslaan echt verwijdert
Structureel opslaan schrijft het document opnieuw weg zonder te veranderen hoe een pagina eruitziet. Het kan objecten weggooien waar niets meer naar verwijst en die zich ophopen telkens als een document incrementeel wordt bewerkt en opgeslagen. Het kan de kruisverwijzingstabel comprimeren en kleine objecten samenpakken in objectstreams. Het kan documentmetadata, miniaturen en de bewerkingsgeschiedenis weggooien die sommige producenten achterlaten.
Bij een document dat vaak is bewerkt en opnieuw opgeslagen, kan dat veel opleveren. Bij een document dat één keer netjes uit een tekstverwerker is geëxporteerd, valt er niets op te ruimen: het bestand zit al dicht bij zijn kleinst mogelijke vorm, en honderd kilobyte van vier megabyte af is precies het resultaat dat je mag verwachten.
Waarom een tekstdocument zich verzet
In een tekst-PDF bestaat een groot deel van het bestand meestal uit ingesloten lettertypen. Een fontprogramma is een compact binair bestand met glyph-omtrekken en hinting-instructies, en het zit erin omdat het document er identiek uit moet zien op een machine waar dat lettertype niet is geïnstalleerd. Je kunt het niet wegcomprimeren zonder het verder te subsetten of te verwijderen, en verwijderen verandert hoe de pagina eruitziet.
De tekst zelf is minuscuul. Honderd pagina's proza is een paar honderd kilobyte aan tekens vóór compressie. Als je tekst-PDF groot is, kijk dan naar de lettertypen en naar afbeeldingen die zich achter de tekst verstoppen – een logo dat in elke koptekst terugkeert, een watermerk op de achtergrond – en niet naar de woorden.
Waarom een scan wél inklapt
Een gescande pagina is één grote foto van een vel papier, vaak vastgelegd op 300 dots per inch of meer. Een A4-pagina op 300 DPI is ruwweg 2480 × 3508 pixels – bijna negen miljoen stuks, voor een pagina waarvan de informatie-inhoud een paar kilobyte tekst is. Daarom reageren scans zo dramatisch op gerasteriseerde compressie: de renderresolutie verlagen en de pagina-afbeeldingen opnieuw coderen pakt precies het deel van het bestand aan dat echt groot is.
Het is ook de reden dat die modus destructief is. Zodra een pagina een plaatje is, zijn de doorzoekbare tekstlaag, de links, de formuliervelden, de annotaties, de getagde toegankelijkheidsstructuur en een eventuele digitale handtekening verdwenen. FileSlimmer behandelt rasterisatie als een aparte, duidelijk gelabelde modus met die waarschuwing erbij, en niet als een stille terugvaloptie wanneer structureel opslaan tegenvalt.
Waarom niemand je een getal kan beloven
Een doelgrootte voor een PDF is een zoektocht over renderresolutie en beeldkwaliteit, en die zoektocht heeft een bodem: onder een bepaalde resolutie houdt de tekst op een scan op leesbaar te zijn. Of een bepaald document boven die bodem een bepaald budget haalt, hangt af van het aantal pagina's, de inktdekking, de hoeveelheid fotografische inhoud en de ruis van de scanner. Twee documenten met hetzelfde aantal pagina's kunnen op heel verschillende groottes uitkomen.
Het eerlijke gedrag is stoppen bij die bodem en melden waar de zoektocht is gestrand, en dat is wat de presets voor PDF-doelgrootte van FileSlimmer doen. Een tool die altijd het getal haalt dat jij intypte, liegt over dat getal of vernielt het document om het te halen.
Voordat je de tool de schuld geeft
- Controleer of de PDF een scan is. Probeer een regel tekst te selecteren: als de cursor niets selecteert, is elke pagina een afbeelding.
- Zet het aantal pagina's af tegen de omvang. Een bestand van 40 MB met drie pagina's zit vol afbeeldingen; een bestand van 40 MB met 900 pagina's kan volstrekt redelijk zijn.
- Controleer of het document versleuteld is. Een met een wachtwoord beveiligde PDF kan pas worden geherstructureerd nadat hij is ontgrendeld.
- Controleer of hij ondertekend is. Een ondertekend document herschrijven maakt de handtekening ongeldig, en dat is meestal een slechtere uitkomst dan een groot bestand.
- Controleer wat je echt nodig hebt. De zes pagina's die je moet versturen eruit splitsen is vaak beter dan alle negentig comprimeren.
Tools hiervoor
Bronnen
- ISO 32000-2 — Document management, Portable Document Format
- Adobe — PDF 32000-1:2008, the freely published PDF 1.7 specification
- PDF Association — ISO 32000 and the PDF standards family