Téléchargement des produits


Version anglaise


 

Présentation

Cette bibliothèque regroupe un certain nombre de fonctions et macros permettant de définir des regroupements d'attributs de style XSL-FO, et de les appliquer en cascade sur les balises XSL-FO d'un document à la manière de CSS (Cascading Style Sheet) avec les balises HTML.

Ces directives doivent être appelées en précisant l'espace de noms "hardisCSS" :

<@hardisCSS.toolMacro parameters>…</@hardisCSS.toolMacro>
 ${ hardisCSS.toolFunction(…) }

 

Il est nécessaire d'avoir des connaissances en CSS pour pouvoir utiliser cette bibliothèque.

 

Les macros et fonctions de cette bibliothèque ne peuvent s'utiliser qu'avec des templates de document XSL-FO définis entièrement à l'aide les macros de la bibliothèque hardisFo (et non pas avec les balises XSL-FO standards <fo:xxx>).

 

Cette bibliothèque permet de définir des règles de style de mise en page. Contrairement à HTML, XSL-FO n'a pas de langage de définition de style qui lui est propre : les règles de style XSL-FO vont se baser directement sur les attributs des balises XSL-FO (par exemple : font-family, padding, text-align, etc.).

 

Chaque sélecteur de règle de style doit s'écrire en utilisant la spécification CSS 2.1. Certains sélecteurs spécifiques au HTML ou certains sélecteurs de fils ne sont pas supportés, à savoir :

  • Les pseudo-classes (par exemple :hover, :visited, :focus, :nth-last-of-type(), :last-child, etc.),
  • Les pseudo-éléments (par exemple ::after, ::first-letter, etc.).

 

Les autres sélecteurs sont supportés, à savoir :

  • Les sélecteurs d'éléments (de balise). Par exemple "foBlock" pour tous les éléments hardisFo.foBlock du document.
  • Les sélecteurs de classes. Par exemple ".greenClass". Les macros hardisFo représentant une balise XSL-FO ont un attribut "class" permettant de lui associer une classe.
  • Les sélecteurs d'ID (identifiant). Par exemple "#totalBlock". Les macros hardisFo représentant une balise XSL-FO ont un attribut "id" permettant de lui associer un identifiant.
  • Le sélecteur universel "*".
  • Les sélecteurs d'attributs. Par exemple [break-after], [character=C].
  • Les sélecteurs de combinaisons. Par exemple A, B ou A B ou A > B ou A + B ou A ~ B où A et B sont des sélecteurs.

 

