Hlavní navigace

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

Pavel Tišnovský

V dnešní části miniseriálu o vytváření formátovaných dokumentů a tiskových sestav pomocí programů napsaných v programovacím jazyce Java se zaměříme na popis systému FOP, zejména na způsob jeho instalace, zprovoznění a tvorby jednoduchých dokumentů zapsaných ve formátu FO-XSL.

Obsah

1. Programová tvorba dokumentace pomocí projektu FOP
2. Úvodní informace o projektu FOP
3. Základní vlastnosti systému FOP
4. Přednosti a zápory nasazení systému FOP
5. Instalace systému FOP
6. Testovací a demonstrační příklady
7. Význam některých důležitých značek ve vstupním souboru
8. Obsah dalšího pokračování tohoto seriálu

1. Programová tvorba dokumentace pomocí projektu FOP

předchozí části tohoto seriálu jsme si řekli, že projekt FOP (Formatting Object Processor) si klade za cíl vytvořit filtr pro převod dokumentů popsaných pomocí značkovacího jazyka XML do formátu PDF (Portable Document Format). Aby byl vytvářený systém do co největší míry nezávislý na použité platformě a operačním systému, byl pro jeho vývoj použit programovací jazyk Java – to mimo jiné znamená, že jednou přeložený systém lze spustit na prakticky jakékoli platformě s nainstalovanou JRE (Java Runtime Environment).

2. Úvodní informace o projektu FOP

Domácí stránku tohoto velmi zajímavého projektu lze nalézt na serveru s názvem The Apache XML project, jež je dostupný na snadno zapamatovatelné adrese xml.apache.org. Projekt FOP je z uživatelského i programátorského hlediska popsán na stránce nazvané příznačně Formatting Objects Processor, jež je dostupná na URL adrese xml.apache.or­g/fop. Na tomto serveru jsou mimo jiné popsány i některé další zajímavé projekty založené na značkovacím jazyku XML a jeho vybraných implementacích.

3. Základní vlastnosti systému FOP

Jak již víme z úvodní části tohoto seriálu, slouží projekt FOP k tvorbě formátovaných dokumentů. Tyto dokumenty však nejsou zadávány interaktivní cestou (tj. textovým procesorem či aplikací pro sazbu), ale strukturovaným popisem formátu dokumentu i dat uložených v tomto dokumentu. Veškerá struktura (resp. její formát) je popsána pomocí takzvaného XSL Formatting Objects, zkráceně XSL-FO. To, že jsou dokumenty popsány pomocí XSL, přináší programátorům mnohé výhody, protože pro jejich generování lze použít velké množství externích aplikací, textovými procesory počínaje a konče automatizovanými generátory sestav napojených na databáze či na aplikace provádějící různé komplikované výpočty apod. V těchto aplikacích není nutné implementovat žádný složitý konvertor do externích formátů, postačí pouze implementovat filtr či generátor formátu popsaného pomocí XSL-FO. Výsledkem této programátorovy snahy je, že jím vyvíjená aplikace prakticky ihned získá možnost vytvářet formátované dokumenty v jednom z cca deseti formátů, jež jsou v této chvíli v projektu FOP implementovány.

4. Přednosti a zápory nasazení systému FOP

Velkou výhodou systému FOP je jeho nezávislost na použité platformě, které je dosaženo díky použití programovacího jazyka Java. Zjednodušeně řečeno je možné říci, že na prakticky jakémkoli výpočetním systému, kde je k dispozici běhové prostředí jazyka Java (tj. minimálně Java Runtime Environment – JRE), je možné FOP provozovat, samozřejmě při dodržení minimálních hardwarových nároků. Kromě samostatného filtru (konverzní utility dostupné z příkazové řádky) je možné FOP zařadit i do vytvářených aplikací či přímo do WWW systému, což je výhodné zejména při on-line aktualizacích různých dokumentů, například ceníků na Webu či tiskových sestav na firemních intranetech.

To, že je celý systém FOP postavený na bázi Javy, je však současně i jeho největší nevýhodou, protože vytváření dokumentů je poměrně pomalé, zejména při nasazení na zatížených WWW serverech. Další nevýhodou je pracná implementace národních znaků, původní FOP totiž předpokládá, že jsou k dispozici pouze fonty, jež implementují znakovou sadu podle normy ISO 8859–1, tj. znaky používané v západní Evropě a USA (toto omezení principielně vychází z fontů, jež jsou dostupné v prohlížeči Adobe Acrobat Reader). Problém není ve vstupních souborech, ty mohou být kódovány v Unicode, ale ve fontech, které je zapotřebí před generováním výsledného formátovaného dokumentu načíst. Zde mohou nastat komplikace, které se týkají licencování jednotlivých fontů, protože tyto fonty jsou například při použití souborů PDF do tohoto souboru přímo začleněny, což může při dalším šíření těchto souborů odporovat některým licenčním ujednáním.

5. Instalace systému FOP

