E-Book Startseite Karteikarten-Programm
0

Das Wurzelelement

Das Wurzelelement ist ein wenig anderes wie bei XSLT. Bei XSLT haben wir immer xsl:stylesheet benutzt. Dabei wurde der Namensraum xsl gewählt. Bei XSL-FO verwenden wir als Wurzelelement, den Namensraum fo. Das Wurzelelement heißt somit fo:root. Der Link zum Namensraum ist natürlich auch ein anderer. Das versions-Attribut wird in diesem Element nicht verwendet. Der Rest erklärt sich von selbst:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
</fo:root>

Wichtig: Meistens wird sowohl der XSLT, als auch der XSL-FO-Namensraum innerhalb des xsl:stylesheet Elements gesetzt, denn für eine dynamische Druck-Publiaktion sollen die Daten von der XML-Datei ausgelesen werden und dass geht nur mit XSLT.


Layout erstellen

Layout bei XSL-FO Direkt unterhalb von dem root-Element, als erstes Kinderelement gibt es fo:layot-master-set. Dieses und alle untergeordneten Elemente geben seitenspezifische Informationen an um das Layout-Grundgerüst erstellen zu können und die einzelnen Inhalte später mit Informationen füllen. fo:layout-master-set besitzt 2 Kinderelemente: fo:simple-page-master und fo:page-sequence-master. Mit fo:simple-page-master wird eine Seite definiert. Dabei sind viele Attribute notwendig: master-name (Name über den die Seitenvorlage später aufgerufen wird), page-height (Höhe der Seite), page-width (Breite der Seite), margin-top (Rand oben), margin-bottom (Rand unten), margin-left (Rand links), margin-right (Rand rechts), reference-orientation (Ausrichtung der Seite - möglichen Angaben: 0, 90, 180, 270, -90, -180, -270) und writing-mode (Schreibrichtung - mögliche Angaben: lr-tb (leftright-topbottom - Standard!), rl-tb (rightleft-topbottom) oder tb-rl (topbottom-rightleft)). Die Attribute master-name, page-height und page-width sind Pflichtattribute. Als Maßeinheiten dürfen alle bereits bekannten Masseinheiten verwendet werden, außer %. Sie können also auswählen zwischen mm, cm, in, pc, pt, px oder em. Das Element fo:simple-page-master darf mehrmals vorkommen, so kann man mehrere Seitenlayouts erstellen. Als Kinderelement von fo:simple-page-master gibt es 5 Elemente, welche sich an die 5 Druckbereiche anlehnen: region-body (Inhaltsbereich), region-start (Kopfbereich), region-end (Fußbereich), region-left (linker Teil) und region-right (rechter Teil). Bei diesen Elementen handelt es sich um einteilige Elemente, deshalb werden Sie am Schluss mit /> gekennzeichnet. Die region-Elemente haben ebenfalls noch ein paar Attribute: region-name (gibt den Namen an), margin-*** (Angabe des Rands mit margin-top, margin-bottom, margin-left und margin-right), reference-orientation (Ausrichtung der Seite - möglichen Angaben: 0, 90, 180, 270, -90, -180, -270) und writing-mode (Schreibrichtung - mögliche Angaben: lr-tb (leftright-topbottom - Standard!), rl-tb (rightleft-topbottom) oder tb-rl (topbottom-rightleft)). Bei region-body wird das Attribut region-name meist nicht angegeben und so das Element später mit dem Name xsl-region-body aufgerufen. Um die Größe der Regionen festzulegen gibt es noch das Attribut extent. extent darf bei regon-body nicht verwendet werden, da region-body immer der Teil ist, der am Schluss übrig bleibt und seine Größe durch Ränder und die anderen Regionen bekommt. Für die region-Elemente können noch viele mehr Attribute benutzt werden (z. B. background-color). Manchmal kann es vorkommen, dass der Kopfbereich und Fussbereich eine Ebene nach hintern rutscht und so region-start und region-end sich eine Ebene weiter vorne befindet, ob wohl man dies nicht möchte. Dazu muss im region-before- und im region-after-Element das Attribut precedence mit dem Wert true notiert werden. Um den eigentlichen Aufbau der Druckbereiche und der Ränder zu verstehen, betrachten Sie bitte das Bild. Als weiteres Kinderelement von fo:layout-master-set gibt es noch das Element fo:page-sequence-master. Das Element besitzt weitere Unterelemente: fo:single-page-master-reference, fo:repeatable-page-master-reference und fo:repeatable-page-master-alternative (besitzt ein weiteres Unterelement mit dem Namen fo:conditional-page-master-reference). Mit diesen Elementen können die sogenannten Seitenfolgen-Vorlagen definiert werden. In der Praxis ist dies nicht wirklich notwendig, deshalb gibt es dazu auf unserer Webseite keine weiteren Informationen. Beratungen (Support per Beratungs-Formular) oder Foren-Anfragen werden selbstverständlich angenommen bzw. beantwortet. Hier ein einfaches aber vollständiges Beispiel:

