Preskočiť na obsah

PDF výstup

Aplikácia Pozor Dozor vytvára výsledný mesačný rozpis dozorov ako PDF dokument. PDF výstup je určený na kontrolu, tlač, uloženie alebo ďalšie odoslanie používateľom.

Generovanie PDF zabezpečuje trieda TeacherPdfGenerator, ktorá používa knižnicu PDFBox. Výsledný dokument sa vytvára vo formáte A4, obsahuje nadpis, zoznam dozorov a poznámku pod čiarou. Po vytvorení PDF sa pripravuje aj obrázkový náhľad, ktorý sa zobrazuje v hlavnom okne aplikácie.


Úloha PDF výstupu v aplikácii

PDF výstup je výsledný dokument, ktorý používateľ vidí ako rozpis dozorov. V aplikácii má zároveň technickú úlohu, pretože z neho vzniká náhľad zobrazený v hlavnom okne.

PDF ako hlavný výstup

PDF dokument predstavuje finálnu podobu rozpisu. Obsahuje dátumy a dvojice učiteľov priradených na jednotlivé dni.

PDF a náhľad

Aplikácia najprv vytvorí PDF súbor a následne z neho pripraví obrázkový náhľad. Tento náhľad sa zobrazí používateľovi v hlavnom okne.


Trieda TeacherPdfGenerator

Generovanie PDF zabezpečuje trieda TeacherPdfGenerator. Jej hlavnou úlohou je prevziať zoznam vygenerovaných dozorov a vytvoriť z neho PDF dokument.

Trieda pracuje so zoznamom objektov DutyEntry a s mesiacom, pre ktorý sa rozpis vytvára.

Zodpovednosť triedy TeacherPdfGenerator

Trieda TeacherPdfGenerator vytvára PDF dokument, nastavuje formát strany, načítava fonty, vykresľuje nadpis, riadky rozpisu a poznámku pod čiarou. Výsledný súbor ukladá do dátového priečinka aplikácie.


Použitá knižnica PDFBox

Na tvorbu PDF dokumentu sa používa knižnica PDFBox. Tá umožňuje programovo vytvárať PDF strany, zapisovať text, nastavovať fonty, kresliť čiary a ukladať výsledný dokument.

Prečo PDFBox

PDFBox umožňuje vytvoriť PDF dokument priamo z Java aplikácie bez potreby externého kancelárskeho programu. Aplikácia tak vie sama pripraviť rozpis v podobe vhodnej na tlač.


Formát dokumentu

PDF dokument sa vytvára ako jednostránkový dokument vo formáte A4. Na stránke sa nachádza nadpis, zoznam dozorov a poznámka pod čiarou.

Časť dokumentu Obsah
Nadpis názov rozpisu, mesiac a rok
Zoznam dozorov dátumy a dvojice učiteľov
Poznámka pod čiarou organizačný text z nastavení
Deliaca čiara vizuálne oddelenie poznámky od rozpisu

Súradnicový systém PDF

PDFBox používa súradnicový systém, v ktorom bod [0,0] leží vľavo dole. Preto sa jednotlivé prvky dokumentu umiestňujú pomocou X a Y súradníc.


Nadpis PDF dokumentu

Nadpis PDF dokumentu má pevne daný základný tvar:

DOZOR VO VESTIBULE <MESIAC> <ROK>

Názov mesiaca sa získava podľa slovenského locale a v nadpise sa zapisuje veľkými písmenami.

Príklad nadpisu

Pre máj 2026 môže byť nadpis PDF dokumentu napríklad DOZOR VO VESTIBULE MÁJ 2026.

Centrovanie nadpisu

Nadpis sa vykresľuje na stred strany. Aplikácia najprv vypočíta šírku textu podľa použitého fontu a veľkosti písma a následne určí jeho X pozíciu tak, aby bol vodorovne vycentrovaný.


Slovenské názvy mesiacov

Aplikácia používa slovenské locale sk_SK, aby názvy mesiacov neboli závislé od nastavenia operačného systému.

Stabilný slovenský výstup

Použitie pevne nastaveného slovenského locale zabezpečí, že názov mesiaca bude v PDF po slovensky aj vtedy, keď je systém používateľa nastavený v inom jazyku.


Použité fonty

PDF dokument používa fonty NotoSans-Regular.ttf a NotoSans-Bold.ttf, ktoré sú načítané z resources aplikácie.

Tieto fonty sú použité preto, aby PDF správne zobrazovalo slovenskú diakritiku.

Podpora diakritiky

Fonty NotoSans umožňujú korektné zobrazenie slovenských znakov. To je dôležité najmä pri menách učiteľov, názvoch mesiacov a poznámke pod čiarou.

