C'est donc pour répondre à ta problématique
Code :
- En fait dans mon appli java je dois afficher une carte de france et dessiner certain departement en une couleur selon des chiffres que je prends dans une base de donnée.
- J'ai trouve une carte de france en .svg donc je voulais l'introduire a mon appli.
- Si quelqu'un aurait une autre idée ca m'arrangerait
- Peut que quelqu'un a creer le composant JCarteDeFrance
|
Encore faut il que tu puisse installer Cocoon 2. Mais de toute façon ca te permettra de comprendre également le fonctionnement de Batik.
Dans Cocoon 2, il faut :
Faire un XSL définissant l'aspect de ta carte, avec les paramètres en entrée...
Ci dessous un exemple (incomplet) tout simple qui m'a servi à générer des cartes de visite en ligne par exemple, plaquette.xsl :
Code :
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <xsl:stylesheet
- version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:a3="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/">
- <xsl:param name="url_img" />
- <xsl:param name="identity" />
- <xsl:param name="country" />
- <xsl:template match="root">
- <svg xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- preserveAspectRatio="none" mime-type="svg+xml"
- text-rendering="optimizeLegibility"
- width="454" height="374" viewBox="0 0 340 284">
- <defs>
- <g id="object">
- <rect x="0" y="0" width="340" height="142"
- style="fill:rgb(255,255,255);stroke:rgb(0,0,0);stroke-width:1"/>
- <image x="0" y="0" width="340" height="31">
- <xsl:attribute name="xlink:href"><xsl:value-of select="$url_img" />img_01.jpg</xsl:attribute>
- </image>
- <image x="0" y="107" width="340" height="36">
- <xsl:attribute name="xlink:href"><xsl:value-of select="$url_img" />img_02.jpg</xsl:attribute>
- </image>
- <image x="10" y="40" width="25" height="25">
- <xsl:attribute name="xlink:href"><xsl:value-of select="$url_img" />img_03.jpg</xsl:attribute>
- </image>
- <image x="10" y="80" width="25" height="25">
- <xsl:attribute name="xlink:href"><xsl:value-of select="$url_img" />img_04.jpg</xsl:attribute>
- </image>
- <rect x="0" y="0" width="340" height="142"
- style="fill:none;stroke:rgb(0,0,0);stroke-width:1"/>
- <text x="40" y="60" style="fill:rgb(0,0,0);font-size:24;font-family:Arial"><xsl:value-of select="$identity" /></text>
- <text x="40" y="100" style="fill:rgb(0,0,0);font-size:24;font-family:Arial"><xsl:value-of select="$country" /></text>
- </g>
- </defs>
- <g transform="translate(0 142)">
- <use xlink:href="#object" />
- </g>
- <g transform="matrix(-1 3.67382e-016 -3.67382e-016 -1 340 142.5)">
- <use xlink:href="#object" />
- </g>
- </svg>
- </xsl:template>
- </xsl:stylesheet>
|
Dans Cocoon 2, pour approvisionner le XSL avec des données, soit, on crée un fichier XML les contenant, soit on crée un fichier XSP effectuer une requete sur base de donnée, par exemple, plaquette_data.xsp :
Code :
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <xsp:page language="java"
- xmlns:xsp="http://apache.org/xsp"
- xmlns:xsp-request="http://apache.org/xsp/request/2.0"
- xmlns:esql="http://apache.org/cocoon/SQL/v2">
- <!--retrieve all the request parameters-->
- <users>
- <esql:connection>
- <esql:pool>mysql</esql:pool>
- <esql:execute-query>
- <!--selecting the entity-->
- <esql:query>
- select identity, country from users where id_user=<xsp-request:get-parameter name="id_user"/>
- </esql:query>
- <esql:results>
- <esql:row-results>
- <user>
- <identity>
- <esql:get-string column="identity" />
- </identity>
- <country>
- <esql:get-string column="country" />
- </country>
- </user>
- </esql:row-results>
- </esql:results>
- </esql:execute-query>
- </esql:row-results>
- </esql:results>
- </esql:execute-query>
- </esql:connection>
- </users>
- </xsp:page>
|
Ensuite, on définit l'enchainement des pipes et le passage des paramètres dans le sitemap.xmap :
Code :
- <map:match pattern="plaquette_data">
- <map:generate type="xsp" src="xsp/plaquette_data.xsp" />
- <map:transform src="xsl/plaquette.xsl" />
- <map:serialize type="xml" />
- </map:match>
- <map:match pattern="plaquette.svg">
- <map:generate src="cocoon:/plaquette_data" />
- <map:transform src="xsl/plaquette.xsl">
- <map:parameter name="use-request-parameters" value="true" />
- </map:transform>
- <map:serialize type="svgxml" />
- </map:match>
- <map:match pattern="plaquette.jpg">
- <map:generate src="cocoon:/plaquette_data" />
- <map:transform src="xsl/plaquette.xsl">
- <map:parameter name="use-request-parameters" value="true" />
- </map:transform>
- <map:serialize type="svg2jpeg" />
- </map:match>
|
Voila, cet exemple est à peine incomplet (ca fait un bail que j'ai plus fait de Cocoon 2), mais, il te permet en tapant dans ton browser :
plaquette.svg?id_user=1
--> de créer la plaquette avec l'identité de l'utilisateur 1, en SVG
plaquette.jpg?id_user=1
--> de créer la plaquette en JPEG
y a aussi de serializer pour le PNG
en plus, en SVG, tu peux également générer la partie javascript sous Cocoon 2 ce qui est très pratique.
Si jamais, tu essaie, fais moi savoir, je te donnerai des exemples plus complexes, avec drag & drop, effets de transparence et le toutim... ![[:chocoboy] [:chocoboy]](https://forum-images.hardware.fr/images/perso/chocoboy.gif)
Message édité par chocoboy le 02-09-2003 à 19:42:04