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

2D Java Discussion :

[batik] fichier svg to SVGGraphics2G


Sujet :

2D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut [batik] fichier svg to SVGGraphics2G
    Bonjour,

    Aujourd'hui je crée des fichier SVG avec Batik que je sauvegarde ensuite.
    J'aimerais pouvoir ensuite les re-ouvrir à nouveau et les transformer en objet SVGGraphics2D pour faire des ajouts.

    Mais voila impossible de les transformer en SVGGraphics2D correctement. Mon objet contient bien des nodes, mais tous null (grosso modo) et si je ré-enregistre, et bien le fichier est vide ne contenant que les entête.

    Voici le code que j'utilise pour ouvrir le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private static SVGDocument loadSVGDocument(String uri) {
    	    String parser = XMLResourceDescriptor.getXMLParserClassName();
    	    SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
    	    SVGDocument svgDocument = null;
    	    try {
    	        //svgDocument = factory.createSVGDocument(IMAGE_SVG);
    	    	svgDocument = factory.createSVGDocument(uri);
    	    } catch (IOException e) {
    	    	System.out.println(e.getMessage());
    	    }
     
    	    return svgDocument;
    	}
    puis la transformation en SVGGraphics2D

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SVGDocument svgDocument = loadSVGDocument(TEST_SVG);
    SVGGraphics2D g = new SVGGraphics2D(svgDocument);
    Impossible de comprendre ce qui ne va pas !

    Voila le fichier généré (même fonction que celle d'enregistrement de l'initial qui fonctionne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
              'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
    <svg style="stroke-dasharray:none; shape-rendering:auto; font-family:'Dialog'; text-rendering:auto; fill-opacity:1; color-interpolation:auto; color-rendering:auto; font-size:12px; fill:black; stroke:black; image-rendering:auto; stroke-miterlimit:10; stroke-linecap:square; stroke-linejoin:miter; font-style:normal; stroke-width:1; stroke-dashoffset:0; font-weight:normal; stroke-opacity:1;" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" preserveAspectRatio="xMidYMid meet" xmlns:xlink="http://www.w3.org/1999/xlink" zoomAndPan="magnify" version="1.0" contentStyleType="text/css"
    ><!--Generated by the Batik Graphics2D SVG Generator--><defs id="genericDefs"
      /><g
    /></svg
    >

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Après des jours j'ai trouvé le soucis qui pourrait intéresser certains.
    Dans mon premier post vous voyez que le fichier SVG est créé mais pas tout à fait vide.
    Il y a l’élément root et une balise enfant g.

    J'ai donc comparé à mes fichiers existant, je me suis perçu que dans la svg il manquait les attributs width et height et tout ce que contenait la balise G.

    J'ai donc bidouillé pour mon cas (mais ca doit pouvoir s'améliorer)

    J'ai été chercher les attributs width et height, que j'ai ajouté au graphic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                Element elSVG = svgDocument.getRootElement();
    	    String width = elSVG.getAttribute("width");
    	    String height = elSVG.getAttribute("height");
    puis la première balise g que j'ai ajouté aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                NodeList nodes = elSVG.getElementsByTagName("g");
    	    Node node = nodes.item(0);
    	    Element el = null;
    	    if(Node.ELEMENT_NODE == node.getNodeType()) {
    	    	el = (Element)node;
    	    }
    Maintenant ajout des éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                SVGGraphics2D g = new SVGGraphics2D(svgDocument);
    	    g.setTopLevelGroup(el);
    	    g.setSVGCanvasSize(new Dimension(Integer.parseInt(width), Integer.parseInt(height)));
    Je ne sais pas si c'est un bug de la librairie mais je trouve ca bien galère.

    Par contre si je re-ouvre un fichier avec plusieurs balise g en enfant de svg ca ne prend que la première.

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

Discussions similaires

  1. [Batik] Lire un fichier SVG
    Par FuRiOuZ dans le forum Graphisme
    Réponses: 2
    Dernier message: 19/09/2013, 01h14
  2. batik : lire un fichier svg
    Par FuRiOuZ dans le forum APIs
    Réponses: 2
    Dernier message: 18/09/2013, 20h12
  3. [XSL] Création de fichiers SVG avec PHP
    Par trotters213 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 17/03/2006, 16h51
  4. modifier un fichier SVG depuis HTML
    Par la.sophe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2006, 21h49
  5. générer un fichier svg avec le bon encoding
    Par TOM-Z dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 24/08/2005, 17h39

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