22
1 XSL-FO Formatting Objects Ett XML-baserat sidlayoutspråk

XSL-FO

  • View
    3.534

  • Download
    5

Embed Size (px)

DESCRIPTION

XSL-FO

Citation preview

Page 1: XSL-FO

1

XSL-FO Formatting Objects

Ett XML-baserat sidlayoutspråk

Page 2: XSL-FO

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

Page 3: XSL-FO

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

Page 4: XSL-FO

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

Page 5: XSL-FO

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

Page 6: XSL-FO

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>

Page 7: XSL-FO

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>

Page 8: XSL-FO

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.

Page 9: XSL-FO

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>

Page 10: XSL-FO

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.

Page 11: XSL-FO

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>

Page 12: XSL-FO

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.

Page 13: XSL-FO

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>

Page 14: XSL-FO

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

Page 15: XSL-FO

15

PropertiesCSS-exempel

CSSdish {

display:block;font-family: Helvetica, Arial, sans-serif;font-size: 20pt;font-weight: bold;text-align: center

}

Page 16: XSL-FO

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>

Page 17: XSL-FO

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> &#x2022; </fo:list-item-label> <fo:list-item-body> En banan </fo:list-item-body> </fo:list-item></fo:list-block>

Page 18: XSL-FO

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>

Page 19: XSL-FO

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.

Page 20: XSL-FO

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

Page 21: XSL-FO

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>

Page 22: XSL-FO

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