Search in sources :

Example 1 with PdfName

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

the class FilteredImagesCacheTest method filteredImagesCacheFlushingTest01.

@Test
public void filteredImagesCacheFlushingTest01() throws IOException, InterruptedException {
    String input = inputPath + "severalImageXObjectOccurrences.pdf";
    String output = outputPath + "filteredImagesCacheFlushingTest01.pdf";
    String cmp = inputPath + "cmp_filteredImagesCacheFlushingTest01.pdf";
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(input), new PdfWriter(output));
    PdfCleanUpTool cleanUpTool = new PdfCleanUpTool(pdfDocument);
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(1, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    PdfImageXObject img = pdfDocument.getPage(2).getResources().getImage(new PdfName("Im1"));
    img.getPdfObject().release();
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(2, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(3, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    pdfDocument.close();
    compareByContent(cmp, output, outputPath, "1.2");
    assertNumberXObjects(output, 1);
}
Also used : PdfImageXObject(com.itextpdf.kernel.pdf.xobject.PdfImageXObject) PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) PdfName(com.itextpdf.kernel.pdf.PdfName) Rectangle(com.itextpdf.kernel.geom.Rectangle) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) IntegrationTest(com.itextpdf.test.annotations.type.IntegrationTest) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test)

Example 2 with PdfName

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

the class FilteredImagesCacheTest method filteredImagesCacheFlushingTest02.

@Test
public void filteredImagesCacheFlushingTest02() throws IOException, InterruptedException {
    String input = inputPath + "severalImageXObjectOccurrences.pdf";
    String output = outputPath + "filteredImagesCacheFlushingTest02.pdf";
    String cmp = inputPath + "cmp_filteredImagesCacheFlushingTest02.pdf";
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(input), new PdfWriter(output));
    PdfCleanUpTool cleanUpTool = new PdfCleanUpTool(pdfDocument);
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(1, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    PdfImageXObject img = pdfDocument.getPage(1).getResources().getImage(new PdfName("Im1"));
    img.makeIndirect(pdfDocument).flush();
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(2, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    cleanUpTool.addCleanupLocation(new PdfCleanUpLocation(3, new Rectangle(150, 300, 300, 150)));
    cleanUpTool.cleanUp();
    pdfDocument.close();
    compareByContent(cmp, output, outputPath, "1.2");
    assertNumberXObjects(output, 1);
}
Also used : PdfImageXObject(com.itextpdf.kernel.pdf.xobject.PdfImageXObject) PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) PdfName(com.itextpdf.kernel.pdf.PdfName) Rectangle(com.itextpdf.kernel.geom.Rectangle) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) IntegrationTest(com.itextpdf.test.annotations.type.IntegrationTest) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test)

Example 3 with PdfName

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

the class PdfCleanUpProcessor method annotationIsToBeRedacted.

