Portable Document Format

A Portable Document Format (PDF) az Adobe Systems által kifejlesztett, dokumentumok tárolására alkalmas fájlformátum. A PDF alkalmas szöveget, ábrát és képeket tartalmazó dokumentum leírására eszközfüggetlen és felbontásfüggetlen formában. A dokumentum lehet egyoldalas, és több ezer oldalas is, egyszerű vagy összetett: sokféle betűtípussal, ábrával, színnel és képpel, továbbá tartalmazhat interaktív beviteli mezőket, nyomógombokat stb., lehetőséget teremtve arra, hogy üres űrlapokat hozzunk létre, amit a felhasználók később elektronikus formában is ki tudnak tölteni.

A PDF egy nyílt szabvány, ami azt jelenti, hogy bárki jogdíjmentesen írhat alkalmazásokat, amelyek PDF formátumú dokumentumokat olvasnak vagy írnak. Azonosító: ISO 32000-1:2008

Verziók 
A PDF fájlformátum 2008-ban az 1.7 verziónál tartott. A PDF verziószámok két részből állnak: az első szám (az ún. major number) akkor változik, ha a szabványban a kompatibilitást is érintő változások történnek; a kisebb, a kompatibilitást nem érintő változásokat a második szám (az ún. minor number) változása jelzi. Minden PDF formátumú fájl tartalmazza, hogy az adott fájl a szabvány melyik verziójának felel meg, az adott verziót és annál kisebb verziószámot támogató PDF-nézegetőknek be kell tudni olvasni, illetve meg kell tudni jeleníteni a fájlt. Az 1.4 verzió előtti PDF fájlok verziószáma egyértelműen kiderül a fájl első sorából, ami egy speciális comment formájában tartalmazza a verziószámot. Az 1.4 verzió óta az első sor által megadott verziószámot a fájlban található speciális Version bejegyzés felüldefiniálhatja és ilyenkor az utóbbi verziószám a helyes.

A PDF fájl fizikai felépítése 
A PDF fájlok fizikailag 4 különböző típusú részből állnak. Ezek a következők:
 a fejléc (file header)
 a törzs (file body)
 a kereszthivatkozási táblázat (cross-reference table)
 a lezáró rész (trailer)
A PDF fájlok támogatják az incrementális update-elést és ezért a törzs, a kereszthivatkozási táblázat és a lezáró rész (ebben a sorrendben) többször is előfordulhatnak a fájlban, azaz az incrementális update során újabb törzsadatok, kereszthivatkozási táblázat és lezáró rész lesz hozzáfűzve a meglévő fájlhoz anélkül, hogy a már meglévő adatokat megváltoztatnánk. Ebből következően a PDF fájlok elemzését (parse-olását) a fájl végén az utolsó lezáró résznél kell kezdeni, majd visszafelé haladva a lezáró részeken és az azokat megelőző kereszthivatkozás-táblázat részeken fel kell építeni a végleges kereszthivatkozás táblázatot. Ha egy objektumazonosító több kereszthivatkozás-táblázat részben is előfordul, akkor az utolsó előfordulás által megadott hivatkozásnak kell a végleges kereszthivatkozás táblázatba bekerülni.

Az 1.5 verziótól kezdve a PDF objektumokat tömörített formában, objektumstreamekben is lehet tárolni a PDF fájlban, illetve a kereszthivatkozási táblázatot és a lezáró részt pedig tömörített kereszthivatkozás-streamekben lehet megadni. Ilyen esetben a fent megadott fizikai felépítése a PDF fájlnak a következőképpen módosul: a fejléc és a törzs megmarad, de a törzs már tömörített objektumstreameket és kereszthivatkozás-streameket is tartalmaz PDF objektumként, a kereszthivatkozási táblázat-részek és a lezáró részek helyett pedig csak utolsó lezáró utolsó 3 sora marad meg, amelyek a startxref kulcsszót, egy offsetértéket és a %%EOF kommentet tartalmazzák. Az offsetérték jelentése ebben az esetben nem az utolsó kereszhivatkozás-rész kezdete lesz, hanem az utolsó kereszthivatkozás-stream offsetje.

A fejléc 
A PDF fájl fejléce egyetlen sorból, a fájl első sorában áll, ami egy speciális kommentet tartalmaz. Ez a komment tartalmazza a PDF fájl verziószámát ASCII formátumban. A verziószámot megadó komment után szokás még egy kommentet írni ugyanebbe a sorba. Ez a második komment az ASCII kódkészleten kívül eső karaktereket tartalmaz azért, hogy fájlátvitel során a fájlátvitelt végző programok felismerjék, hogy bináris fájlformátumról van szó és ne alkalmazzanak rá semmilyen konverziót, ami a bináris PDF fájlt tönkretenné.

A törzs 
A PDF fájl törzse az PDF objektumok felsorolásából áll. Minden itt felsorolt PDF objektum előtt szerepel egy objektumazonosító szám és egy generációs szám. Ez a két szám egyértelműen azonosítja az objektumot a PDF fájlon belül, így a fájl más pontjain hivatkozhatunk az adott objektumra.

