Example usage for com.itextpdf.text.pdf.parser.clipper ClipperOffset ClipperOffset

List of usage examples for com.itextpdf.text.pdf.parser.clipper ClipperOffset ClipperOffset

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf.parser.clipper ClipperOffset ClipperOffset.

Prototype

public ClipperOffset(double miterLimit, double arcTolerance) 

Source Link

Usage

From source file:mkl.testarea.itext5.pdfcleanup.PdfCleanUpRegionFilter.java

License:Open Source License

protected Path filterStrokePath(Path sourcePath, Matrix ctm, float lineWidth, int lineCapStyle,
        int lineJoinStyle, float miterLimit, LineDashPattern lineDashPattern) {
    Path path = sourcePath;/* w  w w .  j av a2s.  c  o  m*/
    JoinType joinType = getJoinType(lineJoinStyle);
    EndType endType = getEndType(lineCapStyle);

    if (lineDashPattern != null) {
        if (!lineDashPattern.isSolid()) {
            path = applyDashPattern(path, lineDashPattern);
        }
    }

    ClipperOffset offset = new ClipperOffset(miterLimit,
            StrictPdfCleanUpProcessor.arcTolerance * StrictPdfCleanUpProcessor.floatMultiplier);
    List<Subpath> degenerateSubpaths = addPath(offset, path, joinType, endType);

    PolyTree resultTree = new PolyTree();
    offset.execute(resultTree, lineWidth * StrictPdfCleanUpProcessor.floatMultiplier / 2);
    Path offsetedPath = convertToPath(resultTree);

    if (degenerateSubpaths.size() > 0) {
        if (endType == EndType.OPEN_ROUND) {
            List<Subpath> circles = convertToCircles(degenerateSubpaths, lineWidth / 2);
            offsetedPath.addSubpaths(circles);
        } else if (endType == EndType.OPEN_SQUARE && lineDashPattern != null) {
            List<Subpath> squares = convertToSquares(degenerateSubpaths, lineWidth, sourcePath);
            offsetedPath.addSubpaths(squares);
        }
    }

    return filterFillPath(offsetedPath, ctm, PathPaintingRenderInfo.NONZERO_WINDING_RULE);
}