private boolean annotationIsToBeRedacted(PdfAnnotation annotation, Rectangle redactRegion) {
    // TODO(DEVSIX-1605,DEVSIX-1606,DEVSIX-1607,DEVSIX-1608,DEVSIX-1609)
    removeAnnotIfPartOverlap = true;
    PdfName annotationType = annotation.getPdfObject().getAsName(PdfName.Subtype);
    if (annotationType.equals(PdfName.Watermark)) {
        // TODO /FixedPrint entry effect is not fully investigated: DEVSIX-2471
        Logger logger = LoggerFactory.getLogger(PdfCleanUpProcessor.class);
        logger.warn(CleanUpLogMessageConstant.REDACTION_OF_ANNOTATION_TYPE_WATERMARK_IS_NOT_SUPPORTED);
    }
    PdfArray rectAsArray = annotation.getRectangle();
    Rectangle rect = null;
    if (rectAsArray != null) {
        rect = rectAsArray.toRectangle();
    }
    boolean annotationIsToBeRedacted = processAnnotationRectangle(redactRegion, rect);
    // Special processing for some types of annotations.
    if (PdfName.Link.equals(annotationType)) {
        PdfArray quadPoints = ((PdfLinkAnnotation) annotation).getQuadPoints();
        if (quadPointsForLinkAnnotationAreValid(rect, quadPoints)) {
            annotationIsToBeRedacted = processAnnotationQuadPoints(redactRegion, quadPoints);
        }
    } else if (annotationType.equals(PdfName.Highlight) || annotationType.equals(PdfName.Underline) || annotationType.equals(PdfName.Squiggly) || annotationType.equals(PdfName.StrikeOut)) {
        PdfArray quadPoints = ((PdfTextMarkupAnnotation) annotation).getQuadPoints();
        // The annotation dictionary’s AP entry, if present, shall take precedence over QuadPoints.
        if (quadPoints != null && annotation.getAppearanceDictionary() == null) {
            try {
                annotationIsToBeRedacted = processAnnotationQuadPoints(redactRegion, quadPoints);
            } catch (PdfException ignored) {
            // if quad points array cannot be processed, simply ignore it
            }
        }
    } else if (annotationType.equals(PdfName.Line)) {
        PdfArray line = ((PdfLineAnnotation) annotation).getLine();
        if (line != null) {
            Rectangle drawnLineRectangle = line.toRectangle();
            // Line annotation might contain line leaders, so let's double check overlapping with /Rect area, for simplicity.
            // TODO DEVSIX-1607
            annotationIsToBeRedacted = annotationIsToBeRedacted || processAnnotationRectangle(redactRegion, drawnLineRectangle);
        }
    }
    return annotationIsToBeRedacted;
}
Also used : PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfException(com.itextpdf.kernel.exceptions.PdfException) PdfName(com.itextpdf.kernel.pdf.PdfName) PdfLinkAnnotation(com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation) PdfLineAnnotation(com.itextpdf.kernel.pdf.annot.PdfLineAnnotation) Rectangle(com.itextpdf.kernel.geom.Rectangle) Logger(org.slf4j.Logger)

Example 4 with PdfName

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

the class PdfCleanUpTool method parseDAParam.

private Map<String, List> parseDAParam(PdfString DA) throws IOException {
    Map<String, List> commandArguments = new HashMap<String, List>();
    PdfTokenizer tokeniser = new PdfTokenizer(new RandomAccessFileOrArray(new RandomAccessSourceFactory().createSource(DA.toUnicodeString().getBytes(StandardCharsets.UTF_8))));
    List currentArguments = new ArrayList();
    while (tokeniser.nextToken()) {
        if (tokeniser.getTokenType() == PdfTokenizer.TokenType.Other) {
            String key = tokeniser.getStringValue();
            if ("RG".equals(key) || "G".equals(key) || "K".equals(key)) {
                key = "StrokeColor";
            } else if ("rg".equals(key) || "g".equals(key) || "k".equals(key)) {
                key = "FillColor";
            }
            commandArguments.put(key, currentArguments);
            currentArguments = new ArrayList();
        } else {
            switch(tokeniser.getTokenType()) {
                case Number:
                    currentArguments.add(new PdfNumber(new Float(tokeniser.getStringValue())));
                    break;
                case Name:
                    currentArguments.add(new PdfName(tokeniser.getStringValue()));
                    break;
                default:
                    currentArguments.add(tokeniser.getStringValue());
            }
        }
    }
    return commandArguments;
}
Also used : PdfTokenizer(com.itextpdf.io.source.PdfTokenizer) RandomAccessFileOrArray(com.itextpdf.io.source.RandomAccessFileOrArray) PdfName(com.itextpdf.kernel.pdf.PdfName) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) RandomAccessSourceFactory(com.itextpdf.io.source.RandomAccessSourceFactory) ArrayList(java.util.ArrayList) List(java.util.List) PdfNumber(com.itextpdf.kernel.pdf.PdfNumber) PdfString(com.itextpdf.kernel.pdf.PdfString)

Example 5 with PdfName

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

the class PdfCleanUpTool method drawOverlayText.

