Search in sources :

Example 1 with PdfDictionary

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

the class FilteredImagesCacheTest method assertNumberXObjects.

private void assertNumberXObjects(String output, int n) throws IOException {
    PdfDocument doc = new PdfDocument(new PdfReader(output));
    int xObjCount = 0;
    for (int i = 0; i < doc.getNumberOfPdfObjects(); ++i) {
        PdfObject pdfObject = doc.getPdfObject(i);
        if (pdfObject != null && pdfObject.isStream()) {
            PdfDictionary dict = (PdfDictionary) pdfObject;
            if (PdfName.Image.equals(dict.getAsName(PdfName.Subtype)) && dict.containsKey(PdfName.Width) && dict.containsKey(PdfName.Height)) {
                ++xObjCount;
            }
        }
    }
    Assert.assertEquals(n, xObjCount);
}
Also used : PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) PdfObject(com.itextpdf.kernel.pdf.PdfObject) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument)

Example 2 with PdfDictionary

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

the class PdfCleanUpTool method extractLocationsFromSingleRedactAnnotation.

/**
 * Note: annotation can consist not only of one area specified by the RECT entry, but also of multiple areas specified
 * by the QuadPoints entry in the annotation dictionary.
 */
private void extractLocationsFromSingleRedactAnnotation(PdfRedactAnnotation redactAnnotation) {
    List<Rectangle> regions;
    PdfArray quadPoints = redactAnnotation.getQuadPoints();
    if (quadPoints != null && !quadPoints.isEmpty()) {
        regions = translateQuadPointsToRectangles(quadPoints);
    } else {
        regions = new ArrayList<>();
        regions.add(redactAnnotation.getRectangle().toRectangle());
    }
    redactAnnotations.put(redactAnnotation, regions);
    int page = pdfDocument.getPageNumber(redactAnnotation.getPage());
    Color cleanUpColor = redactAnnotation.getInteriorColor();
    PdfDictionary ro = redactAnnotation.getRedactRolloverAppearance();
    if (ro != null) {
        cleanUpColor = null;
    }
    for (Rectangle region : regions) {
        addCleanupLocation(new PdfCleanUpLocation(page, region, cleanUpColor));
    }
}
Also used : PdfArray(com.itextpdf.kernel.pdf.PdfArray) PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) Color(com.itextpdf.kernel.colors.Color) Rectangle(com.itextpdf.kernel.geom.Rectangle)

Example 3 with PdfDictionary

use of com.itextpdf.kernel.pdf.PdfDictionary 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)

Example 4 with PdfDictionary

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

the class PdfCleanUpTool method getFontFromAcroForm.

private PdfFont getFontFromAcroForm(PdfName fontName) {
    PdfDictionary formDictionary = pdfDocument.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
    PdfDictionary resources = formDictionary.getAsDictionary(PdfName.DR);
    PdfDictionary fonts = resources.getAsDictionary(PdfName.Font);
    return PdfFontFactory.createFont(fonts.getAsDictionary(fontName));
}
Also used : PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary)

Example 5 with PdfDictionary

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

the class CleanUpImagesCompareTool method extractImagesFromPdf.

