Textformatierung
In XSL-FO gibt es einige Attribute, mit welchen Texte formatiert und Schrifteinstellungen festgelegt werden können. Diese
Typografie-Attribute wollen wir in diesem Thema genauer erläutern. Verwendet werden diese Attribute entweder in
block- oder in inline-Elementen. Zudem sind in einigen weiteren Elementen diese Attribute
ebenfalls gültig. Falls Sie sich bereits mit CSS auskennen, werden Ihnen einige Attribute bekannt vorkommen.
Schriftfarbe
Die Schriftfarbe lässt sich über das Attribut color festlegen. Als Werte sind Hex-RGB-Werte (#RRGGBB
oder in der Kurzform #RGB), RGB-Funktionswerte (rgb(r, g, b)) und englische Farbnamen möglich.
Die unterstützten Farbnamen sind vom FO-Prozessor abhängig, jedoch kann man davon ausgehen, dass grundlegende Farbnamen,
wie z. B. red, blue oder lime, unterstützt werden.
XSL-FO-Code:
<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
<fo:region-body region-name="inhalt" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="inhalt">
<fo:block>
In diesem Dokument stehen alle Farben des
<fo:inline color="#FF0000">R</fo:inline>
<fo:inline color="#00FF00">G</fo:inline>
<fo:inline color="#0000FF">B</fo:inline> Farbraums zur Verfügung!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Schriftart und Schriftgröße
Um die Schriftart, also den Namen der Schrift, festzulegen, verwenden wir das Attribut font-family. Auch hier
hängt es wieder vom FO-Prozessor ab, welche Schriften zur Verfügung stehen. Es ist jedoch zu empfehlen, nur Schriftarten zu
verwenden, die laut der PostScript-Spezifikation in jedem PDF-Reader enthalten sein müssen: Helvetica, Times,
Courier, Symbol und ZapfDingbats. Die Größe der Schrift wird über das Attribut
font-size festgelegt. Hier wird ein Zahlenwert in Verbindung mit einer Maßeinheit angegeben.
XSL-FO-Code:
<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
<fo:region-body region-name="inhalt" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="inhalt">
<fo:block font-family="Times" font-size="24px">Schriftart und Schriftgröße</fo:block>
<fo:block font-family="Times" font-size="18px">
XSL-FO unterstützt verschiedene Schrifarten (z. B.
<fo:inline font-family="Courier">Courier</fo:inline> oder
<fo:inline font-family="Helvetica">Helvetica</fo:inline>)
und verschiedene Schriftgrößen (z. B.
<fo:inline font-size="14px">14px</fo:inline>,
<fo:inline font-size="17px">17px</fo:inline> oder
<fo:inline font-size="20px">20px</fo:inline>).
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Schriftstile
Mit dem Attribut font-style können Sie die Schriftlage festlegen. Mögliche Werte für das Attribut sind
normal (Normallage / gerade Schrift, Standardwert), italic (Kursiv-Schrift) und oblique
(schräg gestellte Schrift). Oftmals ist zwischen italic und oblique kein Unterschied zu erkennen.
Die Schriftbreite bzw. Schriftdicke lässt sich über das Attribut font-weight festlegen. Als Werte können
normal (normale Breite, Standardwert), bold (fette Schrift), light (dünne Schrift) sowie
Zahlenwerte zwischen 100 und 900 (immer in 100er-Schritten), bolder und lighter
angegeben werden. Keine der gängigen Schriftarten unterstützt jedoch andere Werte als normal und bold.
Mit Hilfe des Attributs text-decoration können Sie einem Text eine „Dekoration“ hinzufügen, gemeint sind damit
Linien, um einen Text zu unterstreichen (underline), zu überstreichen (overline) oder
durchzustreichen (line-through). Die Standardeinstellung ist none, welche keine Linie erzeugt.
Um die Groß- und Kleinschreibung in einem Text zu manipulieren, gibt es das Attribut text-transform. Mit dem
Wert uppercase werden alle Buchstaben in Großbuchstaben umgewandelt und mit dem Wert lowercase werden
alle Buchstaben in Kleinbuchstaben umgewandelt. Neben dem Standardwert none gibt es noch einen weiteren möglichen
Wert: capitalize. Der Wert capitalize erzeugt Kapitälchen, dabei wird der erste Buchstabe jedes Wortes
in einen Großbuchstaben und alle anderen Buchstaben in Kleinbuchstaben umgewandelt.
XSL-FO-Code:
<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
<fo:region-body region-name="inhalt" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="inhalt">
<fo:block font-style="italic">Dieser Text wird kursiv dargestellt!</fo:block>
<fo:block font-family="Times" font-weight="bold">Dieser Text wird fett dargestellt!</fo:block>
<fo:block>
Dieser Text wird
<fo:inline text-decoration="underline">unterstrichen</fo:inline>,
<fo:inline text-decoration="overline">überstrichen</fo:inline> und
<fo:inline text-decoration="line-through">durchgestrichen</fo:inline> angezeigt!
</fo:block>
<fo:block text-transform="uppercase">Dieser Text verwendet nur Großbuchstaben!</fo:block>
<fo:block text-transform="lowercase">Dieser Text verwendet nur Kleinbuchstaben!</fo:block>
<fo:block text-transform="capitalize">Dieser Text verwendet Kapitälchen!</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Ausrichtung und Abstände
Um einen Text auszurichten, wird das Attribut text-align verwendet. Für die letzte Zeile kann mit Hilfe des
Attributs text-align-last eine gesonderte Ausrichtung durchgeführt werden. Mögliche Werte für diese beiden Attribute
sind left (linksbündig), right (rechtsbündig), start (bündig mit dem start-Region),
end (bündig mit der end-Region), inside (bündig zum Bund), outside (bündig
zum äußeren Rand), justify (Blocksatz) und center (zentriert).
Um einen Block einzurücken, gibt es die Attribute start-indent, end-indent, text-indent
und last-line-indent. Die Attribute start-indent und end-indent werden dazu verwendet, den
kompletten Absatz einzurücken. text-indent wird für die Einrückung der ersten Zeile verwendet, last-line-indent
hingegen für die letzte Zeile. Als Wert für diese Attribute wird eine Zahl zusammen mit einer Maßeinheit verwendet. Auch
negative Zahlen sind möglich.
Das Attribut line-height legt die Zeilenhöhe fest. Auch hier wird eine Zahl mit einer Maßeinheit als Wert
angegeben. Der Abstand zwischen Wörtern und Zeichen lässt sich ebenfalls steuern. Dafür werden die Attribute
word-spacing und letter-spacing verwendet.
Möchten Sie einen Text hoch- oder tiefstellen, so können Sie das Attribut baseline-shift verwenden. Neben
nummerischen Angaben (zusammen mit einer Maßeinheit) sind auch die Schlüsselwörter super (hochgestellt) und
sub (tiefgestellt) möglich. Der Standardwert ist baseline und erzeugt keine Verschiebung nach oben
oder unten.
XSL-FO-Code:
<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
<fo:region-body region-name="inhalt" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="inhalt">
<fo:block text-align="left">Dieser Text wird linksbündig dargestellt!</fo:block>
<fo:block text-align="right">Dieser Text wird rechtsbündig dargestellt!</fo:block>
<fo:block text-align="center">Dieser Text wird zentriert dargestellt!</fo:block>
<fo:block text-align="justify">
Dieser Text wird als Blocksatz dargestellt: ...
</fo:block>
<fo:block start-indent="20mm" end-indent="20mm" text-indent="5mm">
Dieser Text wird mit einem Einzug von 5mm (erste Zeile) dargestellt: ...
</fo:block>
<fo:block line-height="10mm">
Dieser Text wird mit einer Zeilenhöhe von 10mm dargestellt: ...
</fo:block>
<fo:block letter-spacing="1mm" word-spacing="3mm">
Dieser Text wird mit einem Zeichenabstand von 1mm und einem Wortabstand von 3mm dargestellt: ...
</fo:block>
<fo:block>Dieser Text wird <fo:inline baseline-shift="1mm">hochgestellt</fo:inline> und <fo:inline baseline-shift="-1mm">tiefgestellt</fo:inline>!</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Übrigens: Die vertikale Ausrichtung lässt sich mit Hilfe des Attributs vertical-align steuern. Verwendet werden
kann das Attribut aber nicht bei normalen Blöcken. Der Einsatz des Attributs vertical-align findet sich hauptsächlich
bei Tabellenzellen. Mögliche Werte für das Attribut sind unter anderem top (Ausrichtung oben), bottom
(Ausrichtung unten) und middle (Ausrichtung mittig).
Horizontale Linien
Eine horizontale Linie lässt sich mit dem Element leader erzeugen. Das Element leader wird innerhalb
des block-Elements platziert. Oft werden die horizontalen Linien dazu verwendet, Führungslinien (z. B. wie
in Inhaltsverzeichnissen) zu erzeugen. Als Attribute stehen unter anderem leader-pattern (Füllmuster: space
für Leerzeichen, dots für Punkte, rule für eine Linie oder use-content für beliebigen
Inhalt, der innerhalb des leader-Elements angegeben wird), rule-thickness (Dicke der Linie) und
color (Farbe der Linie) zur Verfügung.
XSL-FO-Code:
<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="DIN-A4" page-height="297mm" page-width="210mm">
<fo:region-body region-name="inhalt" margin="2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="DIN-A4">
<fo:flow flow-name="inhalt">
<fo:block text-align-last="justify">Grundlagen <fo:leader leader-pattern="dots" />Seite 1</fo:block>
<fo:block text-align-last="justify">Seitenlayout <fo:leader leader-pattern="dots" />Seite 2</fo:block>
<fo:block text-align-last="justify">Textformatierung <fo:leader leader-pattern="dots" />Seite 3</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
Übrigens: Ein leader-Element ohne Angabe weiterer Attribute kann dazu verwendet werden, eine leere Zeile
zu erzeugen. Das hier verwendete Attribut text-align-last und der Wert justify ist zwingend
erforderlich, sodass sich der Inhalt über die komplette Zeile erstreckt.