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;
}
}
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);
}
}
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();
}
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());
}
}
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());
}
}
Aggregations