Portable Document Format

PDF (zkratka anglického názvu Portable Document Format – Přenosný formát dokumentů) je souborový formát vyvinutý firmou Adobe pro ukládání dokumentů nezávisle na softwaru i hardwaru, na kterém byly pořízeny. Soubor typu PDF může obsahovat text i obrázky, přičemž tento formát zajišťuje, že se libovolný dokument na všech zařízeních zobrazí stejně. Vytvářet PDF dokumenty lze jak v komerčním softwaru Acrobat od Adobe, tak v dalších programech (často však pouze jako export do PDF). Prohlížení je snazší, existují volně dostupné prohlížeče pro mnoho platforem, nejznámějším je oficiální prohlížeč mateřské firmy Adobe Reader. Některé aktivní typy obsahu (jako například interaktivní formuláře, 3D grafika, videa, zvuk) nejsou v mnohých PDF prohlížečích podporované. PDF soubory mají příponu .pdf popřípadě .PDF. PDF je otevřeným standardem a je snadno přenositelný (jeho reprodukce je nezávislá na použitém softwaru i hardwaru), i proto je velice rozšířený a hojně využívaný. 1. července 2008 byl tento formát publikován jako standard ISO 32000-1:2008 (vycházející z PDF 1.7). PDF soubory vytvořené podle ISO normy nadále umožňují použití proprietárních technologií definovaných jen firmou Adobe (např. Adobe XML Forms Architecture, Adobe JavaScript), přičemž v rámci ISO probíhá snaha o jejich standardizaci.

Historie 
Adobe představilo formát PDF v roce 1993. Specifikace formátu byla dostupná bezplatně, ale formát zůstal proprietární až do jeho oficiálního uvolnění 1. července 2008. Poté byl publikovaný Mezinárodní organizací pro standardizaci (ISO). Specifikace formátu schválená v ISO nadále odkazuje na použití proprietárních technologií, jako je například Rich Text používaný v interaktivních formulářích Adobe XML Forms Architecture. Pracovní skupina ISO požádala firmu Adobe, aby tyto technologie stabilizovala a předložila je ke standardizaci, aby mohly být zahrnuty v chystané nové verzi formátu – PDF 2.0, který je aktuálně ve vývoji.

Zpočátku nebyl balík pro prohlížení a vytváření dokumentu volně ke stažení, bylo potřeba si jej zakoupit. Při vydání verze 2.0 Adobe změnilo své stanovisko a začalo distribuovat program Acrobat Reader zdarma. To otevřelo formátu PDF cestu, aby se mohl stát jedním z nejpoužívanějších formátů pro dokumenty současnosti a de facto standardem pro výměnu dokumentů na internetu.

Historie z pohledu vlastností jednotlivých verzí 
 1993 PDF 1.0 – Vznik PDF – přenos mezi počítačovými platformami Mac, Windows a UNIX
 1994 PDF 1.1 – Podpora pro externí odkazy; Komprese LZW a JPEG; zdarma Adobe Reader, podpora pro heslo a šifrování (MD5, RC4 40bit)
 1996 PDF 1.2 – Přidány interaktivní elementy stránek (radio buttons, checkboxes...), Unicode, podpora základních tiskových barev (CMYK) a přímé barvy
 2000 PDF 1.3 – Podpora TrimBox, BleedBox, ArtBox, SmoothShading (PS3 přechody), zvětšení maximální velikosti
 2001 PDF 1.4 – Průhlednost, podpora RC4 šifrování pro klíče delší 40bit (40-128)
 2003 PDF 1.5 – Komprese JPEG 2000, preflight
 2005 PDF 1.6 – Vkládání OpenType fontů; AES kódování
 2006 PDF 1.7 – Podpora 3D formátu, podpora PDF/A
 2008 PDF 1.7 ext3 – Vznik normy ISO 32000 Document management, 256 bit AES šifrování
 2009 PDF 1.7 ext5 – podpora XFA 3.0

