From e969f79a20c06cb1ae7409e1110f127c3dba239a Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Wed, 7 Feb 2024 15:06:30 +0200 Subject: [PATCH] cr --- .../commons/ElementFeatureFactory.java | 4 +- .../pdftronlogic/commons/ElementFeatures.java | 3 +- .../commons/ImageHashFactory.java | 17 ++--- .../InvisibleElementRemovalService.java | 66 ++++++++----------- .../commons/MarkedContentStack.java | 18 ++--- .../commons/OCGWatermarkRemovalService.java | 17 ++--- .../commons/PdfTextExtraction.java | 1 - .../commons/WatermarkRemovalService.java | 21 ++---- 8 files changed, 60 insertions(+), 87 deletions(-) diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatureFactory.java b/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatureFactory.java index d9bc948..6f1407e 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatureFactory.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatureFactory.java @@ -48,9 +48,9 @@ public class ElementFeatureFactory { } - private static ElementFeatures.ElementFeaturesText buildText(Element element) throws PDFNetException { + private static ElementFeatures.Text buildText(Element element) throws PDFNetException { - return ElementFeatures.ElementFeaturesText.builder() + return ElementFeatures.Text.builder() .elementType(element.getType()) .boundingBox(Converter.toRectangle2D(element.getBBox())) .text(element.getTextString()) diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatures.java b/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatures.java index 41efadb..3ef3ec7 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatures.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/ElementFeatures.java @@ -103,7 +103,8 @@ public class ElementFeatures { @Getter @SuperBuilder @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) - public static class ElementFeaturesText extends ElementFeatures { + @SuppressWarnings("PMD") + public static class Text extends ElementFeatures { String text; int font; diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/ImageHashFactory.java b/src/main/java/com/iqser/red/pdftronlogic/commons/ImageHashFactory.java index ccf88ae..5d3682f 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/ImageHashFactory.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/ImageHashFactory.java @@ -35,18 +35,15 @@ public class ImageHashFactory { @SneakyThrows private byte[] getBytesOfImage(com.pdftron.pdf.Image inputImage) { // 0 because the memory filter determines the size - try(var memFilter = new MemoryFilter(0, false)) { - try(var filterWriter = new FilterWriter(memFilter)) { + try(var memFilter = new MemoryFilter(0, false); + var filterWriter = new FilterWriter(memFilter)) { - inputImage.export(filterWriter); - filterWriter.flushAll(); - byte[] res = memFilter.getBuffer(); + inputImage.export(filterWriter); + filterWriter.flushAll(); + byte[] res = memFilter.getBuffer(); - memFilter.flushAll(); - memFilter.destroy(); - filterWriter.destroy(); - return res; - } + memFilter.flushAll(); + return res; } } diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/InvisibleElementRemovalService.java b/src/main/java/com/iqser/red/pdftronlogic/commons/InvisibleElementRemovalService.java index 271bec6..ae60168 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/InvisibleElementRemovalService.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/InvisibleElementRemovalService.java @@ -151,38 +151,34 @@ public class InvisibleElementRemovalService { private void execute(PDFDoc pdfDoc, boolean delta, boolean removePaths, Set markedContentToIgnore) { log.info("Start removing invisible Elements"); - try(ElementWriter writer = new ElementWriter()) { - try(ElementReader reader = new ElementReader()) { - Set visitedXObjIds = new TreeSet<>(); + try(ElementWriter writer = new ElementWriter(); + ElementReader reader = new ElementReader()) { + Set visitedXObjIds = new TreeSet<>(); - for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { + for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { - Page page = iterator.next(); + Page page = iterator.next(); - visitedXObjIds.add(page.getSDFObj().getObjNum()); + visitedXObjIds.add(page.getSDFObj().getObjNum()); - InvisibleElementRemovalContext context = InvisibleElementRemovalContext.builder() - .reader(reader) - .clippingPathStack(new ClippingPathStack(page.getMediaBox())) - .markedContentStack(new MarkedContentStack()) - .removePaths(removePaths) - .delta(delta) - .overlappedElements(new ArrayList<>()) - .visibleElements(new ArrayList<>()) - .visitedXObjIds(visitedXObjIds) - .markedContentToIgnore(markedContentToIgnore) - .build(); + InvisibleElementRemovalContext context = InvisibleElementRemovalContext.builder() + .reader(reader) + .clippingPathStack(new ClippingPathStack(page.getMediaBox())) + .markedContentStack(new MarkedContentStack()) + .removePaths(removePaths) + .delta(delta) + .overlappedElements(new ArrayList<>()) + .visibleElements(new ArrayList<>()) + .visitedXObjIds(visitedXObjIds) + .markedContentToIgnore(markedContentToIgnore) + .build(); - removeClippedElementsAndInvisibleTextAndRememberOverlappedElements(page, writer, context); + removeClippedElementsAndInvisibleTextAndRememberOverlappedElements(page, writer, context); - context.visitedXObjIds().clear(); - context.markedContentStack().clear(); + context.visitedXObjIds().clear(); + context.markedContentStack().clear(); - removeOverlappedElements(page, writer, context); - - } - writer.destroy(); - reader.destroy(); + removeOverlappedElements(page, writer, context); } } log.info("Finished removing invisible Elements"); @@ -329,7 +325,6 @@ public class InvisibleElementRemovalService { processElements(formWriter, context); formWriter.end(); - formWriter.destroy(); context.reader().end(); context.clippingPathStack().leaveGState(); } @@ -494,7 +489,6 @@ public class InvisibleElementRemovalService { processOverlappedElements(formWriter, context); formWriter.end(); - formWriter.destroy(); context.reader().end(); } } @@ -589,17 +583,13 @@ public class InvisibleElementRemovalService { try(ColorPt colorPt = new ColorPt(Integer.valueOf(hexcolor.substring(1, 3), 16) / 255d, Integer.valueOf(hexcolor.substring(3, 5), 16) / 255d, - Integer.valueOf(hexcolor.substring(5, 7), 16) / 255d)) { - try(ElementBuilder eb = new ElementBuilder()) { - Element rect = eb.createRect(r.getX(), r.getY(), r.getWidth(), r.getHeight()); - rect.setPathStroke(true); - rect.getGState().setStrokeColorSpace(ColorSpace.createDeviceRGB()); - rect.getGState().setStrokeColor(colorPt); - writer.writePlacedElement(rect); - - colorPt.destroy(); - eb.destroy(); - } + Integer.valueOf(hexcolor.substring(5, 7), 16) / 255d); + ElementBuilder eb = new ElementBuilder()) { + Element rect = eb.createRect(r.getX(), r.getY(), r.getWidth(), r.getHeight()); + rect.setPathStroke(true); + rect.getGState().setStrokeColorSpace(ColorSpace.createDeviceRGB()); + rect.getGState().setStrokeColor(colorPt); + writer.writePlacedElement(rect); } } diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/MarkedContentStack.java b/src/main/java/com/iqser/red/pdftronlogic/commons/MarkedContentStack.java index c8a20d4..d38caa2 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/MarkedContentStack.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/MarkedContentStack.java @@ -7,33 +7,33 @@ import java.util.Set; public class MarkedContentStack { - Deque markedContentQueue = new LinkedList<>(); + Deque stack = new LinkedList<>(); public void enterMarkedContent(String name) { - markedContentQueue.push(new MarkedContent(name)); + stack.push(new MarkedContent(name)); } public void leaveMarkedContent() { - markedContentQueue.pop(); + stack.pop(); } public String currentMarkedContent() { - if (markedContentQueue.isEmpty()) { + if (stack.isEmpty()) { return ""; } - return markedContentQueue.peek().name(); + return stack.peek().name(); } public boolean currentMarkedContentContains(String name) { - Iterator markedContentIterator = markedContentQueue.descendingIterator(); + Iterator markedContentIterator = stack.descendingIterator(); while (markedContentIterator.hasNext()) { var markedContent = markedContentIterator.next(); if (markedContent.name().equals(name)) { @@ -46,10 +46,10 @@ public class MarkedContentStack { public boolean currentMarkedContentContainsAny(Set names) { - if (markedContentQueue.isEmpty()) { + if (stack.isEmpty()) { return false; } - Iterator markedContentIterator = markedContentQueue.descendingIterator(); + Iterator markedContentIterator = stack.descendingIterator(); while (markedContentIterator.hasNext()) { var markedContent = markedContentIterator.next(); if (names.contains(markedContent.name())) { @@ -62,7 +62,7 @@ public class MarkedContentStack { public void clear() { - markedContentQueue.clear(); + stack.clear(); } diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/OCGWatermarkRemovalService.java b/src/main/java/com/iqser/red/pdftronlogic/commons/OCGWatermarkRemovalService.java index ff6692c..6e70023 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/OCGWatermarkRemovalService.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/OCGWatermarkRemovalService.java @@ -43,18 +43,14 @@ public class OCGWatermarkRemovalService { @SneakyThrows private void removeOCGWatermarks(PDFDoc pdfDoc) { - try(ElementReader reader = new ElementReader()) { - try(ElementWriter writer = new ElementWriter()) { - Set visitedXObjIds = new TreeSet<>(); + try(ElementReader reader = new ElementReader(); + ElementWriter writer = new ElementWriter()) { + Set visitedXObjIds = new TreeSet<>(); - for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { + for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { - Page page = iterator.next(); - writeAllElementsExceptWatermarks(page, reader, writer, visitedXObjIds); - } - - reader.destroy(); - writer.destroy(); + Page page = iterator.next(); + writeAllElementsExceptWatermarks(page, reader, writer, visitedXObjIds); } } } @@ -135,7 +131,6 @@ public class OCGWatermarkRemovalService { processElements(page, reader, formWriter, visitedXObjIds); formWriter.end(); - formWriter.destroy(); reader.end(); } } diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/PdfTextExtraction.java b/src/main/java/com/iqser/red/pdftronlogic/commons/PdfTextExtraction.java index da001ec..77a4aca 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/PdfTextExtraction.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/PdfTextExtraction.java @@ -27,7 +27,6 @@ public class PdfTextExtraction { texts.add(extractor.getAsText()); } - extractor.destroy(); pdfDoc.close(); return String.join("\n", texts); } diff --git a/src/main/java/com/iqser/red/pdftronlogic/commons/WatermarkRemovalService.java b/src/main/java/com/iqser/red/pdftronlogic/commons/WatermarkRemovalService.java index c80fb8f..34e6cbe 100644 --- a/src/main/java/com/iqser/red/pdftronlogic/commons/WatermarkRemovalService.java +++ b/src/main/java/com/iqser/red/pdftronlogic/commons/WatermarkRemovalService.java @@ -111,8 +111,6 @@ public class WatermarkRemovalService { formObjectsAndImagesForPages.put(page.getSDFObj().getObjNum(), elementFeaturesLinkedList); } - reader.destroy(); - return formObjectsAndImagesForPages; } } @@ -227,7 +225,6 @@ public class WatermarkRemovalService { processElement(element1, visitedXObjIds, elementFeaturesLinkedList, formObjectsOccuringMoreThanOnceOnAPage, minAreaCoveringPage, page); } elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element)); - xObjectReader.destroy(); } } else { elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element)); @@ -258,20 +255,15 @@ public class WatermarkRemovalService { @SneakyThrows private void removeAllWatermarks(PDFDoc pdfDoc, List watermarksElementFeaturesList) { - try(ElementReader reader = new ElementReader()) { - try (ElementWriter writer = new ElementWriter()) { - Set visitedXObjIds = new TreeSet<>(); + try(ElementReader reader = new ElementReader(); + ElementWriter writer = new ElementWriter()) { + Set visitedXObjIds = new TreeSet<>(); - for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { + for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { - Page page = iterator.next(); + Page page = iterator.next(); - writeAllElementsExceptWatermarks(page, reader, writer, watermarksElementFeaturesList, visitedXObjIds); - - } - - reader.destroy(); - writer.destroy(); + writeAllElementsExceptWatermarks(page, reader, writer, watermarksElementFeaturesList, visitedXObjIds); } } } @@ -402,7 +394,6 @@ public class WatermarkRemovalService { processElements(page, reader, formWriter, watermarksElementFeaturesList, visitedXObjIds); formWriter.end(); - formWriter.destroy(); reader.end(); } }