Hlavní navigace

Formátované dokumenty a tiskové sestavy v Javě (1)

Pavel Tišnovský

V tomto článku a na něj navazujících pokračováních jsou popsány dva poměrně rozsáhlé systémy, které jsou určeny pro vytváření formátovaných dokumentů a tiskových sestav. Oba popisované systémy jsou založeny na "čistém" programovacím jazyku Java, což přispívá k jejich snadné portaci na různé platformy. Díky použití Javy je také možné funkce těchto systémů použít na webových a intranetových serverech pro dynamické vytváření různých typů dokumentů.

Obsah

1. Vytváření formátovaných dokumentů a tiskových sestav
2. Přednosti značkovacích jazyků
3. Problematika tiskových sestav a systém POI
4. Obsah tohoto miniseriálu
5. Stručná charakteristika systému FOP
6. Stručná charakteristika systému POI
7. Obsah dalšího pokračování tohoto seriálu

1. Vytváření formátovaných dokumentů a tiskových sestav

Velmi důležitou součástí mnoha stávajících aplikací, zejména podnikových informačních systémů, je tvorba formátovaných dokumentů a tiskových sestav. Tato činnost je však při praktické (mnohdy i ruční) implementaci poměrně komplikovaná, zejména z toho důvodu, že až do nedávné doby neexistoval žádný obecně platný standard pro popis formátovaných dokumentů určených pro další zpracování. Již po delší dobu jsou však k dispozici formáty, do kterých lze ukládat data určená k prohlížení na obrazovce počítače nebo přímo k tisku na vhodném tiskovém zařízení (jednoduchými stolními tiskárnami počínaje a profesionálními osvitovými jednotkami konče). Mezi tyto formáty navržené pro finální zpracování patří PostScript a PDF (Portable Document Format), oba tyto formáty byly vyvinuty ve firmě Adobe, jejíž produktové portfolio je zaměřeno na DTP a grafický design – tomu také odpovídají možnosti obou výše uvedených souborových formátů. Tyto dva formáty jsou však ve své podstatě „finální“, jejich další změny jsou sice možné, ale poměrně komplikovaným způsobem (například změna formátu tiskové strany či okrajů je netriviální záležitostí).

Tvorba formátovaných dokumentů a sestav tak může být shrnuta do úlohy tvorby dokumentů uložených ve „finálním“ formátu PostScript nebo PDF. V některých případech je však vhodné, aby byly dokumenty před – někdy nepotřebným – finálním převodem uloženy také v nějaké standardizované formě vhodné pro další zpracování a/nebo archivaci (ta se v mnoha informačních systémech kupodivu vůbec neřeší). Právě zde přichází ke slovu takzvané značkovací jazyky, pomocí kterých lze popsat logickou strukturu i těch nejsložitějších dokumentů tak, že je následně možné provést automatizovaný převod z takto vytvořené hierarchické struktury do některého z výše zmíněných výstupních formátů (PostScript či PDF).

2. Přednosti značkovacích jazyků

Největší přednost značkovacích jazyků je zřejmá: vzhledem k tomu, že je dokument popsán svou logickou strukturou (v mnoha případech by se dalo říci, že je popsán sémanticky, zdaleka to však neplatí pro všechny značkovací jazyky – viz například rozdíl mezi TeXem a LaTeXem), je možné jeho další strojové zpracování třeba i zcela odlišným typem aplikace, což se týká také přeformátování, například při požadované změně stylu dokumentu. Další výhodou velké části těchto jazyků je jejich poměrně jednoduchý formát, většinou se jedná o prostý ASCII text s vloženými značkami uvozenými pomocí rezervovaných znaků. To znamená, že dokument zapsaný v některém značkovacím jazyku je možné připravit (a často se tak děje) v prakticky libovolném textovém editoru nebo pomocí utilit pro práci s textem (AWK, M4, Perl).

Mezi známé značkovací jazyky patří SGML (Standard Generalized Markup Language), HTML (Hypertext Markup Language) a v dnešní době zejména XML. Jazyk HTML je, jako jedna z konkretizací velmi obecného jazyka SGML, používán pro vytváření webových stránek. V tomto formátu lze zadat jak fyzické parametry částí dokumentů (font, barvu, velikost písma apod.), tak i jeho logické části (odstavce, seznamy, citace, odkazy). Spojení HTML s CSS umožňuje separovat fyzické a logické značky (tj. značky definující styl dokumentu a jeho obsah), tento postup je ještě dále dotažen v XML, resp. jeho jednotlivých specifikacích, zejména v Xlink (XML Linking Language) a XSL (Extensible Stylesheet Language). XML je však obecnější než HTML, protože místo popisu zobrazení informací přímo popisuje dané informace a jejich hierarchii. To je významné zejména při přenosu informací mezi různými systémy, jak ostatně uvidíme v dalším textu.

