PDF & Perl

Een PDF-bestand bestaat gewoon uit platte tekst, dus met een gratis beschikbare taal als Perl kun je wijzigingen aanbrengen, zo lang je maar weet wat je doet. Ik gebruik graag Perl als ik dingen wil doen met PDF's buiten Acrobat om. Mijn Perl-module voor de manipulatie van PDF's is nooit af.

Telkens wanneer nieuwe concepten worden opgenomen in de specificatie van het PDF-formaat, kijk ik of daarmee nieuwe mogelijkheden beschikbaar komen. Een goed voorbeeld is cross-reference streams en object streams, door Adobe geïntroduceerd in versie 1.5 van PDF (gelijk met Acrobat 6).

Een object stream is een stream die een of meer objecten bevat. Een object stream is zelf weer de inhoud van een "gewone" stream. Binnen een object stream worden objecten aangeduid met het nummer van het containerobject en de positie van het object in de stream. Als ik dus met Perl een object wil toevoegen aan een PDF, moet ik specificeren of dat object binnen een object stream valt en zo ja, welke. Ook moet worden bijgehouden hoeveel objecten er in de stream zitten (de PDF-specificatie raadt aan om dit aantal beperkt te houden).

Een cross-reference stream bevat dezelfde informatie als een cross-reference table maar dan compacter. Omdat het om een stream gaat, bestaat de mogelijkheid tot compressie.

Bestanden met cross-reference streams en object streams kan ik al inlezen. Ik hoef niets te veranderen aan de interne datastructuur voor de cross references. Ik heb ook al alle code voor het wegschrijven ervan. Nu moet ik nog uitwerken op welke manier ik dit alles het beste in de module kan opnemen.