Générer du contenu SVG
SVG DOM
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 :
- on récupère un
objet « DOMImplemntation »;
-
on crée un objet « Document »;
- on cast cet objet « Document »
en un objet « SVGDocument »;
- on
construit le contenu SVG directement sur le SVGDocument.
Exemple : TestSVGDom.java
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);
}
}