3. Problematika tiskových sestav a systém POI

Dalším poměrně náročným úkolem, před kterým programátoři mnohých aplikací stojí, je tvorba tiskových sestav. V jednodušších případech se zadavatel spokojí s některým „finálním“ tiskovým formátem či zavedeným značkovacím jazykem (viz obě předchozí kapitoly), občas je však nutné vytvořit i tabulky, které je možné načíst do některého z dnes používaných tabulkových procesorů (jmenujme například Microsoft Excel, OpenOffice.org Calc, Gnumeric či 602TAB z programového balíku 602ProPCSuite) – tiskové sestavy jsou v mnoha případech před finálním tiskem či uložením různými postupy dále zpracovávány, spojovány, opatřovány grafy atd. Pro uložení dat čitelných pomocí tabulkových procesorů je opět možné použít některé kvalitně popsané a poměrně snadno implementovatelné souborové formáty, jako je CSV, čistý text, formát DBF (verze pro dBase či FoxPro) atd. Mezi přednosti těchto formátů patří jejich velká rozšířenost, podpora v prakticky všech soudobých i historických tabulkových editorech a databázích a také dostupnost různých konverzních utilit (pro jednoduchost pomineme snad již věčnou problematiku kódování českých znaků). Nevýhodou je zejména fakt, že se v těchto typech dokumentů (resp. jejich formátů) ukládají pouze vlastní data bez dalšího formátování, mnohdy také nelze uložit více listů v sešitu – o grafech, souhrnech a dalších důležitých informacích ani nemluvě.

Je celkem zajímavé, že se na poli formátů určených pro ukládání formátovaných (případně i řádně ostylovaných) textových dat po dlouhou dobu vyvíjela značná aktivita – již dnes se ostatně používá několik poměrně úspěšných standardů, ale podobná činnost pro data uložená ve složitějších tabulkách není zdaleka tak patrná. Je to o to zajímavější, že tabulkové procesory tvoří v dnešní době jakési vstupní či výstupní rozhraní i pro mnoho velkých podnikových informačních systémů (založených například na SAPu).

Zejména z těchto důvodů je patrná snaha o použití souborových formátů, které jsou pro daný tabulkový procesor nativní. Kromě formátu aplikace OpenOffice.org založeného na XML se často musí použít i poměrně málo zdokumentovaný formát Microsoft Excelu (kvalitní dokumentace samozřejmě existuje, ale je šířena s poměrně restriktivními podmínkami dalšího použití). Při použití programovacího jazyka Java je však pro tuto problematickou činnost připraven nástroj, který se jmenuje POI. Tento nástroj se sice neustále vyvíjí (připravuje se například kvalitnější podpora i pro formát aplikace Microsoft Word), nicméně i v soudobé verzi umožňuje načítat i vytvářet excelovské sešity, které se skládají z více listů, buňky mohou být formátované (lze měnit například formát číselných hodnot, barvu a styl pozadí buněk či celých oblastí, orámování buněk atd.), je možné použít jednoduché vektorové obrázky, pro každou tabulku je možné specifikovat okraje stránek, umístění příček apod. Vytvořené tabulky by mělo být možné otevřít v prakticky jakémkoli soudobém tabulkovém procesoru.

4. Obsah tohoto miniseriálu

Problematika tvorby formátovaných dokumentů bude popsána celkem ve třech dílech tohoto miniseriálu. V dalším pokračování bude popsán projekt FOP (Formatting Object Processor), který je možné použít pro tvorbu formátovaných dokumentů popsaných jednou z aplikací značkovacího jazyka XML (podobnost použitého formátu s formátem aplikace OpenOffice.org není čistě náhodná). Výstupem aplikace FOP je ve většině případů dokument uložený ve formátu PDF či v některém z dalších cca deseti podporovaných formátů. V navazující části bude popsán projekt POI, který si do budoucna klade za cíl vytvoření javovské knihovny, pomocí níž je možné načítat, programově vytvářet i ukládat soubory ve formátech aplikací Microsoft Office, zejména textového procesoru Microsoft Word a tabulkového procesoru Microsoft Excel (s těmito typy souborů však pracují i další aplikace, například velmi populární OpenOffice.org nebo již méně známý 602 ProPCSuite). Oba popisované systémy jsou vytvořeny jako aplikace napsané v čisté Javě bez použití jakýchkoli proprietárních technologií, což zaručuje jejich funkčnost a rozšiřitelnost i do budoucna.