A kereszthivatkozási táblázat 
A kereszthivatkozási táblázat tartalmazza, hogy a törzsben felsorolt PDF objektumok a fájlban milyen offsetcímen találhatóak, azaz mi az indexe annak a byte-nak a PDF fájlban, ahol az adott PDF objektum kezdődik.
A kereszthivatkozási-táblázat részek az xref kulcsszóval és az őket követő lezáró rész trailer kulcsszójáig tartanak. Az xref kulcsszó után következő táblázatrész több szekcióból épül fel. Ezeknek a szekciónak az első sora mindig két darab, egymástól szóközzel elválasztott egész számot tartalmaz, amelyeknek a jelentése a következő: az első szám határozza meg a szekcióban szereplő első bejegyzés objektumazonosítóját, a második szám pedig a szekcióban található bejegyzések számát, amelyekhez mindig az eggyel nagyobb sorszámú objektumazonosító tartozik. Maguk a bejegyzések pontosan 20 byte-os sorok, amelyeknek két fajtája van: a szabad objektumazonosítókat megadó bejegyzések és a foglalt (használatban lévő) objektumazonosítókat megadó bejegyzések.

A lezáró rész 
A PDF-et lezáró rész a trailer kulcsszóval kezdődik, majd ezt egy speciális név-érték lista követi, ahol többek között a következő információk vannak megadva:
 a törzs részben (illetve incrementális update esetén: az összes törzs részben) szereplő PDF objektumok száma
 ha több lezáró rész is található a fájlban, akkor az előző lezáró rész előtti kereszthivatkozási táblázat offsetcíme
 a PDF dokumentum logikai felépítését megadó PDF objektumok közül a logikai felépítés kiindulópontjául szolgáló gyökérelem offsetcíme a dokumentumon belül.
 a PDF fájl fájlazonosítója
A név-érték lista után a startxref kulcsszó, majd az utolsó kereszthivatkozási táblázatrész offsetcíme következhet, végül pedig az %%EOF speciális komment zárja a PDF fájlt.

A PDF objektumtípusai 
A PDF fájlok törzsrésze PDF objektumokat tartalmaz. A PDF specifikáció a következő objektumtípusokat támogatja:
 Logikai
 Numerikus
 String
 Név
 Tömb
 Szótár (dictionary)
 Stream
 Null
 Indirekt

Logikai objektumtípus 
A logikai (boolean) objektumok a true és false (igaz/hamis) kulcsszavakat tartalmazhatják tokenként.

Numerikus objektumtípus 
A numerikus objektumoknak két fajtáját támogatja a PDF specifikáció: az egész értékű és valós számokat. Az egész értékű számok decimális számjegyeket tartalmazhatnak, amik előtt opcionálisan egy mínusz jel állhat. A valós számok tartalmazhatnak egy tizedes pontot is (a decimális számjegyek előtt, két decimális számjegy között vagy a számjegyek után).

String objektumtípus 
A string objektumoknak szintén két fajtáját különbözteti meg a PDF specifikáció: a hagyományos stringeket, amelyeket a '( és )' zárójelek határolnak, illetve a hexadecimális formában megadott stringeket, amelyeket a < és > zárójelek határolnak. A hagyományos stringek tetszőleges bytesorozatot tartalmazhatnak, de a '( és )' zárójeleket \( és \) karakterekkel kell helyettesíteni (escape-elni). (Ha a zárójelek egymásba ágyazva fordulnak elő a stringben, például ((( ))) sorrendben, akkor nincs szükség a behelyettesítésre.) A '( és )' zárójelek mellett még lehetőség van a szokásos vezérlő karakterek (újsor stb.) helyettesítésére \n, \b, \t, \f és \r karakterekkel. A hexadecimális formában megadott stringek esetén a < és > zárójelek között hexadecimális számjegyeknek kell szerepelniük. Az a-f hexadecimális számjegyek használhatóak kisbetűvel és nagybetűvel írva is. Két hexadecimális karakter határoz meg egy byte-ot (azaz egy PDF specifikáció szerinti karaktert). Ha páratlan számú hexadecimális számjegy szerepel a zárójelek között, akkor feltételezzük, hogy az utolsó hexadecimális számpár második számjegye a nulla.

Név objektumtípus 
A név objektumok első karaktere a / karakter, de ez még nem képezi a megadott név részét, csak az ezután szereplő token.

Tömb objektumtípus 
A tömb objektumokat a [ és ] zárójelek határolják. Ezek között tetszőleges PDF objektumok szerepelhetnek, azaz egy adott tömb több különböző típusú PDF objektumot is tartalmazhat, beleértve azt is, hogy a tömb eleme lehet egy újabb tömb is.

