View
3.534
Download
5
Embed Size (px)
DESCRIPTION
XSL-FO
Citation preview
1
XSL-FO Formatting Objects
Ett XML-baserat sidlayoutspråk
2
Inledning
• XSL-FO är en XML-vokabulär för att på detaljnivå kunna skapa sid-layout, idag främst för papper men på sikt även för bildskärmar.
• Till skillnad från CSS är XSL-FO helt XML-baserat.
• Kan göra samma saker som CSS + mycket till.
• Version 1.1 rekommendation sedan 2006-12-05
3
Implementationer
• Idag finns några implementationer av delar av XSL-FO-specifikationen, t.ex. FOP från Apaches Cocoonprojekt.
• Ett fåtal program kan rendera XSL-FO-dokument direkt, t.ex. X-Smiles.
• Ett alternativ är att först generera XSL-FO, och sedan "serialisera" det till pdf.
XSL-FO pdfFOP
4
XML+XSLT ->XSL-FO
•Vanligtvis skapar man inte XSL-FO-dokument direkt.
• Istället transformeras vanligen en XML-struktur till XSL-FO via XSLT-transformer.
XSL-FO pdfFOPXML
XSLT
XSLT-processor
FO-läsare(X-Smiles)
png
rtf
5
Sidmodell
When shall we three meet again
In thunder, lightning or in rain...
Macbeth...
1.
margin-topregion-before
margin-left
region-start
region-after
margin-bottom
region-body
region-end
margin-right
6
XSL-FO:Syntax
• Namespacen för XSL-FO är http://www.w3.org/1999/XSL/Format
• Prefixet brukar vara fo:• Root-elementet är <fo:root><fo:root> innehåller två
underelement; <fo:layout-master-set> och <fo:page-sequence>
7
XSL-FO:Exempel
<fo:root xmlns:fo="http://www.w3.org/1999/Format">
<fo:layout-master-set> <!-- mallar med info om marginaler, sidformat etc för olika sidtyper--> </fo:layout-master-set> <fo:page-sequence> <!-- Själva innehållet --> </fo:page-sequence></fo:root>
8
<fo:layout-master-set>
• <fo:layout-master-set> innehåller information ett eller flera element <fo:simple-page-master>
• Dessa innehåller information om sidstorlek och marginaler, samt har ett attribut master-name för att kunna refereras till.
• Flera simple-page-masters kan användas för samma dokument, t.ex. förstasida, index, brödtext mm.
9
<fo:layout-master-set>Exempel
<fo:layout-master-set> <fo:simple-page-master margin-right="3cm" margin-left="3cm" margin-bottom="4cm" margin-top="2cm" page-width="20cm" page-height="27.7cm" master-name="foobar”/></fo:layout-master-set>
10
Regioner
•Det finns dessutom 5 regioner: before, after, start, end och body (se tidigare, ”Sidmodell”).
•Alla utom body kan tilldelas ett attribut "extent”.
•Storleken på ”body” är det som blir över efter att marginaler och regioner bestämts.
11
Regioner
<fo:layout-master-set> <fo:simple-page-master master-name="foo"> <fo:region-before extent="1cm"/> <fo:region-after extent="1cm"/> <fo:region-start extent="1cm"/> <fo:region-end extent="1cm"/> <fo:region-body/> </fo:simple-page-master></fo:layout-master-set>
12
Att flöda innehåll på en sida
• I en <fo:page-sequence> stoppas själva innehållet.
• En <fo:page-sequence> binds till en simple-page-master via attributet ”master-reference” vars värde ska motsvara en ”master-name” för en page-master
• <fo:page-sequence> innehåller ett element <fo:flow> som i sin tur kan innehålla ett antal <fo:block> där slutligen innehållet finns.
13
Att flöda innehåll på en sidaExempel
<fo:page-sequence master-reference="banan">
<fo:flow> <fo:block> En banan </fo:block> <fo:block> En tomat </fo:block> </fo:flow></fo:page-sequence>
14
Properties
• De flesta properties som kan sättas i CSS kan även sättas på ungefär motsvarande sätt i XSL-FO.
• Font-family, font-weight, text-align mm
15
PropertiesCSS-exempel
CSSdish {
display:block;font-family: Helvetica, Arial, sans-serif;font-size: 20pt;font-weight: bold;text-align: center
}
16
Properties: Motsvarande XSL-FO-exempel
XSL-FO<xsl:template match="dish"> <fo:block font-family="Helvetica, Arial,
sans-serif" font-size="20pt" font-weight="bold" text-align="center">
<xsl:apply-templates/> </fo:block></xsl:template>
17
Listor
• Vissa properties från CSS matchas mot element istället för attribut, t.ex. listor.
<fo:list-block> <fo:list-item> <fo:list-item-label> • </fo:list-item-label> <fo:list-item-body> En banan </fo:list-item-body> </fo:list-item></fo:list-block>
18
Tabeller - Liknar html
<fo:table> <fo:table-column column-width=”80pt"/> <fo:table-column column-width="90pt"/> <fo:table-body> <fo:table-row> <fo:table-cell> <fo:block>Hej</fo:block> </fo:table-cell> <fo:table-cell> <fo:block>Hopp</fo:block> </fo:table-cell> </fo:table-row> </fo:table-body></fo:table>
19
Olika sidlayouter
• Ofta vill man ha olika sidlayout på högersidor, vänstersidor och förstasidor.
• Detta kan lösas genom elemetet fo:sequence-specification som är ett barnelement till fo:page-sequence
• En sådan är en sammansatt page-master, med olika kriterier för vilken page-master som ska användas t.ex. för udda/jämna sidor.
20
Ett dokument, olika sidlayouter
<fo:page-sequence> <fo:sequence-specification> <fo:sequence-specifier-alternating page-master-first="banan" page-master-odd="tomat" page-master-even="gurka"/> </fo:sequence-specification></fo:page-sequence>
Där banan, tomat och gurka tidigare har specificerats som fo:simple-page-master
21
Exempel xslt->xsl-fo<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> <fo:layout-master-set> <fo:simple-page-master margin-right="1in" master-name="first"> <fo:region-body/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="first"> <fo:flow flow-name="xsl-region-body"> <fo:block> <xsl:apply-templates/> </fo:block> </fo:flow> </fo:page-sequence> </fo:root> </xsl:template> <!-- m.fl. templates som gor XSL-FO-markning --></xsl:stylesheet>
22
Mer information om FO
• XSL-FO är en omfattande specifikation, av vilken vi bara skummat på ytan.
• Specifikationen och många bra länkar finns på http://www.w3.org/Style/XSL/
• Kapitlet om XSL-FO från XML Bible finns på http://www.ibiblio.org/xml/books/bible2/chapters/ch18.html