Search in sources :

Example 41 with PdfReader

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

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

the class CustomLocationExtractionStrategy method redactIPhoneUserManual.

@Test
public void redactIPhoneUserManual() throws IOException, InterruptedException {
    String input = inputPath + "iphone_user_guide_untagged.pdf";
    String output = outputPath + "redactIPhoneUserManual.pdf";
    String cmp = inputPath + "cmp_redactIPhoneUserManual.pdf";
    CompositeCleanupStrategy strategy = new CompositeCleanupStrategy();
    strategy.add(new RegexBasedCleanupStrategy("(iphone)|(iPhone)"));
    PdfDocument pdf = new PdfDocument(new PdfReader(input), new PdfWriter(output));
    // sweep
    PdfCleaner.autoSweepCleanUp(pdf, strategy);
    pdf.close();
    // compare
    CleanUpImagesCompareTool cmpTool = new CleanUpImagesCompareTool();
    String errorMessage = cmpTool.extractAndCompareImages(output, cmp, outputPath, "4");
    // TODO DEVSIX-4047 Switch to compareByContent() when the ticket will be resolved
    String compareByContentResult = cmpTool.compareVisually(output, cmp, outputPath, "diff_redactIPhoneUserManual_", cmpTool.getIgnoredImagesAreas());
    if (compareByContentResult != null) {
        errorMessage += compareByContentResult;
    }
    if (!errorMessage.equals("")) {
        Assert.fail(errorMessage);
    }
}
Also used : RegexBasedCleanupStrategy(com.itextpdf.pdfcleanup.autosweep.RegexBasedCleanupStrategy) PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) CompositeCleanupStrategy(com.itextpdf.pdfcleanup.autosweep.CompositeCleanupStrategy) CleanUpImagesCompareTool(com.itextpdf.pdfcleanup.util.CleanUpImagesCompareTool) 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 43 with PdfReader

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

the class BigDocumentCleanUpTest method cleanUp.

private void cleanUp(String input, String output, List<PdfCleanUpLocation> cleanUpLocations) throws IOException {
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(input), new PdfWriter(output));
    PdfCleaner.cleanUp(pdfDocument, cleanUpLocations);
    pdfDocument.close();
}
Also used : PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument)

Example 44 with PdfReader

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

the class CleanupLicenseEventsTest method cleanUpWithStreamArgumentsSendsCleanUpEventTest.

@Test
public void cleanUpWithStreamArgumentsSendsCleanUpEventTest() throws Exception {
    List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
    PdfCleanUpLocation lineLoc = new PdfCleanUpLocation(1, new Rectangle(100, 560, 200, 30));
    cleanUpLocations.add(lineLoc);
    String in = INPUT_PATH + "page229.pdf";
    String out = OUTPUT_PATH + "cleanUpWithStreamArgumentTest.pdf";
    InputStream file = new FileInputStream(in);
    OutputStream output = new FileOutputStream(out);
    PdfCleaner.cleanUp(file, output, cleanUpLocations, new CleanUpProperties());
    List<ConfirmEvent> events = handler.getEvents();
    Assert.assertEquals(1, events.size());
    Assert.assertEquals(PdfSweepProductEvent.CLEANUP_PDF, events.get(0).getEvent().getEventType());
    try (PdfDocument pdfDocument = new PdfDocument(new PdfReader(out));
        PdfDocument inputDoc = new PdfDocument(new PdfReader(in))) {
        String expectedProdLine = createExpectedProducerLine(new ConfirmedEventWrapper[] { getCleanUpEvent() }, inputDoc.getDocumentInfo().getProducer());
        Assert.assertEquals(expectedProdLine, pdfDocument.getDocumentInfo().getProducer());
    }
}
Also used : ByteArrayInputStream(java.io.ByteArrayInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) ByteArrayOutputStream(com.itextpdf.io.source.ByteArrayOutputStream) FileOutputStream(java.io.FileOutputStream) ArrayList(java.util.ArrayList) Rectangle(com.itextpdf.kernel.geom.Rectangle) PdfReader(com.itextpdf.kernel.pdf.PdfReader) FileInputStream(java.io.FileInputStream) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) FileOutputStream(java.io.FileOutputStream) ConfirmEvent(com.itextpdf.commons.actions.confirmations.ConfirmEvent) IntegrationTest(com.itextpdf.test.annotations.type.IntegrationTest) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test)

