Search in sources :

Example 1 with LocalPathItem

use of com.itextpdf.kernel.utils.objectpathitems.LocalPathItem in project i7j-pdfsweep by itext.

the class CleanUpImagesCompareTool method initializeIgnoredObjectPath.

private void initializeIgnoredObjectPath(PageImageObjectsPaths cmpPageObjects, PageImageObjectsPaths outPageObjects) {
    try {
        List<PdfIndirectReference> cmpIndirects = cmpPageObjects.getIndirectReferences();
        List<PdfIndirectReference> outIndirects = outPageObjects.getIndirectReferences();
        PdfIndirectReference baseCmpIndirect = cmpIndirects.get(0);
        PdfIndirectReference baseOutIndirect = outIndirects.get(0);
        ObjectPath baseObjectPath = new ObjectPath(baseCmpIndirect, baseCmpIndirect);
        for (int i = 1; i < cmpIndirects.size(); i++) {
            baseObjectPath.resetDirectPath(cmpIndirects.get(i), outIndirects.get(i));
            baseCmpIndirect = cmpIndirects.get(i);
            baseOutIndirect = outIndirects.get(i);
        }
        for (Stack<LocalPathItem> path : cmpPageObjects.getDirectPaths()) {
            ignoredObjectPaths.add(new ObjectPath(baseCmpIndirect, baseOutIndirect, path, baseObjectPath.getIndirectPath()));
        }
    } catch (Exception e) {
        throw new IllegalArgumentException("Out and cmp pdf documents have different object structure");
    }
}
Also used : ObjectPath(com.itextpdf.kernel.utils.objectpathitems.ObjectPath) PdfIndirectReference(com.itextpdf.kernel.pdf.PdfIndirectReference) LocalPathItem(com.itextpdf.kernel.utils.objectpathitems.LocalPathItem) Point(com.itextpdf.kernel.geom.Point) NoninvertibleTransformException(com.itextpdf.kernel.geom.NoninvertibleTransformException) IOException(java.io.IOException) PdfException(com.itextpdf.kernel.exceptions.PdfException)

Example 2 with LocalPathItem

use of com.itextpdf.kernel.utils.objectpathitems.LocalPathItem 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

Point (com.itextpdf.kernel.geom.Point)2 LocalPathItem (com.itextpdf.kernel.utils.objectpathitems.LocalPathItem)2 PdfException (com.itextpdf.kernel.exceptions.PdfException)1 NoninvertibleTransformException (com.itextpdf.kernel.geom.NoninvertibleTransformException)1 PdfDictionary (com.itextpdf.kernel.pdf.PdfDictionary)1 PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)1 PdfIndirectReference (com.itextpdf.kernel.pdf.PdfIndirectReference)1 PdfName (com.itextpdf.kernel.pdf.PdfName)1 PdfPage (com.itextpdf.kernel.pdf.PdfPage)1 PdfReader (com.itextpdf.kernel.pdf.PdfReader)1 PdfResources (com.itextpdf.kernel.pdf.PdfResources)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 ObjectPath (com.itextpdf.kernel.utils.objectpathitems.ObjectPath)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 Stack (java.util.Stack)1