PDF nie je formát dokumentu v rovnakom zmysle ako Word alebo RTF. Tieto formáty ukladajú sekvenciu obsahu, ktorú vykresľovač interpretuje v okamihu zobrazenia, takže výstup závisí od písiem a rozloženia (layout engine), ktoré sú v danom momente k dispozícii. PDF ukladá výsledok tohto procesu: presné inštrukcie na vykreslenie, programy písiem, komprimované dátové prúdy obrázkov a graf objektov, ktorý ich spája do samostatného popisu každej stránky. Súbor nesie dostatok informácií na to, aby sa každá stránka reprodukovala identicky na akomkoľvek kompatibilnom vykresľovači, čo je zároveň hlavným cieľom jeho dizajnu a zdrojom väčšiny zložitostí, na ktoré narazíte pri pokuse o jeho programové generovanie, analýzu alebo úpravu.
Model objektov
Každé PDF je kolekcia očíslovaných objektov. Objektom môže byť pravdivostná hodnota (boolean), celé číslo, reálne číslo, názov, reťazec, pole, slovník, prúd (stream) alebo null. Takmer všetko dôležité je slovník, čo je množina párov kľúč-hodnota, kde kľúče sú názvy a hodnoty sú akékoľvek iné typy objektov, vrátane odkazov na iné objekty pomocou čísla a čísla generácie. Prúd je slovník nasledovaný sekvenciou bajtov, ktorá je zvyčajne komprimovaná.
Slovník katalógu (catalog dictionary) je koreňom. Ukazuje na strom stránok, ktorý organizuje slovníky stránok vo vyváženej stromovej štruktúre namiesto plochého zoznamu. Prechod na stránku 5 000 v 10 000-stranovom dokumente preto nevyžaduje prechádzanie každého predchádzajúceho deskriptora stránky. Každý slovník stránky odkazuje na svoje obsahové prúdy (jednu alebo viac sekvencií operátorov popisu stránky), svoj slovník prostriedkov (ktorý následne odkazuje na deskriptory písiem, farebné priestory a obrázkové objekty XObject) a svoj media box (súradnicový priestor, v ktorom sa stránka nachádza). Počiatok súradníc je v ľavom dolnom rohu, pričom kladná os Y smeruje nahor, v jednotkách 1/72 palca.
Na konci súboru sa nachádza tabuľka krížových odkazov (cross-reference table), ktorá mapuje každé číslo objektu na jeho bajtový posun (offset) v súbore. To umožňuje náhodný prístup: prehliadač najprv načíta tabuľku krížových odkazov a potom prejde priamo k objektom, ktoré potrebuje. PDF 1.5 predstavilo prúdy krížových odkazov, ktoré komprimujú tabuľku do objektu prúdu a spájajú súvisiace objekty do prúdov objektov, čo výrazne znižuje veľkosť súborov pri dokumentoch s mnohými malými objektmi.
Obsahové prúdy a grafický model
Vizuálny obsah stránky sa nachádza v jednom alebo viacerých obsahových prúdoch. Každý prúd je sekvencia operátorov PDF preložených ich operandmi. Textový operátor BT začína textový objekt, Tf vyberá písmo a veľkosť zo slovníka prostriedkov, Td umiestňuje textový kurzor, Tj alebo TJ vykresľuje reťazec a ET uzatvára textový objekt. Vektorová grafika sleduje podobný vzor: m nastavuje počiatočný bod cesty, l pridáva úsečku, c pridáva Bezierovu krivku a f alebo S vypĺňa alebo obtahuje cestu.
Grafický stav (graphics state) riadi všetko, čo sa deje medzi operátormi: aktuálnu maticu transformácie, šírku čiary, farebný priestor, farbu výplne, farbu ťahu a orezovú cestu (clipping path). Operátory ako q a Q ukladajú (push) a vyberajú (pop) grafický stav zo zásobníka, čím PDF implementuje lokálne transformácie súradníc a dočasné prepísanie stavu bez ovplyvnenia okolitého kontextu. Formulárové objekty Form XObject to zovšeobecňujú: ide o samostatný obsahový prúd s vlastným slovníkom prostriedkov, ktorý je možné vykresliť na stránku na ľubovoľných pozíciách a v ľubovoľnej mierke pomocou jediného operátora Do.
Vkladanie písiem a extrakcia textu
PDF môže odkazovať na písma podľa názvu a spoliehať sa na to, že prehliadač nejaké nahradí. V praxi však každý dokument, ktorý plánujete zdieľať, musí obsahovať vložené údaje o písmach. Písmo Type 1 alebo TrueType/OpenType vložené do PDF nesie slovník deskriptora písma, ktorý ukazuje na súborový prúd písma. V prípade písiem TrueType tento prúd obsahuje binárny program písma; pre Type 1 sú to údaje PFB. Vytváranie podskupín písiem (subsetting), ktoré robí každý seriózny generátor PDF, odstraňuje glyfy nepoužité v dokumente, čím udržiava veľkosť súboru v rozumných medziach aj pri veľkých písmach Unicode.
Extrakcia textu je oblasť, kde môže nesprávne vkladanie písiem spôsobiť problémy. Vizuálna reprezentácia znaku je určená glyfom vo vloženom programe písma. Hodnota Unicode tohto znaku je určená prúdom ToUnicode CMap pripojeným k slovníku písma. Ak ToUnicode CMap chýba alebo je nesprávny, prehliadač PDF dokáže text vykresliť čitateľne, ale nedokáže ho extrahovať ako zmysluplný kód Unicode. To je dôvod, prečo kopírovanie a vkladanie z niektorých súborov PDF produkuje nečitateľný text. Tagged PDF (ISO 32000 §14.8) pridáva druhú vrstvu: strom logickej štruktúry, ktorý mapuje obsah stránky na dokumentovo-sémantické roly ako odseky, nadpisy a bunky tabuľky. Čítačky obrazovky a nástroje na zmenu toku textu (reflow engines) používajú strom štruktúry namiesto čistého poradia obsahového prúdu, čo vysvetľuje, prečo vizuálne dobre usporiadané PDF môže byť stále neprístupné, ak chýba alebo je nesprávne značkovanie (tagging).
Prírastkové aktualizácie a digitálne podpisy
Keď uložíte zmeny v existujúcom PDF bez toho, aby ste ho prepísali od začiatku, nové objekty sa pripoja za pôvodné telo súboru spolu s novou sekciou krížových odkazov a novým slovníkom traileru. Aktualizovaný trailer ukazuje na nové údaje krížových odkazov a nahradené objekty zostávajú v súbore, ale nový reťazec krížových odkazov na ne neodkazuje. Toto je prírastková aktualizácia (incremental update), ktorá má dva významné dôsledky.
Po prvé, súbor rastie s každým cyklom ukladania. Dokument, ktorý sa opakovane upravuje a ukladá, hromadí vrstvy zastaraných objektov. Nástroje ako QPDF dokážu súbor linearizovať alebo komprimovať a prepísať, aby získali tento priestor späť, ale predvoleným správaním je hromadenie. Po druhé, digitálne podpisy závisia od prírastkových aktualizácií pre svoj model integrity. Podpis ISO 32000 pokrýva rozsah bajtov súboru, zvyčajne všetko okrem zástupného symbolu pre samotnú hodnotu podpisu. Akékoľvek zmeny po podpísaní, ktoré sa javia ako dodatočné prírastkové aktualizácie, sú pre overovací prehliadač viditeľné ako úpravy vykonané po podpísaní, čo je presne tá auditná stopa, ktorú potrebujete. To však tiež znamená, že určité úpravy, ako napríklad pridanie schvaľovacieho podpisu alebo vyplnenie formulárových polí, sú špecifikáciou explicitne povolené bez zneplatnenia pôvodného podpisu, ak tieto zmeny vyhovujú nastaveniam povolení dokumentu (ISO 32000-2 §12.7.6). Úprava, ktorá nespadá pod tieto povolenia, sa označí ako neoprávnená. Správne pochopenie tohto rozdielu je dôležité, ak generujete dokumenty, ktoré sa budú následne podpisovať ďalšími stranami.
Úrovne kompatibility a línia ISO 32000
PDF začalo ako proprietárny formát spoločnosti Adobe v roku 1993, prevzalo zobrazovací model PostScriptu a počas pätnástich verzií hromadilo funkcie: šifrovanie vo verzii 1.1, interaktívne formuláre v 1.2, digitálne podpisy a logickú štruktúru v 1.3, transparentnosť v 1.4, prúdy objektov v 1.5, šifrovanie AES v 1.6. Spoločnosť Adobe predložila PDF 1.7 organizácii ISO v roku 2007, výsledkom čoho bola norma ISO 32000-1:2008. ISO 32000-2:2020 pokrýva PDF 2.0, ktoré sprísnilo niekoľko nejasne definovaných oblastí, revidovalo odvodzovanie kľúčov AES-256 (revízia 6 nahrádza revíziu 5) a pridalo explicitnú podporu pre asociované súbory a bohaté médiá.
Odvodené štandardy vychádzajú z rovnakého základu. PDF/A (ISO 19005) vymieňa funkcie za archívnu stabilitu: žiadne šifrovanie, žiadne externé závislosti od obsahu, všetky písma vložené, farebné priestory nezávislé od zariadenia, vyžadované metadáta XMP. PDF/A-1 vychádza z PDF 1.4, PDF/A-2 z PDF 1.7, PDF/A-3 umožňuje vložené súbory ľubovoľného formátu. PDF/X (ISO 15930) je podmnožina pre tlačovú produkciu: výstupné zámery, orezové značky, žiadna priehľadnosť v starších úrovniach kompatibility. PDF/UA (ISO 14289) nariaďuje označenú štruktúru, mapovanie Unicode a jazykové metadáta pre prístupnosť. Nejde o konkurenčné formáty; sú to sady dodatočných obmedzení nad rámec základného PDF a jeden súbor môže spĺňať viacero z nich súčasne, ak si tieto obmedzenia neodporujú.
Pre každého, kto píše kód generujúci alebo spracovávajúci PDF, je praktickým základom ISO 32000-2 s dôrazom na sekcie pokrývajúce model krížových odkazov (§7.5), grafický stav (§8.4), operátory stavu textu (§9.3), deskriptory písiem a ToUnicode (§9.6 a §9.10), interaktívne formuláre (§12.7) a digitálne podpisy (§12.8). Norma je rozsiahla, ale väčšina programovej práce s PDF sa opakovane dotýka iba jej úzkej časti. Pochopenie modelu objektov a mechanizmu krížových odkazov je vstupnou bránou; všetko ostatné je odtiaľ už len špecializácia.