Example 45 with PdfReader

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

the class CleanupLicenseEventsTest method openDocumentAndCleanUpSendsCoreAndCleanUpEventsTest.

@Test
public void openDocumentAndCleanUpSendsCoreAndCleanUpEventsTest() throws Exception {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfDocument document = new PdfDocument(new PdfReader(INPUT_PATH + "page229.pdf"), new PdfWriter(baos));
    String oldProducer = document.getDocumentInfo().getProducer();
    List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
    PdfCleanUpLocation lineLoc = new PdfCleanUpLocation(1, new Rectangle(100, 560, 200, 30), ColorConstants.GREEN);
    cleanUpLocations.add(lineLoc);
    PdfCleaner.cleanUp(document, cleanUpLocations, new CleanUpProperties());
    document.close();
    List<ConfirmEvent> events = handler.getEvents();
    Assert.assertEquals(2, events.size());
    Assert.assertEquals(ITextCoreProductEvent.PROCESS_PDF, events.get(0).getEvent().getEventType());
    Assert.assertEquals(PdfSweepProductEvent.CLEANUP_PDF, events.get(1).getEvent().getEventType());
    try (PdfDocument pdfDocument = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())))) {
        String expectedProdLine = createExpectedProducerLine(new ConfirmedEventWrapper[] { getCoreEvent(), getCleanUpEvent() }, oldProducer);
        Assert.assertEquals(expectedProdLine, pdfDocument.getDocumentInfo().getProducer());
    }
}
Also used : PdfWriter(com.itextpdf.kernel.pdf.PdfWriter) ArrayList(java.util.ArrayList) Rectangle(com.itextpdf.kernel.geom.Rectangle) ByteArrayOutputStream(com.itextpdf.io.source.ByteArrayOutputStream) PdfReader(com.itextpdf.kernel.pdf.PdfReader) PdfDocument(com.itextpdf.kernel.pdf.PdfDocument) ByteArrayInputStream(java.io.ByteArrayInputStream) ConfirmEvent(com.itextpdf.commons.actions.confirmations.ConfirmEvent) IntegrationTest(com.itextpdf.test.annotations.type.IntegrationTest) ExtendedITextTest(com.itextpdf.test.ExtendedITextTest) Test(org.junit.Test)

Aggregations

PdfDocument (com.itextpdf.kernel.pdf.PdfDocument)64 PdfReader (com.itextpdf.kernel.pdf.PdfReader)64 PdfWriter (com.itextpdf.kernel.pdf.PdfWriter)56 ExtendedITextTest (com.itextpdf.test.ExtendedITextTest)43 IntegrationTest (com.itextpdf.test.annotations.type.IntegrationTest)43 Test (org.junit.Test)43 Rectangle (com.itextpdf.kernel.geom.Rectangle)22 CompositeCleanupStrategy (com.itextpdf.pdfcleanup.autosweep.CompositeCleanupStrategy)22 RegexBasedCleanupStrategy (com.itextpdf.pdfcleanup.autosweep.RegexBasedCleanupStrategy)20 PdfString (com.itextpdf.kernel.pdf.PdfString)13 ConfirmEvent (com.itextpdf.commons.actions.confirmations.ConfirmEvent)11 ArrayList (java.util.ArrayList)11 ByteArrayOutputStream (com.itextpdf.io.source.ByteArrayOutputStream)9 ByteArrayInputStream (java.io.ByteArrayInputStream)9 CleanUpImagesCompareTool (com.itextpdf.pdfcleanup.util.CleanUpImagesCompareTool)7 CompareTool (com.itextpdf.kernel.utils.CompareTool)5 Document (com.itextpdf.layout.Document)5 PdfAutoSweepTools (com.itextpdf.pdfcleanup.autosweep.PdfAutoSweepTools)5 PdfCleanUpLocation (com.itextpdf.pdfcleanup.PdfCleanUpLocation)4 FileInputStream (java.io.FileInputStream)4