Author: jeremias
Date: Wed Feb 16 17:08:19 2011
New Revision: 1071311

URL: http://svn.apache.org/viewvc?rev=1071311&view=rev
Log:
Fix scaling bug manifesting with source resolutions other than 72dpi.
Generating PDF comments for SVG only when TRACE log level is active to avoid 
unnecessary output that normal people will never read.

Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java?rev=1071311&r1=1071310&r2=1071311&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
 Wed Feb 16 17:08:19 2011
@@ -24,6 +24,8 @@ import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.io.IOException;
 
+import org.w3c.dom.Document;
+
 import org.apache.batik.bridge.BridgeContext;
 import org.apache.batik.bridge.GVTBuilder;
 import org.apache.batik.dom.svg.SVGDOMImplementation;
@@ -35,6 +37,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.xmlgraphics.image.loader.Image;
 import org.apache.xmlgraphics.image.loader.ImageFlavor;
 import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
+import org.apache.xmlgraphics.util.UnitConv;
 
 import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.image.loader.batik.BatikImageFlavors;
@@ -47,7 +50,6 @@ import org.apache.fop.svg.PDFBridgeConte
 import org.apache.fop.svg.PDFGraphics2D;
 import org.apache.fop.svg.SVGEventProducer;
 import org.apache.fop.svg.SVGUserAgent;
-import org.w3c.dom.Document;
 
 /**
  * Image Handler implementation which handles SVG images.
@@ -109,11 +111,13 @@ public class PDFImageHandlerSVG implemen
         //Scaling and translation for the bounding box of the image
         AffineTransform scaling = new AffineTransform(
                 sx, 0, 0, sy, pos.x / 1000f, pos.y / 1000f);
+        double sourceScale = UnitConv.IN2PT / uaResolution;
+        scaling.scale(sourceScale, sourceScale);
 
         //Scale for higher resolution on-the-fly images from Batik
-        double s = uaResolution / deviceResolution;
         AffineTransform resolutionScaling = new AffineTransform();
-        resolutionScaling.scale(s, s);
+        double targetScale = uaResolution / deviceResolution;
+        resolutionScaling.scale(targetScale, targetScale);
         resolutionScaling.scale(1.0 / sx, 1.0 / sy);
 
         //Transformation matrix that establishes the local coordinate system 
for the SVG graphic
@@ -122,12 +126,26 @@ public class PDFImageHandlerSVG implemen
         imageTransform.concatenate(scaling);
         imageTransform.concatenate(resolutionScaling);
 
+        if (log.isTraceEnabled()) {
+            log.trace("nat size: " + w + "/" + h);
+            log.trace("req size: " + pos.width + "/" + pos.height);
+            log.trace("source res: " + uaResolution + ", targetRes: " + 
deviceResolution
+                    + " --> target scaling: " + targetScale);
+            log.trace(image.getSize());
+            log.trace("sx: " + sx + ", sy: " + sy);
+            log.trace("scaling: " + scaling);
+            log.trace("resolution scaling: " + resolutionScaling);
+            log.trace("image transform: " + resolutionScaling);
+        }
+
         /*
          * Clip to the svg area.
          * Note: To have the svg overlay (under) a text area then use
          * an fo:block-container
          */
-        generator.comment("SVG setup");
+        if (log.isTraceEnabled()) {
+            generator.comment("SVG setup");
+        }
         generator.saveGraphicsState();
         if (context.getUserAgent().isAccessibilityEnabled()) {
             MarkedContentInfo mci = pdfContext.getMarkedContentInfo();
@@ -137,7 +155,9 @@ public class PDFImageHandlerSVG implemen
         generator.setColor(Color.black, true);
 
         if (!scaling.isIdentity()) {
-            generator.comment("viewbox");
+            if (log.isTraceEnabled()) {
+                generator.comment("viewbox");
+            }
             generator.add(CTMHelper.toPDFString(scaling, false) + " cm\n");
         }
 
@@ -150,8 +170,10 @@ public class PDFImageHandlerSVG implemen
         graphics.setGraphicContext(new 
org.apache.xmlgraphics.java2d.GraphicContext());
 
         if (!resolutionScaling.isIdentity()) {
-            generator.comment("resolution scaling for " + uaResolution
-                        + " -> " + deviceResolution + "\n");
+            if (log.isTraceEnabled()) {
+                generator.comment("resolution scaling for " + uaResolution
+                        + " -> " + deviceResolution);
+            }
             generator.add(
                     CTMHelper.toPDFString(resolutionScaling, false) + " cm\n");
             graphics.scale(
@@ -159,7 +181,9 @@ public class PDFImageHandlerSVG implemen
                     1.0 / resolutionScaling.getScaleY());
         }
 
-        generator.comment("SVG start");
+        if (log.isTraceEnabled()) {
+            generator.comment("SVG start");
+        }
 
         //Save state and update coordinate system for the SVG image
         generator.getState().save();
@@ -187,7 +211,9 @@ public class PDFImageHandlerSVG implemen
         } else {
             generator.restoreGraphicsState();
         }
-        generator.comment("SVG end");
+        if (log.isTraceEnabled()) {
+            generator.comment("SVG end");
+        }
     }
 
     /** {@inheritDoc} */



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to