Technické vlastnosti 
Formát PDF je založen na jazyce PostScript, některé prvky tohoto jazyka jsou však ve formátu PDF implementovány mírně odlišně, jiné nejsou použity vůbec, přidána pak je schopnost vkládat do dokumentu omezenou sadu znaků (subset) fontu, a jejich pozdější tisk na nePostScriptových zařízeních. Formát PDF také obsahuje systém pro uložení různých částí dokumentu do jediného souboru s použitím komprese, text komprimuje algoritmem LZW.

Struktura souboru

Základní struktura PDF souboru 
 hlavička – obsahuje verzi PDF
 tělo – obsahuje sérii objektů požitých v dokumentu
 tabulka odkazů – obsahuje konkrétní pozice v souboru, na kterých začíná daný objekt
 závěrečná sekce – obsahuje pozici na které začíná tabulka odkazů

Druhy objektů 
Soubor PDF se skládá především z objektů, kterých existuje osm druhů:
 Booleovské hodnoty (Boolean) – představují hodnoty true, nebo false. Booleovské objekty mohou být použity jako hodnoty v polích (arrays) nebo slovnících (dictionaries), také se mohou objevovat ve výpočetních funkcích PostScriptu jako výsledek booleovských a relačních operátorů a jako operandy podmíněných operátorů if a ifelse.
 Čísla (Numbers) – PDF poskytuje dva typy numerických objektů: integer a real. Integer reprezentuje matematicky celá čísla určitého intervalu se středem v 0. Real objekty aproximují matematické reální čísla, ale s omezeným rozsahem a přesností. Typicky jsou reprezentovány pomocí pevné řádové čárky (fixed-point). Rozsah a přesnost jsou limitované vnitřní reprezentací používanou v počítači, na kterém běží uživatelská PDF aplikace.
 Řetězce (Strings) – String objekt sestává ze série bajtů hodnot unsigned integer v rozsahu 0 až 255. String objekty nejsou objekty typu integer, ale jsou uloženy v kompaktnějším formátu. Objekty typu string mohou být zapisovány dvěma způsoby: jako sekvence literálů uzavřených v kulatých závorkách (), nebo jako hexadecimální data uzavřena v lomených závorkách <>.
 Jména (Names) – Name object je atomický symbol jedinečně definován sekvencí znaků. Jedinečně definován znamená, že dva jmenné objekty sestávající stejné sekvence znaků jsou stejný objekt. Atomický znamená, že nemají vnitřní strukturu. Ačkoliv jsou definované sekvencí znaků, tyto nejsou považovány za elementy jména. Jméno začíná lomítkem (/). Lomítko není součástí jména, je to předpona indikující, že následující sekvence znaků představuje jméno. Mezi lomítkem a jménem se nesmějí nacházet žádné bílé znaky.
 Pole (Arrays) – seřazené kolekce objektů – array object je jednorozměrná množina objektů seřazených sekvenčně. Na rozdíl od polí v mnohých jiných programovacích jazycích, PDF pole mohou být heterogenní, to znamená, že prvky pole mohou být jakákoliv kombinace čísel, řetězců, slovníků a dalších objektů, včetně polí samotných. Pole je zapsané jako sekvence objektů uzavřených v hranatých závorkách ([…]).
 Slovníky (Dictionaries) – kolekce objektů indexovaných Jmény – Dictionary object je asociativní tabulka obsahující páry objektů, označovány jako záznamy slovníku. První prvek každého páru objektů je klíč (key) a druhý prvek hodnota (value). Klíč musí být typu Jméno (Name, na rozdíl od PostScriptu kde může být objekt jakéhokoliv typu). Hodnota může být jakýkoliv objekt včetně dalšího slovníku. Slovníkový záznam, kterého hodnota se rovná Null je ekvivalentní chybějícímu záznamu. (To je rozdíl oproti PostScriptu, kde se null správa jako jakýkoli jiný objekt). Slovník je zapsaný jako sekvence párů klíč–hodnota uzavřených ve dvojitých lomených závorkách (<<…>>).
 Streamy (Streams) – Stream object stejně jako string object obsahuje sekvenci bajtů. Avšak, PDF aplikace mohou číst stream postupně, zatím co řetězce musí byt přečteny celé najednou. Navíc stream může mít neomezenou velikost. Z toho důvodu objekty s velkým množstvím dat, jako obrázky a popisy stránek (page descriptions), jsou reprezentovány pomocí streamů.
 Prázdný (Null) objekt – má typ a hodnotu, která se nerovná žádnému jinému objektu. Existuje jenom jeden objekt typu null, označený pomocí klíčového slova null.

