Search in sources :

Example 6 with PdfName

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

the class CleanUpCsCompareUtil method isCSApplicable.

private static boolean isCSApplicable(PdfImageXObject originalImage, ImageInfo clearedImageInfo) {
    PdfObject pdfColorSpace = originalImage.getPdfObject().get(PdfName.ColorSpace);
    PdfName name;
    if (pdfColorSpace.isArray()) {
        name = ((PdfArray) pdfColorSpace).getAsName(0);
    } else if (pdfColorSpace.isName()) {
        name = (PdfName) pdfColorSpace;
    } else {
        name = new PdfName("");
    }
    // the result image is 8 bit grayscale image
    if (PdfName.Separation.equals(name) || PdfName.DeviceGray.equals(name)) {
        return clearedImageInfo.getBitsPerPixel() == 8 && clearedImageInfo.getColorType() == ImageInfo.ColorType.GRAYSCALE;
    }
    return false;
}
Also used : PdfName(com.itextpdf.kernel.pdf.PdfName) PdfObject(com.itextpdf.kernel.pdf.PdfObject)

Example 7 with PdfName

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

the class PdfCleanUpProcessorUnitTest method openNotWrittenTagsUsualTest.

@Test
public void openNotWrittenTagsUsualTest() {
    final Deque<CanvasTag> tags = new ArrayDeque<>(Arrays.asList(new CanvasTag(new PdfName("tag name1")), new CanvasTag(new PdfName("tag name2")), new CanvasTag(new PdfName("tag name3"))));
    testOpenNotWrittenTags(tags);
}
Also used : CanvasTag(com.itextpdf.kernel.pdf.canvas.CanvasTag) PdfName(com.itextpdf.kernel.pdf.PdfName) ArrayDeque(java.util.ArrayDeque) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test) UnitTest(com.itextpdf.test.annotations.type.UnitTest)

Example 8 with PdfName

use of com.itextpdf.kernel.pdf.PdfName 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 9 with PdfName

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

the class PdfCleanUpProcessor method popCanvasIfFormXObject.

private void popCanvasIfFormXObject(String operator, List<PdfObject> operands) {
    if ("Do".equals(operator)) {
        PdfStream formStream = getXObjectStream((PdfName) operands.get(0));
        if (PdfName.Form.equals(formStream.getAsName(PdfName.Subtype))) {
            PdfCanvas cleanedCanvas = popCleanedCanvas();
            PdfFormXObject newFormXObject = new PdfFormXObject((Rectangle) null);
            newFormXObject.getPdfObject().putAll(formStream);
            if (formStream.containsKey(PdfName.Resources)) {
                newFormXObject.put(PdfName.Resources, cleanedCanvas.getResources().getPdfObject());
            }
            newFormXObject.getPdfObject().setData(cleanedCanvas.getContentStream().getBytes());
            PdfName name = getCanvas().getResources().addForm(newFormXObject);
            getCanvas().getContentStream().getOutputStream().write(name).writeSpace().writeBytes(ByteUtils.getIsoBytes("Do\n"));
        }
    }
}
Also used : PdfName(com.itextpdf.kernel.pdf.PdfName) PdfFormXObject(com.itextpdf.kernel.pdf.xobject.PdfFormXObject) PdfCanvas(com.itextpdf.kernel.pdf.canvas.PdfCanvas) PdfStream(com.itextpdf.kernel.pdf.PdfStream)

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