XSL-FO XSL-Formatting Objects http://www.w3.org/tr/xsl11/
Das Umfeld XSL-FO... bildet zusammen mit XSLT und XPath die XSL (extensible Stylesheet Language)... ist eine XML Applikation... definiert das visuelle Layout-Modell... wird mit Hilfe von einem Transformations-Tool (FOP, XEP,...) nach PDF, PostScript,... transformiert
Daten Formatierte Ausgabe Die XML Daten werden mit Hilfe eines Stylesheets nach XSL-FO übersetzt, und dann mit Hilfe eines FO- Transformations-Tools nach Postscript, PDF,... XML Daten XSL Style Sheet saxon XSL-FO Fop, XEP,... Display Print
Ein einfaches FO-Beispiel 1) 2) 3) 4) 5) <?xml version="1.0"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format"> <fo:layout-master-set> <fo:simple-page-master master-name="only" page-width="5.5cm" margin-left="1cm"> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="only"> <fo:flow flow-name="xsl-region-body"> <fo:block font-size="18pt"> A small <fo:external-graphic src="fo.jpg"/> example </fo:block> </fo:flow> </fo:page-sequence> </fo:root> Die PDF-Ausgabe von FOP
Die wichtigsten XSL-FO Elemente
XSL-FO Elemente Es gibt 56 XSL-FO Elemente fo:block, fo:block-container, fo:character, fo:externalgraphic, fo:flow, fo:footnote, fo:inline, fo:layoutmaster-set, fo:leader, fo:list-block, fo:list-item, fo:list-item-body, fo:list-item-label, fo:page-number, fo:page-sequence, fo:region-after, fo:region-before, fo:region-body, fo:root, fo:simple-page-master, fo:table-and-caption, fo:table, fo:table-body, fo:table-caption, fo:table-cell, fo:table-column, fo:table-footer, fo:table-header, fo:table-row,...
fo:root Das Root-Element eines XSL-FO Dokumentes heisst fo:root. Im Root-Knoten muss der fo Namespace deklariert werden. <?xml version="1.0"?> <fo:root xmlns:fo="http://www.w3.org/1999/xsl/format">...
Die Seiten Aufteilung Eine Seite ist aufgeteilt in die fünf Bereiche regionbefore, region-after, region-start, region-end und region-body. Diese sehen in der üblichen Lesart so aus: margin before start body end after margin
fo:layout-master master-setset <fo:layout-master-set> <fo:simple-page-master master-name="first" page-height="297mm" page-width="210mm" margin-top="15mm" margin-bottom="15mm" margin-left="20mm" margin-right ="15mm"> <fo:region-body margin-top="20mm"/> <fo:region-before extent="15mm" region-name="fbefore"/> </fo:simple-page-master>... </fo:layout-master-set>
Die Platz-Verteilung für f r die Regionen 10 cm 2 cm 1.5 cm 1.5 cm 1 cm 1 cm 1.5 cm 1 cm 1 cm 9 cm Beispiel Seite 6
Definieren von verschiedenen Seiten <fo:layout-master-set> <fo:simple-page-master... master-name="erste"> <fo:region-body margin-top="3cm" margin-bottom="2cm"/> <fo:region-before extent="3cm" region-name="first-before"/> <fo:region-after extent="1.5cm" region-name="first-after"/> </fo:simple-page-master> <fo:simple-page-master... master-name="restliche"> <fo:region-body margin-top="2.5cm" margin-bottom="2cm"/> <fo:region-before extent="2.5cm" region-name="rest-before"/> </fo:simple-page-master>...
Welcher Seitentyp soll wann verwendet werden fo:page-sequence-master <fo:page-sequence-master master-name="global"> <fo:repeatable-page-master-alternatives> <fo:conditional-page-master-reference master-reference="erste" page-position="first"/> <fo:conditional-page-master-reference master-reference="restliche" page-position="rest"/> </fo:repeatable-page-master-alternatives> </fo:page-sequence-master> </fo:layout-master-set> Beispiel Seite 7
fo:flow fo:flow enthält eine beliebige Anzahl von Blöcken mit Text, Tabellen, Listen und Bildern. Mit Hilfe des flow Elementes wird der Dokument-Inhalt (Fliesstext) begrenzt. <fo:flow flow-name="xsl-region-body"> <fo:block font-size="16pt"> This is the document content. This is the <fo:external-graphic src="cup.gif"/> document content. This is the... </fo:block> </fo:flow>
fo:static-content content In den Randbereichen befindet sich normalerweise wiederkehrende Information (Überschriften, Fussnoten, Seitenzahlen,...) <fo:static-content flow-name="xsl-region-after"> <fo:block text-align="end" font-size="10pt"> Seite <fo:page-number/> </fo:block> </fo:static-content> Seite 1
fo:block fo:block erzeugt einen Bereich (ein oder mehrere Zeilen lang. fo:block wird benutzt, um zusammengehörende Ausgabe-Elemente (ein Textabschnitt, eine Titelzeile, eine Tabelle,...) zu gruppieren. <fo:block font-size="36pt"> Chapter 1: Introduction </fo:block>
fo:block-container container Ein fo:block-container Element kann an beliebiger Stelle auf des Seite positioniert werden: <fo:block-container border-color="black" border-style="solid" border-width="1pt" height="1cm" width="4cm" padding="5pt" top="9.5cm" left="12cm" position="absolute" > <fo:block text-align="start" line-height="10pt" font-family="sans-serif" font-size="10pt"> Hier ist ein Text </fo:block> </fo:block-container> Hier ist ein Text
fo:inline Das Element fo:inline dient zum Formatieren eines Textabschnitts, ohne dass eine neue Zeile begonnen wird. <fo:block font-family="times Roman"> Hier ist <fo:inline font-style="italic"> ein </fo:inline> Abschnitt <fo:inline font-weight="bold"> mit </fo:inline> verschiedenen <fo:inline color="blue"> Formaten. </fo:inline> </fo:block>
fo:external-graphic Mit Hilfe von fo:external-graphic wird ein Bild in ein Dokument eingebettet. Mögliche Bildformate sind GIF und JPEG,... <fo:block> Look at this! <fo:external-graphic src="cup.jpg"/> </fo:block>
fo:list-block, fo:list-item item fo:list-block dient zum Erzeugen einer Liste. Es erwartet als Kinder (beliebig viele) fo:list-item Elemente. <fo:list-block> <fo:list-item> <fo:list-item-label><fo:block> a) </fo:block> </fo:list-item-label> <fo:list-item-body start-indent="body-start()"> <fo:block>dies ist das erste Listenelement.</fo:block> </fo:list-item-body> </fo:list-item>... </fo:list-block>
Tabellen Zum Erzeugen von Tabellen gibt es die Elemente fo:table, fo:table-body, fo:table-cell, fo:tablecolumn, fo:table-footer, fo:table-header, fo:table-row fo:table enthält (optional) einen table-header und/oder table-footer sowie einen table-body. Der table-body besteht dann aus table-row Elementen, welche wiederum aus table-cell Knoten zusammengesetzt sind. Beispiel Seite 11
Erzeugen von Tabellen <fo:table border="1pt solid black" background-color="#eeeeee"> <fo:table-column column-width="20mm"/> <fo:table-column/> <fo:table-header font-weight="bold" background-color="#cccccc"> <fo:table-row> <fo:table-cell border="1pt solid black" padding="3pt"> <fo:block> HTML </fo:block> </fo:table-cell>... </fo:table-row> </fo:table-header> <fo:table-body>... </fo:table-body> </fo:table>
Die wichtigsten Attribute Properties
Attribute sind Properties Die Attribute der FO-Elemente sind Formatierungs- Anweisungen. Sie bestimmen das Aussehen des Inhalts. Es gibt mehr als 200 Format Properties (Attribute), welche oft in verschiedensten Elementen angegeben werden können. Properties werden von aussen nach innen abgearbeitet. Bei sich widersprechenden Angaben, überschreibt die lokale Angabe die globale. Eine Property, welche an verschiedenen Orten benutzt werden kann, hat immer dieselbe Bedeutung.
Character Properties Alle XSL-FO Elemente, welche Text enthalten können (fo:block, fo:inline,...), erlauben Attribute für das Setzen von Character Properties(color, font-size, font-family, text-decoration,...). <fo:block font-family="helvetica" font-size="12pt"> Hier ist ein <fo:inline text-decoration="underline"> wichtiger </fo:inline> <fo:inline color="red" font-weight="900"> Text </fo:inline> </fo:block>
Character Property: Farbe Die color-property setzt die Schriftfarbe: <fo:inline color="green"> Text </fo:inline> Wie in CSS gibt es 16 vordefinierte Farben: white Weitere Farben können als hexadezimale rgb-trippel definiert werden: #RRGGBB.
Character Property: Font Die Property font-family definiert den zu benutzenden Font: <fo:inline font-family="times Roman" > Times Roman </fo:inline> Mögliche Fonts sind sans-serif, serif, Helvetica, Times Roman, Courier, Symbol, ZapfDingbats,...
Character Property: Schriftgrösse Die Property font-size definiert die zu benutzende Schriftgrösse: <fo:inline font-family="helvetica" font-size="24pt"> ein Text in 24 Punkt Schrift </fo:inline>
Character Property: Style Der Style des Fonts wird definiert durch die Property font-style <fo:block font-family="times Roman" font-style="italic"> Times Roman italic </fo:block> Es gibt die Styles normal, italic und oblique
Character Property: Schrift-Dicke Die Dicke der Schrift wird definiert durch die Property font-weight: <fo:block font-family="times Roman" font-weight="bold"> Hier ist ein bold Text </fo:block> <fo:block font-family="times Roman" font-weight="normal"> Hier ist ein normaler Text </fo:block>
Character Property: Dekorationen text-decoration="underline" unterstrichen text-decoration="overline" überstrichen text-decoration="line-through" durchgestrichen text-shadow="gray" Schattenschrift text-transform="capitalize" text-transform="uppercase" text-transform="lowercase" Alle Ersten Buchstaben GROSSSCHRIFT kleinschrift
Sentence Properties Sentence Properties bestimmen den Platz zwischen den einzelnen Buchstaben (letter-spacing), zwischen einzelnen Wörtern im Text (word-spacing) und zwischen den einzelnen Linien im Text (line-height, text-depth, text-altitude,...), die Ausrichtung des Texts (text-align),...
Sentence Property: Zeilenabstand Der Zeilenabstand im Text kann kontrolliert werden durch die Properties line-height, text-depth und text-altitude. <fo:block font-size="10pt" line-height="16pt"...> Hier ist ein Text,... </fo:block>
Sentence Property: Text Ausrichtung Ob der Text linksbündig, rechtsbündig, zentriert oder im Blocksatz gesetzt werden soll, wird durch die Property text-align gesetzt. Diese kann die folgenden Werte annehmen: start oder left linksbündig center zentriert end oder right rechtsbündig justify Blocksatz
Definieren von Attribut-Listen Zum Definieren verschiedener Styles für verschiedene Textblöcke <xsl:attribute-set name="text-style"> <xsl:attribute name="font-family">serif</xsl:attribute> <xsl:attribute name="font-size">12pt</xsl:attribute> <xsl:attribute name="font-weight">normal</xsl:attribute>... </xsl:attribute-set> Werden verwendet durch <fo:block xsl:use-attribute-sets="text-style">
Das Rahmenprogramm Das Rahmenprogramm erzeugt eine (fast) leere A4 Seite. In diese sollen dann die Daten aus dem XML- Dokument aufgelistet werden.
Als Tabelle ausgeben Nun sollen die XML-Daten in eine Tabelle abgefüllt werden. Schreiben Sie dazu das Stylesheet der ersten Aufgabe um, so dass die folgende Tabelle erstellt wird.