Objekty mohou být přímé (vloženy do jiného objektu), nebo nepřímé. Nepřímé objekty jsou očíslovány číslem objektu a „generation number“. Tabulka indexů nazývána xref tabulka poskytuje offset bajtu každého nepřímého objektu od začátku souboru. Tato konstrukce umožňuje efektivní libovolný přístup k objektům v souboru, a také umožňuje, aby kvůli malým změnám nemusel být přepisován celý soubor (inkrementální aktualizace). Od verze PDF 1.5 mohou být nepřímé objekty také umístěny do speciálních proudů (object streams). Tato technika snižuje velikost souborů, které mají velké množství nepřímých objektů, a je vhodná zejména pro Tagged PDF.
Existují dvě rozložení PDF souborů, nelineární (neoptimalizované) a lineární (optimalizované). Nelineární PDF soubory spotřebují méně místa na disku než jejich lineární protějšky, mají však pomalejší přístup, protože některé z údajů potřebných pro sestavení stránky jsou roztroušeny po celém souboru. Lineární PDF soubory (také označovány jako optimalizovány nebo webově optimalizovány) jsou konstruovány způsobem, který jim umožňuje být čteny z pluginu webového prohlížeče bez nutnosti čekání na stažení celého souboru, protože jsou zapsány na disk lineárně (v pořadí podle stránek). PDF soubory mohou být optimalizovány pomocí software Adobe Acrobat nebo QPDF.

Zobrazovací model 
Základní princip, jak je grafika reprezentována v PDF je velmi podobný tomu v PostScriptu, s výjimkou použití průhlednosti, která byla přidána do PDF od verze 1.4.

K popisu stránky používá PDF grafika kartézský souřadnicový systém nezávislý na použitém zařízení (device independent). Popis stránky PDF může používat matice pro rotaci, změnu měřítka, nebo zkosení grafických prvků. Klíčovým konceptem ve formátu PDF je stav grafiky (graphics state), stavové proměnné, což je kolekce grafických parametrů, které mohou být měněny, ukládány, a obnovovány popisem stránky. PDF má (od verze 1.6) 24 grafických stavových vlastnosti, z nichž 16 je nezávislých na použitém zařízení (device independent) a 8 na zařízení závislých (device dependent).
Popis některých důležitých grafických stavových vlastností (device independent):
 Současná transformační matice (CTM – Current transformation matrix), mapuje pozici z uživatelských souřadnic do souřadnic zařízení
 Ořezová cesta (Clipping path) – aktuální ořezová cesta definuje hranice podle kterých je celý výstup ořezán
 Barevný prostor (Color space) – současný barevný prostor, ve kterém jsou barvy interpretovány
 Barva (Color) – současná barva používaná během vykreslovacích operací
 Text state – skupina devíti stavových proměnných, které náleží jenom vykreslování textu
 Tloušťka čáry (Line width) – tloušťka čar v „user space units“
 Režim míchání (Blend mode) – od PDF 1.4. Současný režim míchání pro transparentní zobrazovací model
 Alfa konstanta – hodnota konstanty tvaru (shape), nebo konstanty neprůhlednosti (opacity) v transparentním zobrazovacím modelu

Některé grafické stavové proměnné jsou nastavovány pomocí konkrétních operátorů, některé pomocí příslušného záznamu v slovníku grafických stavových proměnných (graphics state parameter dictionary) a jiné pomocí obou. Například aktuální tloušťka čáry může být nastavena buď operátorem w, nebo (od PDF 1.3) pomocí LW záznamu v slovníku grafických stavových proměnných, zatím co aktuální barva je nastavována jenom pomocí konkrétního operátoru.

