Transformace do FO pomoc XSLT stylu

Příklad 1. Zdrojový XML dokument – vizitka.xml

<?xml version="1.0" encoding="UTF-8"?>
<osoba>
  <jmeno>Jirka Kosek</jmeno>
  <email>jirka@kosek.cz</email>
  <foto>kosek.jpg</foto>
  <poznamka>Je to úplný <dulezite>magor do
    XML</dulezite>. Už mu z toho asi hráblo, pořád brblá
    něco o XSLT a XML schématech.  Ale jinak je
    <dulezite>převážně neškodný</dulezite>.  Napíšeme ještě
    něco, aby textu bylo více. Ještě více než více.  Až ho
    bude úplně nejvíce. Více než nejvíce. Pořád málo.  Tak
    ještě přidáme. Ať má dost. A to by bylo,
    abysedlouhéslovonerozdělilozvláštěkdyž
    hoprotáhnemeopravduhodně.</poznamka>
</osoba>

Příklad 2. XSLT styl pro generování FO – vizitka.xsl

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version="1.0">

<xsl:template match="/">
  <fo:root>
    <fo:layout-master-set>
      <fo:simple-page-master margin-bottom="0.5cm" 
                             margin-left="0.5cm" 
                             margin-right="0.5cm" 
                             margin-top="0.5cm"
                             page-width="9cm" 
                             page-height="5cm"
                             master-name="my-master">
        <fo:region-body/>
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="my-master">
      <fo:flow flow-name="xsl-region-body" 
               font-family="Times New Roman"
               font-size="8pt">
        <fo:block>
          <fo:float float="right">
            <fo:block margin-left="6pt" margin-bottom="2pt">
              <fo:external-graphic src="url({osoba/foto})" 
                                   content-width="2cm"/>
            </fo:block>
          </fo:float>
          <xsl:apply-templates/>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

<xsl:template match="jmeno">
  <fo:block font-family="Helvetica"
            font-size="200%"
            font-weight="bold">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="email">
  <fo:block>
    e-mail:
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="foto">
  <!-- Již jsme zpracovali, teď ignorujeme -->
</xsl:template>

<xsl:template match="poznamka">
  <fo:block space-before="6pt" font-style="italic" 
            text-align="justify" language="cs" 
            hyphenate="true">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="dulezite">
  <fo:inline color="red" font-weight="bold">
    <xsl:apply-templates/>
  </fo:inline>
</xsl:template>

</xsl:stylesheet>

  • spuštění převodu z XML do PDF přes FO

    saxon -o vizitka.fo vizitka.xml vizitka.xsl
    xep -fo vizitka.fo
  • nebo v jednom kroku

    xep -xml vizitka.xml -xsl vizitka.xsl