You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2010/07/15 08:50:22 UTC

svn commit: r964316 - in /xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik: GenericFOPBridgeContext.java GenericFOPImageElementBridge.java ImageConverterSVG2G2D.java

Author: jeremias
Date: Thu Jul 15 06:50:21 2010
New Revision: 964316

URL: http://svn.apache.org/viewvc?rev=964316&view=rev
Log:
Added ImageElementBridge to ImageConverterSVG2G2D so output formats like Java2D (PNG, TIFF) and PCL can load image formats other than just PNG and JPEG from SVG.
This also represents a work-around for certain JPEG images that cannot be loaded properly with the Sun JPEG codec embedded in the JDK. With this, JPEGs are loaded via ImageIO.

Added:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java   (with props)
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java   (with props)
Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java?rev=964316&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java Thu Jul 15 06:50:21 2010
@@ -0,0 +1,111 @@
+/*
+ * 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.geom.AffineTransform;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.bridge.DocumentLoader;
+import org.apache.batik.bridge.UserAgent;
+import org.apache.batik.dom.svg.SVGOMDocument;
+
+import org.apache.xmlgraphics.image.loader.ImageManager;
+import org.apache.xmlgraphics.image.loader.ImageSessionContext;
+
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.svg.AbstractFOPBridgeContext;
+import org.apache.fop.svg.SVGUserAgent;
+
+/**
+ * BridgeContext which registers the custom bridges for Java2D output.
+ */
+class GenericFOPBridgeContext extends AbstractFOPBridgeContext {
+
+    /**
+     * Constructs a new bridge context.
+     * @param userAgent the user agent
+     * @param documentLoader the Document Loader to use for referenced documents.
+     * @param fontInfo the font list for the text painter, may be null
+     *                 in which case text is painted as shapes
+     * @param imageManager an image manager
+     * @param imageSessionContext an image session context
+     * @param linkTransform AffineTransform to properly place links,
+     *                      may be null
+     */
+    public GenericFOPBridgeContext(UserAgent userAgent, DocumentLoader documentLoader,
+            FontInfo fontInfo, ImageManager imageManager,
+            ImageSessionContext imageSessionContext,
+            AffineTransform linkTransform) {
+        super(userAgent, documentLoader, fontInfo,
+                imageManager, imageSessionContext, linkTransform);
+    }
+
+    /**
+     * Constructs a new bridge context.
+     * @param userAgent the user agent
+     * @param fontInfo the font list for the text painter, may be null
+     *                 in which case text is painted as shapes
+     * @param imageManager an image manager
+     * @param imageSessionContext an image session context
+     */
+    public GenericFOPBridgeContext(UserAgent userAgent, FontInfo fontInfo,
+            ImageManager imageManager, ImageSessionContext imageSessionContext) {
+        super(userAgent, fontInfo, imageManager, imageSessionContext);
+    }
+
+    /**
+     * Constructs a new bridge context.
+     * @param userAgent the user agent
+     * @param fontInfo the font list for the text painter, may be null
+     *                 in which case text is painted as shapes
+     * @param imageManager an image manager
+     * @param imageSessionContext an image session context
+     * @param linkTransform AffineTransform to properly place links,
+     *                      may be null
+     */
+    public GenericFOPBridgeContext(SVGUserAgent userAgent, FontInfo fontInfo,
+            ImageManager imageManager, ImageSessionContext imageSessionContext,
+            AffineTransform linkTransform) {
+        super(userAgent, fontInfo, imageManager, imageSessionContext, linkTransform);
+    }
+
+    /** {@inheritDoc} */
+    public void registerSVGBridges() {
+        super.registerSVGBridges();
+
+        //This makes Batik load images via FOP and the XGC image loading framework
+        putBridge(new GenericFOPImageElementBridge());
+    }
+
+    /** {@inheritDoc} */
+    public BridgeContext createBridgeContext(SVGOMDocument doc) {
+        return createBridgeContext();
+    }
+
+    /** {@inheritDoc} */
+    public BridgeContext createBridgeContext() {
+        return new GenericFOPBridgeContext(getUserAgent(), getDocumentLoader(),
+                fontInfo,
+                getImageManager(),
+                getImageSessionContext(),
+                linkTransform);
+    }
+
+}

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPBridgeContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java?rev=964316&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java (added)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java Thu Jul 15 06:50:21 2010
@@ -0,0 +1,46 @@
+/*
+ * 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.xmlgraphics.image.loader.ImageFlavor;
+
+import org.apache.fop.svg.AbstractFOPImageElementBridge;
+
+/**
+ * Image Element Bridge class for the SVG to Java2D converter, used to make Batik load images
+ * through FOP and XGC's image loading framework.
+ */
+class GenericFOPImageElementBridge extends AbstractFOPImageElementBridge {
+
+    /**
+     * Constructs a new bridge for the <image> element.
+     */
+    public GenericFOPImageElementBridge() { }
+
+    private final ImageFlavor[] supportedFlavors = new ImageFlavor[]
+                                               {ImageFlavor.GRAPHICS2D,
+                                                BatikImageFlavors.SVG_DOM};
+
+    /** {@inheritDoc} */
+    protected ImageFlavor[] getSupportedFlavours() {
+        return supportedFlavors;
+    }
+
+}

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/GenericFOPImageElementBridge.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java?rev=964316&r1=964315&r2=964316&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/image/loader/batik/ImageConverterSVG2G2D.java Thu Jul 15 06:50:21 2010
@@ -37,7 +37,9 @@ import org.apache.xmlgraphics.image.load
 import org.apache.xmlgraphics.image.loader.ImageException;
 import org.apache.xmlgraphics.image.loader.ImageFlavor;
 import org.apache.xmlgraphics.image.loader.ImageInfo;
