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öz- é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.
Portable Document Format | |
Fájlkiterjesztés | |
MIME-típus | application/pdf |
Fejlesztő | Adobe Systems |
Kiadás dátuma | 1993. június |
Formátum típusa | bináris fájlformátum |
Mac OS típuskód | PDF (beleértve a szóköz karaktert is az F után) |
Weboldal | www.iso.org/standard/75839.html |
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[1]
Verziók
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA PDF fájlok törzsrésze PDF objektumokat tartalmaz. A PDF specifikáció a következő objektumtípusokat támogatja:
Logikai objektumtípus
szerkesztésA logikai (boolean) objektumok a true
és false
(igaz/hamis) kulcsszavakat tartalmazhatják tokenként.
Numerikus objektumtípus
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésA 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
szerkesztésSokan 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
szerkesztésSzabadon 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
szerkesztésForrások
szerkesztés- Adobe Systems Incorporated, PDF Reference fifth edition Adobe Portable Document Format Version 1.6, 2004
További információk
szerkesztés- Acrobat Reader az Adobe oldalán