Search in sources :

Example 6 with PDLineDashPattern

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);
}
Also used : BasicStroke(java.awt.BasicStroke) PDLineDashPattern(org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern) PDGraphicsState(org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState) Point(java.awt.Point) Paint(java.awt.Paint) TexturePaint(java.awt.TexturePaint)

Aggregations

PDLineDashPattern (org.apache.pdfbox.pdmodel.graphics.PDLineDashPattern)6 COSArray (org.apache.pdfbox.cos.COSArray)4 LineString (com.revolsys.geometry.model.LineString)1 Point (com.revolsys.geometry.model.Point)1 BasicStroke (java.awt.BasicStroke)1 Paint (java.awt.Paint)1 Point (java.awt.Point)1 TexturePaint (java.awt.TexturePaint)1 Length (javax.measure.quantity.Length)1 COSBase (org.apache.pdfbox.cos.COSBase)1 COSNumber (org.apache.pdfbox.cos.COSNumber)1 PDResources (org.apache.pdfbox.pdmodel.PDResources)1 PDExtendedGraphicsState (org.apache.pdfbox.pdmodel.graphics.PDExtendedGraphicsState)1 PDGraphicsState (org.apache.pdfbox.pdmodel.graphics.state.PDGraphicsState)1