Bonjour à tous !
Je cherche à générer un fichier PDF à partir d'un XML et d'un XSL-FO. Dans un premier temps, j'ai ecrit mon xsl sous XML Spy. Pour centraliser mes templates, j'ai créé un autre xsl appelé common.xsl et je l'ai mis dans un dossier common.
J'ai donc le debut de mon xsl qui ressemble à ca :
Le problème vient du fait que maintenant je veux générer mon pdf en java et non plus avec xml Spy. Du coup j'ai créé la méthode suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:fox="http://xml.apache.org/fop/extensions"> <xsl:import href="common/common.xsl"/>
Cette méthode se situe dans une classe CTest qui est dans le package com.test.xslfo. Dans ce package se trouve également un dossier xsl, dans lequel j'ai mis mon xslfo, ainsi que le repertoire common qui contient common.xsl. Vous suivez ?? non ?? Bon voila l'arborescence:
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 private static void convertXml2Pdf(InputStream xml, InputStream xslt, File pdf) throws IOException, TransformerException { // Construct driver Driver driver = new Driver(); // Setup logger Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO); driver.setLogger(logger); MessageHandler.setScreenLogger(logger); // Setup Renderer (output format) driver.setRenderer(Driver.RENDER_PDF); // Setup output OutputStream out = new FileOutputStream(pdf); try { driver.setOutputStream(out); // Setup XSLT TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(new StreamSource(xslt)); // Setup input for XSLT transformation Source src = new StreamSource(xml); // Resulting SAX events (the generated FO) must be piped through to FOP Result res = new SAXResult(driver.getContentHandler()); // Start XSLT transformation and FOP processing transformer.transform(src, res); } finally { out.close(); } }
\org\test\xslfo
|
|_ \xsl
| |_ \common
| | |_comon.xsl
| |
| |_monxsl.xsl
|
|_CTest.java
Donc mon problème vient du fait que lorsque je veux générer mon PDF, fop me lance une exception en me disant qu'il ne peut pas trouver common.xsl. En fait il ne le cherche pas dans le repertoire org.test.xslfo.xsl.common mais dans le repertoire common tout court.
Ma question est la suivante, est ce qu'il est possible de forcer le repertoire de travail de FOP pour lui dire de travailler dans le repertoire que je veux ??
En esperant avoir été clair![]()
![]()
Merci d'avance...
Partager