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