<fo:layout-master-set>
  <fo:simple-master-set master-name="seite" page-height="29.7cm" page-width="21cm">
    <fo:region-before region-name="kopf" extent="5cm" />
    <fo:region-body />
    <fo:region-after region-name="fuss" extent="2cm" />
  </fo:simple-master-set>
</fo:layout-master-set>

Farbdeklaration und Farbprofile

Als weiteres Kinderelement von fo:root gibt es noch das optionale Element declarations-Element, welches nur einmal vorkommen darf. Unterhalb dieses Elements können eine oder mehrere einteilige Elemente namens fo:color-profile verwendet werden. Das color-profile-Element hat 2 Attribute: src (Quelle der Farbprofildaten) und color-profile-name (Farbprofil-Name). Im Internet wird standardmäßig das Farbprofil RGB verwendet, welches für die meisten Anwendungen ausreichend ist. Das fo:declarations-Element und die fo:color-profile-Elemente werden also dazu verwendet um ein oder mehrere Farbprofil(e) in Ihr Dokument zu integrieren. Für die normalen Anwendungen ist dies nicht notwendig, deshalb werden auf die Farbprofile nicht weiter eingegangen.


Seitenteile mit Inhalt füllen

Um eine Seite mit Inhalt zu füllen, benötigt man das Element fo:page-sequence, welches als 3. Kinderelement von fo:root verwendet wird. page-sequence darf mehrmals vorkommen, denn für jedes fo:simple-page-master-Element wird auch ein fo:page-sequence benötigt. Das page-sequence-Element besitzt das Attribut master-reference. Dort muss der Name angegeben werden, der im simple-page-master-Element im Attribut master-name angegeben wurde. Auch fo:page-sequence hat nochmals Kinderelemente. Als erstes kann das optionale Element fo:title notiert werden um einen Namen zu vergeben. Das Element wird in der Regel jedoch nicht verwendet. Ein weiteres Kinderelement ist fo:static-content. Dieses Element kann je nachdem ob Sie region-beofre, region-after, region-start und oder region-end verwenden 0-mal bis 4-mal vorkommen. Als Attribut dieses Elements wird flow-name verwendet. Der Wert von flow-name entspricht dem Wert des Attributs region-name in den region-***-Elementen. Als letztes Kinderelement von fo:page-sequence gibt es noch fo:flow. In fo:flow wird der laufende Text (von region-body) angegeben. Auch hier gibt es das Attribut flow-name, welches von dem Wert des Attributs region-name im fo:region-body-Element abhängig ist. Normalerweise wird im fo:region-body-Element kein Name angegeben. Wenn dies der Fall ist wird der Standardname xsl-region-body verwendet. Wichtig zu wissen ist, dass innerhalb der page-sequence-Elemente die beschriebene Reihenfolge verwendet werden muss: evtl. 1-mal fo:title - 0-mal bis 4-mal fo:static-content - 1-mal fo:flow. Hier ein kleiner ergänzender Code zum Layout-Erstellungs-Code. Die drei Punkte im Code bedeuten, dass hier Inhalt kommen müsste!