+import org.apache.xmlgraphics.image.loader.ImageManager;
 import org.apache.xmlgraphics.image.loader.ImageProcessingHints;
+import org.apache.xmlgraphics.image.loader.ImageSessionContext;
 import org.apache.xmlgraphics.image.loader.XMLNamespaceEnabledImageFlavor;
 import org.apache.xmlgraphics.image.loader.impl.AbstractImageConverter;
 import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
@@ -77,7 +79,16 @@ public class ImageConverterSVG2G2D exten
         }
         UserAgent ua = createBatikUserAgent(pxToMillimeter);
         GVTBuilder builder = new GVTBuilder();
-        final BridgeContext ctx = new BridgeContext(ua);
+
+        final ImageManager imageManager = (ImageManager)hints.get(
+                ImageProcessingHints.IMAGE_MANAGER);
+        final ImageSessionContext sessionContext = (ImageSessionContext)hints.get(
+                ImageProcessingHints.IMAGE_SESSION_CONTEXT);
+
+        boolean useEnhancedBridgeContext = (imageManager != null && sessionContext != null);
+        final BridgeContext ctx = (useEnhancedBridgeContext
+                ? new GenericFOPBridgeContext(ua, null, imageManager, sessionContext)
+                : new BridgeContext(ua));
 
         Document doc = svg.getDocument();
         //Cloning SVG DOM as Batik attaches non-thread-safe facilities (like the CSS engine)
@@ -117,9 +128,20 @@ public class ImageConverterSVG2G2D exten
             /** {@inheritDoc} */
             public void displayMessage(String message) {
                 //TODO Refine and pipe through to caller
-                log.debug(message);
+                log.info(message);
+            }
+
+            /** {@inheritDoc} */
+            public void displayError(Exception e) {
+                log.error("Error converting SVG to a Java2D graphic", e);
             }
 
+            /** {@inheritDoc} */
+            public void displayError(String message) {
+                log.error(message);
+            }
+
+
         };
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org