Fonty musia byť súčasťou aplikácie

Ak by fontové súbory chýbali v resources aplikácie, generovanie PDF by mohlo zlyhať alebo by sa text nemusel zobraziť správne. Preto musia byť fonty pribalené spolu s aplikáciou.


Nastavenia veľkosti písma

Veľkosti písma sa načítavajú z konfigurácie aplikácie. Používateľ ich môže upraviť v nastaveniach.

Nastavenie Použitie v PDF
pdfTitleFontSize veľkosť nadpisu
pdfDutyFontSize veľkosť riadkov s dozormi
pdfFootnoteFontSize veľkosť poznámky pod čiarou

Prepojenie s nastaveniami

PDF generátor načíta hodnoty z triedy AppConfig. Ak používateľ zmení veľkosti písma v nastaveniach aplikácie, nové hodnoty sa použijú pri ďalšom generovaní alebo obnovení náhľadu.


Zoznam dozorov

Zoznam dozorov sa vykresľuje ako séria riadkov. Každý riadok predstavuje jeden objekt DutyEntry.

Na riadku sa zobrazuje dátum a dvojica učiteľov.

Jeden riadok rozpisu

Jeden riadok PDF obsahuje dátum dozoru a mená dvoch učiteľov. Dátum sa zobrazuje v ľavom stĺpci a učitelia v pravom stĺpci.


Formát dátumu

Dátum sa v PDF zapisuje jednoduchým tvarom:

deň.mesiac.

Príklad:

5.5.

Tento zápis je krátky a vhodný do tabuľkového alebo zoznamového rozpisu.

Jednoduchý dátumový zápis

PDF neuvádza celý rok pri každom riadku, pretože rok je súčasťou nadpisu dokumentu. Riadky rozpisu tak zostávajú stručné a prehľadné.


Formát dvojice učiteľov

Dvojica učiteľov sa zapisuje v tvare:

prvý učiteľ - druhý učiteľ

Mená učiteľov sa získavajú pomocou metódy getFullName(), ktorá skladá celé meno vrátane voliteľných titulov.

Príklad riadku

Riadok rozpisu môže mať podobu 5.5. Mgr. Ján Novák - PaedDr. Anna Kováčová.


Rozloženie riadkov

PDF generátor používa pevne nastavené súradnice pre začiatok zoznamu, riadkovanie a pozíciu stĺpcov.

Prvok Význam
LIST_START_Y počiatočná Y pozícia zoznamu
LIST_LINE_HEIGHT vzdialenosť medzi riadkami
DATE_X X pozícia dátumu
TEACHERS_X X pozícia dvojice učiteľov

Jednoduché pevné rozloženie

Rozpis používa pevné súradnice, čo je jednoduché a predvídateľné riešenie pre jednostránkový PDF výstup.

Limit priestoru na strane

PDF dokument má obmedzený priestor. Ak by bolo riadkov príliš veľa alebo by boli texty príliš veľké, nemuseli by sa všetky riadky zmestiť do dostupného priestoru. Aplikácia preto chráni priestor poznámky pod čiarou a ďalšie riadky už nevykreslí, ak by zasahovali príliš nízko.


Prázdny rozpis

Ak generátor nevráti žiadny deň na zápis, PDF generátor vloží informačný text.

Žiadne dni na generovanie

Ak zoznam dozorov neobsahuje žiadny záznam, do PDF sa vloží informácia, že nie sú žiadne dni na generovanie.


Poznámka pod čiarou

V spodnej časti dokumentu sa vykresľuje poznámka pod čiarou. Jej text sa načítava z konfigurácie aplikácie.

Poznámka môže obsahovať viac riadkov. Každý riadok sa vykreslí samostatne.

Úloha poznámky

Poznámka pod čiarou je vhodná na organizačné informácie, napríklad čas začiatku služby alebo čas veľkej prestávky.

Príklad poznámky

Poznámka môže obsahovať text o začiatku služby a čase veľkej prestávky. Tento text sa zobrazí v spodnej časti PDF dokumentu.


Deliaca čiara nad poznámkou

Nad poznámkou pod čiarou sa kreslí tenká vodorovná čiara. Tá vizuálne oddeľuje hlavný zoznam dozorov od poznámky.

Vizuálne oddelenie

Deliaca čiara zlepšuje čitateľnosť dokumentu. Používateľ tak ľahšie rozlíši samotný rozpis od doplnkovej poznámky.


Ukladanie PDF súboru

PDF sa po vygenerovaní uloží do dátového priečinka aplikácie ako pracovný súbor:

