České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Oprava diakritiky v PDF dokumentech Vojtěch Sidek
Vedoucí práce: Ing. Jan Koutník Studijní program: Elektrotechnika a informatika – bakalářský Obor: Informatika a výpočetní technika prosinec 2008
-2-
Poděkování Poděkovat bych chtěl především svému vedoucímu práce, Ing. Janu Koutníkovi, za trpělivost a odborné rady. Dále poděkování patří mým rodičů za ustavičnou podporu a trpělivost. Díky patří také týmu pdfbox.org, jejichž projekt umožnil realizaci této práce.
-3-
-4-
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Ostravě dne 30. 12. 2008
……………………………………………
-5-
-6-
Abstrakt Práce se zabývá korekcí reprezentace písmen s diakritikou v PDF dokumentech, kdy za určitých podmínek dojde k vysázení znaku pomocí dvou elementů, písmene a samostatného diakritického znaku, který je posunut na správnou pozici. Tato skutečnost působí problémy při extrakci textu a automatickém zpracovávání dokumentů. Výsledkem této bakalářské práce je program v jazyce Java, využívající knihovnu tříd PDFBox, umožňující opravit reprezentaci českých znaků s diakritikou v PDF dokumentech. Korekce je provedena sloučením kompozitů do jednoho znaku s použitím fontu, který obsahuje české znaky a je shodný s původním fontem. Množina obsažených fontů je rozšiřitelná. Testování proběhlo ve většině případů úspěšně.
Abstract This thesis is studying correction of representation of letters with accents in PDF documents. In certain conditions the character is composed from two elements, standard letter and accent itself which is shifted to correct position. This fact causes problems during text extraction and automated document processing. The result of this bachelor thesis is program in Java programming language using library of classes PDFBox, capable of correcting representation of Czech characters with accents in PDF files. Correction is made by merging composites into one character using font that includes Czech characters and looks same as original font. Collection of included fonts is extensible. Test results were successful in most cases.
-7-
-8-
Obsah 1
Úvod ............................................................................................................. 13
2
Specifikace cílů............................................................................................ 15
3
Analýza a návrh řešení............................................................................... 17 3.1
Podoba dvojznaku ve struktuře PDF souboru .................................................... 17
3.2
Analýza PDF dokumentů s vadnou diakritikou .................................................. 19
3.3
Vnitřní struktura PDF souborů ............................................................................ 20
3.3.1
Základní struktura dokumentu ......................................................................... 20
3.3.2
Struktura stránky .............................................................................................. 21
3.3.3
Důležité základní objekty ................................................................................. 22
3.3.3.1 Stream............................................................................................................... 22 3.3.3.2 Font................................................................................................................... 23 3.3.3.3 Font Encoding .................................................................................................. 24 3.3.4 Operátory pro sázení textu ............................................................................... 25 3.4
4
3.4.1
PDF CanOpener 3.0 ......................................................................................... 27
3.4.2
PDFGlobal COS Level Editor .......................................................................... 28
3.4.3
CosEdit ............................................................................................................. 29
3.4.4
PDFEdit ............................................................................................................ 30
3.5
Možnosti knihovny PDFBox pro zadaný úkol ..................................................... 31
3.6
Volba implementačního prostředí ........................................................................ 31
3.7
Návrh algoritmu pro opravu ................................................................................. 32
Realizace ...................................................................................................... 35 4.1
6
Implementace algoritmu ........................................................................................ 35
4.1.1
Třída AccentCorrector...................................................................................... 36
4.1.2
Třída FontRecord ............................................................................................. 37
4.2
5
Dostupné programy pro zobrazení struktury PDF souborů .............................. 26
Podporované fonty ................................................................................................. 37
Testování ..................................................................................................... 39 5.1
Dokumenty z archivu prací ČVUT ....................................................................... 39
5.2
Dokumenty ze sbírky zákonů MVČR................................................................... 44
Závěr ............................................................................................................ 45 6.1
Zhodnocení splnění cílů práce ............................................................................... 45
6.2
Možné směry pokračování..................................................................................... 45
-9-
7
Seznam literatury ....................................................................................... 47
A Seznam podporovaných fontů a jejich alternativ ................................... 49 B
Seznam použitých pojmů a zkratek .......................................................... 50
C Obsah přiloženého CD ............................................................................... 51
- 10 -
Seznam tabulek Tabulka 3.1 – Zkoumané dokumenty z archivu ČVUT ........................................................... 19 Tabulka 5.1 – Výsledky testování ............................................................................................ 40
Seznam obrázků Obrázek 1.1 – Porovnání originálního dokumentu s extrahovaným textem ............................ 13 Obrázek 3.1 – Grafické znázornění složení znaku s diakritikou posuvem .............................. 17 Obrázek 3.2 – Blokové schéma PDF souboru.......................................................................... 21 Obrázek 3.3 – Příklad položek stránky zobrazený ve stromové struktuře ............................... 22 Obrázek 3.4 – Příklad položek fontu zobrazený ve stromové struktuře .................................. 25 Obrázek 3.5 – Prostředí plug-inu PDF CanOpener 3.0 ............................................................ 27 Obrázek 3.6 – Prostředí plug-inu PDFGlobal COS Level Editor ............................................ 28 Obrázek 3.7 – Prostředí programu CosEdit ............................................................................. 29 Obrázek 3.8 – Prostředí programu PDFEdit ............................................................................ 30 Obrázek 3.9 – Diagram navrženého algoritmu ........................................................................ 33 Obrázek 5.1 – porovnání vzhledu dokumentu před korekcí a po korekci ................................ 41 Obrázek 5.2 – Ukázka narušení zarovnání do bloku ................................................................ 42 Obrázek 5.3 – Ukázka vzniku nadbytečné mezery .................................................................. 42 Obrázek 5.4 – Ukázka vzhledu dokumentu před opravou a po opravě alternativním fontem . 43
- 11 -
- 12 -
1
Úvod
PDF (zkratka anglického názvu Portable Document Format – Formát pro přenositelné dokumenty) je souborový formát vyvíjený od roku 1993 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ě. (definice a data převzaty z [4]).
Přestože je dokument v prohlížeč bez problémů čitelný, při extrakci textů z PDF souborů mohou nastat problémy, hlavně pokud se v dokumentu vyskytují méně obvyklé znaky, jako jsou například české znaky s diakritikou. Navíc někdy vnitřní kódování znaků neodpovídá žádné standardní znakové tabulce a získaný text je v některých případech nepoužitelný. K tomu dochází hlavně ve snaze maximálně zredukovat velikost výsledného souboru, omezením počtu znaků definovaných ve fontu. Z toho důvodu některé programy pro extrakci textu z PDF souborů využívají místo přímého čtení struktury dokumentu metody OCR, kdy vykreslí dokument jako by jej vytiskly a dále s ním nakládají jako s obrázkem. Další problém nastává při použití fontu, který neobsahuje znaky s diakritikou, ale pouze samotné diakritické znaky a standardní písmena. Výsledný znak je pak tvořen složením diakritického znaku s příslušným písmenem. Opravou právě tohoto problému se zabývá má práce.
Obrázek 1.1 – Porovnání originálního dokumentu s extrahovaným textem
- 13 -
- 14 -
2
Specifikace cílů
Cílem této práce by měl být vznik programu, který dokáže opravit soubory PDF, ve kterých jsou znaky s českou diakritikou rozděleny na písmeno a diakritický znak. Takovýto dvojznak by měl být sloučen do jednoho korektního znaku, díky tomu lze zkvalitnit následnou extrakci textu z opraveného dokumentu.
Postup řešení tohoto problému mi byl vedoucím bakalářské práce nastíněn zhruba následovně: •
Prostudování bakalářských prací [1][2], ve kterých se autoři zabývají hlavně problematikou extrakce českého textu a automatickým zpracováním PDF dokumentů, přičemž naráží na studovaný problém
•
Hlouběji prostudovat strukturu PDF dokumentů, ve kterých se tento problém vyskytuje a přesněji identifikovat, jak se na ní daný problém projevuje
•
Zjistit zda a do jaké míry se dá daný problém z dokumentů korektně odstranit pomocí knihovny PDFBox
•
Pokud bude odstranění možné, navrhnout korektor, který úspěšně sloučí kompozity do jednoho znaku
•
Napsat program v jazyce Java implementující navržený korektor
- 15 -
- 16 -
3
Analýza a návrh řešení
V této kapitole se budu zabývat postupným popisem zadaného problému a nastíním jeho možná řešení a úskalí.
3.1 Podoba dvojznaku ve struktuře PDF souboru Znaky s diakritikou, pokud nejsou obsaženy samostatně ve fontu, musí být složeny z písmene a samotného diakritického znaku, které jsou vůči sobě posunuty tak, aby ve výsledné podobě dokumentu vytvořily zamýšlený znak. Pro vykreslení českého znaku s diakritikou pomocí písmene a diakritického znaku je nejčastěji použito TJ operátoru (viz 3.3) s posuvem písmene doleva pod diakritický znak.
Obrázek 3.1 – Grafické znázornění složení znaku s diakritikou posuvem Zápis v datovém streamu vypadá následovně:
[(\024)463(e)]TJ
Operátor TJ by měl vykreslit písmeno „ě“. Háček je reprezentován jako oktalová číslice \024 a písmeno e je pod něj podsunuto, posun v tomto případě zajišťuje číslo 463, udávající šířku posunu doleva v promilích průměrné šířky znaku v definici fontu[6]. Obdobně vznikají ostatní písmena. Zvláštností je písmeno „í“, neboť musí být vykresleno bez tečky, pouze se samostatnou čárkou, proto musí být ve fontu obsažen znak označovaný „dotlessi“.
Stream vypadá v tomto případě takto:
[(Jan)-326(Koutn)109(\023)381(\020k)]TJ
- 17 -
Bylo by vykresleno jméno „Jan Koutník“ následujícím postupem: • nejprve se vysází slovo „Jan“ • poté se místo mezery použije posun doprava • vysází se znaky „Koutn“ • následuje korekční posun doleva, neboť i je velmi úzké písmeno • vykreslí se čárka, uložená jako oktalová hodnota \023 • dojde k posunu doleva • pod čárku je vykreslen znak „dotlessi“, taktéž uložen jako oktalová hodnota \020 • vysází se koncové písmeno k Větší problém nastává s velkými písmeny, neboť při pouhém posunu do strany, jako v předchozích případech, by se diakritický znak a písmeno překryly a výsledný dokument by byl obtížně čitelný. V tomto případě bývá diakritický znak umístěn dalšími operátory nad příslušné písmeno.
Obvyklé řešení tohoto problému ve streamu je na následujícím příkladu:
215.908 746.691 Td[(\024)]TJ -1.3 -3.022 Td[(C)]TJ
Takto by mělo být vykresleno písmeno „Č“: • nejprve operátor Td nastaví počáteční pozici pro vykreslení textu operátorem TJ • vykreslí se znak háčku, jako oktalová hodnota \024 • další operátor Td upraví horizontální i vertikální pozici následného vykreslování • písmeno C se vykreslí pod háček, čímž vznikne zamýšlené Č Obdobným způsobem, pomocí Td a dvou TJ operátorů, mohou být vysázena i malá písmena s diakritikou, kdy bude vertikální posuv roven nule. Dalším možným jevem je rozdělení diakritického znaku, písmene a posuvu do dvou po sobě jdoucích TJ operátorů. Analogicky lze použít Tj operátory, které však nemohou obsahovat posuny a je nutné je zkombinovat s TJ, případně Td operátory.
- 18 -
3.2 Analýza PDF dokumentů s vadnou diakritikou Pomocí nástrojů pro zobrazení struktury PDF souborů jsem prozkoumal některé dokumenty z [3], některé výukové materiály a vzor diplomové práce z [8]. Generoval jsem také testovací soubory, ve snaze narazit na zadaný problém, ale žádný z programů pdf995, PDFCreator, Adobe Akrobat Professional 7, PDF Factory ani internetová služba www.pdfonline.com nevytvořily české znaky s diakritikou pomocí dvou znaků. Na zadaný problém jsem narazil až u souborů z archivu ČVUT. Vyskytoval se ve velké části dokumentů generovaných z některé varianty TeXu, což potvrzuje i [1] a [2]. Tabulka 3.1 – Zkoumané dokumenty z archivu ČVUT Jméno dabas_2005dipl.pdf kolorom_2005dipl.pdf krahulik_2005dipl.pdf mikulas_2005dipl.pdf novakj4_2005dipl.pdf novakp_2005dipl.pdf nytra_2005dipl.pdf uller_2005dipl.pdf fusekm1_2006bach.pdf absolm1_2006bach.pdf adamim1_2006bach.pdf adamm1_2006bach.pdf bajusm1_2006dipl.pdf banovl1_2006bach.pdf bernav1_2006bach.pdf bicikj1_2006dipl.pdf brabej4_2006bach.pdf blaskj1_2006bach.pdf
Zdroj TeX output dvipsk(k) 5.94a TeX dvipsk(k) 5.94a dvipsk(k) 5.92b TeX output TeX TeX Acrobat PDFMaker Pscript.dll v5.0 PDFCreator 0.9.1 TeX Writer Pscript.dll v5.2 Pscript.dll v5.2 Pscript.dll v5.2 PDFCreator 0.8.0
Generátor difpdfm 0.13.2c Distiller 6.0 MiKTeX pdfTex-1.20a AFPL Ghostscript 8.14 difpdfm 0.13.2c GPL Ghostscript 8.01 difpdfm 0.13.2c pdfTeX-1.10a MiKTeX pdfTex-1.21a Distiller 7.0 AFPL Ghostscript 8.50 AFPL Ghostscript 8.53 MiKTeX pdfTex-1.21a OpenOffice 2.0 Distiller 6.0 Distiller 7.0 Distiller 7.0 AFPL Ghostscript 8.14
Verze PDF 1.2(Acr 3.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.3(Acr 4.x) 1.2(Acr 3.x) 1.2(Acr 3.x) 1.2(Acr 3.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.6(Acr 7.x) 1.3(Acr 4.x) 1.3(Acr 4.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.4(Acr 5.x) 1.3(Acr 4.x)
Dvojznak Ano Ano Ano Ano Ano Ano Ano Ano Ano Ne Ne Ne Ne(SK) Ne Ne Ne Ne Ne
Při bližším prozkoumání jsem zjistil, že soubory používající dvojznaky mají i v použitých fontech pouze znaky základních písmen a samostatné znaky pro háček, čárku, kroužek a také „i“ bez tečky. V některých souborech jsou fonty omezeny pouze na použité znaky a některá písmena tedy ani nedefinují, což částečně limituje další modifikace souborů. Tato redukce definovaných znaků se obvykle provádí za účelem minimalizovat velikost výsledného souboru. Řešením pro autory prací by mohlo být použití fontů, které obsahují podobu českých znaků s diakritikou. Pro hojně používané Computer Modern fonty existuje alternativa obsažená v CSTeXu, který je dostupný na stránkách katedry matematiky FEL ČVUT [7]. Zde jsou tyto fonty dostupné v počeštěné podobě a několika formátech souborů.
- 19 -
Další problém nastal u souboru vzorové diplomové práce z [8], zde je použit Type3 font a znaky jako čárka, háček nebo kroužek jsou definovány jako grafické objekty bez doplnění, o jaký znak se jedná. K jejich identifikaci by tedy bylo nutné použít postupy založené na OCR, což přesahuje rámec této práce.
3.3 Vnitřní struktura PDF souborů Pro porozumění zadanému problému a jeho řešení je nutné seznámení se se základní strukturou PDF souborů a bližší seznámení se s některými bloky, které se přímo podílejí na zadané problematice, tedy textová pole a určení použitého fontu. Základní informace jsem převzal z [1], podrobnější popis a pro pochopení některých operátorů jsem použil [6].
3.3.1 Základní struktura dokumentu Sobory PDF jsou stavěny pokud možno pro jednoprůchodové zpracování. Základní struktura souboru je následující: •
Hlavička – první řádek souboru obsahuje informaci, že se jedná o PDF soubor a udává jeho verzi, například %PDF-1.7
•
Tělo – dále následuje posloupnost COS objektů, ze kterých je celý dokument tvořen, existuje 7 základních typů objektů: prázdná hodnota (null), pravdivostní hodnota (boolean), číslo (number), řetězec (string), název (name), pole (array), slovník (dictionary) a proud (stream), typy odpovídají, s malými výjimkami, datovým typům jazyka PostScript, z kterého formát PDF vychází, objekty mohou obsahovat jednoznačný číselný identifikátor, přes který se na sebe mohou odkazovat, takto označené objekty se nazývají nepřímé
•
Tabulka křížových odkazů – obsahuje informace o nepřímo adresovaných objektech
•
Ukončení - obsahuje ukazatel na předchozí tabulku a některé speciální objekty, na konci se nachází řetězec %%EOF označující konec souboru
Takováto struktura může být v dokumentu zřetězena při inkrementální editaci, původní data tedy zůstávají netknuta, včetně možného zašifrování a nová data se zapíší až za ně, což částečně narušuje jednoprůchodovost zpracování.
- 20 -
Hlavička Tělo Původní dokument Tabulka křížových odkazů Ukončení Změny těla 1. změna
Tabulka křížových odkazů Ukončení Změny těla
n. změna
Tabulka křížových odkazů Ukončení
Obrázek 3.2 – Blokové schéma PDF souboru Jednotlivé stránky a jejich obsah jsou uloženy nezávisle a tvoří listy stromové struktury, podle doporučení pokud možno vyvážené, kde počet potomků každého uzlu by se měl pohybovat v rozsahu 4 až 12. Toto doporučení však není v některých dokumentech respektováno a kořen stromu má přímo pod sebou listy všech stránek.
3.3.2 Struktura stránky Každá stránka musí obsahovat následující položky: • Type – udává, o jaký objekt se jedná, v tomto případě Page • Parent – odkaz na rodiče ve stromové struktuře stránek • MediaBox – definuje rozměry stránky • Resources – slovník obsahující všechny zdroje potřebné pro vykreslení stránky, například fonty, obrázky nebo definice barevného prostoru Dále může stránka obsahovat některé z nepovinných položek. Nejdůležitější z nich pro mou práci je položka Contents, což je stream definující samotný obsah stránky.
- 21 -
Obrázek 3.3 – Příklad položek stránky zobrazený ve stromové struktuře
3.3.3 Důležité základní objekty •
Text – je zapsán v kulatých závorkách, například (písmena), může obsahovat escape sekvence \ooo, kde ooo představuje kódové číslo znaku v oktalové soustavě, druhou možností je zápis v hexadecimální soustavě mezi znaky <>, například <EC034F>
•
Pole – jednotlivé prvky se zapisují do hranatých závorek a jsou odděleny mezerou
•
Komentář – znak % označuje začátek komentáře a je platný až do konce řádku
•
Slovníkový objekt (angl. Dictionary) – jedná se o velmi používanou strukturu v popisu PDF souborů, je uvozen značkou << a končí značkou >>, vnitřně je dále strukturován podle konkrétní potřeby a určení
3.3.3.1 Stream Pomocí objektu stream se vkládají velké bloky dat, například obsah stránky, nebo binární data, například soubory fontů a multimediální obsah.
- 22 -
Zápis struktury objektu je následující: 38 0 obj << /Length 54 /Filter /FlateDecode >> stream Zero or more bytes[\n] endstream endobj
Slovníkový objekt popisuje vlastnosti streamu, je to přímý objekt, naopak stream je objekt nepřímý. Důležité vlastnosti jsou: •
Lenght – délka streamu v bytech (po aplikování filtrů), číselná hodnota může být nahrazena ukazatelem na objekt definující tuto délku, například /Length 61 0 R
•
Filter – patří mezi nepovinné položky a definuje seznam filtrů, které byly aplikovány při kódování streamu, například FlateDecode, který kóduje textová data pomocí bezztrátové zlib/deflate komprese[4]
3.3.3.2 Font Je definován pomocí Dictionary objektu a obsahuje tyto základní položky: •
BaseFont – PostScriptový název fontu
•
SubType – definuje druh fontu, zda se jedná o Type0, Type1, Type3 nebo TrueType
•
Encoding – název použitého kódování, definováno v jiném objektu (bude popsáno dále), nebo se jedná o některé ze standartně definovaných kódování, mezi něž patří MacRomanEncoding, PdfDocEncoding, StandardEncoding, WinAnsiEncoding
•
ToUnicode – odkaz na CMap stream, který realizuje mapování znaků na standardní Unicode tabulku
•
FirstChar – kódové číslo prvního definovaného znaku
•
LastChar – kódové číslo posledního definovaného znaku
•
Widths – pole definice šířky pro jednotlivé znaky
•
FontDescriptor – definuje parametry fontu a obsahuje samotný soubor fontu jako stream, není obsažen, pokud je použit jeden ze 14 základních fontů
- 23 -
Zápis struktury fontu může vypadat následovně:
17 0 obj << /Type /Font /Subtype /TrueType /BaseFont /NewYork,Bold /FirstChar 0 /LastChar 255 /Widths 23 0 R /Encoding /MacRomanEncoding /FontDescriptor 7 0 R >> endobj
3.3.3.3 Font Encoding Tento objekt je opět definován pomocí Dictionary a obsahuje mapování kódů znaků v dokumentu na jednotlivé glyphy fontu. Obsahuje následující položky: •
BaseEncoding – určuje jednoho ze základních kódování
•
Diferences – definuje seznam odchylek od základního kódování, obsahuje pole, které mapuje čísla znaků v textovém objektu na předdefinované názvy znaků ve fontu, mezi takové názvy patří například \caron pro háček, \acute pro čárku
nebo \ring pro
kroužek, čísla v poli označují pozici následujícího názvu, jinak se postupuje inkrementálně V následující ukázce zápisu jsou znaky s číselnými hodnotami 19, 20, 24 a 46 namapovány na názvy acute, caron, ring a dotlessi: 25 0 obj << /Type /Encoding /BaseEncoding /StandardEncoding /Differences [19 /acute /caron 24 /ring 46 /dotlessi] >> endobj
- 24 -
Obrázek 3.4 – Příklad položek fontu zobrazený ve stromové struktuře
3.3.4 Operátory pro sázení textu Stream obsahu stránky se skládá z operátorů a jejich parametrů, mnoho z těchto operátorů má na starosti vykreslení a rozmístění textu na stránku. Operátory pro práci s textem se řadí do několika skupin: •
Modifikace atributů textu – Tc, Tw, Tz, TL, Tf, Tr, Ts
•
Umisťování textu na stránce – Td, TD, Tm, T*
•
Vkládání textových řetězců – TJ, Tj
•
Operátory pro Type3 fonty – d0, d1
•
Označení začátku a konce textových operátorů – BT, ET
Nejvýznamnější operátory pro tuto práci jsou: •
Tf – obsahuje ukazatel na font použitý pro vykreslení textu a jeho velikost
•
Tj – vkládá jeden textový řetězec
•
TJ – vkládá pole textových řetězců s možností jejich posunu v horizontálním směru, položkou pole může být textový řetězec nebo číslo, pokud se jedná o číslo, je odečteno od současné pozice, tedy pokud je číslo kladné, dojde k posunu doleva, pokud je záporné, dojde k posunu doprava, hodnota je rovna tisícině textové mezery[6]
- 25 -
Jednoduchá ukázka vysázení textu pomocí těchto operátorů může vypadat následovně:
BT /F1 12 Tf 0 Tc 0 Tw 72.5 712 TD [(Unencoded streams can be read easily) 65 (, )] TJ 0 −14 TD [(b) 20 (ut generally tak) 10 (e more space than \311)] TJ T* (encoded streams.) Tj 0 −28 TD [(Se) 25 (v) 15 (eral encoding methods are a) 20 (v) 25 (ailable in PDF) 80 (.)] TJ 0 −14 TD (Some are used for compression and others simply) Tj T* [(to represent binary data in an ) 55 (ASCII format.)] TJ T* (Some of the compression encoding methods are \ suitable ) Tj T* (for both data and images, while others are \ suitable only ) Tj T* (for continuous−tone images.) Tj ET
3.4 Dostupné programy pro zobrazení struktury PDF souborů PDF soubory je možné zobrazit na několika úrovních od binární reprezentace až po zobrazení pro koncového uživatele. Pro bližší seznámení se strukturou PDF souborů je vhodné zobrazit si a analyzovat několik souborů na úrovni COS elementů. Díky tomu jsem rychleji pochopil mnoho zákonitostí a jevů, které se týkaly zkoumaného problému. Na trhu je dostupných několik nástrojů pro zobrazení struktury PDF dokumentů, obvykle se však jedná o komerční a drahé programy. Obvykle jsou však dostupné testovací verze s omezenou funkčností nebo dobou používání. Nástroje lze rozdělit do dvou skupin. Jedna skupina reprezentuje zásuvné moduly do programu Adobe Acrobat Professional, opět komerční drahá aplikace s 30 denní testovací lhůtou. Druhá skupina představuje samostatné aplikace. Některé z dostupných nástrojů jsem vyzkoušel a použil při studiu vnitřní struktury PDF dokumentů.
- 26 -
3.4.1 PDF CanOpener 3.0 Tento nástroj se řadí mezi zásuvné moduly do programu Adobe Acrobat Professional, je dostupný jako desetidenní testovací verze, vyvíjí jej společnost WindJack Solutions a jednouživatelská licence stojí 195$. Jedná se o velice komfortní nástroj s dobrým ovládáním a velmi přehledným zobrazením struktury PDF souborů. Využití stromové struktury zpřehledňuje navigaci v dokumentu a urychluje pochopení struktury. Nástroj také umožňuje zobrazení informací o konkrétním elementu po najetí kurzorem na stránce. Je tedy vhodný pro seznámení se a bližší pochopení struktury PDF souborů. Využil jsem jej hlavně v prvních fázích své práce pro studium vnitřní struktury PDF souborů.
Obrázek 3.5 – Prostředí plug-inu PDF CanOpener 3.0
- 27 -
3.4.2 PDFGlobal COS Level Editor Jedná se o další zásuvný modul programu Adobe Acrobat Professional, je vyvíjen společností PDFGlobal Inc. a jednouživatelská licence stojí 99,99$. K dispozici je demoverze s omezenou funkčností. Zobrazení je bez stromové struktury, čímž je trochu znepřehledněno. Obsahy streamů jsou zobrazeny v textové podobě v programu notepad.exe.
Obrázek 3.6 – Prostředí plug-inu PDFGlobal COS Level Editor
- 28 -
3.4.3 CosEdit Je to samostatná aplikace pro operační systém Microsoft Windows, vyvíjená společností PDFTron, cena jednouživatelské licence je 99$ a k dispozici je demoverze s omezenou funkčností. Zobrazení je strohé, ale funkční, opět bez stromové struktury, ale lze mít otevřeno několik oken se strukturou dokumentu. Zkušenější uživatel se v něm rychle zorientuje a jako samostatná aplikace se hodí pro občasné nahlédnutí do struktury PDF souborů. Obsahy streamů jsou zobrazeny ve volitelném textovém editoru. Tento program jsem hojně využíval, obzvláště při implementaci korektoru a analýze PDF dokumentů se ukázal jako téměř nepostradatelný pro urychlení práce.
Obrázek 3.7 – Prostředí programu CosEdit
- 29 -
3.4.4 PDFEdit Jedná se o samostatnou aplikaci pro UNIXové operační systémy, je vyvíjena skupinou studentů na Karlově Univerzitě v Praze. Jde o opensource projekt, čímž minimálně stojí za vyzkoušení. Pod operačním systémem Microsoft Windows lze aplikaci provozovat v prostředí Cygwin. Pro zobrazení souboru je použita stromová struktura, která však příliš neoplývá přehledností. Výhodou je naopak zobrazení streamů ve stejné stromové struktuře a ne jen v textové podobě, jako u ostatních programů. Velkým přínosem tohoto nástroje je rozsáhlá možnost skriptování.
Obrázek 3.8 – Prostředí programu PDFEdit
- 30 -
3.5 Možnosti knihovny PDFBox pro zadaný úkol Z výše popsaného je zřejmé, že pro provedení korekce je nutné použít font obsahující znaky s českou diakritikou. Použitý font v postižených dokumentech však téměř vždy potřebné znaky neobsahuje a je nutné tento font přidat. Proto je nutným požadavkem na implementační prostředí schopnost začlenit do dokumentu nový font ze souboru a upravit příslušné operátory pro jeho použití. Vzhledem k výskytu jevu hlavně v dokumentech generovaných z TeXu a popularitě Computer Modern fontů v tomto prostředí, jsou tyto fonty v počeštěné podobě zahrnuty do výsledného programu. PDFBox umožňuje použití Type1 fontů ze souborů pfb spolu s afm. Další požadavek je na možnost editace streamu obsahu stránky, čehož lze také dosáhnout díky implementovanému dekodéru zlib/deflate a parseru COS objektů[5]. Knihovna PDFBox je tedy pro zadaný úkol vhodná ve spojení s podpůrnou knihovnou FontBox pro import souborů fontů. Problém může nastat, pokud by bylo použito složitější posouvání diakritických znaků nad písmena, než je popsáno v předchozích odstavcích. Tato možnost je však spíše teoretická, neboť jsem na ni při analýze množiny PDF dokumentů nikdy nenarazil. Korekce by v takovém případě vyžadovala náročné porovnávání pozic jednotlivých znaků na stránce a byla by výpočetně velmi náročná, což je nad rámec této práce.
3.6 Volba implementačního prostředí Jako programovací jazyk byla už v zadání od vedoucího práce zvolena Java, díky tomu může být výsledný program do určité míry nezávislý na platformě a operačním systému. Pro jazyk Java také existuje knihovna PDFBox, umožňující práci s PDF dokumenty na úrovni vnitřní struktury COS elementů. Jako vývojové prostředí jsem zvolil NetBeans 5.5, neboť se jedná o volně dostupný produkt a mám s jeho používáním velmi dobré zkušenosti.
- 31 -
3.7 Návrh algoritmu pro opravu Z výše popsaného je zřejmé, že opravy lze s vysokou úspěšností provést, pouze pokud bude k dispozici odpovídající font, obsahující české znaky. Při použití jiného řezu písma by výsledný vzhled dokumentu mohl být nevhodný. Získání takového fontu je často velmi problematické, ať už kvůli jeho neexistenci nebo licenčním podmínkám. Oprava bude postupně provedena pro všechny streamy obsahu stránek a je nutné provést následující kroky: •
Identifikovat z operátoru Tf zda se jedná o podporovaný font
•
Pokud je font podporovaný, projít všechny Tj a TJ operátory, dokud se neobjeví další Tf operátor, měnící font na jiný
•
Pokusit se najít diakritický znak podle kódové tabulky použitého fontu, velký posun, v řádu stovek jednotek TJ operátoru nebo Td operátor, a písmeno, s kterým lze toto znaménko spojit, například C a háček
•
Pokud lze ve zkoumaném bloku tuto korekturu provést, importovat příslušný font, upravit parametry operátorů Tf, Tj a TJ
•
Výsledný dokument uložit do nového souboru
Několik příkladů streamu, při nichž dojde k opravě: • [(hrnek na ˇ)463(caj)]TJ
• • •
(ˇ)Tj [370(e)]TJ (ˇ)Tj -1.3 -3.022 Td (C)Tj [(znak)-350(velke)370(´)-350(C)]TJ -1.3 2.7 Td (ˇ)Tj
- 32 -
Oprav blok Inicializace poslText=null
Inicializace
Nahraj další operátor
Nahraj další operátor
Operátor je Tf a font je podporovný
poslText = Tj.text Nebo poslText = TJ.poslText
Ne
Tf, konec jiný Typ operátoru Tj nebo TJ
Ano
Ano
Je poslTex null?
Oprav blok
Ne Ano beze změn Konec stránky?
Ne
Ne
Je operátor TJ? Ano
Zkus spojit
Další element
Zkus spojit uvnitř TJ
Ne Ano a opraveno
Lze spojit? Konec TJ
Ne Ulož změny
Lze spojit?
Ano Oprav elementy
Ano Oprav elementy
Konec
Provedeny opravy?
Ano
Přidej český font Oprav Tf operátor
Ne
Konec
Obrázek 3.9 – Diagram navrženého algoritmu
- 33 -
- 34 -
4
Realizace
Na poznatcích provedené analýzy bylo možné sestavit program, který by s vysokou úspěšností opravil uložení znaků s českou diakritikou v PDF dokumentech. Hlavním omezením je soubor podporovaných fontů, který se však dá jednoduše rozšířit. V základu jsou podporovány počeštěné verze Computer Modern fontů z [7], jejich seznam se nachází v příloze A. Získat odpovídající fonty, obsahující české znaky, je však obecně náročný úkol, narážející nejen na licenční podmínky, kdy je nutné zakoupit takový font, nebo není povoleno upravovat jej přidáváním českých znaků. Pokud počeštěný font neexistuje, lze originální font obohatit o české znaky, obdobně jako Computer Modern fonty upravené na katedře matematiky ČVUT. Jedná se však o časově náročný úkol vyžadující hlubší znalosti práce s fonty a softwarem na jejich zpracování. Na datovém nosiči, přiloženém k výtisku této práce, se nachází kompletní zdrojový kód s bohatým komentářem, včetně přeloženého programu.
4.1 Implementace algoritmu Celá implementace se skládá z několika tříd, AccentCorrector provádí samotnou korekci dokumentu, FontRecord a FontPair jsou podpůrné datové třídy. Program je zabalen jako spustitelný jar archiv, který lze použít také jako knihovnu pro jiné aplikace vyvíjené v jazyku Java.
Příkaz pro samostatné spuštění je následující: java –jar PDFCorrector.jar [weak] opravovany.pdf opraveny.pdf
Při použití jako knihovna probíhá volání následovně: AccentCorrector corrector = new AccentCorrector(); Correcor.setWeak();
//volitelná aktivace režimu slabé korekce
corrector.doIt( String inputPDFFile, String outputPDFFile);
Byly implementovány dva režimy korekce, slabý a silný, přičemž implicitně je provedena silná korekce, slabou korekci lze vynutit nepovinným parametrem „weak“, případně metodou setWeak(). Režim silné korekce provádí opravy dle algoritmu navrženého v kapitole 3.7, tedy i mezi jednotlivými operátory pro sázení textu. Výsledky korekce
- 35 -
v silném režimu jsou obvykle lepší, neboť diakritická znaménka nad velkými písmeny musí být často nejprve zvednuta jiným operátorem, například Td nebo TD, aby se nepřekrývala se samotným písmenem. Naopak režim slabé korekce se omezuje pouze na opravy uvnitř pole operátoru TJ. Tento režim byl implementován pro případy, kdy by byl obsah PDF souboru sestaven tak, že by silná korekce nepodávala uspokojivé výsledky a docházelo k nežádoucímu slučování písmen s akcenty. Účinnost korekce je však v tomto režimu omezená. Na žádný takový soubor jsem však při testování nenarazil a z praktického hlediska se jedná spíše volbu využitelnou při experimentování a pozůstatek počátečního vývoje.
4.1.1 Třída AccentCorrector Tato třída implementuje samotný opravný algoritmus. Základem celého algoritmu je několik vnořených cyklů a postup je následující • Nejprve se metodou getSupportedFonts() načte množina podporovaných fontů z adresáře „fonts“ • Načte se vstupní PDF soubor • Pro každou stránku se provede metoda processPage() • Na stránce se pro každý blok mezi dvěma operátory Tf, tedy pro obsah vysázený jedním fontem, se provede funkce processFontBox() • Uvnitř bloku se postupným procházením jednotlivých operátorů a uvnitř TJ operátorů hledá vzorec podle navrženého algoritmu, pokud je nalezen a funkce tryJoin() úspěšně sloučí písmeno s diakritickým znakem, dojde k opravě obsahu operátorů • Pokud došlo na stránce k opravám je její obsah aktualizován a pokračuje se zpracováním další stránky • Nakonec se výsledek uloží do výstupního souboru Funkce tryJoin() je napsána tak, aby akceptovala pouze české znaky, což bylo zadání práce, ale lze ji jednoduše doplnit o podporu dalších znaků s akcenty. Dokáže tedy spojit kroužek s U, čárku s A, E, I, O, U a Y a háček s C, D, E, N, R, S, T a Z. Modifikace textových řetězců musela být implementována na úrovni bajtové reprezentace, čímž lze zajistit kompatibilitu s nestandardním kódováním jednotlivých znaků ve fontu.
- 36 -
4.1.2 Třída FontRecord Tato třída se stará o uchovávání potřebných dat o jednotlivých fontech v dokumentu. Jsou zde uložena data, zda je font podporovaný, kódování znaků kroužek, čárka, háček a „beztečkovaného i“, které se vyskytuje při skládání dlouhého i z písmene a čárky. Další položkou je soubor alternativního fontu a jeho označení v dokumentu. Za zmínku stojí následující funkce: isSupportedFont()
projde seznam podporovaných fontů a pokusí se k danému fotu najít alternativu obsahující české znaky
afmToDictionary() PDFBox nebyl schopen samostatně vygenerovat korektní kódovou tabulku znaků a české znaky po importu fontu ignoroval, proto jsem musel napsat funkci, která by vytvořila správnou tabulku pomocí položky Differences v definici kódování fontu, viz kapitola 3.3.3.3.
4.2 Podporované fonty Všechny podporované fonty jsou uloženy v adresáři fonts spolu s jejich seznamem. V základu jsou použity počeštěné Computer Modern, které jsem získal z projektu CSTeX[7]. Kdykoli lze tuto množinu rozšířit, požadavky jsou následující: •
Type1 font ve formátu .afm a .pfb souborů
•
Musí obsahovat všechny české znaky s diakritikou jako samostatné glyphy
•
Je doporučeno, aby prvních 128 znaků tvořilo souvisle obsazenou kódovou tabulku shodnou s nahrazovaným fontem, jinak může dojít k chybnému přiřazení rozměrů jednotlivých glyphů, je to dáno způsobem načítání fontů knihovnou PDFBox[5]
•
Do seznamu podporovaných fontů v souboru fonts\list.txt musí být přidán nový záznam, jednotlivé záznamy jsou odděleny prázdným řádkem a tvoří je dva řádky, první řádek udává název fontu, který má být nahrazen a druhý řádek udává název počeštěného fontu, stejný název musí mít i .afm a .pfb soubory fontu uložené ve složce fonts
- 37 -
- 38 -
5
Testování
Všechny testy jsem provedl s nastavením silné korekce. K testování jsem použil dvě rozdílné množiny PDF dokumentů. Primární množina se skládá z PDF souborů prací z archivu ČVUT[3], výskyt zkoumaného problému v těchto souborech byl původním podnětem pro studium zadání mé práce a mých předchůdců [1], [2]. Druhou množinu tvoří dokumenty ze sbírky zákonů Ministerstva vnitra České republiky[9], na existenci zkoumané vady v těchto souborech mě upozornil můj vedoucí.
5.1 Dokumenty z archivu prací ČVUT Z archivu ČVUT[3] jsem vybral testovací množinu obsahující 263 prací, přičemž 50 jich obsahovalo zkoumanou vadu. Úspěšně se podařilo opravit 28 souborů. Pokud dokument používal podporované fonty, byla úspěšnost korekce dost vysoká. Vyskytly se pouze výjimečné poruchy umístění znaků na řádku, které některé extraktory textu reprezentují jako mezeru. Taktéž při zobrazení dokumentu může čtenář větší rozestup mezi znaky chápat jako mezeru mezi slovy. Mezi drobné nedokonalosti patří změna rozestupů mezi jednotlivými znaky a z toho plynoucí ztráta zarovnání u textů původně zarovnaných do bloku. Některé dokumenty, přestože obsahovaly podporované fonty, nebyly opraveny, neboť kódování diakritických znaků ve fontu se neshodovalo s jejich kódováním v textových řetězcích operátorů TJ a Tj. Nedalo se tedy určit, jaký kód jim odpovídá a provést jejich spojení s odpovídajícím písmenem. Tato chyba se vyskytla v 11 souborech. V jednom případě, soubor jonas_2000dipl.pdf, byla nerozluštitelná celá kódovací tabulka znaků a extrakce textu dávala nepoužitelné výsledky. V 10 případech soubor neobsahoval podporované fonty. V průběhu testování jsem narazil na problém při kopírování textu z PDF souborů pomocí prohlížeče Adobe Reader, konkrétně jsem používal verze 7, 8 a 9, kdy zkopírovaný text postrádal háčky nad některými písmeny. Avšak při použití prohlížečů Foxit Reader 2.3, PDF-XChange Viewer nebo extraktoru textu z balíku PDFBox se tento problém nevyskytoval. Na stejný problém jsem narazil také u některých prací z archivu, konkrétně se jednalo o 33 z 263 prací. Většina z těchto souborů byla vygenerována pomocí programů PDFCreator do verze 8.0 nebo OpenOffice 1.x. Příčinu tohoto problému se mi však nepodařilo odhalit.
- 39 -
Tabulka 5.1 – Výsledky testování Název souboru bakm1_2007bach.pdf brachj1_2006bach.pdf brutoj1_2006dipl.pdf cepekm1_2006dipl.pdf cervem2_2006dipl.pdf dabas_2005dipl.pdf drchaj1_2006dipl.pdf dusekm1_2006bach.pdf fusekm1_2006bach.pdf halamm1_2006bach.pdf halasb1_2006bach.pdf hlubup1_2006dipl.pdf holecm1_2007dipl.pdf holyj1_2006dipl.pdf charop1_2006bach.pdf chochj1_2006bach.pdf janect1_2006dipl.pdf jarosr1_2006bach.pdf jonas_2000dipl.pdf kalbam1_2006bach.pdf klimal1_2006dipl.pdf kolorom_2005dipl.pdf krahulik_2005dipl.pdf krapam1_2006dipl.pdf krejnm1_2006bach.pdf kynzlm1_2006dipl.pdf melouj1_2006bach.pdf mikulas_2005dipl.pdf minarp1_2006dipl.pdf molnam1_2006dipl.pdf novakj10_2006bach.pdf novakj4_2005dipl.pdf novakp_2005dipl.pdf novotr2_2006bach.pdf nytra_2005dipl.pdf pesavm1_2006dipl.pdf ponocm1_2006bach.pdf prochp2_2006bach.pdf rehakv1_2006dipl.pdf schovm1_2006bach.pdf skodoz1_2006dipl.pdf skripp1_2006dipl.pdf stehlp2_2006bach.pdf svoboo1_2006bach.pdf tothd1_2006dipl.pdf uller_2005dipl.pdf vitekr1_2006bach.pdf vymazz1_2006dipl.pdf zemekp1_2006bach.pdf zimap1_2006dipl.pdf
Výsledek korekce OK nepodporovaný font OK nekorektní kódování akcentů OK nekorektní kódování akcentů nekorektní kódování akcentů OK OK OK OK SK Ľ nepodporovaný font OK nepodporovaný font nekorektní kódování akcentů OK nekorektní kódování akcentů OK nekorektní kódování všech znaků nekorektní kódování akcentů OK nepodporovaný font OK OK OK OK nekorektní kódování akcentů OK nepodporovaný font OK nekorektní kódování akcentů nepodporovaný font nepodporovaný font OK nekorektní kódování akcentů OK OK OK OK nekorektní kódování akcentů nekorektní kódování akcentů nepodporovaný font OK OK nepodporovaný font nepodporovaný font OK OK OK OK
- 40 -
Obrázek 5.1 – porovnání vzhledu dokumentu před korekcí (nahoře) a po korekci (dole) Porovnání extrahovaného textu před korekcí a po korekci (soubor brutoj1_2006dipl.pdf): V´yskyt poranˇen´ı kloub˚u se zvyˇsuje a je povaˇzovan´y za jeden z nejv´aˇznˇejˇs´ıch probl´em˚u v rozvinut´ych zem´ıch. N´aˇs n´ızkon´akladov´y rehabilitaˇcn´ı syst´em umoˇzˇnuje terapeutovi pˇredepsat, demostrovat a monitorovat pacient˚uv rehabilitaˇcn´ı protokol v pr˚ubˇehu a mezi l´ek´aˇrsk´ymi kontrolami. S unik´atn´ı moˇznost´ı biologick´e zpˇetn´e vazby poskytuje kontinu´aln´ı motivaci pacienta. Výskyt poranění kloubů se zvyšuje a je považovaný za jeden z nejvážnějších problémů v rozvinutých zemích. Náš nízkonákladový rehabilitační systém umožňuje terapeutovi předepsat, demostrovat a monitorovat pacientův rehabilitační protokol v průběhu a mezi lékářskými kontrolami. S unikátní možností biologické zpětné vazby poskytuje kontinuální motivaci pacienta.
- 41 -
Obrázek 5.2 – Ukázka narušení zarovnání do bloku (pravý okraj)
Obrázek 5.3 – Ukázka vzniku nadbytečné mezery (zkratka EDA) Hlavní slabinou programu je omezení na obsaženou množinu fontů, ta je proto rozšiřitelná, ale může být problém najít odpovídající počeštěný font. Proto jsem zkusil provést korekci jiným fontem s celkem uspokojivými výsledky. Konkrétně jsem nahradil původní font počeštěným fontem CMR10. Pokud uživateli nejde o co nejpřesnější zachování vzhledu dokumentu, lze tímto způsobem zvýšit úspěšnost korekce, u testované množiny by se jednalo o navýšení z 28 na 38 opravených dokumentů z 50.
- 42 -
Obrázek 5.4 – Ukázka vzhledu dokumentu před opravou (nahoře) a po opravě (dole) alternativním fontem
- 43 -
5.2 Dokumenty ze sbírky zákonů MVČR U souborů ze sbírky zákonů[9] nebylo možné provést úspěšnou korekci, jednak díky použití jiných fontů a také díky nekorektní tabulce kódování znaků. Archiv sbírky zákonů lze z tohoto pohledu rozdělit na několik částí podle roku vydání: • Do roku 1989 – jedná se pouze o naskenované listy, extrakce textu je tedy možná pouze pomocí OCR • 1990 až 2000 – soubory vytvořené programem Adobe Acrobat v3, kódování diakritických znaků je nekorektní, proto nelze opravu provést • 2001 až 2007 – soubory vytvořené programem Adobe Acrobat v4,v5 a v7, kódování všech znaků je nekorektní, extrakce textu je nepoužitelná bez použití OCR • Od roku 2008 – soubory vytvořené programem Arbortex Advanced Print Publisher 9, všechny znaky jsou uloženy korektně, není nutné provádět korekce
Zápis nekorektního kódování znaků fontu v poli Differences obvykle vypadá takto: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] . . .
= = = = = = = = = =
(Name) (Name) (Name) (Name) (Name) (Name) (Name) (Name) (Name) (Name)
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
- 44 -
6
Závěr
6.1 Zhodnocení splnění cílů práce •
Podrobně jsem prozkoumal zadaný problém a jeho projevy ve struktuře PDF souborů
•
Opravu lze provést u textů s Type1 fonty, Type3 fonty jsem se kvůli grafické definici znaků bez pojmenování nevěnoval, bylo by nutné nasadit OCR techniky
•
Opravené dokumenty jsou obvykle čitelné a extrakce textu z nich podává uspokojivé výsledky
•
Vytvořený program je limitován rozšiřitelnou množinou obsažených fontů
•
Pokud uživatel nevyžaduje co nejpřesnější zachování vzhledu dokumentu, lze použít alternativní font a zvýšit tak úspěšnost korekce
•
Program neumí zpracovat šifrované dokumenty
•
V archivu závěrečných prací je zkoumaným problémem postiženo zhruba 20% dokumentů
•
Korekce byla úspěšná v téměř 60% případů a při použití alternativních fontů se povedlo úspěšnost zvýšit o dalších 20%
6.2 Možné směry pokračování Vylepšení tohoto projektu by mohlo spočívat v podpoře šifrovaných dokumentů, což lze pomocí knihovny PDFBox doimplementovat[5], avšak uživatel by musel znát heslo k danému souboru. Další vylepšení by mohlo spočívat v přesnějším zpracování pozicování elementů na stránce, což by mohlo odstranit drobné poruchy umístění znaků a vznik nadbytečných mezer. Takové řešení však překračuje rozsah této práce a silně by zvyšovalo výpočetní složitost. Mnohem náročnějším vylepšením by mohlo být také přidání podpory pro Type3 fonty skrz optické rozpoznávání znaků.
- 45 -
- 46 -
7
Seznam literatury
[1] Martin Fúsek. Automatické zpracování PDF dokumentů. Bakalářská práce, FEL ČVUT Praha, 2006 [2] Radovan Mikš. Extrakce text z PDF se správnou diakritikou. Bakalářská práce, FEL ČVUT Praha, 2006 [3] Archív bakalářských a diplomových prací ČVUT. http://dip.felk.cvut.cz [4] Wikipedie – elektronická encyklopedie. http://www.wikipedie.cz [5] Projekt PDFBox. http://www.pdfbox.org [6] PDFReference, Sixth Edition, Adobe Systems Incorporated, 2006 [7] CSTeX. ftp://math.feld.cvut.cz/pub/cstex/ [8] Informační server K336. https://info336.felk.cvut.cz/ [9] Sbírka zákonů MVČR. http://aplikace.mvcr.cz/archiv2008/sbirka/
- 47 -
- 48 -
A
Seznam podporovaných fontů a jejich alternativ
Tabulka A.1 – seznam fontů a jejich alternativ, obsažených v adresáři fonts Označení fontu
Česká varianta
Označení fontu
cmb10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 cmbxsl10 cmbxti10 cmcsc10 cmdunh10 cmff10 cmfi10 cmfib8 cminch cmitt10 cmr10 cmr12 cmr17 cmr5 cmr6 cmr7 cmr8 cmr9 cmsl10 cmsl12 cmsl8
csb10 csbx10 csbx12 csbx5 csbx6 csbx7 csbx8 csbx9 csbxsl10 csbxti10 cscsc10 csdunh10 csff10 csfi10 csfib8 csinch csitt10 csr10 csr12 csr17 csr5 csr6 csr7 csr8 csr9 cssl10 cssl12 cssl8
cmsl9 cmsltt10 cmss10 cmss12 cmss17 cmss8 cmss9 cmssbx10 cmssdc10 cmssi10 cmssi12 cmssi17 cmssi8 cmssi9 cmssq8 cmssqi8 cmtcsc10 cmti10 cmti12 cmti7 cmti8 cmti9 cmtt10 cmtt12 cmtt8 cmtt9 cmu10 cmvtt10
- 49 -
Česká varianta cssl9 cssltt10 csss10 csss12 csss17 csss8 csss9 csssbx10 csssdc10 csssi10 csssi12 csssi17 csssi8 csssi9 csssq8 csssqi8 cstcsc10 csti10 csti12 csti7 csti8 csti9 cstt10 cstt12 cstt8 cstt9 csu10 csvtt10
B
Seznam použitých pojmů a zkratek
ČVUT
České vysoké učení technické
FEL
Fakulta elektrotechniky
HTML
HyperText Markup Language
OCR
Optical Charakter Recognition
PDF
Portable Dokument Format
JAR
Java Archive file
AFM
Adobe Font Metrics
PFB
PostScript Font Binary
- 50 -
C
Obsah přiloženého CD
/sidekv1_bp.doc
tento text bakalářské práce jako dokument Microsoft Word 2003
/sidekv1_bp.pdf
tento text bakalářské práce ve formátu PDF
/PDFCorrector.zip
zabalený funkční korektor PDF dokumentů se všemi potřebnými soubory
/PDFBox-0.7.3.zip
originální projekt PDFBox 0.7.3, z kterého jsem vycházel
/src/…
zdrojové kódy programu pdfCorrector v jazyce Java
/samples/…
PDF dokumenty zkoumané v kapitole 3.4
/test/…
vybrané absolventské práce, na kterých bylo prováděno testování v kapitole 5
/test/po_korekci/…
soubory po průchodu korektorem v kapitole 5
/test/alter_font/…
soubory po průchodu korektorem s použitím alternativního fontu z kapitoly 5
- 51 -