diff options
Diffstat (limited to 'src/java/org/apache/fop/image')
3 files changed, 131 insertions, 2 deletions
diff --git a/src/java/org/apache/fop/image/loader/batik/BatikImageFlavors.java b/src/java/org/apache/fop/image/loader/batik/BatikImageFlavors.java new file mode 100644 index 000000000..7766fdbcb --- /dev/null +++ b/src/java/org/apache/fop/image/loader/batik/BatikImageFlavors.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.image.loader.batik; + +import org.apache.batik.dom.svg.SVGDOMImplementation; + +import org.apache.xmlgraphics.image.loader.ImageFlavor; +import org.apache.xmlgraphics.image.loader.XMLNamespaceEnabledImageFlavor; + +/** + * Image flavors used by Batik. + */ +public interface BatikImageFlavors { + + /** An SVG image in form of a W3C DOM instance */ + XMLNamespaceEnabledImageFlavor SVG_DOM = new XMLNamespaceEnabledImageFlavor( + ImageFlavor.XML_DOM, SVGDOMImplementation.SVG_NAMESPACE_URI); + +} diff --git a/src/java/org/apache/fop/image/loader/batik/ImageConverterG2D2SVG.java b/src/java/org/apache/fop/image/loader/batik/ImageConverterG2D2SVG.java new file mode 100644 index 000000000..d56f543c7 --- /dev/null +++ b/src/java/org/apache/fop/image/loader/batik/ImageConverterG2D2SVG.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.image.loader.batik; + +import java.awt.Dimension; +import java.awt.geom.Rectangle2D; +import java.util.Map; + +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import org.apache.batik.dom.GenericDOMImplementation; +import org.apache.batik.dom.svg.SVGDOMImplementation; +import org.apache.batik.svggen.SVGGeneratorContext; +import org.apache.batik.svggen.SVGGraphics2D; + +import org.apache.xmlgraphics.image.loader.Image; +import org.apache.xmlgraphics.image.loader.ImageException; +import org.apache.xmlgraphics.image.loader.ImageFlavor; +import org.apache.xmlgraphics.image.loader.ImageSize; +import org.apache.xmlgraphics.image.loader.impl.AbstractImageConverter; +import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D; +import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM; + +/** + * This ImageConverter converts Java2D images into SVG images. + */ +public class ImageConverterG2D2SVG extends AbstractImageConverter { + + /** {@inheritDoc} */ + public Image convert(Image src, Map hints) throws ImageException { + checkSourceFlavor(src); + ImageGraphics2D g2dImage = (ImageGraphics2D)src; + + DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); + + // Create an instance of org.w3c.dom.Document + Document document = domImpl.createDocument( + SVGDOMImplementation.SVG_NAMESPACE_URI, "svg", null); + Element root = document.getDocumentElement(); + + // Create an SVGGeneratorContext to customize SVG generation + SVGGeneratorContext genCtx = SVGGeneratorContext.createDefault(document); + genCtx.setComment("Generated by Apache Batik's SVGGraphics2D"); + genCtx.setEmbeddedFontsOn(true); + + // Create an instance of the SVG Generator + SVGGraphics2D g2d = new SVGGraphics2D(genCtx, true); + ImageSize size = src.getSize(); + Dimension dim = size.getDimensionMpt(); + g2d.setSVGCanvasSize(dim); + //SVGGraphics2D doesn't generate the viewBox by itself + root.setAttribute("viewBox", "0 0 " + dim.width + " " + dim.height); + + g2dImage.getGraphics2DImagePainter().paint(g2d, + new Rectangle2D.Float(0, 0, dim.width, dim.height)); + //Populate the document root with the generated SVG content. + g2d.getRoot(root); + + //Return the generated SVG image + ImageXMLDOM svgImage = new ImageXMLDOM(src.getInfo(), document, BatikImageFlavors.SVG_DOM); + g2d.dispose(); + return svgImage; + } + + /** {@inheritDoc} */ + public ImageFlavor getSourceFlavor() { + return ImageFlavor.GRAPHICS2D; + } + + /** {@inheritDoc} */ + public ImageFlavor getTargetFlavor() { + return BatikImageFlavors.SVG_DOM; + } + +} diff --git a/src/java/org/apache/fop/image/loader/batik/PreloaderSVG.java b/src/java/org/apache/fop/image/loader/batik/PreloaderSVG.java index 916b80d02..5e4e37345 100644 --- a/src/java/org/apache/fop/image/loader/batik/PreloaderSVG.java +++ b/src/java/org/apache/fop/image/loader/batik/PreloaderSVG.java @@ -34,7 +34,6 @@ import org.apache.batik.bridge.BridgeContext; import org.apache.batik.bridge.UnitProcessor; import org.apache.batik.bridge.UserAgent; import org.apache.batik.dom.svg.SAXSVGDocumentFactory; -import org.apache.batik.dom.svg.SVGDOMImplementation; import org.apache.batik.dom.svg.SVGOMDocument; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -198,7 +197,7 @@ public class PreloaderSVG extends AbstractImagePreloader { //The whole image had to be loaded for this, so keep it ImageXMLDOM xmlImage = new ImageXMLDOM(info, - doc, SVGDOMImplementation.SVG_NAMESPACE_URI); + doc, BatikImageFlavors.SVG_DOM); info.getCustomObjects().put(ImageInfo.ORIGINAL_IMAGE, xmlImage); return info; } |