teachers.pdf

Tento súbor sa pri ďalšom generovaní môže nahradiť novou verziou.

Pracovný PDF súbor

Súbor teachers.pdf slúži ako aktuálny interný PDF výstup aplikácie. Používa sa na zobrazenie náhľadu a ako zdroj pri ukladaní PDF na miesto vybrané používateľom.

teachers.pdf nie je archív

Súbor teachers.pdf v dátovom priečinku sa môže pri ďalšom generovaní prepísať. Ak si používateľ chce rozpis archivovať, má použiť tlačidlo Uložiť PDF a uložiť súbor pod vlastným názvom.


PNG náhľad PDF

Po vytvorení PDF sa pripravuje aj obrázkový náhľad. Tento náhľad sa používa na zobrazenie rozpisu v hlavnom okne aplikácie.

Náhľad sa ukladá do dátového priečinka ako:

teachers_preview.png

Úloha PNG náhľadu

PNG náhľad umožňuje zobraziť PDF rozpis priamo v hlavnom okne aplikácie. Používateľ tak nemusí otvárať externý PDF prehliadač iba kvôli kontrole rozpisu.


Zobrazenie náhľadu v hlavnom okne

Hlavné okno po vygenerovaní načíta súbor teachers_preview.png, upraví jeho veľkosť podľa dostupného priestoru a zobrazí ho na ploche aplikácie.

Veľkosť obrázka sa prispôsobí tak, aby sa zmestil do oblasti určenej pre náhľad.

Prispôsobenie veľkosti

Aplikácia vypočíta mierku podľa veľkosti obrázka a dostupného priestoru v hlavnom okne. Vďaka tomu sa náhľad zobrazí celý a nepresahuje určenú plochu.


Obnovenie náhľadu po zmene nastavení

Ak používateľ zmení nastavenia PDF, napríklad veľkosť písma alebo text poznámky, aplikácia môže obnoviť aktuálny PDF náhľad podľa nových hodnôt.

Vplyv nastavení na PDF

Nastavenia PDF sa uplatnia pri ďalšom generovaní alebo obnovení aktuálneho náhľadu. Zmena veľkosti písma alebo poznámky môže zmeniť výsledný vzhľad dokumentu.


Vzťah PDF výstupu a generovania dozorov

PDF generátor nevytvára samotné rozdelenie učiteľov. Dostáva už pripravený zoznam objektov DutyEntry.

Zodpovednosť za výber učiteľov má generátor dozorov. PDF generátor rieši iba vizuálny výstup.

Oddelenie logiky a výstupu

Trieda DutyGenerator pripraví údaje rozpisu. Trieda TeacherPdfGenerator tieto údaje iba vykreslí do PDF. Vďaka tomu je oddelená logika generovania od tvorby dokumentu.


Chybové situácie pri PDF výstupe

Generovanie PDF môže zlyhať napríklad vtedy, keď sa nepodarí vytvoriť dátový priečinok, uložiť PDF súbor alebo načítať potrebné fonty.

Možné príčiny zlyhania PDF

PDF výstup môže zlyhať pri probléme so zápisom do dátového priečinka, pri chýbajúcich fontoch alebo pri neočakávanej chybe knižnice PDFBox. V takom prípade aplikácia zobrazí chybové hlásenie a rozpis je potrebné vygenerovať znova po odstránení problému.

Praktická kontrola

Ak sa PDF nedá vytvoriť alebo uložiť, je vhodné skontrolovať, či má používateľ právo zapisovať do dátového priečinka aplikácie a či aplikácia nebeží z poškodeného alebo neúplného balíka.


Silné stránky riešenia

PDF výstup je vytváraný priamo aplikáciou, bez potreby externého nástroja. Výsledok je preto dostupný okamžite po generovaní.

Výhody PDF výstupu

PDF je vhodné na tlač, odoslanie a archiváciu. Použitie vlastných fontov zabezpečuje podporu slovenskej diakritiky a pevné rozloženie strany dáva výstupu stabilnú podobu.


Obmedzenia riešenia

Súčasný PDF výstup je navrhnutý ako jednoduchý jednostránkový dokument. To je vhodné pre bežný mesačný rozpis, ale má to prirodzené limity pri veľkom množstve riadkov alebo veľmi dlhých menách.

Jednostránkový výstup má limity

Ak by rozpis obsahoval príliš veľa riadkov alebo veľmi dlhé texty, pevné jednostránkové rozloženie nemusí byť ideálne. Pri budúcom rozšírení aplikácie by bolo možné doplniť podporu viacerých strán alebo dynamickejšie rozloženie.