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()));