PDF ei ole asiakirjamuoto samalla tavalla kuin Word tai RTF. Nämä muodot tallentavat sisältösekvenssin, jonka renderöijä tulkitsee näyttöhetkellä, joten tuloste riippuu niistä fonteista ja asettelumoottorista, jotka sattuvat olemaan läsnä. PDF tallentaa tuon prosessin tuloksen: tarkat renderöintiohjeet, fonttiohjelmat, pakatut kuvavirrat ja objektikaavion, joka sitoo ne yhteen itsenäiseksi kuvaukseksi jokaisesta sivusta. Tiedosto sisältää tarpeeksi tietoa toistaakseen jokaisen sivun identtisesti millä tahansa vaatimustenmukaisella renderöijällä, mikä on sekä sen pääasiallinen suunnittelutavoite että lähde suurimmalle osalle siitä monimutkaisuudesta, jota kohtaat yrittäessäsi luoda, jäsentää tai muokata sellaista ohjelmallisesti
Objektimalli
Jokainen PDF on kokoelma numeroituja objekteja. Objekti voi olla totuusarvo, kokonaisluku, reaaliluku, nimi, merkkijono, taulukko, sanakirja, virta tai null. Melkein kaikki mielenkiintoinen on sanakirja, joka on joukko avain-arvo-pareja, joissa avaimet ovat nimiä ja arvot mitä tahansa muuta objektityyppiä, mukaan lukien viittaukset muihin objekteihin numeron ja sukupolvimäärän perusteella. Virta on sanakirja, jota seuraa tavusekvenssi, tyypillisesti pakattu
Luettelosanakirja on juuri. Se osoittaa sivupuuhun, joka järjestää sivusanakirjat tasapainotettuun puurakenteeseen litteän luettelon sijaan, joten navigoiminen 10 000-sivuisen asiakirjan sivulle 5 000 ei vaadi jokaisen edeltävän sivunkuvaajan läpikäyntiä. Jokainen sivusanakirja viittaa sisältövirtoihinsa (yhteen tai useampaan sivunkuvausoperaattoreiden sekvenssiin), resurssisanakirjaansa (joka puolestaan viittaa fonttikuvaajiin, väriavaruuksiin ja kuva-XObjecteihin) ja mediaboksiinsa (koordinaattiavaruus, jossa sivu asuu). Koordinaatiston origo on vasemmassa alakulmassa, positiivisen Y:n suuntautuessa ylöspäin, 1/72 tuuman yksiköissä
Tiedoston lopussa on ristiinviittaustaulukko, joka kartoittaa jokaisen objektinumeron sen tavusiirtymäksi tiedostossa. Tämä on se, mikä mahdollistaa satunnaiskäytön: katseluohjelma lukee ristiinviittaustaulukon ensin ja hakee sitten suoraan mitä tahansa tarvitsemiaan objekteja. PDF 1.5 esitteli ristiinviittausvirrat, jotka pakkaavat taulukon virtaobjektiksi ja pakkaavat asiaankuuluvat objektit objektivirtoihin, vähentäen tiedostokokoa huomattavasti asiakirjoissa, joissa on monia pieniä objekteja
Sisältövirrat ja grafiikkamalli
Sivun visuaalinen sisältö asuu yhdessä tai useammassa sisältövirrassa. Jokainen virta on sekvenssi PDF-operaattoreita ja niiden operandeja. Tekstioperaattori BT aloittaa tekstiobjektin, Tf valitsee fontin ja koon resurssisanakirjasta, Td sijoittaa tekstikursorin, Tj tai TJ maalaa merkkijonon ja ET sulkee tekstiobjektin. Vektorigrafiikka noudattaa vastaavaa mallia: m asettaa polun aloituspisteen, l lisää janan, c lisää Bezier-käyrän ja f tai S täyttää tai piirtää polun ääriviivan
Grafiikkatila ohjaa kaikkea, mitä operaattoreiden välillä tapahtuu: nykyistä muunnosmatriisia, viivan leveyttä, väriavaruutta, täyttöväriä, viivaväriä ja leikkauspolkua. Operaattorit kuten q ja Q työntävät ja poistavat grafiikkatilan pinoon, millä tavoin PDF toteuttaa paikalliset koordinaattimuunnokset ja tilapäiset tilan ohitukset vaikuttamatta niiden ympärillä olevaan kontekstiin. Lomake-XObjectit (Form XObjects) yleistävät tämän: itsenäinen sisältövirta omalla resurssisanakirjallaan, joka voidaan maalata sivulle mielivaltaisiin paikkoihin ja skaaloihin yhdellä Do-operaattorilla
Fonttien upottaminen ja tekstin poimiminen
PDF voi viitata fontteihin nimeltä ja luottaa siihen, että katseluohjelma korvaa ne jollakin, mutta käytännössä mihin tahansa jaettavaksi tarkoitettuun asiakirjaan on upotettava fonttitiedot. PDF:ään upotettu Type 1- tai TrueType/OpenType-fontti sisältää fonttikuvaajasanakirjan, joka osoittaa fonttitiedostovirtaan. TrueType-fonteille tuo virta sisältää binäärisen fonttiohjelman; Type 1 -fonteille se on PFB-tietoa. Alijoukkoihin jakaminen, jota jokainen vakavasti otettava PDF-generaattori tekee, riisuu pois glyyfit, joihin asiakirja ei viittaa, pitäen tiedostokoot hallittavina jopa suurille Unicode-fonteille
Tekstin poimiminen on se, missä fonttien upottaminen iskee takaisin. Merkin visuaalinen esitys määräytyy upotetussa fonttiohjelmassa olevan glyyfin perusteella. Tuon merkin Unicode-arvo määräytyy fonttisanakirjaan liitetyn ToUnicode CMap -virran perusteella. Kun ToUnicode CMap puuttuu tai on väärä, PDF-katseluohjelma voi renderöidä tekstin luettavasti, mutta ei voi poimia sitä mielekkäänä Unicodena, minkä vuoksi kopioi-liitä joistakin PDF-tiedostoista tuottaa roskaa. Merkitty PDF (Tagged PDF, ISO 32000 §14.8) lisää toisen kerroksen: loogisen rakennepuun, joka kartoittaa sivun sisällön asiakirjasemanttisiin rooleihin, kuten kappaleisiin, otsikoihin ja taulukon soluihin. Ruudunlukijat ja uudelleenjuoksutusmoottorit käyttävät rakennepuuta raa'an sisältövirran järjestyksen sijaan, mikä selittää, miksi visuaalisesti hyvin taitettu PDF voi silti olla saavuttamaton, jos merkintä puuttuu tai on väärä
Inkrementaaliset päivitykset ja digitaaliset allekirjoitukset
Kun tallennat muutoksia olemassa olevaan PDF-tiedostoon kirjoittamatta sitä alusta alkaen uudelleen, uudet objektit lisätään alkuperäisen tiedostorungon perään yhdessä uuden ristiinviittausosion ja uuden trailer-sanakirjan kanssa. Päivitetty trailer osoittaa uuteen ristiinviittaustietoon, ja syrjäytetyt objektit pysyvät tiedostossa, mutta uusi ristiinviittausketju ei yksinkertaisesti viittaa niihin. Tämä on inkrementaalinen päivitys, ja sillä on kaksi merkittävää seurausta
Ensinnäkin tiedosto kasvaa jokaisen tallennussyklin myötä. Asiakirja, jota muokataan ja tallennetaan toistuvasti, kerää kerroksittain vanhentuneita objekteja. Työkalut, kuten QPDF, voivat linearisoida tai pakata-ja-uudelleenkirjoittaa tiedoston tilan takaisinsaamiseksi, mutta oletuksena on kertyminen. Toiseksi digitaaliset allekirjoitukset riippuvat inkrementaalisista päivityksistä niiden eheyden mallissa. ISO 32000 -allekirjoitus kattaa tiedoston tavualueen, tyypillisesti kaiken paitsi itse allekirjoitusarvon paikkamerkin. Kaikki allekirjoituksen jälkeiset muutokset, jotka ilmestyvät ylimääräisinä inkrementaalisina päivityksinä, näkyvät validoivalle lukijalle allekirjoittamisen jälkeen tehtyinä muutoksina, mikä on juuri se tarkastusketju, jonka haluat. Tämä tarkoittaa kuitenkin myös sitä, että tietyt muutokset, kuten hyväksymisallekirjoituksen lisääminen tai lomakekenttien täyttäminen, ovat nimenomaisesti sallittuja standardissa mitätöimättä alkuperäistä allekirjoitusta, edellyttäen, että muutokset ovat asiakirjan käyttöoikeusasetusten mukaisia (ISO 32000-2 §12.7.6). Muutos, joka jää näiden oikeuksien ulkopuolelle, merkitään luvattomaksi. Tämän eron ymmärtäminen oikein on tärkeää, kun luot asiakirjoja, jotka vastakirjoitetaan myöhemmin vaiheessa
Vaatimustenmukaisuustasot ja ISO 32000 -sukulinja
PDF aloitti Adoben yksityisenä muotona vuonna 1993, imi itseensä PostScriptin kuvantamismallin ja keräsi ominaisuuksia yli viidentoista version ajan: salaus 1.1:ssä, vuorovaikutteiset lomakkeet 1.2:ssa, digitaaliset allekirjoitukset ja looginen rakenne 1.3:ssa, läpinäkyvyys 1.4:ssä, objektivirrat 1.5:ssä, AES-salaus 1.6:ssa. Adobe jätti PDF 1.7:n ISO:lle vuonna 2007, ja ISO 32000-1:2008 oli tulos. ISO 32000-2:2020 kattaa PDF 2.0:n, joka tiukensi useita alimääriteltyjä alueita, tarkisti AES-256-avaimen johtamista (versio 6 korvasi version 5) ja lisäsi nimenomaisen tuen liitetyille tiedostoille ja rikkaalle medialle
Alistandardit juontuvat samasta pohjasta. PDF/A (ISO 19005) vaihtaa ominaisuuksia arkistoinnin vakauteen: ei salausta, ei ulkoisia sisältöriippuvuuksia, kaikki fontit upotettuja, väriavaruudet laiteriippumattomia, XMP-metatiedot vaaditaan. PDF/A-1 perustuu PDF 1.4:ään, PDF/A-2 PDF 1.7:ään, PDF/A-3 sallii minkä tahansa muodon upotetut tiedostot. PDF/X (ISO 15930) on painotuotannon alijoukko: tulostustavoitteet (output intents), leikkaus- ja rajauslaatikot, ei läpinäkyvyyttä vanhemmilla vaatimustenmukaisuustasoilla. PDF/UA (ISO 14289) velvoittaa merkittyyn rakenteeseen, Unicode-määrityksiin ja kielimetatietoihin saavutettavuuden varmistamiseksi. Nämä eivät ole kilpailevia muotoja; ne ovat joukkoja lisärajoituksia ydin-PDF:n päällä, ja yksittäinen tiedosto voi noudattaa useampaa samanaikaisesti edellyttäen, että rajoitukset eivät ole ristiriidassa keskenään
Kenelle tahansa, joka kirjoittaa koodia PDF:n luomiseen tai käsittelyyn, käytännön perusta on ISO 32000-2, ja siinä on kiinnitettävä huomiota huolellisesti osioihin, jotka kattavat ristiinviittausmallin (§7.5), grafiikkatilan (§8.4), tekstitilan operaattorit (§9.3), fonttikuvaajat ja ToUnicode (§9.6 ja §9.10), vuorovaikutteiset lomakkeet (§12.7) ja digitaaliset allekirjoitukset (§12.8). Standardi on pitkä, mutta suurin osa ohjelmallisesta PDF-työstä koskettaa sen kapeaa osaa toistuvasti. Objektimallin ja ristiinviittausmekanismin ymmärtäminen on aloitustaso; kaikki muu on sen jälkeen erikoistumista