<fo:page-sequence master-reference="seite">
  <fo:static-content flow-name="kopf">
    ...
  </fo:static-content>
  <fo:static-content flow-name="fuss">
    ...
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">
    ...
  </fo:flow>
</fo:page-sequence>

Der komplette Aufbau

Nun haben Sie die verschieden Möglichkeiten des XSL-FO-Seitenaufbau und XSL-FO-Layouts kennengelernt. Nun wollen wir aber am Anfang ein Code zum Seitenaufbau und Layout mit Ihnen zusammen erstellen. Dieser Grundaufbau wird sich in den nachfolgenden Codes nicht mehr ändern. Selbstverständlich werden in den Beispielen am Schluss andere Seitenaufbauten verwendet. Der Vorteil dieses Seitenaufbaus ist, dass die verschiedeneren region-Elemente mit dem background-color-Attribut farbig hervorgehoben worden sind, sodass der Unterschied zwischen den Bereichen leicht erkennbar ist. Noch kurz ein paar weitere Informationen zum Code: Das XML-Dokument besitzt nur ein Element namens wurzel. Der Inhalt des Elements wird später in der XSL-Datei aufgerufen. Der Normalfall ist es, dass nicht nur XSL-FO sondern zusätzlich noch XSLT verwendet wird. Dies ist auch in diesem Einstiegsbeispiel der Fall. Der Inhalt des XML-Elements wurzel wird per xsl:value-of ausgegeben. Im Dokument wird als erstes die XML-Deklaration vorgenommen, es folgt dann das Element xsl:stylesheet. Dieses Element enthält zwei Namensraumangaben: xsl und fo. Direkt darunter kommt xsl:template. Das match-Attribut verweist in diesem Fall auf das Root-Element. Nun folgt das Element fo:root, welches ebenfalls nochmals die Namensraumangabe hat, jedoch nur die des fo-Teils. Im fo:simple-page-master-Element wird eine DIN-A4-Seite erstellt, die bestimmte Ränder und Regionen besitzt. Die Elemente static-content und flow müssen Inhalt besitzen, darum wurden in allen static-content-Elementen leere block-Elemente eingesetzt (dazu später mehr). Innerhalb von flow wurde auch ein block-Element eingesetzt. Dieses hat jedoch noch das Unterelement xsl:value-of.

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<?xml-stylesheet href="foaufbau.xsl" type="text/xsl"?>
 
<wurzel>Test<wurzel>
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
  <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
      <fo:simple-page-master master-name="seite" page-height="29.7cm" page-width="21cm" margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm">
        <fo:region-body margin-top="2.5cm" margin-bottom="2cm" margin-left="5.5cm" margin-right="1.5cm" />
        <fo:region-before region-name="top" extent="2cm" precedence="true" background-color="#FF0000" />
        <fo:region-after region-name="bottom" extent="1.5cm" precedence="true" background-color="#00FFFF" />
        <fo:region-start region-name="left" extent="5cm" background-color="#FFFF00" />
        <fo:region-end region-name="right" extent="1cm" background-color="#0000FF" />
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="seite">
      <fo:static-content flow-name="top">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="left">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="right">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="bottom">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <fo:block><xsl:value-of select="." /></fo:block>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>
</xsl:stylesheet>
Anzeigebeispiel
Anzeigebeispiel (XML-Datei)



Anzeigebeispiel
Anzeigebeispiel (PDF-Datei)



Design:
 


Logo
Benjamin Jung
Krummstr. 9/3
73054 Eislingen

E-Mail: info@homepage-webhilfe.de
Webseite: www.homepage-webhilfe.de