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 2016/08/10 19:26:47 UTC

svn commit: r1755805 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java pagepane/DebugPageDrawer.java pagepane/DebugTextOverlay.java pagepane/PagePane.java

Author: jahewson
Date: Wed Aug 10 19:26:47 2016
New Revision: 1755805

URL: http://svn.apache.org/viewvc?rev=1755805&view=rev
Log:
PDFBOX-2941: show beads and use thin stroke width

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugTextOverlay.java
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1755805&r1=1755804&r2=1755805&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Wed Aug 10 19:26:47 2016
@@ -157,6 +157,7 @@ public class PDFDebugger extends JFrame
     // view menu
     private JMenuItem viewModeItem;
     public static JCheckBoxMenuItem showTextStripper;
+    public static JCheckBoxMenuItem showTextStripperBeads;
     public static JCheckBoxMenuItem showFontBBox;
     public static JCheckBoxMenuItem showGlyphBounds;
     
@@ -573,9 +574,13 @@ public class PDFDebugger extends JFrame
 
         viewMenu.addSeparator();
         
-        showTextStripper = new JCheckBoxMenuItem("Show TextStripper Bounds");
+        showTextStripper = new JCheckBoxMenuItem("Show TextStripper TextPositions");
         showTextStripper.setEnabled(false);
         viewMenu.add(showTextStripper);
+
+        showTextStripperBeads = new JCheckBoxMenuItem("Show TextStripper Beads");
+        showTextStripperBeads.setEnabled(false);
+        viewMenu.add(showTextStripperBeads);
         
         showFontBBox = new JCheckBoxMenuItem("Show Approximate Text Bounds");
         showFontBBox.setEnabled(false);

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java?rev=1755805&r1=1755804&r2=1755805&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/DebugPageDrawer.java Wed Aug 10 19:26:47 2016
@@ -106,8 +106,8 @@ final class DebugPageDrawer extends Page
 
             // draw
             graphics.setClip(graphics.getDeviceConfiguration().getBounds());
-            graphics.setColor(new Color(88, 152, 82)); // green
-            graphics.setStroke(new BasicStroke(1f));
+            graphics.setColor(Color.cyan);
+            graphics.setStroke(new BasicStroke(.5f));
             graphics.draw(bbox);
 
             // restore

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=1755805&r1=1755804&r2=1755805&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 Wed Aug 10 19:26:47 2016
@@ -16,9 +16,12 @@
 
 package org.apache.pdfbox.debugger.pagepane;
 
+import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics2D;
+import java.awt.Shape;
 import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
 import java.awt.geom.Rectangle2D;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -31,8 +34,10 @@ import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDType3Font;
+import org.apache.pdfbox.pdmodel.interactive.pagenavigation.PDThreadBead;
 import org.apache.pdfbox.text.PDFTextStripper;
 import org.apache.pdfbox.text.TextPosition;
