PDF nije dokumentni format na način na koji su to Word ili RTF. Ti formati pohranjuju slijed sadržaja koji renderer interpretira u trenutku prikaza, pa izlaz ovisi o tome koji su fontovi i engine za raspored slučajno prisutni. PDF pohranjuje rezultat tog procesa: precizne upute za iscrtavanje, programe fontova, komprimirane tokove slika i graf objekata koji ih povezuje u samostalni opis svake stranice. Datoteka nosi dovoljno informacija za identičnu reprodukaciju svake stranice na bilo kojem usklađenom rendereru, što je ujedno i njezin glavni cilj dizajna i izvor većine složenosti s kojom se susrećete kada je pokušavate programski generirati, parsirati ili mijenjati.
Model objekata
Svaki PDF je zbirka numeriranih objekata. Objekt može biti logička vrijednost, cijeli broj, realni broj, ime, niz znakova, polje, rječnik, tok podataka ili null. Gotovo sve zanimljivo je rječnik, što je skup parova ključ-vrijednost gdje su ključevi imena, a vrijednosti bilo koji drugi tip objekta, uključujući reference na druge objekte prema broju i generaciji. Tok (stream) je rječnik iza kojeg slijedi niz bajtova, obično komprimiranih.
Rječnik kataloga je korijen. On upućuje na stablo stranica, koje organizira rječnike stranica u balansiranu strukturu stabla umjesto na ravan popis, pa navigacija do stranice 5.000 u dokumentu od 10.000 stranica ne zahtijeva prolazak kroz svaki prethodni opisivač stranice. Svaki rječnik stranice referencira svoje tokove sadržaja (jedan ili više sljedova operatora za opis stranice), svoj rječnik resursa (koji pak referencira opisivače fontova, prostore boja i slikovne XObjekte) te svoj media box (koordinatni prostor u kojem stranica živi). Koordinatni početak je u donjem lijevom kutu, s pozitivnom Y osi prema gore, u jedinicama od 1/72 inča.
Na kraju datoteke nalazi se tablica unakrsnih referenci, koja mapira svaki broj objekta na njegov bajt pomak u datoteci. To je ono što omogućuje izravan pristup: preglednik najprije čita tablicu unakrsnih referenci, a zatim skače izravno na objekte koji su mu potrebni. PDF 1.5 uveo je tokove unakrsnih referenci, koji komprimiraju tablicu u objekt toka i pakiraju povezane objekte u tokove objekata, značajno smanjujući veličinu datoteke za dokumente s mnogo malih objekata.
Tokovi sadržaja i grafički model
Vizualni sadržaj stranice živi u jednom ili više tokova sadržaja. Svaki tok je niz PDF operatora isprepletenih s njihovim operandima. Tekstualni operator BT započinje tekstualni objekt, Tf odabire font i veličinu iz rječnika resursa, Td pozicionira kursor teksta, Tj ili TJ ispisuje niz znakova, a ET zatvara tekstualni objekt. Vektorska grafika prati sličan uzorak: m postavlja početnu točku putanje, l dodaje segment linije, c dodaje Bezierovu krivulju, a f ili S popunjava ili iscrtava putanju.
Grafičko stanje upravlja svime što se događa između operatora: trenutnom matricom transformacije, širinom linije, prostorom boja, bojom ispune, bojom obruba i putanjom izrezivanja. Operatori poput q i Q guraju i skidaju grafičko stanje na stog, što je način na koji PDF implementira lokalne transformacije koordinata i privremena nadjačavanja stanja bez utjecaja na okolni kontekst. Form XObjekti to poopćuju: to je samostalan tok sadržaja s vlastitim rječnikom resursa koji se može iscrtati na stranici na proizvoljnim položajima i mjerilima pomoću jednog operatora Do.
Ugradnja fontova i izdvajanje teksta
PDF može referencirati fontove po nazivu i osloniti se na to da će ih preglednik zamijeniti, mas u praksi svaki dokument koji namjeravate dijeliti mora imati ugrađene podatke o fontu. Type 1 ili TrueType/OpenType font ugrađen u PDF nosi rječnik opisivača fonta koji upućuje na tok datoteke fonta. Za TrueType fontove taj tok sadrži binarni program fonta; za Type 1 to su PFB podaci. Izrada podskupova (subsetting), što radi svaki ozbiljan PDF generator, uklanja glifove koje dokument ne koristi, držeći veličinu datoteke pod kontrolom čak i za velike Unicode fontove.
Izdvajanje teksta je mjesto gdje ugradnja fontova može stvoriti probleme. Vizualni prikaz znaka određen je glifom u ugrađenom programu fonta. Unicode vrijednost tog znaka određena je ToUnicode CMap tokom koji je priložen rječniku fonta. Kada ToUnicode CMap nedostaje ili je neispravan, PDF preglednik može čitko prikazati tekst, ali ga ne može izdvojiti kao smisleni Unicode, zbog čega kopiranje i lijepljenje iz nekih PDF-ova proizvodi smeće. Označeni PDF (Tagged PDF, ISO 32000 §14.8) dodaje drugi sloj: stablo logičke strukture koje mapira sadržaj stranice na uloge semantike dokumenta kao što su odlomci, naslovi i ćelije tablice. Čitači zaslona i enginei za prelomi teksta koriste stablo strukture radije nego sirovi redoslijed toka sadržaja, što objašnjava zašto vizualno dobro posložen PDF i dalje može biti nedostupan ako je označavanje odsutno ili pogrešno.
Inkrementala ažuriranja i digitalni potpisi
Kada spremite promjene u postojeći PDF bez ponovnog pisanja od nule, novi objekti se dodaju nakon tijela izvorne datoteke zajedno s novim odjeljkom unakrsnih referenci i novim rječnikom trailera. Ažurirani trailer upućuje na nove podatke unakrsnih referenci, a zamijenjeni objekti ostaju u datoteci, mas ih novi lanac unakrsnih referenci jednostavno ne referencira. To je inkrementalno ažuriranje i ono ima dvije značajne posljedice.
Prvo, datoteka raste sa svakim ciklusom spremanja. Dokument koji se višekratno uređuje i sprema nakuplja slojeve zastarjelih objekata. Alati poput QPDF-a mogu linearizirati ili komprimirati i ponovno zapisati datoteku kako bi povratili taj prostor, ali zadana postavka je nakupljanje. Drugo, digitalni potpisi ovise o inkrementalnim ažuriranjima za svoj model integriteta. ISO 32000 potpis pokriva raspon bajtova datoteke, obično sve osim rezerviranog mjesta za samu vrijednost potpisa. Bilo kakve promjene nakon potpisivanja koje se pojavljuju kao dodatna inkrementalna ažuriranja vidljive su čitaču koji provjerava valjanost kao izmjene napravljene nakon potpisivanja, što je upravo revizijski trag koji želite. Međutim, to također znači da su određene izmjene, poput dodavanja potpisa odobrenja ili ispunjavanja polja obrasca, izričito dopuštene standardom bez poništavanja izvornog potpisa, pod uvjetom da su promjene u skladu s postavkama dopuštenja dokumenta (ISO 32000-2 §12.7.6). Izmjena koja izlazi izvan tih dopuštenja označava se kao neautorizirana. Ispravno razumijevanje ove razlike važno je kada generirate dokumente koji će se kasnije supotpisivati.
Razine sukladnosti i ISO 32000 loza
PDF je započeo kao vlasnički Adobe format 1993. godine, apsorbirao je PostScriptov model slikanja i kroz petnaest verzija nakupljao značajke: enkripciju u 1.1, interaktivne obrasce u 1.2, digitalne potpise i logičku strukturu u 1.3, prozirnost u 1.4, tokove objekata u 1.5, AES enkripciju u 1.6. Adobe je predao PDF 1.7 organizaciji ISO 2007. godine, a rezultat je bio ISO 32000-1:2008. ISO 32000-2:2020 pokriva PDF 2.0, koji je pooštro nekoliko nedovoljno specificiranih područja, revidirao izvedbu ključa AES-256 (revizija 6 zamjenjuje reviziju 5) te dodao eksplicitnu podršku za povezane datoteke i bogate medije.
Podstandardi proizlaze iz iste baze. PDF/A (ISO 19005) mijenja značajke za stabilnost arhiviranja: bez enkripcije, bez ovisnosti o vanjskom sadržaju, svi fontovi ugrađeni, prostori boja neovisni o uređaju, potreban XMP metapodatak. PDF/A-1 se temelji na PDF-u 1.4, PDF/A-2 na PDF-u 1.7, a PDF/A-3 dopušta ugrađene datoteke bilo kojeg formata. PDF/X (ISO 15930) je podskup za grafičku pripremu i ispis: namjere izlaza, okviri za obrezivanje i bleed, bez prozirnosti u starijim razinama sukladnosti. PDF/UA (ISO 14289) propisuje označenu strukturu, Unicode mapiranja i metapodatke jezika za pristupačnost. To nisu konkurentski formati; to su skupovi dodatnih ograničenja povrh temeljnog PDF-a, a jedna datoteka može istovremeno odgovarati više njih, pod uvjetom da se ograničenja ne sukobljavaju.
Za svakoga tko piše kod koji generira ili obrađuje PDF, praktična polazna točka je ISO 32000-2 s posebnom pažnjom na odjeljke koji pokrivaju model unakrsnih referenci (§7.5), grafičko stanje (§8.4), operatore tekstualnog stanja (§9.3), opisivače fontova i ToUnicode (§9.6 i §9.10), interaktivne obrasce (§12.7) i digitalne potpise (§12.8). Standard je dug, ali većina programskog rada s PDF-om više puta dotiče njegov uski dio. Razumijevanje modela objekata i mehanizma unakrsnih referenci je ulazna točka; sve ostalo je specijalizacija nakon toga.