XSL-FO

Transcription

XSL-FO
XML
extensible Markup Language
www.w3.org/XML
Dr. Beatrice Amrhein
2
Inhaltsverzeichnis
1 XML Grundlagen..............................................................................................................................................5
1.1 Die wichtigsten Punkte............................................................................................................................5
1.2 XML Sprachen und Anwendungen..........................................................................................................7
1.3 Der Aufbau eines XML Dokuments.........................................................................................................7
1.4 Elemente.................................................................................................................................................8
1.5 Attribute................................................................................................................................................10
1.6 Zeichen- und Entity-Referenzen............................................................................................................11
1.7 Kommentare und Verarbeitungsanweisungen.....................................................................................11
1.8 Die XML Deklaration..............................................................................................................................11
1.9 XML Knotentypen und Nachfolger........................................................................................................12
1.10 Wohlgeformtheit: Zusammenfassung.................................................................................................12
2 Namespaces..................................................................................................................................................13
2.1 Wozu dienen Namespaces?..................................................................................................................13
2.2 Definition eines Namespaces................................................................................................................14
2.3 Qualifizierte Element-Namen...............................................................................................................15
3 XSD: XML Schema Definition.........................................................................................................................18
3.1 Deklarationen <--> Definitionen...........................................................................................................20
3.2 Deklaration von einfachen Typen..........................................................................................................22
3.3 Vordefinierte primitive Schema Typen.................................................................................................23
3.4 Attribut Deklarationen..........................................................................................................................25
3.5 Komplexe Schema Typen......................................................................................................................26
3.6 Spezielle Schema Elemente...................................................................................................................29
3.7 Schlüssel................................................................................................................................................32
4 SAX: Simple Application Interface for XML...................................................................................................38
4.1 Was ist SAX?..........................................................................................................................................38
4.2 Wofür ist SAX geeignet?........................................................................................................................38
4.3 Wie funktioniert SAX?...........................................................................................................................38
4.4 Übersicht über das SAX API...................................................................................................................39
4.5 Implementation des Default Handlers..................................................................................................40
4.6 Fehlerbehandlung: ErrorHandler..........................................................................................................42
Ein SAX Beispiel...........................................................................................................................................43
5 DOM: Das Document Object Model.............................................................................................................45
Was ist DOM?..............................................................................................................................................45
Die DOM Node Typen.................................................................................................................................45
5.1 Die org.w3c.dom Java Interfaces...........................................................................................................46
5.2 Benutzen des DOM Parsers...................................................................................................................48
6 StAX: Streaming API for XML.........................................................................................................................50
6.1 Was ist StAX?.........................................................................................................................................50
7 JAXB: Java Architecture for XML Binding.......................................................................................................54
7.1 Die JAXB Architektur.............................................................................................................................54
7.2 Das Binding............................................................................................................................................55
7.3 Übersetzung verschiedener Basis-Datentypen.....................................................................................56
7.4 Erzeugen der Java Klassen.....................................................................................................................57
7.5 Einlesen der XML Daten........................................................................................................................58
7.6 Schreiben der Daten in ein XML File.....................................................................................................58
7.7 Anpassen der generierten Java Klassen und Member Variablen..........................................................59
7.8 Externe Binding-Deklaration.................................................................................................................60
7.9 Erzeugen von Schematas.......................................................................................................................61
7.10 Schreiben von XML Daten ohne ObjectFactory..................................................................................63
8 Die Transformations-Sprache XSLT................................................................................................................68
3
8.1 Wie funktioniert XSLT?..........................................................................................................................68
8.2 Der Aufbau eines Stylesheets: Templates.............................................................................................70
8.3 Die wichtigsten XSLT Befehle.................................................................................................................72
9 Grundlegendes zu XSLT.................................................................................................................................81
9.1 Default Template Regeln.......................................................................................................................81
9.2 Template Driven vs. Data Driven Stylesheets........................................................................................83
10 XPath: Die XSL Adressierungssprache.........................................................................................................84
10.1 Die XPath Syntax..................................................................................................................................84
10.2 Adressierungs-Achsen.........................................................................................................................88
10.3 Die wichtigsten XPath Funktionen......................................................................................................89
11 XSL-FO Einführung.......................................................................................................................................94
11.2 Die wichtigsten FO Elemente..............................................................................................................95
11.3 Die wichtigsten Attribute..................................................................................................................104
4
11 XSL-FO Einführung
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
Dabei werden normalerweise keine FO-Dokumente direkt geschrieben, sondern die XML Daten werden mit
Hilfe eines Stylesheets nach XSL-FO übersetzt, und dann mit Hilfe eines FO-Transformations-Tools nach
Postscript, PDF, ... transformiert.
11.1.1
Ein einfaches Beispiel
<?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>
11.2 Die wichtigsten FO Elemente
Es gibt 56 XSL-FO Elemente
fo:block, fo:block-container, fo:character, fo:external-graphic, fo:flow,
fo:footnote, fo:inline, fo:layout-master-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:tablebody, fo:table-caption, fo:table-cell, fo:table-column, fo:table-footer,
fo:table-header, fo:table-row, . . .
Die Elemente von XSL-FO definieren die Struktur oder den Aufbau (Unterteilung in Abschnitte, Blöcke, TextFelder, Bilder, ...) des Ausgabe- Dokuments. Die Attribute definieren das (lokale) Aussehen.
Das Root Element
XSL-FO Dokumente sind XML Dokumente. Darum beginnen FO-Dokumente mit der XML-Deklaration:
<?xml version="1.0"?>
XSL-FO Dokumente haben als Root-Element einen fo:root Knoten, in welchem der fo Namespace deklariert
werden muss: xmlns:fo="http://www.w3.org/1999/XSL/Format"
95
Das Layout einer Seite
Eine Seite ist aufgeteilt in die fünf Bereiche region-before, region-after, region-start, region-end und regionbody. Diese sehen in der üblichen Lesart (von links nach rechts, von oben nach unten) wie folgt aus:
Normalerweise sind die Randbereiche (region-before, region-after, ...) reserviert für statische
(wiederkehrende) Ausgaben (Logos, Adresse, Seitenzahl, ...), während der eigentliche Inhalt der Seite im
Zentralbereich (body) ausgegeben wird.
Die einzelnen Bereiche können dann weiter aufgeteilt werden in Blöcke (zum Beispiel durch fo:block,
fo:table, fo:list-block, ...).
Das Layout Master Set
Das layout-master-set enthält alle Seiten-Vorlagen für die verschiedenen Seiten-Arten wie Titelseiten, linke
und rechte Seiten, ...
<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:simple-page-master
master-name="odd"
. . .
</...>
</fo:layout-master-set>
Die einzelnen Seiten-Vorlagen sind dann verpackt in verschiedene page-master Elemente.
Das layout-master-set Element hat keine Attribute, ist immer ein Kind-Knoten vom root-Knoten und hat als
(einzig mögliche) Kinder einen (oder mehrere) simple-page-master oder page-sequence-master Knoten.
Mit dem simple-page-master Knoten werden die Seitenränder (margin) und ev. die Papiergrösse festgelegt.
Weiter wird definiert, in wie viele Bereiche (regions) die Seite aufgeteilt werden soll (region-body, regionbefore, region-after, ...) . Die normalen A4 Seitengrösse ist page-height="29.7cm" und page-width="21cm"
Pro Seitentyp (Titelseite, Index-Seite, Inhaltsverzeichnis, ...) wird je eine separate Seiten-Vorlage definiert.
96
Die Platz-Verteilung für die Regionen
<fo:root xmlns:fo= "http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple" page-height="10cm"
page-width="9cm" margin-top="1.5cm" margin-bottom="1.5cm"
margin-left="1cm" margin-right="1cm">
<fo:region-body margin-top="2cm" margin-bottom="1.5cm"
background-color="#EEEEEE" />
<fo:region-before extent="1cm" background-color="yellow"/>
<fo:region-after extent="1cm" background-color="yellow"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simple">
<fo:static-content flow-name="xsl-region-before">
<fo:block font-size="12pt">
Hier ist der Platz für das Region- Before
</fo:block>
</fo:static-content>
<fo:static-content flow-name="xsl-region-after" >
<fo:block font-size="12pt">
Region-After ist oberhalb vom unteren Rand
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="20pt" padding="0.5cm">
Region Body Region Body Region Body ...
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
97
Definieren und Benutzen von verschieden Seiten-Typen
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<!-- Definition der ersten Seite-->
<fo:simple-page-master master-name="erste" margin-left="5cm" margin-right="5cm“
margin-top="2cm" margin-bottom="3cm">
<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>
<!-- Definition der restlichen Seiten-->
<fo:simple-page-master margin-bottom="3cm" margin-left="5cm" margin-right="5cm“
margin-top="5cm" master-name="restliche">
<fo:region-body margin-top="2.5cm" margin-bottom="2cm"/>
<fo:region-before extent="2.5cm" region-name="rest-before"/>
<fo:region-after extent="1.5cm" region-name="rest-after"/>
</fo:simple-page-master>
<!-- Wann soll welche Definition benutzt werden -->
<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"/>
<!-- default -->
<fo:conditional-page-master-reference master-reference="restliche"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<!-- Inhalt der verschiedenen Seiten -->
<fo:page-sequence initial-page-number="1" master-reference="global">
<fo:static-content flow-name="first-before">
<fo:block> Hier ist der Titel der ersten Seite </fo:block>
</fo:static-content>
<fo:static-content flow-name="rest-before">
<fo:block> Der Titel der restlichen Seiten </fo:block>
</fo:static-content>
<fo:static-content flow-name="first-after">
<fo:block> Hier ist die Fusszeile der ersten Seite </fo:block>
</fo:static-content>
<fo:static-content flow-name="rest-after">
<fo:block> Hier ist die Fusszeile der restlichen Seiten </fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
... hier kommt der Dokument Inhalt ...
</fo:flow>
</fo:page-sequence>
</fo:root>
98
Der Dokument Inhalt: fo:flow
fo:flow ist ein Kind-Knoten von fo:page-sequence und enthält eine beliebige Anzahl von Blöcken mit Text,
Tabellen, Listen und Bildern.
Mit Hilfe des flow Elementes wird der Dokument-Inhalt (der Fliesstext) definiert.
fo:flow hat als mögliche Kind-Elemente:
•
fo:block (neuer Abschnitt)
•
block-container (neuer Abschnitt an fixem Ort)
•
table, table-and-caption (Tabelle)
•
list-block (Listen)
Ein Beispiel
<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>
Die statischen Bereiche: fo:static-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>
Abschnitte, Paragraphen, ... 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>
99
Fest positionierte Felder: fo:block-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>
Format Änderungen in Zeilen: fo:inline
Während mit fo:block ein neuer Abschnitt (eine neue Zeile) anfängt, kann fo:inline benutzt werden für
Format-Änderungen innerhalb eines Blockes (einer Zeile).
Typischerweise werden deshalb Blöcke entweder durch fo:block oder durch fo:inline Elemente unterteilt, je
nachdem ob ein neuer Absatz erwünscht wird oder nicht.
Einbinden von Bildern: 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>
100
Erstellen von Listen, Aufzählungen, ...
Jedes fo:list-item Element enthält ein fo:list-item-label und ein fo:list-item-body Element.
Ohne das start-indent Attribut im fo:list-item-body fängt der Inhalt der Auflistung am linken Rand an, und
überschreibt das eventuell vorhandene Aufzählungs-Zeichen.
<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 ....</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label>
<fo:block>&#183;</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>Dies ist das zweite ....</fo:block>
</fo:list-item-body>
</fo:list-item>
...
</fo:list-block>
101
11.2.1
Erzeugen von Tabellen
Zum Erzeugen von Tabellen gibt es die Elemente: fo:table, fo:table-body, fo:table-cell, fo:table-column,
fo:table-footer, fo:table-header, fo:table-row
fo:table enhä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.
Durch die table-column Elemente wird bestimmt, wie viele und wie breit die einzelnen Spalten werden
sollen.
Die Breite kann auch Proportional zur Gesamt-Breite des Dokuments definiert werden (zum Beispiel 25%):
column-width="proportional-column-width(25)"
table-header und table-body enthalten dann pro Zeile eine table-row, welche pro Spalte eine table-cell
enthält.
Falls die Tabelle einen Rahmen erhalten soll, kann dies entweder in fo:table (Rahmen um ganze Tabelle), in
table-column (Rahmen um eine Spalte), in table-row (Rahmen um eine Zeile) oder in fo:table-cell (Rahmen
um einzelne Zelle) angegeben werden.
Das Attribut padding gibt den Abstand vom Inhalt der Zelle (Text) und dem Rand der Zelle an.
102
Beispiel einer Tabelle
<fo:table background-color="#EEEEEE" padding="3pt">
<fo:table-column column-width="20mm"/>
<!--Definition der Spalten-Breiten -->
<fo:table-column
column-width="30mm"/>
<fo:table-header font-weight="bold" background-color="#CCCCCC>
<fo:table-row>
<fo:table-cell border="2pt solid black" padding="3pt">
<fo:block> HTML </fo:block>
</fo:table-cell>
<fo:table-cell border="2pt solid black" padding="3pt">
<fo:block> XML-FO </fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell border="1pt solid black" padding="3pt">
<fo:block> THEAD </fo:block>
</fo:table-cell>
<fo:table-cell border="1pt solid black" padding="3pt">
. . . .
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
103
11.3 Die wichtigsten Attribute
11.3.1
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.
•
•
•
•
11.3.2
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>
11.3.3
Character Property: Farbe
Die color-Property setzt die Schriftfarbe:
<fo:inline color="green"> Text </fo:inline>
Wie in CSS gibt es 16 vordefinierte Farben:
Weitere Farben können als hexadezimale RGB-Trippel definiert werden: #RRGGBB.
104
11.3.4
Character Property: Font
Die Property font-family definiert den zu benutzenden Font:
<fo:inline font-family="Times Roman" >
Times Roman
</fo:inline>
Zur Verfügung stehen unter anderem die Schriften Serif, Sans Serif, Times Roman, Courier und Symbol.
Es können als fall-back auch mehrere font-family Werte angegeben werden.
font-family=”Arial, Helvetica, sans-serif”
Ausserdem können mit FOP alle Systemfonts eingebettet werden.
11.3.5
Character Property: Schriftgrösse
Die Property font-size definiert die zu benutzende Schriftgrösse:
<fo:inline font-family="Helvetica"
ein Text in 24 Punkt Schrift
</fo:inline>
11.3.6
font-size="24pt">
Character Property: Schrift Style
Der Style des Fonts wird definiert durch die Property font-style
<fo:block font-family="Times Roman"
Times Roman italic
</fo:block>
font-style="italic">
Es gibt die Styles italic, normal, oblique, reverse-normal und reverse-oblique.
11.3.7
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>
105
11.3.8
Character Property: Schrift-Dekorationen
Unabhängig vom gewählten Font (Style, Farbe,...) können verschiedene Text Properties gesetzt werden.
Die Property text-transform definiert, ob der ganze Text in Grossbuchstaben (uppercase), Kleinbuchstaben
(lowercase) oder bloss die Anfangsbuchstaben in gross gesetzt werden sollen (capitalize). Die Property texttransform ist in FOP (noch) nicht implementiert.
Die Property score-spaces definiert, ob im unter- (über/durch)-gestrichenen Text auch die Spaces unter
(über/durch)-strichen sein sollen oder nicht.
text-decoration="underline" --> unterstrichen
text-decoration="overline"
--> überstrichen
text-decoration="line-through" --> durchgestrichen
text-shadow="gray"
--> Schattenschrift
text-transform="capitalize" --> Alle Ersten Buchstaben Gross
text-transform="uppercase" --> GROSSSCHRIFT
text-transform="lowercase" --> kleinschrift
Ein Beispiel:
<fo:block text-align="start" line-height="12pt" font-family="sans-serif"
font-size="10pt" text-decoration="underline" color="blue">
Ein blauer, unterstrichener sans-serif Text in 10pt Schrift.
</fo:block>
11.3.9
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), ...
<fo:block font-family="Helvetica" font-size="10pt" text-align="center"
line-height="11pt">
Hier ist ein zentrierter Text. Hier ist ein zentrierter Text. Hier ist ein zentrierter Text.
<fo:leader leader-pattern="rule" leader-length="6cm"/> <!- - Linie - ->
</fo:block>
<fo:block font-family="Helvetica" font-size="10pt" text-align="justify"
letter-spacing="1pt">
Hier ist ein gesperrter . . . Hier ist ein Text. Hier ist noch ein Text.
<fo:leader leader-pattern="rule" leader-length="6cm"/> <!- - Linie - ->
</fo:block>
106
107
11.3.10
Sentence Property: Zeilenabstand
Der Zeilenabstand im Text kann kontrolliert werden durch die Properties line-height, text-depth und textaltitude.
<fo:block font-size="10pt" line-height="16pt" ...>
Hier ist ein Text, ...
</fo:block>
Die Sentence Property line-height-shift-adjustment legt fest, ob subscripts und superscripts den LinienAbstand vergrössern sollen oder nicht.
Durch text-depth (text-altitude) wird zusätzlicher Abstand nach (vor) jeder Zeile eingefügt.
<fo:block font-family="Helvetica" font-size="10pt" text-align="left"
text-depth="3pt" text-altitude="3pt" line-height="16pt">
Hier ist ein Text. Hier ist ein Text. Hier ist ein Text.
</fo:block>
11.3.11
Sentence Property: Text Ausrichtung
Ob der Text linksbündig, rechtsbündig, zentriert oder im
Blocksatz gesetzt werden soll, wird durch die Property textalign gesetzt.
Diese kann die folgenden Werte annehmen:
start oder left --> linksbündig
center --> zentriert
end oder right --> rechtsbündig
justify --> Blocksatz
<fo:flow flow-name="xsl-region-body" >
<fo:block font-size="12pt" text-align="start">
Hier ist ein linksbündiger Text, der . . .
</fo:block>
<fo:block> <fo:leader leader-length="7cm" leader-pattern="rule"/> </fo:block>
<fo:block font-size="12pt" text-align="center" line-height="20pt">
Hier ist ein zentrierter Text mit grossem . . .
</fo:block>
<fo:block> <fo:leader leader-length="7cm" leader-pattern="rule"/> </fo:block>
<fo:block font-size="12pt" text-align="end">
Hier ist ein rechtsbündiger Text . . .
</fo:block>
<fo:block> <fo:leader leader-length="7cm" leader-pattern="rule"/> </fo:block>
<fo:block font-size="12pt" text-align="justify">
Hier ist ein Blocksatz Text, der . . .
</fo:block>
</fo:flow>
108
109
11.3.12
Attribut Listen
Zum Erlangen eines konsistenten Layouts sollten für die verschiedenen Text-Bereiche (Fliesstext, Header,
Footer, Tabellen, Listen) jeweils entsprechende Styles definiert werden. Hier zum Beispiel die Definition des
text-style für den Fliesstext (pageMaster.xsl):
<xsl:attribute-set name="text-style">
<xsl:attribute name="font-family">Arial, Helvetica, sans-serif</xsl:attribute>
<xsl:attribute name="font-size">12pt</xsl:attribute>
<xsl:attribute name="font-weight">normal</xsl:attribute>
<xsl:attribute name="line-height">15pt</xsl:attribute>
<xsl:attribute name="text-align">left</xsl:attribute>
</xsl:attribute-set>
Dieser wird dann wie folgt im Stylesheet benutzt (makeFO.xsl):
<fo:flow flow-name="xsl-region-body">
<fo:block xsl:use-attribute-sets="text-style">
<xsl:apply-templates select="doc"/>
</fo:block>
</fo:flow>
Analog sollte für Tabellen, Listen, ... vorgegangen werden.
11.3.13
Für die Übung: Einstellungen in oXygen für XSL-FO
Beim Ankreuzen von „FO Transformation ausführen“ wird das xml-Dokument mit Hilfe des Stylesheets nach
XSL-FO transformiert und das erzeugte fo-File danach mit FOP nach pdf umgewandelt.
110