APortable Document Format (PDF) azAdobe Systems által kifejlesztett, dokumentumok tárolására alkalmasfájlformátum. A PDF alkalmas szöveget, ábrát és képeket tartalmazó dokumentum leírásáraeszköz- ésfelbontá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 egynyí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[1]
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álisVersion bejegyzés felüldefiniálhatja és ilyenkor az utóbbi verziószám a helyes.
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 astartxref 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 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 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 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 azxref kulcsszóval és az őket követő lezáró résztrailer 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 PDF-et lezáró rész atrailer 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 astartxref 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 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
A logikai (boolean) objektumok atrue ésfalse (igaz/hamis) kulcsszavakat tartalmazhatják tokenként.
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).
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ötthexadecimá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.
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.
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.
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.
A stream objektumok egy szótár objektummal kezdődnek, amit egy, astream, illetveendstream 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 egyLength nevet – az ehhez tartozó érték határozza meg, hogy hány byte hosszúságú astream ésendstream 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 azFilter vagyFFilter 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 aDL 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.
A null objektumot anull 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.
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 azobj ésendobj 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 törzs részében felsorolt objektumok logikailag egy objektumhierarchiát alkotnak. Ennek a hierarchiának a gyökere minden esetben aCatalog objektum, ami egy szótár típusú objektum. ACatalog objektum offsetcímét a PDF fájlban a lezáró részRoot é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 aCatalog által megadott objektumhierarchia page tree részében találjuk, ami egy fastruktúrábanPages ésPage típusú node-okat tartalmaz. APage node-ok alkotják a fa leveleit, és ezek felelnek meg a PDF dokumentum oldalainak.
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. APDF 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.
Szabadon felhasználható PDF-nézegetők rengeteg platformra elérhetőek azAdobe honlapjáról, ezenkívül többnyílt forrású nézegető is létezik.
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.
ALibreOffice irodai szoftvercsomag közvetlenül generál pdf-et ékezethelyesen, de aMac OS Xoperá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.