blob: 20d95eff78dc943bbca69664fdf0ae7cd349077b [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2012 SAP AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API, implementation and documentation
* mwenz - Bug 373298 - Possible Resource leaks in Graphiti
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.export.batik;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.apache.batik.dom.GenericDOMImplementation;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.graphiti.ui.internal.util.ui.print.IDiagramsExporter;
import org.eclipse.swt.graphics.Image;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
/**
* Extending the Graphiti framework with an export option for SVG.
*/
public class SVGExporter implements IDiagramsExporter {
public void export(Image im, IFigure figure, String fileName, Double scaleFactor) throws Exception {
// Get a DOMImplementation.
DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();
// Create an instance of org.w3c.dom.Document.
String svgNS = "http://www.w3.org/2000/svg"; //$NON-NLS-1$
Document document = domImpl.createDocument(svgNS, "svg", null); //$NON-NLS-1$
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
ctx.setEmbeddedFontsOn(true);
// Create an instance of the SVG Generator and paint the
// figure.
SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
Rectangle bounds = new Rectangle(0, 0, figure.getBounds().width, figure.getBounds().height);
GraphicsToGraphics2DAdaptor graphicsAdaptor = new GraphicsToGraphics2DAdaptor(svgGenerator, bounds);
figure.paint(graphicsAdaptor);
// Finally, stream out SVG to the standard output using
// UTF-8 encoding.
boolean useCSS = false;
Writer out = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8"); //$NON-NLS-1$
// svgGenerator.setRenderingHint(SVG_WIDTH_ATTRIBUTE
svgGenerator.stream(out, useCSS);
graphicsAdaptor.dispose();
}
}