bonjour je cherche à créer un documentimprimable à partir d'un flux xml. On m'a parlé de xsl fo, qui peut transformer en pdf, mais il ya ptete d'autres chose de mieux? Ou un autre format que pdf?
alors si quelqu'un pouvait maiguiller
merci
bonjour je cherche à créer un documentimprimable à partir d'un flux xml. On m'a parlé de xsl fo, qui peut transformer en pdf, mais il ya ptete d'autres chose de mieux? Ou un autre format que pdf?
alors si quelqu'un pouvait maiguiller
merci
Salut,
A mon avis, il n'y a pas beaucoup mieux que le pdf en format imprimable.
En plus, tu peux facilement enregistrer le flux qui n'est d'ailleurs pas modifiable avec Acrobate Reader...
:o
une autre solution serait de créer un document XHTML en XSL.
maintenant avec CSS, il est possible de faire des belles présentation mais il est vrai qu'il y a plus de possibilitées avec PDF
Quel éditeur utilises tuEnvoyé par martimacfly
:
En quoi développes tu:
A+ :o
c'est un flux d'information venant de page fait en jsp avec instruction jsf donc en java en gros koi.
Il est donc clair que tu vas pouvoir utiliser FOP (mais il en existe d'autres) pour générer du pdf (si c'est le format que tu choisis).
Quel EDI utilises tuEnvoyé par martimacfly
:
Je te file l'adresse du site officiel : jettes y un oeil et si tu veux des explications suppémentaires, n'hésite pas.Envoyé par martimacfly
![]()
http://xml.apache.org/fop/index.html
A+ 8)
alors je n'hésite po :-)
mes questions st:
c'est apparemment une version béta, alors n'est ce po trop buggué?
Si on peut le mettre en prod ?
Et aussi le mode de fonctionnement ( je c ke c expliké sur leur site mais je voudrais savoir étape par étape à partir du serveur appache jusqu'au pdf, et les flux qui circule pdt tout ça )
Et encore les autres méthodes possibles pour programmer un truc en java qui me ressortirais du pdf . ( style xsl/fo peut-être ).
merci @+
T'as raison.Envoyé par martimacfly
![]()
Perso, je n'ai jamais eu aucun bug avec FOP et les résultats obtenus sont excellents. 8)Envoyé par martimacfly
Oui, d'ailleurs je le mets en prod en octobre.Envoyé par martimacfly
Tout d'abord, il faut télécharger les classes relatives à FOP et les intégrer à ton projet.Envoyé par martimacfly
Ensuite, il te faudra créer une feuille xslt-fo : nécessaire pour passer d'un flux XML à un flux PDF. Tu en trouveras des exemples sur le forum XML/XSL SOAP.
Puis, il faut connaitre le format de ton flux XML : une simple String ou un fichier:
Perso, je traite une String donc c'est l'exemple que je vais traiter.
J'ai créé une méthode "xmlToPdf" qui renvoie un byte[] (indispensable) et qui prend en paramètre un chemin xsl (String) et un document JDOM (flux XML doit être transformer au préalable avec méthode xmlToJdom), que voici :
Méthode "xmlToJdom" :
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
55
56
57
58 /** * Retourne un tableau de bytes à partir d'un doc JDOM et d'un fichier xslt * * @param xsltPath * @param xml * @throws FlowException */ public static byte[] xmlToPdf(String xsltPath, Document documentJDOM) throws Exception { // Declaration Transformer transformer; Source src; Result res; ByteArrayOutputStream out; Driver driver; Logger logger; byte[] content; // Initialisation transformer = null; src = null; res = null; out = null; driver = null; logger = null; content = null; try { out = new ByteArrayOutputStream(); driver = new Driver(); // Setup logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO); driver.setLogger(logger); MessageHandler.setScreenLogger(logger); driver.setRenderer(Driver.RENDER_PDF); driver.setOutputStream(out); transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new File(xsltPath))); // Setup input for XSLT transformation src = new JDOMSource(documentJDOM); //Resulting SAX events (the generated FO) must be piped through to FOP res = new SAXResult(driver.getContentHandler()); //Start XSLT transformation and FOP processing transformer.transform(src, res); content = out.toByteArray(); return content; } catch (TransformerConfigurationException e) { throw e; } catch (TransformerFactoryConfigurationError e) { throw e; } catch (TransformerException e) { throw e; } }
Donc, tu intègres tout ça dans une servlet pour afficher ce flux pdf avec Acrobate reader (par exemple) :
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 /** * Permet de recuperer un objet JDOM a partir d'un flux XML * sous forme de chaine de caractères * * @param String strXML * * @return org.jdom.Document * * @throws Exception */ public static Document stringToJdom(String strXML) throws Exception { // Declaration InputSource inputSource; SAXBuilder saxBuilder; Document doc; // Initialisation inputSource = null; saxBuilder = null; doc = null; inputSource = new InputSource(new StringReader(strXML)); saxBuilder = new SAXBuilder(); try { doc = saxBuilder.build(inputSource); } catch (JDOMException e) { throw e; } catch (IOException e) { throw e; } return doc; }
Si tu travailles sur des pages jsp, tu peux lancer ta servlet dans un html:link (par exemple) avec le href suivant : href="http://localhost:9080/tonProjet/taServlet"
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 public class RenderPdfServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Déclarations String xsltPath = "D:\\ds-fo.xsl"; Document docXml = null; byte[] content = null; try { // Transformation du document jdom en tableau de bytes content = Utilitaire.xmlToPdf(xsltPath, docXml); System.out.println("preparation de la reponse"); response.setContentType("application/pdf"); response.setContentLength(content.length); response.getOutputStream().write(content); System.out.println("avant flush"); response.getOutputStream().flush(); System.out.println("fin flush"); } catch (Exception e) { throw new ServletException(e); } } }
Le xsl-fo n'est pas une autre méthode mais une méthode complémentaire à FOP.Envoyé par martimacfly
Je ne sais pas si j'ai été très clair (car peu de temps) mais j'eqpère que cela va t'aider à démarrer.
Encore une fois, n'hésites pas à renvoyer un post si tu veux des précisions.
Bon courage.
A+![]()
![]()
merci pour tout ça je vé potasser ce ke tu ma donner et je pense kan mm avoir besoin à un moment ou a un autre .
Sinon ta mise en prod, c une mise en prod pr un projet perso ou pr une société et si une société laquelle ( sans être insdiscret). Car mon truc fo qu'il soit kan meme beton c voué à l'avenir à gérer bcp de truc dc le plantage n'est po permis.
![]()
C'est pour une société qui fait de l'échange de données informatisées et là aussi, le plantage n'est pas permis.Envoyé par martimacfly
![]()
A+
![]()
je viens de parcourir ton code et je vé é c yé de récapituler
dit moa si je me trompe mais ta méthode xmlToJdom ne devrait-elle po ê avant xmlToPdf (je c bien que ça na po d'importance en java mé c juste por comprendre l'ordre logique du truc).
l'application donnera:
données (en fait ce sera des set qui contiendront les données dont g besoin)
-->
appli java (on utlise sax ou dom ?pr créer un flux xml à partir des données en entrées)
-->
ensuite interviendrait ta méthode xmlToJdom (c ça?)
-->
enfin c avec xmlToPdf que tu crée un flux pdf que tu envoie ou ke tu veux selon ton traitement ( moi j'utiliserais du jsf)
Mea culpa, dans l'ordre des choses, j'aurais dû te l'écrire avant. Mais dans l'absolu, tu peux l'appeler après l'avoir déclarer : ça marche quand même.
![]()
En tout cas, je vois que tu as tout compris.![]()
![]()
merci merci, mais je ne cris po victoire pr autant car il me reste du boulot (surtout le xsl:fo à mon avis car pour le reste grace à toi je vé é c yé de repiquer un peu de code)
Donc à très bientôt je pense et encore merci c cool une communauté comme ça
Te voilà un site qui devrait t'aider pour débuter en xsl-fo :
http://zvon.org/xxl/xslfoReference/Output/index.html
Bon courage.
g une autre question :
tu m'a dit n'avoir po u de pb et kil ne plantait po fop, mais apparemment le projet n'est plus suivi ce ki pose le problème de l'évolutivité futur de cette méthode ça serait dommage de recoder tout ce module si on change de tek.
Qu'en pense tu?
merci d'ecrire francais,les regles de ce forum imposent un minimum d'orthographe et l'interdiction d'utiliser un style sms ou s'en approchantEnvoyé par martimacfly
![]()
C'est le cas, ça fait 3 mois que j'ai intégré les classes java relatives à FOP dans mon projet et je n'ai vraiment aucun soucis.Envoyé par martimacfly
Les documents pdf que je génèrent non jamais buggués.
No problem![]()
Qu'est ce que tu entends par "n'est plus suivi"Envoyé par martimacfly
:
Ces classes, au jour d'aujourd'hui, sont tout à fait utilisables en l'état.
Mais si demain il existe un autre groupe de classes permettant la génération de pdf, libre à toi de faire évoluer ton projet avec ces nouveaux outils.
Tout est une question de choix technologique : perso, j'ai choisi FOP et je n'ai pas encore trouvé de raison de m'en plaindre.
Peut être que d'autres internautes du forum pourraient nous donner leur avis sur le sujet:
je voudaris savoir ce ke tu entend par çà : String xsltPath ,c'est une chaine de caractère indiquant l'endroit ou se trouve le xsl/fo ?
et g aussi lu un post ki disait ke tu pouvait po faire un pdf a partir d'un flux xml mais il fallait un fichier xml?
et sinon comment ferais-tu pr valider ton flux xml ( ou Jdom je c po trop ) avec une dtd si c possible.
Partager