private void drawOverlayText(PdfCanvas canvas, String overlayText, Rectangle annotRect, PdfBoolean repeat, PdfString defaultAppearance, int justification) throws IOException {
    Map<String, List> parsedDA;
    try {
        parsedDA = parseDAParam(defaultAppearance);
    } catch (NullPointerException npe) {
        throw new PdfException(CleanupExceptionMessageConstant.DEFAULT_APPEARANCE_NOT_FOUND);
    }
    PdfFont font;
    float fontSize = 12;
    List fontArgs = parsedDA.get("Tf");
    PdfDictionary formDictionary = pdfDocument.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
    if (fontArgs != null && formDictionary != null) {
        font = getFontFromAcroForm((PdfName) fontArgs.get(0));
        fontSize = ((PdfNumber) fontArgs.get(1)).floatValue();
    } else {
        font = PdfFontFactory.createFont();
    }
    if (pdfDocument.isTagged()) {
        canvas.openTag(new CanvasArtifact());
    }
    Canvas modelCanvas = new Canvas(canvas, annotRect, false);
    Paragraph p = new Paragraph(overlayText).setFont(font).setFontSize(fontSize).setMargin(0);
    TextAlignment textAlignment = TextAlignment.LEFT;
    switch(justification) {
        case 1:
            textAlignment = TextAlignment.CENTER;
            break;
        case 2:
            textAlignment = TextAlignment.RIGHT;
            break;
        default:
    }
    p.setTextAlignment(textAlignment);
    List strokeColorArgs = parsedDA.get("StrokeColor");
    if (strokeColorArgs != null) {
        p.setStrokeColor(getColor(strokeColorArgs));
    }
    List fillColorArgs = parsedDA.get("FillColor");
    if (fillColorArgs != null) {
        p.setFontColor(getColor(fillColorArgs));
    }
    modelCanvas.add(p);
    if (repeat != null && repeat.getValue()) {
        boolean hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
        boolean isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
        while (!isFull) {
            p.add(overlayText);
            LayoutArea previousArea = modelCanvas.getRenderer().getCurrentArea().clone();
            modelCanvas.relayout();
            if (modelCanvas.getRenderer().getCurrentArea().equals(previousArea)) {
                // Avoid infinite loop. This might be caused by the fact that the font does not support the text we want to show
                break;
            }
            hasFull = modelCanvas.getRenderer().hasProperty(Property.FULL);
            isFull = hasFull ? (boolean) modelCanvas.getRenderer().getPropertyAsBoolean(Property.FULL) : false;
        }
    }
    modelCanvas.getRenderer().flush();
    if (pdfDocument.isTagged()) {
        canvas.closeTag();
    }
}
Also used : PdfException(com.itextpdf.kernel.exceptions.PdfException) PdfName(com.itextpdf.kernel.pdf.PdfName) PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) Canvas(com.itextpdf.layout.Canvas) PdfCanvas(com.itextpdf.kernel.pdf.canvas.PdfCanvas) PdfString(com.itextpdf.kernel.pdf.PdfString) Paragraph(com.itextpdf.layout.element.Paragraph) LayoutArea(com.itextpdf.layout.layout.LayoutArea) CanvasArtifact(com.itextpdf.kernel.pdf.canvas.CanvasArtifact) PdfFont(com.itextpdf.kernel.font.PdfFont) TextAlignment(com.itextpdf.layout.properties.TextAlignment) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

PdfName (com.itextpdf.kernel.pdf.PdfName)9 Rectangle (com.itextpdf.kernel.geom.Rectangle)3 PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)3 PdfReader (com.itextpdf.kernel.pdf.PdfReader)3 PdfImageXObject (com.itextpdf.kernel.pdf.xobject.PdfImageXObject)3 ExtendedITextTest (com.itextpdf.test.ExtendedITextTest)3 Test (org.junit.Test)3 PdfException (com.itextpdf.kernel.exceptions.PdfException)2 PdfDictionary (com.itextpdf.kernel.pdf.PdfDictionary)2 PdfString (com.itextpdf.kernel.pdf.PdfString)2 PdfWriter (com.itextpdf.kernel.pdf.PdfWriter)2 PdfCanvas (com.itextpdf.kernel.pdf.canvas.PdfCanvas)2 IntegrationTest (com.itextpdf.test.annotations.type.IntegrationTest)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 List (java.util.List)2 PdfTokenizer (com.itextpdf.io.source.PdfTokenizer)1 RandomAccessFileOrArray (com.itextpdf.io.source.RandomAccessFileOrArray)1 RandomAccessSourceFactory (com.itextpdf.io.source.RandomAccessSourceFactory)1 PdfFont (com.itextpdf.kernel.font.PdfFont)1