You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/10/28 19:13:18 UTC

svn commit: r1634938 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: contentstream/PDFStreamEngine.java rendering/PageDrawer.java util/Matrix.java

Author: jahewson
Date: Tue Oct 28 18:13:18 2014
New Revision: 1634938

URL: http://svn.apache.org/r1634938
Log:
PDFBOX-2423: Fix Type 3 glyph rendering

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java?rev=1634938&r1=1634937&r2=1634938&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/PDFStreamEngine.java Tue Oct 28 18:13:18 2014
@@ -16,7 +16,6 @@
  */
 package org.apache.pdfbox.contentstream;
 
-import java.awt.Rectangle;
 import java.awt.geom.Area;
 import java.awt.geom.GeneralPath;
 import java.awt.geom.Point2D;
@@ -280,7 +279,8 @@ public class PDFStreamEngine
      * @param patternBBox fixme: temporary workaround for tiling patterns
      * @throws IOException if there is an exception while processing the stream
      */
-    private void processStream(PDContentStream contentStream, PDRectangle patternBBox) throws IOException
+    private void processStream(PDContentStream contentStream, PDRectangle patternBBox)
+            throws IOException
     {
         // resource lookup: first look for stream resources, then fallback to the current page
         PDResources parentResources = resources;
@@ -309,7 +309,7 @@ public class PDFStreamEngine
         {
             Area clip = new Area(new GeneralPath(bbox.toRectangle2D()));
             clip.transform(getGraphicsState().getCurrentTransformationMatrix().createAffineTransform());
-            getGraphicsState().intersectClippingPath(clip);
+            //getGraphicsState().intersectClippingPath(clip);
         }
 
         // fixme: stream matrix
@@ -512,7 +512,10 @@ public class PDFStreamEngine
             Vector w = font.getDisplacement(code);
 
             // process the decoded glyph
+            saveGraphicsState();
+            getGraphicsState().setCurrentTransformationMatrix(textRenderingMatrix);
             showGlyph(textRenderingMatrix, font, code, unicode, w);
+            restoreGraphicsState();
 
             // calculate the combined displacements
             float tx, ty;

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1634938&r1=1634937&r2=1634938&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Tue Oct 28 18:13:18 2014
@@ -68,7 +68,6 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.shading.PDShading;
 import org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
-import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceStream;
 import org.apache.pdfbox.util.Matrix;
 import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine;
 import org.apache.pdfbox.util.Vector;
@@ -238,18 +237,17 @@ public class PageDrawer extends PDFGraph
     protected void showGlyph(Matrix textRenderingMatrix, PDFont font, int code, String unicode,
                              Vector displacement) throws IOException
     {
-        AffineTransform at = textRenderingMatrix.createAffineTransform();
-        at.concatenate(font.getFontMatrix().createAffineTransform());
-
         if (font instanceof PDType3Font)
         {
             // Type3 fonts use PDF streams for each character
-            drawType3String((PDType3Font) font, code, at);
+            drawType3Glyph((PDType3Font) font, code);
         }
         else
         {
             // all other fonts use vectors
             Glyph2D glyph2D = createGlyph2D(font);
+            AffineTransform at = textRenderingMatrix.createAffineTransform();
+            at.concatenate(font.getFontMatrix().createAffineTransform());
             drawGlyph2D(glyph2D, font, code, displacement, at);
         }
     }
@@ -315,30 +313,16 @@ public class PageDrawer extends PDFGraph
      * 
      * @param font the type3 font
      * @param code internal PDF character codes of glyph
-     * @param at the transformation
      * 
      * @throws IOException if something went wrong
      */
-    private void drawType3String(PDType3Font font, int code, AffineTransform at) throws IOException
+    private void drawType3Glyph(PDType3Font font, int code) throws IOException
     {
         PDType3CharProc charProc = font.getCharProc(code);
         if (charProc != null)
         {
-            // save the current graphics state and matrices
-            saveGraphicsState();
-            Matrix textMatrix = getTextMatrix();
-            Matrix textLineMatrix = getTextLineMatrix();
-
-            Matrix ctm = new Matrix();
-            ctm.setFromAffineTransform(at);
-            getGraphicsState().setCurrentTransformationMatrix(ctm);
+            lastClip = null;
             processChildStream(charProc);
-
-            // restore the saved graphics state and matrices
-            restoreGraphicsState();
-            setTextLineMatrix(textLineMatrix);
-            setTextMatrix(textMatrix);
-
         }
         else
         {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java?rev=1634938&r1=1634937&r2=1634938&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Matrix.java Tue Oct 28 18:13:18 2014
@@ -61,6 +61,7 @@ public class Matrix implements Cloneable
         single[4] = ((COSNumber)array.get(3)).floatValue();
         single[6] = ((COSNumber)array.get(4)).floatValue();
         single[7] = ((COSNumber)array.get(5)).floatValue();
+        single[8] = 1;
     }
 
     /**