Lors du traitement d'un template, l'ensemble des macros "rule" définissant les règles de style XSL-FO doivent être exécutées avant le document XSL-FO (les règles de style doivent être connues par le moteur Freemarker avant le traitement du document XSL-FO) : les macros "rule" sont à placer "avant" la macro hardisFo.foRoot, soit en les insérant en en-tête (entre le prologue XML et la macro hardisFo.foRoot) dans le template principal (par analogie avec CSS, dans une balise <style> contenue dans la balise <head>), soit en les plaçant dans un sous-template .ftlx, qui sera inclus (via la directive <#include>) en en-tête du template principal (par analogie avec CSS, dans une feuille de style incluse via la balise <link>).

↑ Haut de page

Exemple de template

<?xml version="1.0" encoding="utf-8"?>
<#-- CSS rules declaration -->
<@hardisCSS.rule selectors = ".title" >
	<@hardisCSS.declaration property = "font-size" >14pt</@hardisCSS.declaration>
	<@hardisCSS.declaration property = "border" >solid red 3pt</@hardisCSS.declaration>
	<@hardisCSS.declaration property = "text-align" >center</@hardisCSS.declaration>
	<@hardisCSS.declaration property = "fox:border-radius" >5pt</@hardisCSS.declaration>
</@hardisCSS.rule>
<@hardisCSS.rule selectors = "foBlock foInline" >
	<@hardisCSS.declaration property = "text-transform" >uppercase</@hardisCSS.declaration>
</@hardisCSS.rule>
<@hardisCSS.rule selectors = "#specialText" >
	<@hardisCSS.declaration property = "color" >green</@hardisCSS.declaration>
</@hardisCSS.rule>
<#-- XSL-FO document using hardisFo macros -->
	<@hardisFo.foRoot xmlns\:fox = "http://xmlgraphics.apache.org/fop/extensions" >
		<@hardisFo.foLayoutMasterSet>
			<@hardisFo.foSimplePageMaster masterName = "sampleLayout" pageHeight = "29.7cm" pageWidth = "21cm" marginTop = "2.5cm" marginBottom = "2.5cm" marginLeft = "1cm" marginRight = "1cm" >
				<@hardisFo.foRegionBody/>
			</@hardisFo.foSimplePageMaster>
	</@hardisFo.foLayoutMasterSet>
	<@hardisFo.foPageSequence masterReference = "sampleLayout" >
		<@hardisFo.foFlow flowName = "xsl-region-body" >
				<@hardisFo.foBlock class = "title" > Sample of CSS use</@hardisFo.foBlock>
				<@hardisFo.foBlock>
					In this block, every inline text is <@hardisFo.foInline>uppercase</@hardisFo.foInline>
				<@hardisFo.foBlock>
					This is the <@hardisFo.foInline>second</@hardisFo.foInline> sentence.
				</@hardisFo.foBlock>
				<@hardisFo.foBlock>
					This is the third sentence with a particular <@hardisFo.foInline id = "specialText" >inline text</@hardisFo.foInline>.
				</@hardisFo.foBlock>
			</@hardisFo.foBlock>
		</@hardisFo.foFlow>
	</@hardisFo.foPageSequence>
</@hardisFo.foRoot>

↑ Haut de page

Macros

declaration

Associe à un nom d'attribut de balise XSL-FO une valeur. Le nom de l'attribut est la valeur du paramètre "property" et la valeur de l'attribut est le contenu de la balise. La valeur de l'attribut doit correspondre au type de l'attribut tel qu'il est défini dans la spécification Extensible Stylesheet Language (XSL) Version 1.1 (cliquez ici pour plus de détails). Par analogie avec CSS, cette macro définit une déclaration CSS (propriété CSS : valeur).

Cette macro ne peut être utilisée qu'à l'intérieur de la macro "rule".

Comme en CSS, il est possible de suffixer la valeur de l'attribut XSL-FO par "!important" : ceci permet de spécifier que cet attribut (et sa valeur) a une priorité plus forte que tout autre attribut de même nom (et de valeur différente) issu d'une autre règle applicable sur une balise donnée.


Directive vide : Non

 

Paramètres

String

property

Nom d'attribut de balise XSL-FO

Obligatoire

 

Par exemple

<#-- Associer la valeur "green" à l'attribut color -->
<@hardisCSS.declaration property="color">green</@hardisCSS.declaration>
<#-- Associer la valeur "14p" à l'attribut font-size -->
<@hardisCSS.declaration property="font-size">14pt</@hardisCSS.declaration>
<#-- Associer la valeur "solid red 10pt" à l'attribut "fox:border-radius" -->
<@hardisCSS.declaration property="fox:border-radius">solid red 10pt</@hardisCSS.declaration>
<#-- Associer la valeur "#a1e2bc" à l'attribut "background-color" avec une priorité plus forte -->
<@hardisCSS.declaration property="background-color">#a1e2bc !important</@hardisCSS.declaration>

↑ Haut de page

rule

Définit une règle de style XSL-FO. Par analogie avec CSS, une règle est définie par :

  • des sélecteurs,
  • un bloc ou ensemble de déclarations.

 

Avec cette macro, les sélecteurs sont définis par le paramètre "selectors". Chaque déclaration est définie par un appel à la macro "declaration", qui doit se trouver à l'intérieur de la macro "declaration".

 

Exemple de syntaxe :

<#-- Définit une règle associée au sélecteur .greenTitleClass -->
<@hardisCSS.rule selectors=".greenTitleClass">
<#-- qui contient 3 déclarations -->
<@hardisCSS.declaration property="text-align">center</@hardisCSS.declaration>
<@hardisCSS.declaration property="font-style">italic</@hardisCSS.declaration>
<@hardisCSS.declaration property="color">green</@hardisCSS.declaration>
</@hardisCSS.rule>

 


Directive vide : Non


Paramètres

String

selectors

Sélecteur ou ensemble des sélecteurs de règles à la syntaxe CSS

Obligatoire


Par exemple

<@hardisCSS.rule selectors=".class1">
<@hardisCSS.declaration property="color">red</@hardisCSS.declaration>
</@hardisCSS.rule>
<@hardisCSS.rule selectors=".class2">
<@hardisCSS.declaration property="background-color">pink</@hardisCSS.declaration>
<@hardisCSS.declaration property="color">blue</@hardisCSS.declaration>
</@hardisCSS.rule>
<@hardisCSS.rule selectors=".class2 > .class1">
<@hardisCSS.declaration property="background-color">aqua</@hardisCSS.declaration>
</@hardisCSS.rule>
<@hardisCSS.rule selectors=".class3 , .class4 > foBlock ">
<@hardisCSS.declaration property="display-align">center</@hardisCSS.declaration>
<@hardisCSS.declaration property="text-align">center</@hardisCSS.declaration>
</@hardisCSS.rule>
 

Fonctions

Aucune.

↑ Haut de page

  • Aucune étiquette