private Map<Integer, PageImageObjectsPaths> extractImagesFromPdf(String pdf, String outputPath) throws IOException, InterruptedException {
    try (PdfReader readerPdf = new PdfReader(pdf);
        PdfDocument pdfDoc = new PdfDocument(readerPdf)) {
        Map<Integer, PageImageObjectsPaths> imageObjectDatas = new HashMap<>();
        for (int i = 1; i <= pdfDoc.getNumberOfPages(); i++) {
            PdfPage page = pdfDoc.getPage(i);
            PageImageObjectsPaths imageObjectData = new PageImageObjectsPaths(page.getPdfObject().getIndirectReference());
            Stack<LocalPathItem> baseLocalPath = new Stack<LocalPathItem>();
            PdfResources pdfResources = page.getResources();
            if (pdfResources.getPdfObject().isIndirect()) {
                imageObjectData.addIndirectReference(pdfResources.getPdfObject().getIndirectReference());
            } else {
                baseLocalPath.push(new DictPathItem(PdfName.Resources));
            }
            PdfDictionary xObjects = pdfResources.getResource(PdfName.XObject);
            if (xObjects == null) {
                continue;
            }
            if (xObjects.isIndirect()) {
                imageObjectData.addIndirectReference(xObjects.getIndirectReference());
                baseLocalPath.clear();
            } else {
                baseLocalPath.push(new DictPathItem(PdfName.XObject));
            }
            boolean isPageToGsExtract = false;
            for (PdfName objectName : xObjects.keySet()) {
                if (!xObjects.get(objectName).isStream() || !PdfName.Image.equals(xObjects.getAsStream(objectName).getAsName(PdfName.Subtype))) {
                    continue;
                }
                PdfImageXObject pdfObject = new PdfImageXObject(xObjects.getAsStream(objectName));
                baseLocalPath.push(new DictPathItem(objectName));
                if (!useGs) {
                    String extension = pdfObject.identifyImageFileExtension();
                    String fileName = outputPath + objectName + "_" + i + "." + extension;
                    createImageFromPdfXObject(fileName, pdfObject);
                } else {
                    isPageToGsExtract = true;
                }
                Stack<LocalPathItem> reversedStack = new Stack<>();
                reversedStack.addAll(baseLocalPath);
                Stack<LocalPathItem> resultStack = new Stack<>();
                resultStack.addAll(reversedStack);
                imageObjectData.addLocalPath(resultStack);
                baseLocalPath.pop();
            }
            if (useGs && isPageToGsExtract) {
                String fileName = "Page_" + i;
                ghostscriptHelper.runGhostScriptImageGeneration(pdf, outputPath, fileName, String.valueOf(i));
            }
            ImageRenderListener listener = new ImageRenderListener();
            PdfCanvasProcessor parser = new PdfCanvasProcessor(listener);
            parser.processPageContent(page);
            ignoredImagesAreas.put(i, listener.getImageRectangles());
            imageObjectDatas.put(i, imageObjectData);
        }
        return imageObjectDatas;
    }
}
Also used : DictPathItem(com.itextpdf.kernel.utils.objectpathitems.DictPathItem) PdfImageXObject(com.itextpdf.kernel.pdf.xobject.PdfImageXObject) PdfCanvasProcessor(com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor) PdfName(com.itextpdf.kernel.pdf.PdfName) HashMap(java.util.HashMap) PdfDictionary(com.itextpdf.kernel.pdf.PdfDictionary) PdfResources(com.itextpdf.kernel.pdf.PdfResources) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) Point(com.itextpdf.kernel.geom.Point) Stack(java.util.Stack) LocalPathItem(com.itextpdf.kernel.utils.objectpathitems.LocalPathItem) PdfPage(com.itextpdf.kernel.pdf.PdfPage)

Aggregations

PdfDictionary (com.itextpdf.kernel.pdf.PdfDictionary)6 PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)2 PdfName (com.itextpdf.kernel.pdf.PdfName)2 PdfObject (com.itextpdf.kernel.pdf.PdfObject)2 PdfReader (com.itextpdf.kernel.pdf.PdfReader)2 Color (com.itextpdf.kernel.colors.Color)1 PdfException (com.itextpdf.kernel.exceptions.PdfException)1 PdfFont (com.itextpdf.kernel.font.PdfFont)1 Matrix (com.itextpdf.kernel.geom.Matrix)1 Point (com.itextpdf.kernel.geom.Point)1 Rectangle (com.itextpdf.kernel.geom.Rectangle)1 PdfArray (com.itextpdf.kernel.pdf.PdfArray)1 PdfPage (com.itextpdf.kernel.pdf.PdfPage)1 PdfResources (com.itextpdf.kernel.pdf.PdfResources)1 PdfString (com.itextpdf.kernel.pdf.PdfString)1 CanvasArtifact (com.itextpdf.kernel.pdf.canvas.CanvasArtifact)1 PdfCanvas (com.itextpdf.kernel.pdf.canvas.PdfCanvas)1 PdfCanvasProcessor (com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor)1 PdfImageXObject (com.itextpdf.kernel.pdf.xobject.PdfImageXObject)1 DictPathItem (com.itextpdf.kernel.utils.objectpathitems.DictPathItem)1