Vektorová grafika 

Vektorová grafika ve formátu PDF, stejně jako v PostScriptu, je konstruována pomocí cest (path). Cesty jsou obvykle složeny z čar a kubických Bézierových křivek, ale mohou být také vytvořeny z obrysů textu. Na rozdíl od PostScriptu, PDF neumožňuje, aby jediná cesta (path) míchala tvar textu s čárami a křivkami. Cesty mohou být tahané (stroked), vyplněné, nebo použity pro ořezávání. Tahy a výplně mohou používat jakoukoliv sadu barev, včetně vzorů (patterns).

PDF podporuje několik typů vzorů. Nejjednodušší je dlaždicový vzor (tilling pattern), v němž je specifikován kousek předlohy, který se poté nanáší opakovaně. Může to být barevný dlaždicový vzor, s barvami specifikovanými ve vzorovém (pattern) objektu, nebo nebarevný dlaždicový vzor, který odkládá specifikaci barvy do doby vykreslování vzoru. Se začátkem PDF 1.3 se objevuje také stínovací (shading) vzor, který vykresluje nepřetržitě se měnící barvy. Existuje sedm druhů stínovacích vzorů, z kterých nejjednodušší jsou axiální odstín (typ 2) a radiální odstín (typ 3).

Rastrové obrázky 
Rastrové obrázky v PDF (tzv. Image XObjects) jsou reprezentovány pomocí slovníků s asociovanými streamy. Slovník popisuje vlastnosti obrázku, a stream obsahuje obrazová data. (Méně často, může být rastrový obrázek přímo součástí popisu stránky jako vložený obrázek.) Obrázky jsou obvykle filtrovány pro účely komprese. Obrazové filtry podporované v PDF zahrnují některé obecné filtry:
 ASCII85Decode filtr používaný pro převod streamu do 7bit ASCII
 ASCIIHexDecode podobný ASCII85Decode ale méně kompaktní
 FlateDecode běžně používaný filtr založený na zlib/deflate algoritmu (též gzip, ale ne zip) definován v RFC 1950 a RFC 1951; představen v PDF 1.2, může použít jednu ze dvou skupin z prognostických funkcí pro více kompaktní zlib/deflate kompresi : Predictor 2 z TIFF 6.0 specifikaci a prediktory (filtry) od PNG specifikace (RFC 2083)
 LZWDecode filtr založený na LZW kompresi; může používat jednu ze dvou skupin prognostických funkcí pro více kompaktní LZW kompresi: Predictor 2 ze specifikace TIFF 6.0 a prediktory (filtry) z PNG specifikace
 RunLengthDecode jednoduchá kompresní metoda streamů s opakujícími se daty za pomocí algoritmu Run-length encoding (RLE) a obrazově-specifické filtry
 DCTDecode ztrátový filtr založený na standardu JPEG
 CCITTFaxDecode bezeztrátový dvou úrovňový (černá/bílá) filtr založený na skupině 3 nebo skupině 4 CCITT (ITU-T) faxový kompresní standard definovaný v ITU-T T.4 a T.6
 JBIG2Decode ztrátový nebo bezeztrátový dvou úrovňový (černá/bílá) filtr založen na standardu JBIG2, představen ve formátu PDF 1.4
 JPXDecode ztrátový nebo bezeztrátový filtr založen na standardu JPEG 2000, který byl zaveden v PDF 1.5

Normálně veškerý obrazový obsah je součástí PDF souboru. Standard PDF však umožňuje aby obrazová data mohla být uložena v externích souborech s použitím externích streamů nebo alternativních obrázků. Některé standardizované podskupiny PDF, jako např. formát PDF/A a PDF/X, tyto funkce zakazují.

Text 

Text ve formátu PDF je reprezentován pomocí textových prvků v page content streams. Textový prvek definuje, že znaky by měly být vykresleny na určitých pozicích. Tyto znaky jsou specifikovány za pomocí kódování vybraného zdroje písma (fontu).