5. Stručná charakteristika systému FOP

Projekt FOP (Formatting Object Processor) si klade za cíl vytvořit filtr (tj. aplikaci provádějící dávkový převod a následné zpracování dat), na jehož vstupu je dokument zapsaný pomocí značkovacího jazyka XML a na výstupu je formátovaný dokument uložený primárně ve formátu PDF (Portable Document Format), popřípadě i v některém z dalších podporovaných formátů dokumentů. Tento systém se v některých svých rysech podobá známému LaTeXu, v jehož formátu je dokument taktéž logicky popsán pomocí značkovacího jazyka (na rozdíl od TeXu, který primárně – bez použití dalších rozšiřujících maker – popisuje fyzický formát dokumentu).

Vzhledem k tomu, že jednou z hlavních priorit tohoto projektu je dosažení co největší (ideálně absolutní) nezávislosti na platformě i na operačním systému, je celý projekt FOP vytvořen v programovacím jazyku Java, to znamená, že implementovaný filtr lze spustit na jakémkoli systému s nainstalovanou JRE (Java Runtime Environment). Také je možné, aby byl filtr zařazen do některé další aplikace, případně ho lze volat i z WWW serveru (dynamická tvorba formátovaných dokumentů), například pomocí JSP kontejneru TomCat – samozřejmě je možné použít i jiný webový server s JSP kontejnerem, protože kontejner TomCat má v některých oblastech problémy s výkonem (což se ostatně dá od referenční aplikace, kterou TomCat bezesporu je, očekávat).

6. Stručná charakteristika systému POI

Projekt POI, zejména jeho součást nazvaná HSSF a HWPF, je primárně určen pro načítání, editaci a zpětné uložení dokumentů ve formátech aplikací Microsoft Office, zejména Microsoft Wordu a Microsoft Excelu. Celý projekt je vytvořen pouze pomocí programovacího jazyka Java se striktním zákazem jakýchkoli proprietárních technologií. Sami autoři tohoto projektu ostatně odmítají přijímat a využívat veškeré informace o formátech Microsoft Office, které by pocházely od firmy Microsoft nebo přidružených firem. Jen tak je ostatně možné zaručit, že výsledný produkt (částečně na POI založený či POI využívající) nebude nutné složitým způsobem licencovat. Veškeré znalosti formátů Microsoft Wordu a Microsoft Excelu tak byly získány buď z volně dostupných zdrojů, nebo zkoumáním interních částí těchto poměrně složitých formátů. Pro začlenění projektu POI do dalších aplikací mluví i použitá Apache Software Licence, která je v některých ohledech pro vytváření komerčních i open source aplikací výhodnější než známá licence GPL.

7. Obsah dalšího pokračování tohoto seriálu

V dalším pokračování tohoto seriálu bude popsán systém FOP, zejména způsob jeho instalace, zprovoznění a tvorby jednoduchých dokumentů ve formátu značkovacího jazyka XML.

Našli jste v článku chybu?

7. 6. 2005 23:26

Jirka Kosek (neregistrovaný)
No průběžné mezisoučty jde v XSL-FO udělat jedním průchodem (přes fo:marker). Pokud se jedná o součty pouze za jednu stránku, jde to bez problémů vyřešit dvěma průchody. Není potřeba přitom nějak zpětně komunikovat s aplikací, která daa generoval. Proces vypadá tak, že se v první fázi na XML aplikuje XSLT, které generuje FO. To se však neppřevede do PDF, ale do XML dokumentu, který u jednotlivých textů definuje, kde se na stránce vyskytují, jakým jsou fontem apod. Kromě toho se do tohoto dokumen…

3. 6. 2005 13:48

a (neregistrovaný)
U nás ve fy děláme něco jako ReportBuilder. Právě tyto věci jsou řešeny scriptováním na straně report builderu.
Pokud jsou řádky ve faktuře různě vysoké, přičemž velikost se řídí obsaženým textem, opravdu nikdo neví, kolik řádků na stránku se vejde na stránky než to je vyrenderováno.

Tomas Tintera


Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Brněnský radní chce zničit kartel operátorů. Uspěje?

Brněnský radní chce zničit kartel operátorů. Uspěje?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Jedlé kaštany jsou trpké, je třeba je tepelně upravit

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami