Bachelor's Thesis

Expansion of Python PDF repair scripts

Final Thesis 2.33 MB Appendix 60.85 MB

Author of thesis: Jan Baňař

Acad. year: 2025/2026

Supervisor: Ing. Pavel Hanák, Ph.D.

Reviewer: Ing. Petr Ilgner, Ph.D.

Abstract:

This bachelor's thesis addresses the issue of incomplete text layers in older PDF documents, specifically focusing on the incorrect encoding of Type 1 fonts (in CFF format), which prevents accurate text searching and copying. The objective of this thesis was to design and implement a software tool that resolves this problem efficiently and universally. The result is GlyphRepair, a desktop application with a graphical user interface that bypasses the reliance on unreliable glyph names within mapping tables. Instead, it directly parses internal font data into individual glyphs and relies on identifying their vector shapes. The application allows the user to visually map unrecognized characters to their corresponding Unicode meanings; these relations are then stored in a local PSV database, which subsequently provides suggestions for remaining characters and generates the final repaired document. The tool also supports batch processing via the command line interface. The functionality of this solution was successfully verified on 374 documents, and the source code has been released as open-source in a GitHub repository.

Keywords:

CFF, character mapping, document repair, PDF, Python, text extraction, Type 1 font, Unicode.

Date of defence

16.06.2026

Result of the defence

Defended (thesis was successfully defended)

znamkaAznamka

Grading

A

Process of defence

Student prezentoval výsledky své práce a komise byla seznámena s posudky. Otázky komise a oponenta: Jaké výhody a nevýhody má Váš přístup založený na rekonstrukci ToUnicode tabulek ve srovnání s OCR metodami? Ligatury mapujete na samostatné Unicode znaky (např. „fi“ → U+FB01). Zvažoval jste místo toho mapování na sekvenci znaků „f“ + „i“? Jaký dopad může mít zvolený přístup na fulltextové vyhledávání v PDF prohlížečích? Pro získání interních identifikátorů mapujete znaky pouze do rozsahu U+E000–U+E0FF, tedy maximálně 256 hodnot. Jak by si řešení poradilo s fonty obsahujícími více než 256 glyfů? Student obhájil bakalářskou práci a odpověděl na otázky členů komise a oponenta.

Language of thesis

Czech

Faculty

Department

Study programme

Telecommunication and Information Systems (BPC-TLI)

Composition of Committee

prof. Ing. Jiří Mišurec, CSc. (předseda)
doc. Ing. Pavel Šilhavý, Ph.D. (místopředseda)
Ing. Ondřej Šmirg, Ph.D. (člen)
Ing. Pavel Hanák, Ph.D. (člen)
Ing. Štěpán Miklánek, Ph.D. (člen)
Ing. Vojtěch Myška, Ph.D. (člen)
Ing. et Ing. Petr Musil (člen)

Supervisor’s report
Ing. Pavel Hanák, Ph.D.

BP pana Baňaře byla náročná v tom, že identifikovat glyfy a opravovat PDF soubory popsaným způsobem se ještě nikdo jiný nepokusil. Proto musel do hloubky nastudovat PDF specifikace a některé postupy vymyslet takřka od nuly. Na BP pracoval průběžně po celý rok a samostatně vyřešil řadu menších i větších problémů, které se při zpracování reálných dokumentů vyskytly. Výsledný program je univerzálně použitelný a měl by být schopen opravit libovolné PDF dokumenty se stejným problémem kódování textu. Konzultace byly efektivní a student pružně reagoval na moje připomínky, požadavky a hlášení chyb (bugů). Program a jeho GUI prošly mnoha iteracemi a obsahují uživatelsky přívětivé prvky, které dalece přesahují požadavky zadání. Trochu horší to bylo při psaní textu BP, protože student měl tendenci používat nesprávné či matoucí pojmy. Nicméně i na textu pracoval s předstihem, takže po několika kontrolách se podařilo nedostatky odstranit. Points proposed by supervisor: 100

Grade proposed by supervisor: A

Reviewer’s report
Ing. Petr Ilgner, Ph.D.

Předložená bakalářská práce se zabývá problematikou opravy PDF dokumentů obsahujících fonty Type 1 bez korektního mapování znaků na Unicode. Autor navrhl a implementoval aplikaci GlyphRepair umožňující automatickou opravu dokumentů. Celkově zadání práce považuji za obtížnější.

Vytvořený nástroj je funkční a byl ověřen na vice než 300 PDF, ovšem pouze časopisů jednoho nakladatelství. Uvítal bych provedení ověření i na dalších typech dokumentů, zvláště, pokud je v práci nástroj popsán jako univerzální. Zdrojový kód aplikace je dobře komentovaný a implementuje rozsáhlou funkcionalitu. Za nedostatek považuji monolitickou strukturu projektu, kdy je celá aplikace realizována v jediném zdrojovém souboru o přibližně 4500 řádcích. Rovněž mnoho metod je velmi dlouhých a obsahující duplicitní kód. Pro zvýšení přehlednosti a budoucí udržitelnost doporučuji lepší dekompozici a oddělení prezentační (GUI) vrstvy od aplikační logiky.

Prezentační a formální úroveň práce je na velmi dobré úrovni, práce s informačními zdroji je korektní. Drobnou výtku mám k občasnému používání méně formálního výkladového stylu, jako jsou. formulace v první osobě mn. čísla, které nejsou pro akademický text vhodné. Na některé vložené obrázky není odkazováno v textu.

Celkově práci považuji za velmi kvalitní a oceňuji zejména její praktický přínos. Práci doporučuji k obhajobě s hodnocením A / 94b. Topics for thesis defence:
  1. Ligatury mapujete na samostatné Unicode znaky (např. „fi“ → U+FB01). Zvažoval jste místo toho mapování na sekvenci znaků „f“ + „i“? Jaký dopad může mít zvolený přístup na fulltextové vyhledávání v PDF prohlížečích?
  2. Pro získání interních identifikátorů mapujete znaky pouze do rozsahu U+E000–U+E0FF, tedy maximálně 256 hodnot. Jak by si řešení poradilo s fonty obsahujícími více než 256 glyfů?
  3. Jaké výhody a nevýhody má Váš přístup založený na rekonstrukci ToUnicode tabulek ve srovnání s OCR metodami?
Points proposed by reviewer: 94

Grade proposed by reviewer: A

Responsibility: Mgr. et Mgr. Hana Odstrčilová