+import org.apache.pdfbox.util.Matrix;
 
 /**
  * Draws an overlay showing the locations of text found by PDFTextStripper and another heuristic.
@@ -47,6 +52,7 @@ final class DebugTextOverlay
     private int pageIndex;
     private float scale;
     private boolean showTextStripper;
+    private boolean showTextStripperBeads;
     private boolean showFontBBox;
         
     private class DebugTextStripper extends PDFTextStripper
@@ -70,11 +76,28 @@ final class DebugTextOverlay
             // scale and rotate
             transform(graphics, page, scale);
 
+            // set stroke width
+            graphics.setStroke(new BasicStroke(0.5f));
+            
             setStartPage(pageIndex + 1);
             setEndPage(pageIndex + 1);
 
             Writer dummy = new OutputStreamWriter(new ByteArrayOutputStream());
             writeText(document, dummy);
+
+            if (DebugTextOverlay.this.showTextStripperBeads)
+            {
+                // beads in green
+                List<PDThreadBead> pageArticles = page.getThreadBeads();
+                for (PDThreadBead bead : pageArticles)
+                {
+                    PDRectangle r = bead.getRectangle();
+                    GeneralPath p = r.transform(Matrix.getTranslateInstance(-cropBox.getLowerLeftX(), cropBox.getLowerLeftY()));
+                    Shape s = flip.createTransformedShape(p);
+                    graphics.setColor(Color.green);
+                    graphics.draw(s);
+                }
+            }
         }
 
         // scale rotate translate
@@ -162,12 +185,14 @@ final class DebugTextOverlay
     }
 
     public DebugTextOverlay(PDDocument document, int pageIndex, float scale,
-                            boolean showTextStripper, boolean showFontBBox)
+                            boolean showTextStripper, boolean showTextStripperBeads,
+                            boolean showFontBBox)
     {
         this.document = document;
         this.pageIndex = pageIndex;
         this.scale = scale;
         this.showTextStripper = showTextStripper;
+        this.showTextStripperBeads = showTextStripperBeads;
         this.showFontBBox = showFontBBox;
     }
     

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java?rev=1755805&r1=1755804&r2=1755805&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java Wed Aug 10 19:26:47 2016
@@ -96,7 +96,7 @@ public class PagePane implements ActionL
         zoomMenu.changeZoomSelection(zoomMenu.getPageZoomScale());
         // render in a background thread: rendering is read-only, so this should be ok, despite
         // the fact that PDDocument is not officially thread safe
-        new RenderWorker(zoomMenu.getPageZoomScale(), 0, false, false, false).execute();
+        new RenderWorker(zoomMenu.getPageZoomScale(), 0, false, false, false, false).execute();
     }
 
     /**
@@ -116,12 +116,14 @@ public class PagePane implements ActionL
         if (ZoomMenu.isZoomMenu(actionCommand) ||
             RotationMenu.isRotationMenu(actionCommand) ||
             actionEvent.getSource() == PDFDebugger.showTextStripper ||
+            actionEvent.getSource() == PDFDebugger.showTextStripperBeads ||
             actionEvent.getSource() == PDFDebugger.showFontBBox ||
             actionEvent.getSource() == PDFDebugger.showGlyphBounds)
         {
             new RenderWorker(ZoomMenu.getZoomScale(),
                              RotationMenu.getRotationDegrees(),
                              PDFDebugger.showTextStripper.isSelected(),
+                             PDFDebugger.showTextStripperBeads.isSelected(),
                              PDFDebugger.showFontBBox.isSelected(),
                              PDFDebugger.showGlyphBounds.isSelected()
                             ).execute();
@@ -143,6 +145,9 @@ public class PagePane implements ActionL
         PDFDebugger.showTextStripper.setEnabled(true);
         PDFDebugger.showTextStripper.addActionListener(this);
 
+        PDFDebugger.showTextStripperBeads.setEnabled(true);
+        PDFDebugger.showTextStripperBeads.addActionListener(this);
+
         PDFDebugger.showFontBBox.setEnabled(true);
         PDFDebugger.showFontBBox.addActionListener(this);
 
@@ -155,6 +160,11 @@ public class PagePane implements ActionL
     {
         zoomMenu.setEnableMenu(false);
         rotationMenu.setEnableMenu(false);
+        
+        PDFDebugger.showTextStripper.setEnabled(false);
+        PDFDebugger.showTextStripperBeads.setEnabled(false);
+        PDFDebugger.showFontBBox.setEnabled(false);
+        PDFDebugger.showGlyphBounds.setEnabled(false);
     }
 
     @Override
@@ -240,15 +250,18 @@ public class PagePane implements ActionL
         private final float scale;
         private final int rotation;
         private boolean showTextStripper;
+        private boolean showTextStripperBeads;
         private boolean showFontBBox;
         private boolean showGlyphBounds;
         
         private RenderWorker(float scale, int rotation, boolean showTextStripper,
-                             boolean showFontBBox, boolean showGlyphBounds)
+                             boolean showTextStripperBeads, boolean showFontBBox,
+                             boolean showGlyphBounds)
         {
             this.scale = scale;
             this.rotation = rotation;
             this.showTextStripper = showTextStripper;
+            this.showTextStripperBeads = showTextStripperBeads;
             this.showFontBBox = showFontBBox;
             this.showGlyphBounds = showGlyphBounds;
         }
@@ -271,7 +284,8 @@ public class PagePane implements ActionL
             
             // debug overlays
             DebugTextOverlay debugText = new DebugTextOverlay(document, pageIndex, scale, 
-                                                              showTextStripper, showFontBBox);
+                                                              showTextStripper, showTextStripperBeads,
+                                                              showFontBBox);
             Graphics2D g = image.createGraphics();
             debugText.renderTo(g);
             g.dispose();