Instalační soubory spolu se zdrojovými soubory systému FOP jsou dostupné na internetové adrese mirror.styx.cz/a­pache/xml/fop (jedná se o poměrně rychlý český mirror původních stránek). Z této adresy je možné získat zdrojové kódy ve dvou podobách, buď jsou zabaleny pomocí komprimační utility zip, nebo jsou dostupné ve standardním internetovém formátu .tar.gz. Nejnovější stabilní verze systému FOP je uložena v souboru fop-current-src.zip (formát zip) resp. v souboru fop-current-src.tar.gz (formát .tar.gz). Po rozbalení jednoho z těchto souborů vznikne adresářová struktura se zdrojovými kódy, dokumentací, demonstračními příklady a v neposlední řadě i se souborem určeným pro sestavovací systém Ant, který řídí celý překlad – další informace o systému Ant byly na Rootu uvedeny například v článku Apache Ant 1.5a Používáme Javu na Linuxu, kompilujeme s Mravencem.

Vzhledem k tomu, že je celý projekt vytvořen v čisté Javě (se striktním zákazem použití proprietárních technik), je pro překlad zapotřebí vývojové prostředí pro Javu či alespoň standardní JDK firmy Sun Microsystems. Podle manuálu je nutné použít JDK verze alespoň 1.3, překlad a běh byl otestován na JDK 1.4.2. Pro překlad je nutné v adresáři se souborem build.xml (což je překladový soubor, který je interpretován systémem Ant) zadat jeden z následujících dvou příkazů:

./build.sh 

(funguje pro unixové systémy), nebo:

.\build.bat 

(pracuje se systémy na bázi Microsoft Windows).

Doba překladu celého projektu se na současných počítačích pohybuje řádově v minutách; na postarším referenčním systému IBM Personal Computer 300PL s procesorem Intel Pentium III taktovaným na 450 MHz a s operační pamětí o kapacitě 192 MB byl překlad dokončen za necelých pět minut.

Alternativně je možné místo výše uvedených překladových skriptů volat přímo sestavovací systém Ant. Například tvorba manuálu a programové dokumentace, která mimochodem probíhá pomocí javovské utility Forest, se provede příkazem:

ant docs
ant javadocs 

Všechny překladem vytvořené soubory lze smazat pomocí příkazu:

ant  distclean 

po jehož provedení by se měla adresářová struktura obnovit tak, aby odpovídala původnímu archivu staženému z Internetu. Kromě zdrojových kódů lze získat i přeloženou verzi systému FOP, tj. bytekódy jednotlivých tříd, které jsou uloženy v souborech typu JAR (Java Archive). Tato verze je, podobně jako zdrojové kódy systému FOP, taktéž uložena (přesněji řečeno zrcadlena) na české adrese mirror.styx.cz/a­pache/xml/fop, soubory mají název fop-current-bin.zipnebo fop-current-bin.tar.gz, podle typu použitého formátu archivu.

6. Testovací a demonstrační příklady

Přímo se systémem FOP jsou dodány i testovací příklady, od těch nejjednodušších, které slouží pro tvorbu základního odstavcového textu, až po ty složitější, které do dokumentů přidávají grafiku (rastrovou či dokonce vektorovou), tabulky, hypertextové odkazy, poznámky apod. Jednoduché testovací příklady jsou uloženy v podadresáři:

\fop\examples\fop\basic 

další testovací příklady pak v podadresářích:

\fop\examples\fop\advanced
\fop\examples\fop\tables
\fop\examples\fop\svg
\fop\examples\fop\keynotes
\fop\examples\fop\graphics 

Kromě testovacích příkladů, které po filtraci vytvoří PDF soubor, je možné v podadresáři:

\fop\examples\embedding 

nalézt příklad demonstrující zabudování systému FOP do větších javovských aplikací, které tak ihned získají možnost „tisku“ či – lépe řečeno – náhledu PDF dokumentů. Dále jsou v podadresáři:

\fop\examples\servlet 

umístěny příklady, které ukazují, jakým způsobem lze systém FOP použít na serveru pro on-line vytváření formátovaných PDF dokumentů a také SVG dokumentů, které jsou v mnoha případech pro implementaci na Internetu a intranetech výhodnější, už jenom díky možnosti jejich zobrazení přímo ve webovém prohlížeči a manipulaci s obsahem pomocí JavaScriptu, případně i dalších skriptovacích jazyků.

Volba výstupního formátu se určuje pomocí přepínačů při spuštění filtru následujícím způsobem:

      -pdf outfile      vytvoření souboru typu PDF
      -awt              zobrazení dokumentu v GUI okně, vše se vykresluje pomocí knihovny AWT
      -mif outfile      vytvoření souboru typu MIF
      -pcl outfile      vytvoření tiskového souboru typu PCL (použito na některých tiskárnách HP)
      -ps outfile       vytvoření tiskového souboru typu PostScript (lze zobrazit aplikací GhostView)
      -txt outfile      výstup do textového souboru
      -svg outfile      výstup do grafického souboru SVG (Scalable Vector Graphics, podporují ho některé vektorové editory)
      -print            přímý tisk na tiskárnu (nefunguje korektně na některých platformách) 

