Formatting Objects (FO) / XSL-FO

XSL-FO

XSL-FO

➪ Nachdem Sie die Grundstruktur von Formatting Objects ansatzweise kennen, können Sie zur XSL-Transformation des XML-Dokuments in das Zwischenformat "FO" übergehen; von dort aus übernimmt wieder der FO-Prozessor.

Schreiben Sie sich also ein XSL-Stylesheet, das die Informationen aus dem XML-Input-Dokument via XPath ausliest und deren Werte in das FO-Dokument überträgt.


<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0">
  <xsl:template match="/">
    <fo:root 
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <fo:layout-master-set>
        <fo:simple-page-master 
            margin-right="15mm" 
            margin-left="2cm" 
            margin-bottom="1cm"
            margin-top="2cm" 
            page-width="21cm" 
            page-height="297mm" 
            master-name="layout1">
          <fo:region-body/>
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence 
          master-reference="layout1">
        <fo:flow 
            flow-name="xsl-region-body">
          <xsl:for-each 
               select="/Orte/Ort/Mensch">
            <fo:block>
              <xsl:value-of select="vorname"/>
              <xsl:text> </xsl:text>
              <xsl:value-of select="name"/>
            </fo:block>
          </xsl:for-each>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>
</xsl:stylesheet>

Das Interessante an dem vorstehenden Code ist dieser Part, wo das XSL-Stylesheet via XPath die Informationen des XML-Input-Dokuments ausliest und in die FO-Zielstruktur mappt.


<xsl:for-each 
     select="/Orte/Ort/Mensch">
  <fo:block>
    <xsl:value-of select="vorname"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="name"/>
  </fo:block>
</xsl:for-each>

Speichern Sie dieses XSL-Stylesheet ab (gern in dasselbe Verzeichnis, wo schon die anderen FO-Dateien enthalten sind), beispielsweise unter dem Namen "xslfo_pdf_test1.xsl". Damit Sie mit der Verzeichnis-Navigation keine überflüssige Arbeit haben, kopieren Sie das XML-Dokument ebenfalls hierher.

Nun starten Sie den FO-Prozessor wie folgt (die Zeilen habe ich zur besseren Übersicht umbrochen, in der Eingabeaufforderung sollten Sie die Parameter in dieselbe Zeile schreiben):


C:\wg\fop-2.2>fop 
             -xsl xslfo_pdf_test1.xsl 
             -xml Ort_Elemente.xml 
             -pdf Ort_Elemente.pdf

Wenn auch das geklappt hat (Erfolgsmeldung: "INFORMATION: Rendered page #1."), dann können Sie die frisch ezeugte Datei "Ort_Elemente.pdf" per Doppelklick öffnen und das Ergebnis bestaunen.

pic/FO_xsl_erg1.png

Was ist bei diesem Kommandoaufruf passiert? Der XSL-Prozessor hat das XML-Input-Dokument via XSL-Stylesheet in eine FO-Zwischendatei konvertiert. Anschliessend übernahm der FO-Prozessor die Konvertierung der FO-Datei nach PDF.

Die FO-Zwischenkonvertierung bekommen Sie bei dem obigen Programmaufruf nicht zu sehen, Sie können sie sich aber in einer Datei sichtbar machen:


C:\wg\fop-2.2>fop 
             -xsl xslfo_pdf_test1.xsl 
             -xml Ort_Elemente.xml 
             -foout Ort_Elemente.fo

Wenn Sie diese Datei öffnen, erkennen Sie die FO-Struktur mit den Inhalten, die Sie via XSL aus dem XML-Quelldokument entnommen haben.


<fo:root 
    xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master 
        margin-right="15mm" 
        margin-left="2cm" 
        margin-bottom="1cm"
        margin-top="2cm" 
        page-width="21cm" 
        page-height="297mm" 
        master-name="layout1">
     <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="layout1">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hugo Holzflos</fo:block>
      <fo:block>Nicole Nixlos</fo:block>
      <fo:block>Stefan Sprachlos</fo:block>
      <fo:block>Stefan Sagblos</fo:block>
      <fo:block>Siggi Sorglos</fo:block>
      <fo:block>Heini Herzlos</fo:block>
      <fo:block>Rudi Rhodos</fo:block>
      <fo:block>Karl Kolos</fo:block>
      <fo:block>Simone Sinnlos</fo:block>
      <fo:block>Horst Hirnlos</fo:block>
      <fo:block>Werner Wertlos</fo:block>
      <fo:block>Ludwig Lustlos</fo:block>
      <fo:block>Willi Wasistlos</fo:block>
      <fo:block>Rita Ruhelos</fo:block>
      <fo:block>Susi Schlaflos</fo:block>
      <fo:block>Lotte Rielos</fo:block>
      <fo:block>Betty Bodenlos</fo:block>
      <fo:block>Martin Muehelos</fo:block>
      <fo:block>Liane Leinenlos</fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>

wg / 13. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/FO1_2.html