You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2016/12/06 17:51:42 UTC

svn commit: r1772928 - in /pdfbox/trunk: debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

Author: tilman
Date: Tue Dec  6 17:51:42 2016
New Revision: 1772928

URL: http://svn.apache.org/viewvc?rev=1772928&view=rev
Log:
PDFBOX-3619: change drawing of red borders to include glyph rotation

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java
    pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java?rev=1772928&r1=1772927&r2=1772928&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java Tue Dec  6 17:51:42 2016
@@ -137,16 +137,17 @@ final class DebugTextOverlay
             {
                 if (DebugTextOverlay.this.showTextStripper)
                 {
+                    AffineTransform at = (AffineTransform) flip.clone();
+                    at.concatenate(text.getTextMatrix().createAffineTransform());
+
                     // in red:
                     // show rectangles with the "height" (not a real height, but used for text extraction 
                     // heuristics, it is 1/2 of the bounding box height and starts at y=0)
-                    Rectangle2D.Float rect = new Rectangle2D.Float(
-                            text.getXDirAdj(),
-                            (text.getYDirAdj() - text.getHeightDir()),
-                            text.getWidthDirAdj(),
-                            text.getHeightDir());
+                    Rectangle2D.Float rect = new Rectangle2D.Float(0, 0, 
+                            text.getWidthDirAdj() / text.getTextMatrix().getScalingFactorX(),
+                            text.getHeightDir() / text.getTextMatrix().getScalingFactorY());
                     graphics.setColor(Color.red);
-                    graphics.draw(rect);
+                    graphics.draw(at.createTransformedShape(rect));
                 }
 
                 if (DebugTextOverlay.this.showFontBBox)

Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java?rev=1772928&r1=1772927&r2=1772928&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/util/DrawPrintTextLocations.java Tue Dec  6 17:51:42 2016
@@ -286,17 +286,21 @@ public class DrawPrintTextLocations exte
                     + text.getWidthOfSpace() + " width="
                     + text.getWidthDirAdj() + "]" + text.getUnicode());
 
+            // glyph space -> user space
+            // note: text.getTextMatrix() is *not* the Text Matrix, it's the Text Rendering Matrix
+            AffineTransform at = text.getTextMatrix().createAffineTransform();
+
             // in red:
             // show rectangles with the "height" (not a real height, but used for text extraction 
             // heuristics, it is 1/2 of the bounding box height and starts at y=0)
-            Rectangle2D.Float rect = new Rectangle2D.Float(
-                    text.getXDirAdj(),
-                    (text.getYDirAdj() - text.getHeightDir()),
-                    text.getWidthDirAdj(),
-                    text.getHeightDir());
-            Shape sh = rotateAT.createTransformedShape(rect);
+            Rectangle2D.Float rect = new Rectangle2D.Float(0, 0, 
+                    text.getWidthDirAdj() / text.getTextMatrix().getScalingFactorX(),
+                    text.getHeightDir() / text.getTextMatrix().getScalingFactorY());
+            Shape s = at.createTransformedShape(rect);
+            s = flipAT.createTransformedShape(s);
+            s = rotateAT.createTransformedShape(s);
             g2d.setColor(Color.red);
-            g2d.draw(sh);
+            g2d.draw(s);
 
             // in blue:
             // show rectangle with the real vertical bounds, based on the font bounding box y values
@@ -308,9 +312,6 @@ public class DrawPrintTextLocations exte
             float xadvance = font.getWidth(text.getCharacterCodes()[0]); // todo: should iterate all chars
             rect = new Rectangle2D.Float(0, bbox.getLowerLeftY(), xadvance, bbox.getHeight());
             
-            // glyph space -> user space
-            // note: text.getTextMatrix() is *not* the Text Matrix, it's the Text Rendering Matrix
-            AffineTransform at = text.getTextMatrix().createAffineTransform();
             if (font instanceof PDType3Font)
             {
                 // bbox and font matrix are unscaled
@@ -321,8 +322,7 @@ public class DrawPrintTextLocations exte
                 // bbox and font matrix are already scaled to 1000
                 at.scale(1/1000f, 1/1000f);
             }
-            Shape s = at.createTransformedShape(rect);
-
+            s = at.createTransformedShape(rect);
             s = flipAT.createTransformedShape(s);
             s = rotateAT.createTransformedShape(s);