Search in sources :

Example 1 with PdfResources

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

Example 2 with PdfResources

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

the class PdfCleanUpProcessor method processContent.

/**
 * @param contentBytes the bytes of a content stream
 * @param resources    the resources of the content stream. Must not be null.
 */
@Override
public void processContent(byte[] contentBytes, PdfResources resources) {
    canvasStack.push(new PdfCanvas(new PdfStream(), new PdfResources(), document));
    if (canvasStack.size() == 1) {
        // If it is the first canvas, we begin to wrap it with q
        getCanvas().saveState();
    }
    super.processContent(contentBytes, resources);
// Here we don't pop() canvases by intent. It is the responsibility of the one who utilizes the canvas data
}
Also used : PdfResources(com.itextpdf.kernel.pdf.PdfResources) PdfCanvas(com.itextpdf.kernel.pdf.canvas.PdfCanvas) PdfStream(com.itextpdf.kernel.pdf.PdfStream)

Aggregations

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