Nyní si na jednoduchém příkladu ukážeme formát zdrojového dokumentu, který je uložen pomocí značkovacího jazyka XML, konkrétně jeho implementace XSL-FO. Po převodu si prosím všimněte, že je sice možné (a doporučené) použít kódování znaků pomocí UTF-8 (tj. jednou z forem Unicode), ale české znaky nebudou ve výsledném PDF souboru zobrazeny korektně, protože se použije implicitní font, který tyto znaky neobsahuje (pro test češtiny stačí nahradit text ‚Hello world‘ známou větou u žluťoučkém koni).

<?xml version="1.0" encoding="UTF-8"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master
        master-name="simpleA4"
        page-height="29.7cm"
        page-width="21cm"

        margin-top="2cm"
        margin-bottom="2cm"
        margin-left="2cm"
        margin-right="2cm">
      <fo:region-body/>

    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="simpleA4">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hello World!</fo:block>

    </fo:flow>
  </fo:page-sequence>
</fo:root> 

7. Význam některých důležitých značek ve vstupním souboru

Tento článek si neklade za cíl detailně popsat všechny značky (tagy), které se mohou ve vstupním souboru vyskytovat. Uvedeme si pouze ty nejdůležitější či nejzajímavější značky. Celý dokument je uzavřen mezi kořenové značky <fo:root> a </fo:root>. Značka <fo:layout-master-set> specifikuje začátek bloku, v němž se nastavují například parametry stránky, které jsou pro výsledné formátování do PDF velmi důležité. Každá stránka může být rozdělena až do pěti regionů, každý region může mít nastaveno svoje vlastní formátování, styl a velikost. Regiony se často používají pro vytváření hlaviček a patiček stránek, ale i poznámek pod čarou.

Jak je z předchozího demonstračního příkladu patrné, je odstavcový text uzavřen mezi značkami (tagy) s názvem <fo:block> a </fo:block>. Tyto značky jsou uvedeny buď bez atributů (atributy se potom zdědí z nadřazeného bloku či z nastaveného stylu dokumentu), nebo je možné změnit několik či dokonce všechny potřebné atributy. Podobně jako v prakticky každém moderním textovém procesoru je i zde možné pro každý odstavec nastavit jeho styl, barvu písma, použitý font, způsob zpracování sirotků a vdov, zarovnání textu na řádcích apod. Každý odstavec je přitom možné pojmenovat pomocí jednoznačného identifikátoru, což se hodí například při vytváření hypertextových odkazů. Do bloků se pomocí značek<fo:block> a </fo:block> uzavírají i nadpisy, které jsou tak tvořeny speciálně formátovanými odstavci, což dokumentuje následující úryvek kódu:

      <fo:block font-size="18pt"
            font-family="sans-serif"
            line-height="24pt"
            space-after.optimum="15pt"
            background-color="blue"
            color="white"
            text-align="center"
            padding-top="3pt">
        Project FOI and Java
      </fo:block> 

Význam dalších značek je uveden v nápovědě dodávané k systému FOP.

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

V další části tohoto seriálu bude popsán systém POI, který je v současné době možné použít pro načítání, programovou změnu a uložení sešitů ve formátu aplikace Microsoft Excel. Kromě toho je ve vývojářské verzi možné načítat a ukládat soubory ve formátu Microsoft Wordu. Příště si také ukážeme několik demonstračních zdrojových kódů, které budou názorně ukazovat použití systému POI.

Našli jste v článku chybu?

7. 6. 2005 15:35

Otevřená řešení se opravdu ve firmách začínají prosazovat - vidím to všude kolem sebe. Je to samozřejmě pomalá změna, protože některá firemní infrastruktura je dost složitá a špatně se předělává (a samozřejmě při konkrétním řešení "nejsou lidi"). To je taky jeden z důvodů, proč v dalším pokračování tohoto seriálu budu popisovat systém POI, kterým se programově manipuluje s Excelovskými tabulkami - pro firemní aplikace je to jedna z často požadovaných operací.

7. 6. 2005 12:24

Ano, s chybějící podporou pro některé atributy XSL-FO jsem se setkal. Na druhou stranu tento systém ovšem většinou převede dokumenty i s neznámými značkami. Samozřejmě, že převod nemusí být korektní, ale pro rychlý náhled na získaná data to většinou dostačuje.
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

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Velká cena v Abú Dhabí: 131 ti­síc diváků

Velká cena v Abú Dhabí: 131 ti­síc diváků

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

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

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

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

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

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

DigiZone.cz: Flix TV: dva set-top boxy za korunu

Flix TV: dva set-top boxy za korunu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Měšec.cz: Stavební spoření: alternativa i pro seniory

Stavební spoření: alternativa i pro seniory

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

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

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