Search in sources :

Example 6 with PdfObject

use of com.itextpdf.kernel.pdf.PdfObject in project i7j-pdfsweep by itext.

the class PdfCleanUpProcessor method applyGsParams.

private void applyGsParams(boolean fill, boolean stroke, NotAppliedGsParams gsParams) {
    for (PdfDictionary extGState : gsParams.extGStates) {
        getCanvas().setExtGState(extGState);
    }
    gsParams.extGStates.clear();
    if (gsParams.ctms.size() > 0) {
        Matrix m = new Matrix();
        for (List<PdfObject> ctm : gsParams.ctms) {
            m = operandsToMatrix(ctm).multiply(m);
        }
        getCanvas().concatMatrix(m.get(Matrix.I11), m.get(Matrix.I12), m.get(Matrix.I21), m.get(Matrix.I22), m.get(Matrix.I31), m.get(Matrix.I32));
        gsParams.ctms.clear();
    }
    if (stroke) {
        for (List<PdfObject> strokeState : gsParams.lineStyleOperators.values()) {
            writeOperands(getCanvas(), strokeState);
        }
        gsParams.lineStyleOperators.clear();
    }
    if (fill) {
        if (gsParams.fillColor != null) {
            getCanvas().setFillColor(gsParams.fillColor);
        }
        gsParams.fillColor = null;
    }
    if (stroke) {
        if (gsParams.strokeColor != null) {
            getCanvas().setStrokeColor(gsParams.strokeColor);
        }
        gsParams.strokeColor = null;
    }
}
Also used : Matrix(com.itextpdf.kernel.geom.Matrix) PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) PdfObject(com.itextpdf.kernel.pdf.PdfObject)

Example 7 with PdfObject

use of com.itextpdf.kernel.pdf.PdfObject in project i7j-pdfsweep by itext.

the class PdfCleanUpProcessor method cleanText.

private void cleanText(String operator, List<PdfObject> operands) {
    List<TextRenderInfo> textChunks = null;
    PdfArray cleanedText = null;
    if ("TJ".equals(operator)) {
        PdfArray originalTJ = (PdfArray) operands.get(0);
        if (originalTJ.isEmpty()) {
            // we can safely ignore it
            return;
        }
        // text chunk index in original TJ
        int i = 0;
        PdfTextArray newTJ = new PdfTextArray();
        for (PdfObject e : originalTJ) {
            if (e.isString()) {
                if (null == textChunks) {
                    textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
                }
                PdfArray filteredText = filter.filterText(textChunks.get(i++)).getFilterResult();
                newTJ.addAll(filteredText);
            } else {
                newTJ.add(e);
            }
        }
        cleanedText = newTJ;
    } else {
        // if operator is Tj or ' or "
        textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
        PdfCleanUpFilter.FilterResult<PdfArray> filterResult = filter.filterText(textChunks.get(0));
        if (filterResult.isModified()) {
            cleanedText = filterResult.getFilterResult();
        }
    }
    // if text wasn't modified cleanedText is null
    if (cleanedText == null || cleanedText.size() != 1 || !cleanedText.get(0).isNumber()) {
        if (null == textChunks) {
            textChunks = ((PdfCleanUpEventListener) getEventListener()).getEncounteredText();
        }
        // all text chunks even in case of TJ have the same graphics state
        TextRenderInfo text = textChunks.get(0);
        writeNotAppliedGsParamsForText(text);
        beginTextObjectAndOpenNotWrittenTags();
        writeNotAppliedTextStateParams(text);
        textPositioning.writePositionedText(operator, operands, cleanedText, getCanvas());
    } else {
        // cleaned text is tj array with single number - it means that the whole text chunk was removed
        CanvasGraphicsState gs = getCanvas().getGraphicsState();
        // process new lines if necessary
        if ("'".equals(operator) || "\"".equals(operator)) {
            List<PdfObject> newLineList = new ArrayList<>();
            newLineList.add(new PdfLiteral("T*"));
            textPositioning.appendPositioningOperator("T*", newLineList);
        }
        textPositioning.appendTjArrayWithSingleNumber(cleanedText, gs.getFontSize(), gs.getHorizontalScaling());
    }
}
Also used : CanvasGraphicsState(com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState) PdfLiteral(com.itextpdf.kernel.pdf.PdfLiteral) PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfTextArray(com.itextpdf.kernel.pdf.PdfTextArray) TextRenderInfo(com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo) PdfObject(com.itextpdf.kernel.pdf.PdfObject) ArrayList(java.util.ArrayList) Point(com.itextpdf.kernel.geom.Point)

Aggregations

PdfObject (com.itextpdf.kernel.pdf.PdfObject)7 PdfArray (com.itextpdf.kernel.pdf.PdfArray)3 PdfDictionary (com.itextpdf.kernel.pdf.PdfDictionary)2 ImageData (com.itextpdf.io.image.ImageData)1 Matrix (com.itextpdf.kernel.geom.Matrix)1 Point (com.itextpdf.kernel.geom.Point)1 PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)1 PdfLiteral (com.itextpdf.kernel.pdf.PdfLiteral)1 PdfName (com.itextpdf.kernel.pdf.PdfName)1 PdfReader (com.itextpdf.kernel.pdf.PdfReader)1 PdfTextArray (com.itextpdf.kernel.pdf.PdfTextArray)1 CanvasGraphicsState (com.itextpdf.kernel.pdf.canvas.CanvasGraphicsState)1 TextRenderInfo (com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo)1 PdfImageXObject (com.itextpdf.kernel.pdf.xobject.PdfImageXObject)1 ArrayList (java.util.ArrayList)1 Logger (org.slf4j.Logger)1