Fonty 

Font objekt ve formátu PDF je popis digitálního typu písma (typeface). Může buď popisovat vlastnosti typu písma, nebo může obsahovat vložený soubor s fontem. První případ se nazývá unembedded font, zatím co druhý embedded font. Soubory s fonty, které mohou být vestavěné v PDF, vycházejí z široce používaných formátů písem (fontů): Typ 1 (a jeho komprimované varianty CFF), TrueType, a (od PDF 1.6) OpenType. Navíc PDF podporuje variantu Typ 3, ve které jsou komponenty fontu písma popsané pomocí PDF grafických operátorů.

Standardní písma Typu 1 (standardních 14 Fontů) 

Čtrnáct typů písma – známé jako standardních 14 fontů – mají zvláštní význam v dokumentech PDF:
 Times (v3) (normální, kurzíva, tučný a tučná kurzíva)
 Courier (normální, šikmé, tučné a tučné šikmé)
 Helvetica (v3) (normální, šikmé, tučné a tučné šikmé)
 Symbol
 Zapf Dingbats

Tyto fonty jsou někdy nazývány jako základních čtrnáct fontů písma. Tyto fonty, nebo vhodné substituční písma se stejnými metrikami, musí být vždy k dispozici ve všech PDF prohlížečích, a tak nemusí být vloženy v PDF souboru. PDF prohlížeče musejí znát metriku těchto fontů. Ostatní fonty mohou být nahrazeny, pokud nejsou vloženy v pdf souboru.

Kódování 

V textovém řetězci jsou znaky zobrazeny pomocí kódu znaku (integer), které jsou mapovány na glyfy v aktuálním fontu pomocí kódování. Existuje řada předdefinovaných kódování, včetně WinAnsi, MacRoman, a velké množství kódování pro jazyky východní Asie, a fonty mohou mít své vlastní vestavěné kódování. (I když WinAnsi a MacRoman kódování jsou odvozeny od historických vlastností operačních systémů Windows a Macintosh, fonty používající tato kódování fungují stejně dobře na všech platformách.) PDF umožňuje specifikovat předdefinované kódování, vestavěné kódování fontů, nebo poskytnout vyhledávací tabulku (lookup table) rozdílů vůči předdefinovanému nebo vestavěnému kódování (nedoporučuje se pro TrueType fonty). Kódovací mechanizmy v PDF byly navrženy pro fonty Typu 1 a pravidla pro jejich použití pro TrueType fonty jsou složitá.

Pro velké fonty nebo fonty s nestandardními glyfy, se požívá zvláštní kódování Identity-H (pro horizontální zápis) a Identity-V (pro vertikální). Pro takové druhy fontů je nutné poskytnout ToUnicode tabulku, pokud má být uchována informace o sémantice znaků.

Průhlednost 

Původní zobrazovací model PDF byl, stejně jako v PostScriptu, neprůhledný: každý objekt vykreslen na stránce zcela nahrazoval cokoliv dříve vykreslené na stejném místě. Od verze 1.4 byl PDF zobrazovací model rozšířen tak, aby umožňoval průhlednost. Je-li průhlednost použita, nové objekty interagují s dříve zobrazenými objekty, aby vytvořili efekt prolínání. Funkce transparentnosti byla do PDF přidána s ohledem na zpětnou kompatibilitu, tak aby mohla být ve verzích PDF 1.3 a předchozích ignorována. V důsledku toho by soubory, které používají malé množství transparentnosti, měly být zobrazeny přijatelně i ve starších prohlížečích. Avšak soubory využívající velké množství transparentnosti mohou být staršími prohlížeči zobrazeny nesprávně bez varování.

Rozšíření transparentnosti jsou založeny na klíčových pojmech jako: skupiny transparentnosti (transparency groups), režimů prolnutí (blending modes), tvar (shape) a alfa (alpha). Model je úzce spojen s funkcemi Adobe Illustrator verze 9. Režimy prolnutí byly založeny na těch, které byly v té době používány v Adobe Photoshop. Když byla zveřejněna specifikace PDF 1.4, byly vztahy pro výpočet režimy blendingu drženy v tajnosti. Od té doby je však společnost Adobe publikovala.