Szótár (dictionary) objektumtípus 
A szótár objektumokat a { és } zárójelek határolják. Ezek között egy név-érték lista szerepel, ahol a név mindig egy név típusú PDF objektum, az érték pedig tetszőleges PDF objektum lehet, beleértve a szótár típusú PDF objektumokat is.

Stream objektumtípus 
A stream objektumok egy szótár objektummal kezdődnek, amit egy, a stream, illetve endstream kulcsszavak által határolt bytesorozat követ. (A bytesorozat lehet 0 hosszúságú is.) A stream objektum elején szereplő szótár kötelezően tartalmaz egy Length nevet – az ehhez tartozó érték határozza meg, hogy hány byte hosszúságú a stream és endstream között bytesorozat. Amennyiben a bytesorozot valamilyen tömörített formában tartalmazza az adatokat (ahogy ez a gyakorlatban a legtöbb esetben történik), akkor a stream elején megadott szótár tartalmazza az Filter vagy FFilter neveket is, amelyek az alkalmazott tömörítési eljárást (esetleg eljárásokat) adják meg. Opcionálisan szerepelhet még a DL név is a szótárban – az ehhez tartozó érték a bytesorozat kitömörítés utáni becsült hosszát adhatja meg.

Null objektumtípus 
A null objektumot a null kulcsszó jelöli. Ezenfelül, ha egy objektumhivatkozás nemlétező indirekt objektumra mutat, akkor azt úgy tekintjük, hogy az objektumhivatkozás a null objektumra mutat.

Indirekt objektumtípus 
A PDF fájl bármely objektumából lehet indirekt objektumot képezni azáltal, hogy egy objektumazonosítót írunk elé, az objektumazonosító után objektumot magát pedig az obj és endobj kulcsszavak közé írjuk. (Az objektumazonosító két részből áll: az objektumszámból és a generációs számból.) Az objektumazonosító egyedi azonosító a PDF fájlon belül, ezáltal így megcímkézett objektumokra a PDF fájl más helyeiről hivatkozhatunk.

A PDF fájl logikai felépítése 

A PDF fájl törzs részében felsorolt objektumok logikailag egy objektumhierarchiát alkotnak. Ennek a hierarchiának a gyökere minden esetben a Catalog objektum, ami egy szótár típusú objektum. A Catalog objektum offsetcímét a PDF fájlban a lezáró rész Root értéke által megadott indirekt hivatkozás segítségével lehet meghatározni. Az indirekt hivatkozás az adott objektum objektumazonosítóját és generációazonosítóját tartalmazza és ezek segítségével lehet a kereszthivatkozási táblázatból kikeresni az offsetcímet. A PDF dokumentum oldalait ennek a Catalog által megadott objektumhierarchia page tree részében találjuk, ami egy fastruktúrában Pages és Page típusú node-okat tartalmaz. A Page node-ok alkotják a fa leveleit, és ezek felelnek meg a PDF dokumentum oldalainak.

PDF és a keresőoptimalizálás 

Sokan nem is gondolják, hogy bizony a PDF fájlokat is lehet, sőt kell is keresőre optimalizálni. Bár kezdetben nehézséget okozott a Google algoritmusainak ezeket a fájlokat olvasni, ma már tökéletesen tudják őket indexelni, ami azt jelenti, hogy a PDF optimalizálás egy nagyon fontos területe lett a keresőoptimalizálásnak. A PDF SEO során több tényezőre is figyelnünk kell, ha azt szeretnénk, hogy a fájl kiemelkedő helyen jelenjen meg a kereső találatai között.

Alkalmazások 
Szabadon felhasználható PDF-nézegetők rengeteg platformra elérhetőek az Adobe honlapjáról, ezenkívül több nyílt forrású nézegető is létezik.
 Xpdf a POSIX-szerű rendszerekre X Window System alá;
 GPdf, az Xpdf változata GNOME alá;
 evince: ez tud dvi és PostScript fájlokat is nézni;
 GSPdf és ViewPDF (GNUstep);
 és Ghostscript front-endek sok platformra.
 PDFSaM
 PDF.js
 Sumatra PDF

A legtöbb Windows alapú szövegszerkesztő és dokumentumkezelő alkalmazás csak olvasni tudja a PDF formátumot, azonban egy karakterfelismerő programmal (OCR) lehetőség van más típusú fájlok PDF formátumban történő elmentésére, konvertálására. A Microsoft Office 2007 SP2 közvetlenül tud PDF-fájlba menteni.

A LibreOffice irodai szoftvercsomag közvetlenül generál pdf-et ékezethelyesen, de a Mac OS X operációs rendszernek is integráns része a PDF-kezelés, így bármely OS X-en futó alkalmazásból lehet PDF-et nyomtatni.

Jegyzetek

Források 
 Adobe Systems Incorporated, PDF Reference fifth edition Adobe Portable Document Format Version 1.6, 2004

További információk 
 PDF.lap.hu – Linkgyűjtemény
 Az Acrobat Reader letöltése az Adobe honlapjáról

Fájlformátumok