Générer du contenu SVG

Le but de cette partie est de comprendre comment créer du SVG à partir de DOM.

Rappel : un DOM (Document Object Model) est la représentation sous forme d'arbre d'un document XML.

SVG DOM est une implementation de la SVG DOM API défini dans la recommendation SVG. Elle permet au programmeur de manipuler des documents SVG dans un programme Java.

L'API DOM définit une interface appelée « DOMImplementation » qui représente le commencement de toute impementation DOM.


Le principe est le suivant :


import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.DOMImplementation;
// Pour Visualiser le résultat grâce à JSVGCancas
import org.apache.batik.swing.JSVGCanvas;
import org.w3c.dom.svg.SVGDocument;
import javax.swing.*;
import java.awt.*;

public class TestSVGDOM {

   public static void main(String [] args) {
      /*creation du document en utilisant DOMImplementation, Le Document créé supporte du XML générique et du SVG,
      Le Document
sera casté en (SVGDocument) */

      DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
      String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
      Document doc = impl.createDocument(svgNS, "svg", null);


      /*Construit le contenu SVG */
      // récupère l'élément « root »
      Element svgRoot = doc.getDocumentElement();

      // définie la taille de l'éléemnt « root » pour l'affichage
      svgRoot.setAttributeNS(null, "width", "400");
      svgRoot.setAttributeNS(null, "height", "450");

      // création d'un rectangle
      Element rectangle = doc.createElementNS(svgNS, "rect");
      rectangle.setAttributeNS(null, "x", "10");

      rectangle.setAttributeNS(null, "y", "20");
      rectangle.setAttributeNS(null, "width", "100");
      rectangle.setAttributeNS(null, "height", "50");
      rectangle.setAttributeNS(null, "style", "fill:red");
      // association du rectangle avec l'élément « root »
      svgRoot.appendChild(rectangle);

      /* Visualiser le résultat grâce à JSVGCancas */
      JSVGCanvas svgCanvas = new JSVGCanvas();
      svgCanvas.setSVGDocument((SVGDocument)doc);
      JFrame f = new JFrame("Batik");
      JPanel panel = new JPanel(new BorderLayout());
      panel.add("Center", svgCanvas);
      f.getContentPane().add(panel);
      f.setSize(400, 400);
      f.setVisible(true);
   }
}