Dalo by se říci, že dnes už není potřeba nic tiskout – internet je dnes dostupný v každém mobilu, takže stačí znát odpovídající URL nebo přístupové údaje do VPN. Přiznám se, jsem konzervativní a myslím si, že každá netriviální aplikace by měla mít možnost tisknout, a to včetně aplikací webových. Pojďme se podívat, jak vytvářet výstupní tiskové sestavy.

Požadavky

Před volbou řešení pro vaši aplikaci si musíte odpovědět na několik otázek:

  • Jaký má být výstupní formát? PDF, HTML, MS Word…?
  • Jak kvalitní výstup je vyžadován? Týká se především kvality sazby textů a použití některých formátovacích prvků specifických pro tisk (odstránkování, hlavička a patička na každé stránce atd).
  • Je vyžadován online tisk nebo stačí, když tisk bude realizovat démon na pozadí aplikace? Týká se rychlosti tiskové aplikace a počtu a velikosti hotových offlinevýstupních sestav.

Odpovědi na tyto otázky určují volbu technologie. Výběr je široký…

Media: print

Nejjednodušší, a vlastně i docela elegantní řešení pro webové aplikace je vytvořit zvláštní kaskádový styl pro tisk. Pro jednoduché aplikace je to snadné, u složitějších stránek může být tiskový kaskádový styl docela pracný – musíme odstranit hlavičku, patičku i okraje, potlačit obrázky grafiky webu a nevhodné ovládací prvky (tlačítka, záložky…) a často pro zvýšení čitelnosti omezit paletu barev (a nebo lépe převést sestavu na černobílou).

V některých věcech nám CSS vychází vstříc – můžeme potlačit nebo naopak vyvolat odstránkování před a za HTML tagem. Jindy nás nechá CSS na holičkách – není možné doplnit do stránek na každý list vlastní hlavičku a patičku.

Vytvoření PDF pomocí HTML

Tisk pomocí kaskádových stylů má jednu významnou nevýhodu: je závislý na nainstalované prohlížeči. To znamená, že výstupní sestava se nemusí interpretovat vždy správně a ani nemáme zaručenou grafickou věrnost sestavy na všech počítačích. Jak na to? A co vytvářet sestavy stále v HTML, ale tisknout je do PDF na serveru? To řeší jak nekompaktibilitu prohlížečů, tak grafickou věrnost. Tiskovou sestavu můžeme vytvořit pomocí knihovny Flying Saurcer. Vstupem do knihovny je XHTML+CSS, výstupem může být PDF, SVG nebo bitmapový obrázek.

Přímé vytvoření PDF

Java je letitý jazyk, a proto v ní existují knihovny téměř na všechno, tedy i na přímé vytvoření PDF souboru z aplikace. Jednou knihovnou je PDFJet, která je bohužel komerční. Druhou je iText s duální licencí AGPL+komeční. Obě knihovny pracují na stejném principu – PDF soubor je vytvářen pomocí postupného zadání grafických primitiv. Sice tím získáme plnou kontrolu nad vytvářeným PDF, ale tento způsob je dosti pracný. Může být ovšem užitečný pro tisk náročnější grafiky.

Kancelářské balíky

Proč pro tisk nepoužít stejný software, jaký používají běžní uživatelé? Přímo se nabízí možnost použít pro tisk některý z kancelářských balíků. Může to být MS Office nebo Open Office. Řešením může být aplikace napsaná v nativním skriptovacím jazyce baliku, tedy v VBScriptu nebo v Open Office BASICu. Tato aplikaci si stáhne data ze serveru a sestavu sama vytvoří

Pro Open Office existuje i elegantnější řešení, a tím jsou knihovnu JodReports a JodConverter. Knihovna JodReports dokáže interpretovat FreeMarker značky v Open Office souboru, můžeme tedy sestavy vytvořit stejně snadno jako v HTML. Knihovna JodConverter dokáže konvertovat soubory z nativních formátů Open Office například do PDF.

Dokument MS Office můžeme vytvořit pomocí “pure Java” knihoven JXL nebo JExcelAPI.

Sázecí systémy

Graficky velmi kvalitní výstupy dostanete pomocí systémů, které jsou specializované na sazbu. Důležitou podmínkout je to, aby zdrojový formát sázecího systému byl textový soubor. Této podmínce vyhovují TeX a DocBook. TeX je legendární sázecí systém, pro který existuje implementace do Javy, a to knihovna JavaTeX. Zkušenosti s ní nemám, ale nejnovější verze 0.2 je 6 let stará… lepším řešením tedy bude spouštění TeXu jako samostatného procesu přes shell. Vhodné je nepřevádět výstup přes DVI, ale použít rovnou pdfTeX.

Jasper

JasperReports je javová knihovna zaměřená na vytváření výstupních sestav. Knihovna není jednoduchá, ale za to poskytuje několik možných výstupní formátů včetně PDF, je integrována do Spring Frameworku a existuje pro ni grafický návrhář sestav. Další informace o knihovně například zde.

Závěr

Článek vyjmenovává několik způsobů či principů vytváření reportů, které se liší navzájem jak grafickou kvalitou výstupu, tak i náročností na výkon. A samozřejmě i svými možnostmi… O výběru varianty většinou rozhodují zkušenosti s leta používanou technologií z předchozích projektů. To je samozřejmě správně, ale někdy je výsledkem ohýbání technologie k něčemu, k čemu se příliš nehodí.