Dvě oddělené fáze
XSLT vytváří strom FO; formatter řeší stránkování, fonty a výstup. XSL-FO není jazyk dotazů ani alternativní syntaxe CSS. Verze 1.1 pochází z roku 2006 a používá se zejména v zavedených dokumentových systémech.
Jedna stránka
Ulož celý dokument jako ukazka.fo. Simple-page-master určí papír a oblast textu, page-sequence použije tento master a flow naplní region-body.
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm" margin="20mm"><fo:region-body/></fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:flow flow-name="xsl-region-body"><fo:block font-size="14pt">Ahoj XML</fo:block></fo:flow>
</fo:page-sequence>
</fo:root> Jak vytvořit PDF
Apache FOP zpracuje FO, například příkazem fop -fo ukazka.fo -pdf ukazka.pdf. XML nástroj na tomto webu ověří syntaxi FO, ale PDF nevyrenderuje. Podporu jednotlivých vlastností ověř v dokumentaci konkrétního formatteru.
Časté problémy
Chybějící české znaky obvykle řeší font a jeho vložení do PDF. Přetečení tabulky řeš šířkami a zalamováním, ne změnou XML kódování. Výstup vizuálně zkontroluj i s dlouhými texty, prázdnými položkami a více stránkami.
XML → XSLT → FO → PDF: propojený příklad
<zprava><nadpis>Výsledek validace</nadpis><text>Dokument prošel kontrolou.</text></zprava> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.0">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="/zprava"><fo:root>
<fo:layout-master-set><fo:simple-page-master master-name="a4" page-height="297mm" page-width="210mm" margin="20mm"><fo:region-body/></fo:simple-page-master></fo:layout-master-set>
<fo:page-sequence master-reference="a4"><fo:flow flow-name="xsl-region-body">
<fo:block font-size="16pt" space-after="8mm"><xsl:value-of select="nadpis"/></fo:block>
<fo:block><xsl:value-of select="text"/></fo:block>
</fo:flow></fo:page-sequence>
</fo:root></xsl:template>
</xsl:stylesheet> xsltproc zprava.xsl zprava.xml > zprava.fo
fop -fo zprava.fo -pdf zprava.pdf První krok má vytvořit FO s nadpisem a textem; druhý stránku A4 s okrajem 20 mm. Master-name a master-reference musejí souhlasit, stejně jako flow-name a region. Otevři PDF a ověř české znaky; správné UTF-8 ve FO nezaručuje dostupnost fontu ve formatteru.
Pro tabulky a více stránek přidej fo:table, rozměry sloupců a pravidla přelomu. Hlavičky/patičky používají statický obsah a příslušné regions, nikoli připojení textu za poslední odstavec. Podporu konkrétní vlastnosti ověř v Apache FOP dokumentaci. XML validátor ověří syntax FO, ne to, zda se obsah vejde na stránku.
Jak poznat, ve kterém kroku je chyba
- Pokud xsltproc hlásí chybu, zkontroluj vstupní XML, šablonu a výrazy XPath.
- Pokud vznikne prázdné FO, ověř, zda template opravdu odpovídá kořeni dokumentu. Výchozí jmenný prostor vstupu může vyžadovat prefix ve výrazu.
- Pokud FOP odmítne FO, zkontroluj jeho strukturu, master-reference a podporované vlastnosti.
- Pokud PDF vznikne, ale text přetéká nebo chybí znaky, řeš sazbu a fonty. Správná XML syntaxe není potvrzení správného vzhledu.
Mezivýsledek zprava.fo si při ladění ponech. Oddělí chybu transformace od chyby sazby. Příkazy a hlášení formatteru dokumentuje Apache FOP.