Post on 05-Apr-2015
XSL-FO
ArchitekturSeitenvorlagenBlöckeTabellenListenFormat-EigenschaftenGrafikenZeilenFußnoten
Inhalte
Gemischter InhaltPDF-LesezeichenInhaltsverzeichnisLebende KolumnentitelDynamische FO-ErstellungLinks
Architektur Der zweischrittige Prozess
Die Verwendung von FO (Formatting Objects) meint typischerweise die Anwen-dung eines zweischrittigen Prozesses auf XML oder auch nicht-XML-Daten.:
1. Während des ersten Schritts, wird das FO-Dokument (auch Ergebnis- oder Ziel-Dokument genannt) erzeugt. Zwei grundsätzliche Optionen existieren hier:
a. XML wird durch ein XSLT-Stylesheet in ein FO-Dokument umgewandelt.
b. Es wird direkt aus nicht-XML-Daten wie einer Datenbank oder von Benutzern eingegebenen und dann verarbeiteten Daten erzeugt.
2. Während des zweiten Schritts wird das FO-Dokument in sein endgültiges Ausgabeformat wie PDF, RTF oder PostScript formatiert. Der Formatierer, der in diesem Schritt benutzt wird, kann auch die gleiche Software-Komponente sein wie im ersten Schritt. Es ist aber auch möglich, zwei verschiedene Komponenten zu kombinieren, um technische Fähigkeiten, die nur für einen Schritt verfügbar sind, dort auch zu nutzen.
Architektur Der zweischrittige Prozess
Architektur FO als Zwischenformat
FO ist eine Grammatik bzw. ein Vokabular, das mit einer hohen Anzahl an Möglichkeiten für Druck-Dokumente aufwartet.
Daher kann es auch als Zwischenformat dienen, in das XML transformiert werden, um dann verschiedene Ausgabeformate für den Druck zu generieren.
PDF ist das typische Format für XSL-FO, so wie (X)HTML das typische Ausgabeformat für XSLT ist. Die meisten Formatierer können aber auch noch PostScript, RTF oder sogar XHTML aus einem FO-Dokument erzeugen.
Es kann also sehr effizient sein, wenn XML durch XSLT erst in FO umgewandelt wird und dann durch einen geeigneten Formatierer in das gewünschte endgültige Format.
Architektur FO als Zwischenformat
Architektur FO als Zwischenformat
Die Illustration zeigt zwei extreme Szenarien und stellt daran das oben erwähnte Konzept dar.
Auf der linken Seite gibt es vier verschiedene XML-Formate, die alle in drei verschiedene Ausgaben umgewandelt werden sollen.
Ohne FO als Zwischenformat muss man eine individuelle Transformation für jede Datei erstellen (rote Linien).
Verwendet man FO, wandelt man jedes Eingabeformat zunächst einmal in FO um und dann von dort in die Ausgabeformate (schwarze Linien).
ArchitekturFO und XSLT im Vergleich
XSLT wird für die Transformation von XML in andere XML-Formate (wie auch FO) oder auch andere Textformate benutzt.
Deswegen enthält es einige typische Merkmale eine Programmiersprache.
FO dagegen ist nur eine Grammatik für Präsentation und enthält darüber hinaus noch dokumentbezogene Elemente.
Oft wird mit XSLT FO und dann auch PDF erstellt, was man als XSL-FO bezeichnen kann.
ArchitekturFO und XSLT im Vergleich
Seitenvorlagen
Das fo:layout-master-set enthält Seitenvorlagen (fo:simple-page-master) und Vorlagen für Seitenverläufe (Kombinationen von Vorlagen, fo:page-sequence-master).
Sie werden vom fo:flow-Element im tatsächlichen Seitenverlauf fo:page-sequence referenziert.
Eine Seite enthält Druckbereiche, die aus fo:flow oder fo:static-content-Containern referenziert werden.
Seitenvorlagen
SeitenvorlagenRänder und druckbare Bereiche
SeitenvorlagenSeitentypen und ihre Auswahl
Ereignisse und ihre Kombination steuern die Auswahl von individuellen Seitenvorlagen bei der Erstellung eines tatsächlichen Seitenvorlaufs.
Die erste gültige Bedingung einer Testreihe führt dann zur Auswahl.
SeitenvorlagenSeitentypen und ihre Auswahl
SeitenvorlagenSeitentypen und ihre Auswahl
SeitenvorlagenEigenschaften
blank-or-not-blankcolumn-countcolumn-gapextentflow-nameforce-page-countinitial-page-numbermaster-name
master-referencemaximum-repeatsodd-or-evenpage-heightpage-positionpage-widthprecedenceregion-name
BlöckeBox-Modell in FO und CSS
BlöckeBox-Modell in FO und CSS
BlöckeAuffüllung
Richtung Variante 1 Variante 2Oben padding-before padding-topUnten padding-after padding-bottomLinks padding-start padding-leftRechts padding-end padding-right
BlöckeRand
Oben Unten Links Rechts ÜberallBreite border-
before-width border-top-width
border-after-width border-bottom-width
border-start-width border-left-width
border-end-width border-right-width
border-width
Stil border-before-style
border-top-style
border-after-style
border-bottom-style
border-start-style border-left-style
border-end-style
border-right-style
border-style
Farbe border-before-color
border-top-color
border-after-color
border-bottom-color
border-start-color
border-left-color
border-end-color
border-right-color
border-color
BlöckeRand
Eigenschaft WertBreite <border-width> | inherit with <border-width> =
{thin | medium | thick | <absolute length> }Stil <border-style> | inherit with <border-style>
={none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset}
Farbe <Color> | inherit with <Color> = {valid color spec}
BlöckeRänder, Abstand und Einrückung
Richtung Ränder Abstand EinrückungTop margin-top Bottom margin-bottom Left margin-left space-end start-indentRight margin-right space-start end-indent
BlöckeHintergrund (Farbe und Bild)
background-attachment
background-colorbackground-imagebackground-repeatbackground-position-horizontalbackground-position-vertical
BlöckeBlock- und Linien-Eigenschaften
hyphenation-keephyphenation-ladder-countlast-line-end-indentline-heightline-height-shift-adjustmentlinefeed-treatmentwhite-space-treatmenttext-aligntext-align-lasttext-indentwhite-space-collapse
BlöckeUmbruch-Eigenschaften
break-afterbreak-beforekeep-togetherkeep-with-nextkeep-with-previousorphanswidows
BlöckeZeilenabstand
absolute-position
top
right
bottom
left
BlöckeAbsolute Positionierung
space-end
space-start
relative-position
Tabelle
Tabelle
TabelleEigenschaften
• border-after-precedence• border-before-precedence• border-collapse• border-end-precedence• border-separation• border-start-precedence• caption-side• column-number• column-width
• empty-cells• ends-row• number-columns-repeated• number-columns-spanned• number-rows-spanned• starts-row• table-layout• table-omit-footer-at-break• table-omit-header-at-break
Listen
Listen
Format-Eigenschaften
Block-Elemente In-Zeilen-Elementefo:blockfo:block-container
fo:characterfo:inlinefo:inline-container
Format-Eigenschaften Text
Zeichen-Eigenschaftenfont-familyfont-sizefont-stretchfont-size-adjustfont-stylefont-variantfont-weight
Nummernformatgrouping-separatorgrouping-sizeletter-value
Format-Eigenschaften Text
Zeichen-Eigenschaften characterletter-spacingsuppress-at-line-breaktext-decorationtext-shadowtext-transformtreat-as-word-spaceword-spacing
Block-Ausrichtungalignment-adjustalignment-baselinebaseline-shiftdisplay-aligndominant-baselinerelative-align
Format-Eigenschaften Text
Silbentrennungcountrylanguagescripthyphenatehyphenation-characterhyphenation-push-character-counthyphenation-remain-character-count
Grafiken
Grafiken
Eigenschaftenblock-progression-dimensioncontent-heightcontent-widthheightinline-progression-dimensionmax-heightmax-widthmin-heightmin-widthscalingscaling-methodwidth
Zeilen
fo:leader Eigenschaftenleader-alignmentleader-patternleader-pattern-widthleader-lengthrule-stylerule-thickness
Fußnoten
Eine Fußnote ist am besten in seinem eigenen XML-Element (hier: FN) untegebracht.
Eine Vorlagen-Regel für dieses FN-Element erstellt dann ein fo:footnote-Element mit einem fo:inline-Element für die Nummer und einem fo:footnote-body-Element für den tatsächlichen Text.
Fußnoten
Gemischter Inhalt und Inzeilen-Formatierung
Gemischter Inhalt ist Textinhalt mit XML-Elementen (bspw. Fußnoten, Bildern, Verweisen), der normalerweise in der gleichen Reihenfolge ausgegeben werden soll wie in der XML-Quelle.
<xsl:apply-templates /> (leeres Element) oder <xsl:apply-templates select=”A | B | text()”/> können dann die Vorlagen-Regeln in der notwendigen Reihenfolge aufrufen.
Das Element fo:inline ermöglicht dann die Inzeilen-Formatierung.
Gemischter Inhalt und Inzeilen-Formatierung
PDF -Lesezeichen
Das Element fo:bookmark-tree enthält den Inhalt der PDF-Lesezeichen.
Jedes wird durch fo:bookmark-element mit einem internal-destination-Attribut (ähnlich wie fo:basic-link) gebildet.
Eine Hierarchie an Lesezeichen kann durch eine Hierarchie verschachtelter FO-Lesezeichen erstellt werden.
Der Inhalt des PDF-Lesezeichens ist fo:block (FO-Inhalt von fo:bookmark) oder der XSLT-Sequenzkonstruktor innerhalb von fo:bookmark.
PDF -Lesezeichen
Inhaltsverzeichnis
Blöcke, die in einem Inhaltsverzeichnis erscheinen sollen oder deren Seitenzahl benötigt wird, müssen ein id-Attribut mit einem eindeutigen Bezeichner haben.
Diesen Wert referenziert man innerhalb von fo:page-number-citation und dem ref-id-Attribut.
Der Wert wird entweder aus den XML-Daten gelesen/abgeleitet oder dynamisch durch die XSLT-Funktion generate-id()generiert und referenziert.
Eine Verknüpfung wird definiert durch fo:basic-link und kann extern oder intern sein.
Das Attribut internal-destination referenziert einen internen id-Wert, während external-destination einen URI referenziert.
Inhaltsverzeichnis
Lebende Kolumnentitel
Die Inhalte von lebenden Kolumnentiteln bildet man durch das fo:marker-Element, das ein marker-class-name-Attribut hat.
Diese Markierung referenziert man innerhalb des retrieve-class-name-Attributs des fo:retrieve-marker-Elements.
Die Attribute retrieve-position und retrieve-boundary geben den Bereich an, in dem die Markierung gesucht wird.
Lebende Kolumnentitel
Dynamische FO-ErstellungTechniken
Da FO ein XML-Format ist, können und werden FO-Dokumente auch über XSLT erzeugt werden.
Die folgenden Techniken und ihre Kombinationen setzt man oft ein, um konfigurierbare und dynamische Transformationen zu erstellen.
Dynamische FO-ErstellungTechniken
Modulare Stylesheets: xsl:import und xsl:include können benutzt werden,um andere Stylesheets einzubinden.
Parameter: Vorlagen-Parameter können verwendet werden, um dynamisch XSLT-Anweisungen auszuführen, während globale/Stylesheet-Parameter zusätzlich von der aufrufenden Umgebung (bspw. Java, .NET) adressiert werden können. Namen von XML-Konfigurationsdateien als Parameterwerte kann man verwenden, um dynamisch diese Dateien über die document()-Funktion anzusprechen.
Dynamische FO-ErstellungTechniken
Variablen: Variablen können globale Werte für Farben, Schrift-Eigenschaften oder numerische Werte für Rändern, Abstände etc. speichern. Temporäre Bäume (XSLT-Variablen mit XML-Inhalt oder Anweisungen zur dynamischen Erzeugung) können FO-Elemente enthalten oder erzeugen.
Konfigurationsdateien: Sammlungen von Konfigurationswerten kann man in XML-Dateien speichern. Während Variablen direkt in der XSL-FO-Datei liegen, sind Konfigurationsdateien spezielle XML-Dateien, die zusätzlich eingelesen und verarbeitet/gefiltert werden.
Attributgruppen: Sammlungen von Attribute und ihre statischen oder dynamischen Werte (gelesen aus Variablen) kann man in Attributgruppen speichern und dann im xsl:use-attribute-sets-Attribut referenzieren. Ein fortgeschrittener Ansatz sind dann kaskadierende Gruppen: Entweder xsl:attribute-set selbst oder FO-Elemente referenzieren weitere Gruppen und bilden dadurch eine Gesamtmenge aller deklarierten Attribute.
Dynamische FO-ErstellungTechniken
Dynamische FO-ErstellungTechniken
Beispiele
Beispiele
Links/Impressum
LinksXSL-Family: http://www.w3.org/Style/XSL/XSL-FO 1.1: http://www.w3.org/TR/xsl/XSLT 1.0: http://www.w3.org/TR/xsltXPath 1.0: http://www.w3.org/TR/xpath
Impressumhttp://www.comelio.com/quickreferences/XSL-FO
Autoren: Marco Skulschus, Marcus WiedersteinLayout und Design: Nadine KilianAssistenz: Erik Richardson, Philip Lucsok
Comelio Medien, Goethestraße 34, 13086 Berlin
Fragen und Antworten