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 2021/04/17 10:38:37 UTC

svn commit: r1888853 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Author: tilman
Date: Sat Apr 17 10:38:37 2021
New Revision: 1888853

URL: http://svn.apache.org/viewvc?rev=1888853&view=rev
Log:
PDFBOX-5168: make non empty dash with only zero invisible (corrected, 

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1888853&r1=1888852&r2=1888853&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Sat Apr 17 10:38:37 2021
@@ -747,12 +747,29 @@ public class PageDrawer extends PDFGraph
         }
 
         PDLineDashPattern dashPattern = state.getLineDashPattern();
+        // PDFBOX-5168: show an all-zero dash array line invisible like Adobe does
+        // must do it here because getDashArray() sets minimum width because of JVM bugs
+        float[] dashArray = dashPattern.getDashArray();
+        if (dashArray.length > 0)
+        {
+            boolean allZero = true;
+            for (int i = 0; i < dashArray.length; ++i)
+            {
+                if (dashArray[i] != 0)
+                {
+                    allZero = false;
+                    break;
+                }
+            }
+            if (allZero)
+            {
+                return (Shape p) -> new Area();
+            }
+        }
         float phaseStart = dashPattern.getPhase();
-        float[] dashArray = getDashArray(dashPattern);
+        dashArray = getDashArray(dashPattern);
         phaseStart = transformWidth(phaseStart);
-        boolean allZero = true;
 
-        // empty dash array is illegal
         // avoid also infinite and NaN values (PDFBOX-3360)
         if (dashArray.length == 0 || Float.isInfinite(phaseStart) || Float.isNaN(phaseStart))
         {
@@ -762,29 +779,11 @@ public class PageDrawer extends PDFGraph
         {
             for (int i = 0; i < dashArray.length; ++i)
             {
-                float dash = dashArray[i];
-                if (Float.isInfinite(dash) || Float.isNaN(dash))
+                if (Float.isInfinite(dashArray[i]) || Float.isNaN(dashArray[i]))
                 {
                     dashArray = null;
-                    allZero = false;
                     break;
                 }
-                if (dash != 0)
-                {
-                    allZero = false;
-                }
-            }
-            if (allZero)
-            {
-                // PDFBOX-5168: make it invisible like Adobe
-                return new Stroke()
-                {
-                    @Override
-                    public Shape createStrokedShape(Shape p)
-                    {
-                        return new Area();
-                    }
-                };
             }
         }
         int lineCap = Math.min(2, Math.max(0, state.getLineCap()));