- From: Bernd Grolig <Bernd.Grolig@ptv.de>
- Date: Thu, 8 Jun 2000 14:55:51 +0200
- To: www-svg@w3.org
Hi, the last days I had some questions concerning how to generate a valid SVG-File within a Java Servlet. I got some very good advice. Thanks to everybody gaving me hints. For everybody interested in this topic, I will post an Example that generates SVG-Code using the SVG-DOM. It's mostly the solution from Dean Jackson using the SVG-DOM Implementation of the SVG Toolkit. There's just a little trick to cast the ServletOutputStream to an OutpustStream in order to work with the XML-Writer Object. That the SVG-Code is shown correctly in the browser, it's necessary to set both mime types: * in the Server Properties, to serve image/svg-xml and in the JavaServlet * and within the ServletResponse (res.setContentType("image/svg-xml"); Bernd Grolig Here is the Code: import org.csiro.svg.parser.*; import org.csiro.svg.dom.*; import org.w3c.dom.svg.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // this is a sample file that shows how to create an svg document and // write it to a file public class CreateSVG extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("image/svg-xml"); ServletOutputStream out = res.getOutputStream(); try { SVGDocument svgDoc = new SVGDocumentImpl(true); // the "true" indicates that this is to be a stylable svg doc // create root <svg> element and add it to doc SVGSVGElement root = (SVGSVGElement)svgDoc.createElement("svg"); svgDoc.appendChild(root); // set width and height of <svg> element SVGLength width = root.createSVGLength(); width.setValueAsString("15cm"); SVGLength height = root.createSVGLength(); height.setValue(600); root.setWidth(width); root.setHeight(height); // add a circle SVGCircleElement circle = (SVGCircleElement)svgDoc.createElement("circle"); SVGLength cx = root.createSVGLength(); cx.setValue(100); circle.setCx(cx); SVGLength cy = root.createSVGLength(); cy.setValue(100); circle.setCy(cy); circle.setAttribute("r", "50"); circle.setAttribute("style", "fill:red; stroke:black; stroke-width:5"); root.appendChild(circle); // add a rectangle SVGRectElement rect = (SVGRectElement)svgDoc.createElement("rect"); SVGLength rectX = root.createSVGLength(); rectX.setValueAsString("200px"); rect.setX(rectX); SVGLength rectY = root.createSVGLength(); rectY.setValueAsString("250px"); rect.setY(rectY); rect.setAttribute("width", "200"); rect.setAttribute("height", "150"); rect.setAttribute("style", "fill:none; stroke:blue; stroke-width:10"); root.appendChild(rect); // write the svg doc to a file // FileOutputStream out = new FileOutputStream(new File(args[0])); XmlWriter writer = new XmlWriter((OutputStream)out); // need to pass in the doctype declaration so that it can be put at the top of the xml file writer.print(svgDoc, "<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 20000303 Stylable//EN' 'http://www.w3.org/TR/2000/03/WD SVG-20000303/DTD/svg-20000303-stylable.dtd'>"); out.close(); } catch (IOException e) { System.out.println("IOException: " + e.getMessage()); System.exit(1); } } }
Received on Thursday, 8 June 2000 08:55:56 UTC