Introduction À XSL- FO I
Total Page:16
File Type:pdf, Size:1020Kb
Langages de publication paginée Ingénierie Documentaire http://doc.crzt.fr Stéphane Crozat 14 septembre 2016 Table des matières I - Introduction à XSL-FO 3 1. Qu'est ce que XSL-FO ? ......................................................................................................... 3 2. Structure d'un fichier XSL-FO ................................................................................................ 3 3. Exemple XSL-FO ....................................................................................................................... 4 II - Introduction à XHTML+CSS pour la publication PDF 6 1. Principe ........................................................................................................................................ 6 2. Exemple ....................................................................................................................................... 7 3. Flying Saucer .............................................................................................................................. 8 III - Exercices 10 1. Travaux pratiques FO et Flying Saucer ............................................................................... 11 1.1. Exercice : ............................................................................................................................................................ 11 1.2. Exercice : ............................................................................................................................................................ 12 1.3. Exercice : ............................................................................................................................................................ 15 Solutions des exercices 16 Bibliographie 17 Introduction à XSL-FO Introduction à XSL- FO I 1. Qu'est ce que XSL-FO ? Définition : XSL Formatting Objects XSL-FO (on parle généralement plus simplement de FO) est la seconde partie du langage XSL, qui définit un langage de présentation en vue de la publication de documents imprimables. C'est un langage XML permettant d'obtenir un fichier PDF une fois traité par un moteur de rendu FO. Remarque : FO est un langage de publication Le langage FO n'est pas destiné à être écrit manuellement, mais plutôt à être obtenu automatiquement après une transformation XSL-XSLT. Chaîne de publication FO (Technologies Apache) Complément : Moteurs FO - Apache FOP, moteur open source, ne supportant pas la totalité du standard http://xmlgraphics.apache.org/fop - XEP, moteur commercial, plus complet http://www.renderx.com - Antenna House Formatter http://www.antennahouse.com 2. Structure d'un fichier XSL-FO Un fichier XSL-FO est composé de deux parties : - La mise en page générale ou layout - Le contenu et sa mise en forme 3 Exemple XSL-FO Syntaxe 1 <?xml version="1.0" encoding="utf-8"?> 2 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 3 <fo:layout-master-set> 4 <fo:simple-page-master master-name="..."> 5 6 <!--mise en page --> 7 8 </fo:simple-page-master> 9 </fo:layout-master-set> 10 <fo:page-sequence master-reference="..."> 11 12 <!--contenu --> 13 14 </fo:page-sequence> 15 </fo:root> Syntaxe : Balisage de bloc 1 <fo:block> 2 Contenu 3 </fo:block> L'élément fo:block contient des attributs de stylage. Syntaxe : Balisage inline 1 <fo:inline>Contenu</fo:inline> L'élément fo:inline contient des attributs de stylage. 3. Exemple XSL-FO 1 <?xml version="1.0" encoding="utf-8"?> 2 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 3 <fo:layout-master-set> 4 <fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm" margin-top= "1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"> 5 <fo:region-body margin="3cm"/> 6 <fo:region-before extent="2cm"/> 7 <fo:region-after extent="2cm"/> 8 <fo:region-start extent="2cm"/> 9 <fo:region-end extent="2cm"/> 10 </fo:simple-page-master> 11 </fo:layout-master-set> 12 <fo:page-sequence master-reference="A4"> 13 <fo:flow flow-name="xsl-region-body"> 14 <fo:block> 15 <fo:inline font-weight="bold">Hello world!</fo:inline> 16 </fo:block> 17 </fo:flow> 18 </fo:page-sequence> 19 </fo:root> 4 Exemple XSL-FO Exemple de structure de page FO Complément : Pour aller plus loin - "Publier à partir de XML : Formatting Objects" (par Bruno Bachimont) (cf. fo.pdf) - XML : Cours et exercice * , pp157-167 Complément - Stylesheet Tutorial, Sample Files of Formatting Objects and Sample Stylesheets http://www.antennahouse.com/XSLsample/XSLsample.htm 5 Introduction à XHTML+CSS pour la publication PDF Introduction à XHTML+CSS pour II la publication PDF 1. Principe CSS introduit avec CSS 2.1 puis prolonge avec CSS3 des extensions pour gérer les médias paginés. En effet les pages XHTML destinées à l'écran ne sont pas paginées : le scrolling permet d'étendre la taille d'une page à l'infini. À l'inverse, lors d'une impression typiquement, la taille de la page est fixe. Ces extensions recouvrent typiquement la gestion : - des format de papiers - des marges d'impression - des sauts de pages manuels et automatiques - des paragraphes solidaires - des veuves et orphelins - des numérotations de pages - des tables de matières - des entêtes et pieds de page - ... Schéma de principe Chaîne de publication CSS (Technologies Apache et Flying Saucer) Exemple : Exemples de moteurs XHTML+CSS - PrinceXML Référence commerciale (version d'évaluation disponible). 6 Exemple http://www.princexml.com/ - Flying Saucer Moteur Open Source. http://code.google.com/p/flying-saucer/ - Antenna House Formatter http://www.antennahouse.com/ Complément : Standards associés - CSS3 Module: Paged Media, W3C Working Draft, 10 October 2006. http://www.w3.org/TR/css3-page/ - CSS Paged Media Module Level 3, Editor's Draft, 6 October 2011. http://dev.w3.org/csswg/css3-page/ - CSS Generated Content for Paged Media Module, W3C Working Draft, 08 June 2010. http://www.w3.org/TR/css3-gcpm/ - CSS Fonts Module Level 3, W3C Working Draft, 4 October 2011. http://www.w3.org/TR/css3-fonts/ - Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification, W3C Recommendation, 07 June 2011. http://www.w3.org/TR/CSS21/ Rappel Structure générale XHTML (cf. p.) Balises de base XHTML (cf. p.) Introduction à CSS (cf. p.) 2. Exemple Exemple : XHTML 1 <html> 2 <head> 3 <title>Document</title> 4 <link href="exemple.css" type="text/css" rel="stylesheet"/> 5 </head> 6 <body> 7 <h1>Document</h1> 8 <div id="chapter1" class="part chapter"> 9 <h2>Chapitre 1</h2> 10 <p>...</p> 11 <p>...</p> 12 </div> 13 <div id="chapter2" class="part chapter"> 14 <h2>Chapitre 2</h2> 15 <p>...</p> 16 </div> 17 </body> 18 </html> 7 Flying Saucer Exemple : CSS 1 @page { 2 size: A4 portrait; 3 margin: 2cm; 4 @bottom-right { 5 content: counter(page); 6 font-size: 8pt; 7 font-family: "Computer Modern"; 8 text-align: right; 9 } 10 } 11 div.part { 12 page-break-before: always; 13 } 14 h1, h2 { 15 text-align: center; 16 } 17 p { 18 text-align: justify; 19 orphans: 0; 20 widows: 0; 21 } Complément - Introduction to page composition with CSS http://www.antennahouse.com/CSSInfo/index.html 3. Flying Saucer Flying Saucer est un moteur de rendu permettant de générer du PDF à partir d'une source XHTML+CSS. Il exploite les possibilités de CSS 2.1 et quelques fonctions CSS3. Il est Open Source. Fondamental : Programme Flying Saucer Télécharger la version officielle en ligne sur http://code.google.com/p/flying-saucer/ [cf. Exécutable Java Flying Saucer] Syntaxe : Ligne de commande Flying Saucer (Linux et Mac) 1 java -cp lib/core-renderer.jar:lib/iText-2.1.7.jar org.xhtmlrenderer.simple.PDFRenderer <input.xhtml> <output.pdf> Syntaxe : Ligne de commande Flying Saucer (Windows) 1 java -cp lib/core-renderer.jar;lib/iText-2.1.7.jar org.xhtmlrenderer.simple.PDFRenderer <input.xhtml> <output.pdf> 8 Flying Saucer Remarque - FS prend en entrée du XHTML, le fichier HMTL doit donc être un XML valide - FS échoue quelques fois à générer un nouveau PDF lorsque le fichier de destination est ouvert (le supprimer en cas de problème). Complément http://code.google.com/p/flying-saucer/ 9 Exercices Exercices III 10 Exercice : 1. Travaux pratiques FO et Flying Saucer 1.1. Exercice : [45 min] Soit les fichiers DITA ci-après. 1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- wheelbarrow.xml --> 3 <concept id="wheelbarrow" xml:lang="en-us"> 4 <title>Wheel barrow</title> 5 <conbody> 6 <p>A good wheel barrow will save your back from extensive trauma when you garden.</p> 7 </conbody> 8 </concept> 1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- takinggarbage.xml --> 3 <task id="takinggarbage" xml:lang="en-us"> 4 <title>Taking out the garbage</title> 5 <taskbody> 6 <steps> 7 <step><cmd>Find out from the town what day of the week garbage is collected in your neighborhood. </cmd></step> 8 <step><cmd>The night before collection, place the garbage cans on the curb.</cmd></step> 9 <step><cmd>After the garbage has been collected, move the cans back into your garage. </cmd></step> 10 </steps> 11 </taskbody> 12 <related-links> 13 <link href="../concepts/lawnmower.xml" format="dita" type="concept" ><linktext>Lawnmower</linktext></link> 14 </related-links> 15 </task> 11 Exercice : Question 1 [solution n°1[*] p.16] En utilisant Oxygen, produire une XSLT qui permet de publier en PDF via FO le fichier de type concept. Indices : Oxygen : Transformations XSLT (cf. p.) Scénario de publication XSLT->FO->PDF avec Oxygen Penser à la gestion des namespaces. 1 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http: //www.w3.org/1999/XSL/Format"> Question 2 Traiter de