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 09:53:16 UTC

svn commit: r1888852 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: contentstream/operator/state/SetLineDashPattern.java rendering/PageDrawer.java

Author: tilman
Date: Sat Apr 17 09:53:16 2021
New Revision: 1888852

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

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java?rev=1888852&r1=1888851&r2=1888852&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java Sat Apr 17 09:53:16 2021
@@ -58,7 +58,6 @@ public class SetLineDashPattern extends
         COSArray dashArray = (COSArray) base0;
         int dashPhase = ((COSNumber) base1).intValue();
         
-        boolean allZero = true;
         for (COSBase base : dashArray)
         {
             if (base instanceof COSNumber)
@@ -66,7 +65,6 @@ public class SetLineDashPattern extends
                 COSNumber num = (COSNumber) base;
                 if (Float.compare(num.floatValue(), 0) != 0)
                 {
-                    allZero = false;
                     break;
                 }
             }
@@ -77,11 +75,6 @@ public class SetLineDashPattern extends
                 break;
             }
         }
-        if (dashArray.size() > 0 && allZero)
-        {
-            LOG.warn("dash lengths all zero, ignored");
-            dashArray = new COSArray();
-        }
         context.setLineDashPattern(dashArray, dashPhase);
     }
 

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=1888852&r1=1888851&r2=1888852&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 Sat Apr 17 09:53:16 2021
@@ -681,6 +681,7 @@ public class PageDrawer extends PDFGraph
         float phaseStart = dashPattern.getPhase();
         float[] dashArray = getDashArray(dashPattern);
         phaseStart = transformWidth(phaseStart);
+        boolean allZero = true;
 
         // empty dash array is illegal
         // avoid also infinite and NaN values (PDFBOX-3360)
@@ -692,11 +693,22 @@ public class PageDrawer extends PDFGraph
         {
             for (int i = 0; i < dashArray.length; ++i)
             {
-                if (Float.isInfinite(dashArray[i]) || Float.isNaN(dashArray[i]))
+                float dash = dashArray[i];
+                if (Float.isInfinite(dash) || Float.isNaN(dash))
                 {
                     dashArray = null;
+                    allZero = false;
                     break;
                 }
+                if (dash != 0)
+                {
+                    allZero = false;
+                }
+            }
+            if (allZero)
+            {
+                // PDFBOX-5168: make it invisible like Adobe
+                return (Shape p) -> new Area();
             }
         }
         int lineCap = Math.min(2, Math.max(0, state.getLineCap())); // legal values 0..2