IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSL~FO] Factorisation de fo:page-sequence


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 15
    Points
    15
    Par défaut [XSL~FO] Factorisation de fo:page-sequence
    Bonjour à tous,
    je suis en train de tester un truc et j'ai un petit souci.

    je veux générer des documents PDF via xml/xsl. j'ai différents type de document:

    exemple doc1 est composé de :
    page A
    page B

    et doc2 est composé de :
    page A
    page C

    voici comment je comptais décrire mes fichiers xml
    pour doc1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <root>
       <pageA>
           <....>
       </pageA>
       <pageB>
           <....>
       </pageB>
    </root>
    et pour doc 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <root>
       <pageA>
           <....>
       </pageA>
       <pageC>
           <....>
       </pageC>
    </root>
    voici comment je pensait faire en xsl:

    créer un xsl par document dans lequel je décris des séquences de pages différentes en fonction du doc.

    mais dans ce cas j'ai du code en double pour la description de pageA identique dans 2 xsl.


    Y-a-t-il moyen de factoriser cette partie?
    avec une sorte d'include,href ou autre chose?


    merci d'avance.

  2. #2
    Membre éclairé
    Avatar de marabout
    Homme Profil pro
    Consultant E-Learning
    Inscrit en
    Août 2006
    Messages
    650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant E-Learning

    Informations forums :
    Inscription : Août 2006
    Messages : 650
    Points : 852
    Points
    852
    Par défaut
    Il me semble qu'en utilisant des templates tu peux y arriver...

    Dans ton template principale tu devrais avoir quelquelchose du genre:
    <xsl:apply-templates select="pageA" />
    <xsl:apply-templates select="pageB" />
    <xsl:apply-templates select="pageC" />
    (avec éventuellement une petite condition entre les lignes)
    et puis, pour chaque type de page, tu as une définition dans un
    <xsl:template match="pageA">
    ....
    </xsl:template>

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    merci marabout

    ca je l'ai essayé le problème c'est que je veut mettre la description de chaque page dans un xsl distinct donc chaque template de page correspond à peu près à ca:

    pageA.xsl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    <xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:template match="pageA">
     
    		<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    			<fo:layout-master-set>
    				<!--definition de la page A-->
    				<fo:simple-page-master 
    					margin-bottom="0mm" 
    					margin-left="0mm" 
    					margin-right="0mm"
    				 	margin-top="0mm" 
    				 	master-name="pageA" 
    				 	page-height="297mm" 
    				  	page-width="210mm">
    				  		<fo:region-body   margin-bottom="24mm" margin-left="5mm" margin-right="5mm" margin-top="41mm"/>
    						<fo:region-before extent="41mm"/>
    						<fo:region-after   extent="24mm"/>
    				</fo:simple-page-master>
     
     
    			</fo:layout-master-set>
     
    			<!--definition de la sequence pageA-->
    			<fo:page-sequence master-reference="pageA">
    ...
    ...
    ...
    	</fo:page-sequence> <!-- closes the page-sequence -->
     
     
    		</fo:root>
    </xsl:template> 
    </xsl:stylesheet>


    pageB.xsl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    <xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    	<xsl:template match="pageB">
     
    		<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    			<fo:layout-master-set>
    				<!--definition de la page B-->
    				<fo:simple-page-master 
    					margin-bottom="0mm" 
    					margin-left="0mm" 
    					margin-right="0mm"
    				 	margin-top="0mm" 
    				 	master-name="pageB" 
    				 	page-height="297mm" 
    				  	page-width="210mm">
    				  		<fo:region-body   margin-bottom="24mm" margin-left="5mm" margin-right="5mm" margin-top="41mm"/>
    						<fo:region-before extent="41mm"/>
    						<fo:region-after   extent="24mm"/>
    				</fo:simple-page-master>
     
     
    			</fo:layout-master-set>
     
    			<!--definition de la sequence pageB-->
    			<fo:page-sequence master-reference="pageB">
    ...
    ...
    ...
    	</fo:page-sequence> <!-- closes the page-sequence -->
     
     
    		</fo:root>
    </xsl:template> 
    </xsl:stylesheet>
    du coup je me choppe une exception du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    [error] Fatal parse error: line 0, column 0: no such prefix "fo"
        [error] com.jclark.xsl.om.XSLException: no such prefix "fo"
    javax.xml.transform.TransformerException: com.jclark.xsl.om.XSLException: no such prefix "fo"
    	at org.apache.xalan.transformer.TransformerImpl.transformNode(Unknown Source)
    	at org.apache.xalan.transformer.TransformerImpl.transform(Unknown Source)
    	at org.apache.xalan.transformer.TransformerImpl.transform(Unknown Source)
    	at org.apache.xalan.transformer.TransformerImpl.transform(Unknown Source)
    	at com.renderx.xep.FOTransformer.transform(Unknown Source)
    	at JAXPSample.JAXPSample.main(JAXPSample.java:87)
    Caused by: com.jclark.xsl.om.XSLException: no such prefix "fo"
    	at com.jclark.xsl.sax.XSLProcessorImpl.handleXSLException(XSLProcessorImpl.java)
    	at com.jclark.xsl.sax.XSLProcessorImpl.parse(XSLProcessorImpl.java)
    	at com.renderx.xep.ValidatorCore.validate(Unknown Source)
    	at com.renderx.xep.FormatterCore$ContentHandlerDriver.endDocument(Unknown Source)
    	at org.apache.xalan.transformer.ResultTreeHandler.endDocument(Unknown Source)
    	... 6 more
    quelqu'un a une idée?

    merci d'avance!

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Bon j'ai trouvé,
    j'avais du faire un betise la première fois que je 'ai essayé cette solution.

    j'ai factoriser les balises :
    <fo:root> et <fo:layout-master-set>

    du coup ca me va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    	<!--****************************************-->
    	<!--XSL Version:V0.0-00-01,DATE 11.10.2006  -->
    	<!--****************************************-->
    	<!DOCTYPE stylesheet>
    	<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    		<!-- le kit 1 est composé d'une pageA donc on faire référence au xsl pageA-->
    		<xsl:include href="pageA.xsl" />
    		<xsl:include href="pageB.xsl" />
     
    		<xsl:template match="/">
     
    			<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    				<fo:layout-master-set>
    					<!--definition de la page A-->
    					<fo:simple-page-master 
    						margin-bottom="0mm" 
    						margin-left="0mm" 
    						margin-right="0mm"
    						margin-top="0mm" 
    						master-name="pageA" 
    						page-height="297mm" 
    						page-width="210mm">
    						<fo:region-body   margin-bottom="24mm" margin-left="5mm" margin-right="5mm" margin-top="41mm"/>
    						<fo:region-before extent="41mm"/>
    						<fo:region-after   extent="24mm"/>
    					</fo:simple-page-master>
     
    						<!--definition de la pageB-->
    						<fo:simple-page-master 
    							margin-bottom="0mm" 
    							margin-left="0mm" 
    							margin-right="0mm"
    							margin-top="0mm" 
    							master-name="pageB" 
    							page-height="297mm" 
    							page-width="210mm">
    							<fo:region-body   margin-bottom="24mm" margin-left="5mm" margin-right="5mm" margin-top="41mm"/>
    							<fo:region-before extent="41mm"/>
    							<fo:region-after   extent="24mm"/>
    						</fo:simple-page-master>
     
     
    				</fo:layout-master-set>
    			<!--appel du template pageA-->
    			<xsl:apply-templates select="kit1/pageA" />
    			<xsl:apply-templates select="kit1/pageB" />
    				</fo:root>
    		</xsl:template>
     
     
    	</xsl:stylesheet>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 19
    Dernier message: 17/11/2010, 16h31
  2. [XSL-FO] Problème de pages blanches entre deux page-sequence
    Par slopera dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 28/03/2006, 16h10
  3. [XSL-FO] probleme numérotation de page
    Par chouchou93 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 03/02/2006, 08h29
  4. xsl:fo page-sequence-master
    Par yuri dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/01/2006, 16h25
  5. [xsl] Ajouter 1 élément à la page xml
    Par ametisse dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/03/2003, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo