Ovo je stara izmjena dokumenta!
PDF (Portable Document Format) datotečni je format koji se koristi za prikaz dokumenata koji sadrže tekstualne, multimedijske i razne druge elemente. Najčešća je funkcija PDF formata prikaz teksta, ali njegova uporaba toliko je raznovrsna da može odrađivati i malo egzotičnije stvari - poput zaštite lozinkom ili izvršavanja JavaScript programa. Osnovna struktura PDF formata sastoji se od tri 4 dijela:
Zaglavlje čini prvi oktet PDF dokumenta i precizira korištenu verziju formata.
Na sljedećoj slici nalazi se primjer zaglavlja PDF dokumenta* verzije 1.3 prikazanog u uređivaču HxD.
*Primjer korišten u ovom seminaru preuzet je ovdje.
Znak na početku zaglavlja, %, predstavlja komentar u PDF dokumentu - u ovom primjeru može se vidjeti da su prve dvije linije PDF dokumenta komentari.
U tijelu PDF dokumenta nalaze se tekstualni i multimedijski objekti - točnije - objekti prikazani korisniku.
Kako pristupiti elementima PDF dokumenta? Odgovor na to može se naći u tablici kružnih referenci koja sadrži reference na sve objekte u dokumentu. Tablica kružnih sastoji se od zapisa veličine 20 okteta koji predstavljaju svaki objekt u dokumentu, što omogućuje nasumični pristup željenom objektu bez slijednog pretraživanja cijelog PDF dokumenta. Ova tablica nalazi se iza tijela dokumenta i njen se početak može prepoznati po ključnoj riječi “xref”. Na prikazanoj slici možemo vidjeti sadržaj tablice križnih referenci.
Kako bismo ju demistificirali, potrebno je razjasniti njene dijelove - ID objekta, broj elemenata u objektu, odmak elementa i broj generacije elementa koji služi kao oznaka revizije unutar dokumenta, što je posebnost PDF formata, umjesto izvan dokumenta. Na primjer, ako je dokument tek izrađen, element će biti generacije 0. Zadnji znak u zapisu određuje je li element oslobođen (“f”) ili se koristi (“n”). Ako je element oslobođen, nije prikazan i ne koristi se u dokumentu, ali bi i dalje mogao biti prisutan, za razliku od korištenog elementa koji je prikazan u dokumentu. U slučaju prikazanom na slici, ID objekta je 0 i sadrži 11 elemenata. Sljedećih 10 bajtova predstavlja odmak - 0 - i njegov generacijski broj je 65535 (maksimalni). Generacijski broj elementa inkrementira se svaki put kad je element oslobođen, a u slučaju da se element ponovno koristi, tada se postojeći generacijski broj ne mijenja. Na kraju zapisa nalazi se zastavica f, što znači da je ovaj objekt oslobođen. Svaki oslobođeni element kao odmak ima referencu na sljedeći slobodni element, dok korišteni element na tom mjestu ima zapisan odmak od početka dokumenta do početka elementa.
Trailer specificira način na koji čitač dokumenta treba naći tablicu križnih referenci i ostale objekte u dokumentu. Svaki PDF dokument čita se od kraja označenog s “%%EOF”, a njemu izravno prethodi niz znakova koja određuje odmak xref tablice od početka dokumenta, što je u našem slučaju 2714 okteta. Sadržaj trailera nalazi se unutar znakova “«” i “»” te predstavlja rječnik s s parovima (ključ, vrijednost). U traileru prikazanom na slici nalaze se ključevi Size, Root i Info.
Veličina (Size) specificira broj zapisa u tablici križnih referenci, korijen (Root) označava referentni objekt za katalog dokumenta, dok informacije (Info) sadrži referentni objekt za mapu informacija. Ako se PDF dokument nadopunjava kroz vrijeme, tada se dodatni elementi nadodaju nakon trailera - zbog ovog se dodatne izmjene u dokumentu mogu spremiti brzo i bez prepisivanja cijelog dokumenta.
PDF dokument sadrži 8 vrsti objekata: bool, broj, niz znakova, ime, niz, rječnik, tok i null objekt. Objekti specifični za PDF - poput imena i toka - bit će objašnjeni u ovom radu. Ime je niz ASCII znakova iz intervala 0x21 do 0x7E maksimalne veličine od 127 okteta. Svakom imenu mora se dodati prefiks “/ /”. Tok je predstavljen nizom okteta neograničene veličine, zbog čega se slike i veliki blokovi podataka obično prikazuju kroz tokove.
Svaki objekt u PDF-u može se označiti kao indirektni objekt, predstavljen s ključnim riječima “obj” i “endobj”. Svojstvo indirektnosti daje objektu jedinstveni identifikator koji drugi objekti mogu koristiti kao referencu. Kako bismo se referencirali na indirektni objekt, potrebno je nakon adrese dodati znak “R”.
Svaka stranica PDF dokumenta predstavljena je straničnim objektom - rječnikom koji sadrži reference na sadržaj stranice. Svi stranični objekti zajedno formiraju drvo stranica, koje je deklarirano indirektnom referencom u katalogu dokumenta.
Katalog dokumenta je korijen svih objekata u PDF dokumentu - sadrži reference na druge objekte koji definiraju sadržaj dokumenta. Referenca na katalog nalazi se u /Root elementu trailera. Zapisi sadržani u katalogu su sljedeći:
i ostali.
Drvo stranica definira sve stranice PDF dokumenta i sadrži čvorove koji ih predstavljaju. Postoje dva tipa čvorova: središnji - čvorovi drva stranica - i listovi - objekti stranica. Svaki čvor u drvetu se obavezno sastoji od sljedeća tri zapisa: tip (/Type), količina (/Count), roditelj (/Parent) i djeca (/Kids). Drvo stranica nije povezano ni s jednim elementom u PDF dokumentu.