Proč XML nejde „jen tak“ vytisknout
XML obsahuje data, ne vzhled. Faktura v XML má číslo, dodavatele, položky a částky, ale nikde v ní není napsáno, jakým písmem a kam na stránku se mají vypsat. Aby z ní vzniklo PDF, potřebuje program vědět, jak data zobrazit. Nabízí se tři cesty:
- otevřít soubor v programu, který daný formát zná (nejjednodušší),
- použít verzi faktury, která už je v PDF (často přijde spolu s XML),
- vytvořit si vlastní vzhled pomocí šablony XSLT a vytisknout ho z prohlížeče.
Cesta 1: program, který formát zná
Elektronické faktury v Česku přicházejí nejčastěji ve formátu ISDOC
(přípona .isdoc nebo .isdocx). Tyto soubory umí načíst běžné účetní a
fakturační programy a existují i samostatné prohlížeče ISDOC. Program fakturu zobrazí jako
doklad a obvykle ji rovnou umí vytisknout nebo uložit do PDF.
U jiných formátů (exporty z e-shopů, datové výstupy úřadů) hledej v dokumentaci aplikace, která soubor vytvořila — často nabízí i jeho zobrazení nebo převod.
Cesta 2: PDF s vloženým XML
Standard ISDOC počítá i s variantou, kdy je XML faktura vložená přímo do PDF souboru (formát PDF/A-3). Takové PDF otevřeš v libovolném prohlížeči PDF jako běžný doklad a účetní program si z něj zároveň přečte strojová data. Pokud dodavatel posílá PDF, nemusíš XML převádět vůbec.
Cesta 3: šablona XSLT a tisk z prohlížeče
Pokud program k dispozici není, můžeš XML převést na HTML stránku pomocí XSLT a tu vytisknout do PDF. Jednoduchá faktura:
<faktura>
<cislo>FV2026-042</cislo>
<dodavatel>Tiskárna Novák s.r.o.</dodavatel>
<polozka>
<nazev>Tisk letáků A5</nazev>
<cena>10000.00</cena>
</polozka>
<celkem mena="CZK">12100.00</celkem>
</faktura> a šablona, která z ní udělá čitelnou stránku:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/faktura">
<html>
<body style="font-family: sans-serif">
<h1>Faktura <xsl:value-of select="cislo"/></h1>
<p>Dodavatel: <xsl:value-of select="dodavatel"/></p>
<table border="1" cellpadding="6">
<xsl:for-each select="polozka">
<tr>
<td><xsl:value-of select="nazev"/></td>
<td><xsl:value-of select="cena"/></td>
</tr>
</xsl:for-each>
</table>
<p><strong>Celkem: <xsl:value-of select="celkem"/>
<xsl:text> </xsl:text><xsl:value-of select="celkem/@mena"/></strong></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet> - Otevři XML nástroje, vlož fakturu a na záložce XSLT vlož šablonu.
- Spusť transformaci a tlačítkem Stáhnout výstup ulož výsledek — HTML se uloží jako
output.html. - Otevři HTML v prohlížeči a dej Tisk (Ctrl+P, na Macu ⌘+P).
- Jako tiskárnu zvol Uložit jako PDF.
Stejnou šablonu pak můžeš použít na každou další fakturu ve stejném formátu. Z příkazové řádky
totéž udělá xsltproc faktura.xsl faktura.xml > faktura.html.
Pro profesionální výstup se používá XSL-FO — varianta XSLT, která popisuje tiskovou stránku (okraje, zalomení, záhlaví). PDF z něj vyrábějí nástroje jako Apache FOP. Pro občasný tisk ale stačí postup přes HTML.
Nejrychlejší nouzové řešení
Když potřebuješ obsah jen rychle zkontrolovat, otevři XML v prohlížeči (zobrazí strom) nebo ho vlož do formátovače, který ho přehledně odsadí. Pak lze stránku vytisknout do PDF stejně jako v kroku 4 výše. Výsledek nebude vypadat jako faktura, ale všechny údaje v něm budou. Podrobnosti o otevírání XML souborů najdeš v návodu Jak otevřít XML soubor.