Automatická volba velikosti

Na seznam témat a kapitol (obsah)Nadřízená kapitola

Rádi bychom, aby Diploma Supplement uměl sám přizpůsobit svoji velikost tak, aby se vždy pokud možno vešel tak nějak akorát na 4 stránky A4.

… právě kvůli tomuto zadání uvedenému v předchozím odstavci vznikla funkce pro automatickou volbu velikosti dokumentu.

V původním řešení (použitém ve starším diploma supplementu) jsme se smažili dopředu odhadnout (na základě vstupních dat) jak asi bude výsledný dokument dlouhý a podle toho dělat menší řádky, menší fonty a tak podobně. Výsledkem byly však spíše komplikace - přílišné tlačení sázecího systému způsobilo, že texty místy utíkaly ze svých vymezených oblastí, protože se tam prostě nemohly vejít. Navíc nebyly jednotlivé části DS konzistentní co se týče celkového vizuálního vjemu (některé části byly nahuštěnější než jiné)

Samotné vysázení komplexního dokumentu je velmi složitý proces a nelze dopředu predikovat, jak bude výsledný dokument dlouhý. Jediný způsob, jak toho přesně docílit, je dokument vysázet a pak se podívat, jak to dopadlo. A přesně tento způsob jsme zvolili - je sice o něco pomalejší než původní řešení, ale produkuje výrazně lepší a spolehlivější výsledky. Řešení je univerzálně použitelné, v současné době jej však máme implementováno pouze u Diploma Supplementu, kde je potřeba.

Úrovně zvětšení reportu

U vybraných reportů můžeme mít nyní nadefinováno několik úrovní zvětšení. Každá úroveň obsahuje vlastní sadu parametrů, stylů a vůbec všech nastavení týkajících se podoby dokumentu. Máme tedy připraveno několik úrovní (úroveň 100 je ta výchozí a pak postupně 99, 98 a tak dále) a víme, že každé nižší číslo úrovně bude ve výsledku vytvářet o něco menší výsledné dokumenty. V úrovních máme tedy postupně menší písmo (či jeho jiný, úspornější řez), snižujeme odstupy mezi odstavci, částmi textu, řádkami v tabulkách a podobně. Nejedná se tedy o rozhodně jen o jakýsi ZOOM, ale jsou defakto připraveny a otestovány celé samostatné reporty.

Výhodou tohoto systému je to, že v jednotlivých úrovních nejsou řízeny jen velikosti a mezery, ale obecně jakékoliv vizuální atributy a styly. Lze tak snadno implementovat například to, že v klasické velké úrovni zobrazení jsou v tabulkách horizontální linky oddělující řádky, zatímco v již malých úrovních (kde je již malé písmo a vše je mnohem drobnější) jsou tyto linky vynechány, protože už začala tabulka působit spíše jako jeden velký žebřík. Konkrétně pro diploma supplement máme předdefinováno 5 úrovní zvětšení:

Ukázka: náhled různých úrovní zvětšení v diploma supplementu

Obrázek 803. Ukázka: náhled různých úrovní zvětšení v diploma supplementu. 

Hledání nejvhodnějšího zvětšení reportu pro konkrétní vstupní data

Pro report máme nadefinováno několik úrovní zvětšení a chceme, aby byl report samozřejmě pokud možno co největší, ale zároveň aby nepřekročil například 4 stránky (v případě Diploma Supplementu). Aplikace pak funguje podle následujícího algoritmu:

  • Vygenerování všech záznamů ve výchozí úrovni zvětšení (úroveň 100)

  • Analýza vzniklého PDF (které může obsahovat třeba 100 diploma supplementů za sebou), zjištění na které stránky se který jednotlivý DS vytvořil (například třetí DS se mohl vytvořit na stránky 10-15).

  • Záznamy, jejichž výsledná podoba je na více než na 4 stránky, tvoří novou sadu a algoritmus se opakuje od začátku s tím, že úroveň zvětšení se o jedna posunuje (budeme tvořit menší dokumenty).

  • Jakmile jsou již všechny záznamy na požadovaný počet stránek (a nebo nám došly úrovně a již se tedy nedá nic dělat - některé záznamy jsou prostě tak ohromné, že se prostě nevejdou), provedeme spojení vzniklých záznamů do výsledného jednoho PDF souboru.

Již z principu je algoritmus pomalejší než běžné reporty, protože teoreticky se sázení systém TeX může volat až tolikrát, kolik úrovní zvětšení report umí. Benefitem je ale spolehlivě vytvořený dokument.