use of org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern in project pdfbox by apache.
the class PageDrawer method getStroke.
// create a new stroke based on the current CTM and the current stroke
private BasicStroke getStroke() {
PDGraphicsState state = getGraphicsState();
// apply the CTM
float lineWidth = transformWidth(state.getLineWidth());
// minimum line width as used by Adobe Reader
if (lineWidth < 0.25) {
lineWidth = 0.25f;
}
PDLineDashPattern dashPattern = state.getLineDashPattern();
int phaseStart = dashPattern.getPhase();
float[] dashArray = dashPattern.getDashArray();
// apply the CTM
for (int i = 0; i < dashArray.length; ++i) {
// minimum line dash width avoids JVM crash,
// see PDFBOX-2373, PDFBOX-2929, PDFBOX-3204, PDFBOX-3813
// also avoid 0 in array like "[ 0 1000 ] 0 d", see PDFBOX-3724
float w = transformWidth(dashArray[i]);
dashArray[i] = Math.max(w, 0.062f);
}
phaseStart = (int) transformWidth(phaseStart);
// avoid also infinite and NaN values (PDFBOX-3360)
if (dashArray.length == 0 || Float.isInfinite(phaseStart) || Float.isNaN(phaseStart)) {
dashArray = null;
} else {
for (int i = 0; i < dashArray.length; ++i) {
if (Float.isInfinite(dashArray[i]) || Float.isNaN(dashArray[i])) {
dashArray = null;
break;
}
}
}
return new BasicStroke(lineWidth, state.getLineCap(), state.getLineJoin(), state.getMiterLimit(), dashArray, phaseStart);
}
Aggregations