/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2004 Joerg Mueller, Daniel Polansky, Christian Foltin and others. * *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Created on 10.11.2004 */ package plugins.svg; //import java.awt.BasicStroke; //import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Rectangle; import java.awt.RenderingHints; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Iterator; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.apache.batik.dom.GenericDOMImplementation; import org.apache.batik.svggen.SVGGeneratorContext; import org.apache.batik.svggen.SVGGeneratorContext.GraphicContextDefaults; import org.apache.batik.svggen.SVGGraphics2D; import org.apache.batik.util.SVGConstants; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import freemind.extensions.ExportHook; import freemind.modes.MindMapNode; import freemind.view.mindmapview.MapView; import freemind.view.mindmapview.NodeView; /** * @author foltin * */ public class ExportVectorGraphic extends ExportHook { /** */ protected SVGGraphics2D fillSVGGraphics2D(MapView view) { // NodeAdapter root = (NodeAdapter) getController().getMap().getRoot(); SVGGraphics2D g2d = createSvgGraphics2D(); try { view.preparePrinting(); Rectangle innerBounds = view.getInnerBounds(); g2d.setSVGCanvasSize(new Dimension(innerBounds.width, innerBounds.height)); g2d.translate(-innerBounds.x, -innerBounds.y); // // Generate SVG content // view.print(g2d); } finally { view.endPrinting(); } // g2d.setColor(Color.BLACK); // g2d.setStroke(new BasicStroke(3)); // g2d.drawRect(innerBounds.x, innerBounds.y, innerBounds.width - 2, // innerBounds.height - 2); return g2d; } protected SVGGraphics2D fillSVGGraphics2D(MapView view, MindMapNode pNode) { SVGGraphics2D g2d = createSvgGraphics2D(); try { view.preparePrinting(); Rectangle innerBounds = null; ; for (Iterator it = pNode.getViewers().iterator(); it.hasNext();) { NodeView nodeView = (NodeView) it.next(); if (innerBounds == null) { innerBounds = nodeView.getInnerBounds(); } else { innerBounds.add(nodeView.getInnerBounds()); } } g2d.setSVGCanvasSize(new Dimension(innerBounds.width, innerBounds.height)); g2d.translate(-innerBounds.x, -innerBounds.y); // // Generate SVG content // for (Iterator it = pNode.getViewers().iterator(); it.hasNext();) { NodeView nodeView = (NodeView) it.next(); nodeView.print(g2d); } } finally { view.endPrinting(); } // g2d.setColor(Color.BLACK); // g2d.setStroke(new BasicStroke(3)); // g2d.drawRect(innerBounds.x, innerBounds.y, innerBounds.width - 2, // innerBounds.height - 2); return g2d; } public SVGGraphics2D createSvgGraphics2D() { DOMImplementation impl = GenericDOMImplementation .getDOMImplementation(); String namespaceURI = SVGConstants.SVG_NAMESPACE_URI; Document domFactory = impl.createDocument(namespaceURI, "svg", null); SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(domFactory); ctx.setEmbeddedFontsOn(true); GraphicContextDefaults defaults = new GraphicContextDefaults(); defaults.setFont(new Font("Arial", Font.PLAIN, 12)); ctx.setGraphicContextDefaults(defaults); ctx.setPrecision(12); SVGGraphics2D g2d = new SVGGraphics2D(ctx, false); // This prevents the // "null incompatible with text-specific antialiasing enable key" error g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT); return g2d; } public void transForm(Source xmlSource, InputStream xsltStream, File resultFile, String areaCode) throws FileNotFoundException { // System.out.println("set xsl"); Source xsltSource = new StreamSource(xsltStream); // System.out.println("set result"); Result result = new StreamResult(new FileOutputStream(resultFile)); // create an instance of TransformerFactory try { // System.out.println("make transform instance"); TransformerFactory transFact = TransformerFactory.newInstance(); Transformer trans = transFact.newTransformer(xsltSource); // set parameter: // relative directory <filename>_files trans.setParameter("destination_dir", resultFile.getName() + "_files/"); trans.setParameter("area_code", areaCode); trans.setParameter("folding_type", getController().getFrame() .getProperty("html_export_folding")); trans.transform(xmlSource, result); } catch (Exception e) { // System.err.println("error applying the xslt file "+e); freemind.main.Resources.getInstance().logException(e); } ; return; } }