use of com.itextpdf.kernel.pdf.xobject.PdfImageXObject in project i7j-pdfsweep by itext.
the class CleanUpCsCompareUtilTest method differentImageBitsPerPixelTest.
@Test
public void differentImageBitsPerPixelTest() {
PdfImageXObject image1 = createMockedPdfImageXObject(PdfName.DeviceRGB, 8);
PdfImageXObject image2 = createMockedPdfImageXObject(PdfName.DeviceRGB, 16);
Assert.assertFalse(CleanUpCsCompareUtil.isOriginalCsCompatible(image1, image2));
}
use of com.itextpdf.kernel.pdf.xobject.PdfImageXObject in project i7j-pdfsweep by itext.
the class CleanUpCsCompareUtilTest method imageReadExceptionTest.
@Test
@LogMessages(messages = @LogMessage(messageTemplate = CleanUpLogMessageConstant.CANNOT_OBTAIN_IMAGE_INFO_AFTER_FILTERING))
public void imageReadExceptionTest() {
PdfStream stream1 = new PdfStream();
stream1.put(PdfName.BitsPerComponent, new PdfNumber(8));
stream1.put(PdfName.ColorSpace, PdfName.DeviceCMYK);
PdfImageXObject image1 = new PdfImageXObject(stream1);
stream1 = new PdfStream();
stream1.put(PdfName.BitsPerComponent, new PdfNumber(8));
stream1.put(PdfName.ColorSpace, PdfName.DeviceCMYK);
PdfImageXObject image2 = new PdfImageXObject(stream1);
Assert.assertFalse(CleanUpCsCompareUtil.isOriginalCsCompatible(image1, image2));
}
use of com.itextpdf.kernel.pdf.xobject.PdfImageXObject in project i7j-pdfsweep by itext.
the class PdfCleanUpProcessorUnitTest method createAndCompareImages.
private static boolean createAndCompareImages(PdfObject firstCs, PdfObject secondCs) {
PdfImageXObject firstImage = createImageWithCs(firstCs);
PdfImageXObject secondImage = createImageWithCs(secondCs);
boolean compareFirstToSecondResult = PdfCleanUpProcessor.areColorSpacesDifferent(firstImage, secondImage);
boolean compareSecondToFirstResult = PdfCleanUpProcessor.areColorSpacesDifferent(secondImage, firstImage);
if (compareFirstToSecondResult != compareSecondToFirstResult) {
throw new IllegalStateException("The comparing of CS shall be a commutative operation.");
}
return compareFirstToSecondResult;
}
use of com.itextpdf.kernel.pdf.xobject.PdfImageXObject in project i7j-pdfsweep by itext.
the class PdfCleanUpProcessorUnitTest method createImageWithCs.
private static PdfImageXObject createImageWithCs(PdfObject cs) {
PdfStream stream = new PdfStream();
stream.put(PdfName.Type, PdfName.XObject);
stream.put(PdfName.Subtype, PdfName.Image);
if (cs != null) {
stream.put(PdfName.ColorSpace, cs);
}
return new PdfImageXObject(stream);
}
use of com.itextpdf.kernel.pdf.xobject.PdfImageXObject 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;
}
}
Aggregations