Porovnání s dalšími formáty 
Formát PDF je možné srovnat s dalšími formáty pro uložení (převážně) textových dokumentů:

PostScript 

Jak už bylo zmíněno, PDF z PostScriptu vychází, takže jejich schopnosti jsou do značné míry podobné. Nejviditelnější rozdíl je ve velikosti souborů. Jelikož soubory PDF automaticky používají kompresi, jsou typicky výrazně menší než odpovídající dokumenty ve formátu PostScript.

(X)HTML 
Jazyk HTML si za cíl klade popsat obsah WWW stránky tak, že konkrétní způsob zobrazení stránky je na libovůli prohlížeče, potažmo uživatele. To na jedné straně umožňuje zobrazovat dokumenty tak, aby vyhovovaly čtenáři, na straně druhé znemožňuje zaručit přesně stejný vzhled dokumentu u všech uživatelů. Oproti tomu je cílem formátu PDF zajistit co nejpřesněji stejné zobrazení na libovolném zařízení.

Formát PDF je proto před HTML upřednostňován zvláště v případě graficky bohatého návrhu, u kterého autor vyžaduje dodržení původního vzhledu, u reklamních materiálů, prospektů apod. V rámci HTML lze téhož dosáhnout pomocí bitmapové grafiky či (v poslední době) pomocí vektorové grafiky, např. ve formátu SVG. Takové řešení však trpí mnoha nedostatky a odstraňuje většinu předností jednoduchého textového formátu. Výsledné dokumenty jsou také obvykle výrazně větší než původní HTML text.

Typickým příkladem rozdílů je chování při zvětšování dokumentu, např. pro lepší čitelnost pro osoby s vadou zraku:
 Při zvětšení PDF dokumentu se pouze zvětšuje měřítko, vzhled dokumentu zůstává zachován; při vysokém zvětšení se na obrazovku nevejde celý sloupec textu a je třeba horizontální posuv pro čtení celého řádku.
 Pro zvětšení HTML dokumentu stačí zvětšit velikost použitého písma, text se přeformátuje tak, aby se stále vešel do šířky okna prohlížeče, při tom se ovšem vzhled dokumentu změní, řádkové zlomy jsou mezi jinými slovy, dokumentu se zvýší počet řádků textu atd. (Poznámka: novější verze formátu PDF umožňují vytvářet dokumenty, které se mohou také přeformátovat stejným způsobem, tato možnost však obvykle využívána není.)

Software pro práci s PDF 
 Vytváření a úprava dokumentů: Adobe Acrobat, PDF-XChange Pro, PDF-XChange Viewer Pro.
 Export do PDF: většina dobrých grafických programů a textových procesorů.
 Vytvořit PDF soubor lze z textu také jeho odesláním na virtuální tiskárnu, která netiskne na fyzický papír, ale do souboru. Omezení konkrétního procesoru, že tento formát souboru neumí sám vytvořit, lze snadno obejít vlastností operačního systému, který programům služby tiskáren zprostředkovává.

Většina software však umožňuje obejít certifikovaný podpis dokumentu v PDF.

Prohlížení 
Kromě oficiálního bezplatně použitelného Adobe Readeru existuje celá řada programů schopných pracovat s formátem PDF. Patří mezi ně např. prohlížeč PDF-XChange Viewer, Foxit Reader, Sumatra PDF nebo open source prohlížeč Xpdf, který obsahuje i programy na extrahování textu, fontů a obrázků z PDF a též i převod PDF na PostScript nebo PPM.

Související články 
 PDF/A
 PostScript
 SVG
 XSL-FO
 LZW

Reference

Externí odkazy 
 
 Oficiální stránky formátu na webu firmy Adobe
 Specifikace formátu PDF, také dostupné jako kniha ()
 Stručná historie verzí formátu PDF 
 

Otevřené formáty
Adobe Systems