This commit is contained in:
Andrei Isvoran 2024-02-07 15:06:30 +02:00
parent 4f7f516348
commit e969f79a20
8 changed files with 60 additions and 87 deletions

View File

@ -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()) .elementType(element.getType())
.boundingBox(Converter.toRectangle2D(element.getBBox())) .boundingBox(Converter.toRectangle2D(element.getBBox()))
.text(element.getTextString()) .text(element.getTextString())

View File

@ -103,7 +103,8 @@ public class ElementFeatures {
@Getter @Getter
@SuperBuilder @SuperBuilder
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public static class ElementFeaturesText extends ElementFeatures { @SuppressWarnings("PMD")
public static class Text extends ElementFeatures {
String text; String text;
int font; int font;

View File

@ -35,20 +35,17 @@ public class ImageHashFactory {
@SneakyThrows @SneakyThrows
private byte[] getBytesOfImage(com.pdftron.pdf.Image inputImage) { private byte[] getBytesOfImage(com.pdftron.pdf.Image inputImage) {
// 0 because the memory filter determines the size // 0 because the memory filter determines the size
try(var memFilter = new MemoryFilter(0, false)) { try(var memFilter = new MemoryFilter(0, false);
try(var filterWriter = new FilterWriter(memFilter)) { var filterWriter = new FilterWriter(memFilter)) {
inputImage.export(filterWriter); inputImage.export(filterWriter);
filterWriter.flushAll(); filterWriter.flushAll();
byte[] res = memFilter.getBuffer(); byte[] res = memFilter.getBuffer();
memFilter.flushAll(); memFilter.flushAll();
memFilter.destroy();
filterWriter.destroy();
return res; return res;
} }
} }
}
public String getSimplePHash(BufferedImage image) { public String getSimplePHash(BufferedImage image) {

View File

@ -151,8 +151,8 @@ public class InvisibleElementRemovalService {
private void execute(PDFDoc pdfDoc, boolean delta, boolean removePaths, Set<String> markedContentToIgnore) { private void execute(PDFDoc pdfDoc, boolean delta, boolean removePaths, Set<String> markedContentToIgnore) {
log.info("Start removing invisible Elements"); log.info("Start removing invisible Elements");
try(ElementWriter writer = new ElementWriter()) { try(ElementWriter writer = new ElementWriter();
try(ElementReader reader = new ElementReader()) { ElementReader reader = new ElementReader()) {
Set<Long> visitedXObjIds = new TreeSet<>(); Set<Long> visitedXObjIds = new TreeSet<>();
for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) {
@ -179,10 +179,6 @@ public class InvisibleElementRemovalService {
context.markedContentStack().clear(); context.markedContentStack().clear();
removeOverlappedElements(page, writer, context); removeOverlappedElements(page, writer, context);
}
writer.destroy();
reader.destroy();
} }
} }
log.info("Finished removing invisible Elements"); log.info("Finished removing invisible Elements");
@ -329,7 +325,6 @@ public class InvisibleElementRemovalService {
processElements(formWriter, context); processElements(formWriter, context);
formWriter.end(); formWriter.end();
formWriter.destroy();
context.reader().end(); context.reader().end();
context.clippingPathStack().leaveGState(); context.clippingPathStack().leaveGState();
} }
@ -494,7 +489,6 @@ public class InvisibleElementRemovalService {
processOverlappedElements(formWriter, context); processOverlappedElements(formWriter, context);
formWriter.end(); formWriter.end();
formWriter.destroy();
context.reader().end(); context.reader().end();
} }
} }
@ -589,17 +583,13 @@ public class InvisibleElementRemovalService {
try(ColorPt colorPt = new ColorPt(Integer.valueOf(hexcolor.substring(1, 3), 16) / 255d, 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(3, 5), 16) / 255d,
Integer.valueOf(hexcolor.substring(5, 7), 16) / 255d)) { Integer.valueOf(hexcolor.substring(5, 7), 16) / 255d);
try(ElementBuilder eb = new ElementBuilder()) { ElementBuilder eb = new ElementBuilder()) {
Element rect = eb.createRect(r.getX(), r.getY(), r.getWidth(), r.getHeight()); Element rect = eb.createRect(r.getX(), r.getY(), r.getWidth(), r.getHeight());
rect.setPathStroke(true); rect.setPathStroke(true);
rect.getGState().setStrokeColorSpace(ColorSpace.createDeviceRGB()); rect.getGState().setStrokeColorSpace(ColorSpace.createDeviceRGB());
rect.getGState().setStrokeColor(colorPt); rect.getGState().setStrokeColor(colorPt);
writer.writePlacedElement(rect); writer.writePlacedElement(rect);
colorPt.destroy();
eb.destroy();
}
} }
} }

View File

@ -7,33 +7,33 @@ import java.util.Set;
public class MarkedContentStack { public class MarkedContentStack {
Deque<MarkedContent> markedContentQueue = new LinkedList<>(); Deque<MarkedContent> stack = new LinkedList<>();
public void enterMarkedContent(String name) { public void enterMarkedContent(String name) {
markedContentQueue.push(new MarkedContent(name)); stack.push(new MarkedContent(name));
} }
public void leaveMarkedContent() { public void leaveMarkedContent() {
markedContentQueue.pop(); stack.pop();
} }
public String currentMarkedContent() { public String currentMarkedContent() {
if (markedContentQueue.isEmpty()) { if (stack.isEmpty()) {
return ""; return "";
} }
return markedContentQueue.peek().name(); return stack.peek().name();
} }
public boolean currentMarkedContentContains(String name) { public boolean currentMarkedContentContains(String name) {
Iterator<MarkedContent> markedContentIterator = markedContentQueue.descendingIterator(); Iterator<MarkedContent> markedContentIterator = stack.descendingIterator();
while (markedContentIterator.hasNext()) { while (markedContentIterator.hasNext()) {
var markedContent = markedContentIterator.next(); var markedContent = markedContentIterator.next();
if (markedContent.name().equals(name)) { if (markedContent.name().equals(name)) {
@ -46,10 +46,10 @@ public class MarkedContentStack {
public boolean currentMarkedContentContainsAny(Set<String> names) { public boolean currentMarkedContentContainsAny(Set<String> names) {
if (markedContentQueue.isEmpty()) { if (stack.isEmpty()) {
return false; return false;
} }
Iterator<MarkedContent> markedContentIterator = markedContentQueue.descendingIterator(); Iterator<MarkedContent> markedContentIterator = stack.descendingIterator();
while (markedContentIterator.hasNext()) { while (markedContentIterator.hasNext()) {
var markedContent = markedContentIterator.next(); var markedContent = markedContentIterator.next();
if (names.contains(markedContent.name())) { if (names.contains(markedContent.name())) {
@ -62,7 +62,7 @@ public class MarkedContentStack {
public void clear() { public void clear() {
markedContentQueue.clear(); stack.clear();
} }

View File

@ -43,8 +43,8 @@ public class OCGWatermarkRemovalService {
@SneakyThrows @SneakyThrows
private void removeOCGWatermarks(PDFDoc pdfDoc) { private void removeOCGWatermarks(PDFDoc pdfDoc) {
try(ElementReader reader = new ElementReader()) { try(ElementReader reader = new ElementReader();
try(ElementWriter writer = new ElementWriter()) { ElementWriter writer = new ElementWriter()) {
Set<Long> visitedXObjIds = new TreeSet<>(); Set<Long> visitedXObjIds = new TreeSet<>();
for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) {
@ -52,10 +52,6 @@ public class OCGWatermarkRemovalService {
Page page = iterator.next(); Page page = iterator.next();
writeAllElementsExceptWatermarks(page, reader, writer, visitedXObjIds); writeAllElementsExceptWatermarks(page, reader, writer, visitedXObjIds);
} }
reader.destroy();
writer.destroy();
}
} }
} }
@ -135,7 +131,6 @@ public class OCGWatermarkRemovalService {
processElements(page, reader, formWriter, visitedXObjIds); processElements(page, reader, formWriter, visitedXObjIds);
formWriter.end(); formWriter.end();
formWriter.destroy();
reader.end(); reader.end();
} }
} }

View File

@ -27,7 +27,6 @@ public class PdfTextExtraction {
texts.add(extractor.getAsText()); texts.add(extractor.getAsText());
} }
extractor.destroy();
pdfDoc.close(); pdfDoc.close();
return String.join("\n", texts); return String.join("\n", texts);
} }

View File

@ -111,8 +111,6 @@ public class WatermarkRemovalService {
formObjectsAndImagesForPages.put(page.getSDFObj().getObjNum(), elementFeaturesLinkedList); formObjectsAndImagesForPages.put(page.getSDFObj().getObjNum(), elementFeaturesLinkedList);
} }
reader.destroy();
return formObjectsAndImagesForPages; return formObjectsAndImagesForPages;
} }
} }
@ -227,7 +225,6 @@ public class WatermarkRemovalService {
processElement(element1, visitedXObjIds, elementFeaturesLinkedList, formObjectsOccuringMoreThanOnceOnAPage, minAreaCoveringPage, page); processElement(element1, visitedXObjIds, elementFeaturesLinkedList, formObjectsOccuringMoreThanOnceOnAPage, minAreaCoveringPage, page);
} }
elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element)); elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element));
xObjectReader.destroy();
} }
} else { } else {
elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element)); elementFeaturesLinkedList.add(ElementFeatureFactory.extractFeatures(element));
@ -258,8 +255,8 @@ public class WatermarkRemovalService {
@SneakyThrows @SneakyThrows
private void removeAllWatermarks(PDFDoc pdfDoc, List<ElementFeatures> watermarksElementFeaturesList) { private void removeAllWatermarks(PDFDoc pdfDoc, List<ElementFeatures> watermarksElementFeaturesList) {
try(ElementReader reader = new ElementReader()) { try(ElementReader reader = new ElementReader();
try (ElementWriter writer = new ElementWriter()) { ElementWriter writer = new ElementWriter()) {
Set<Long> visitedXObjIds = new TreeSet<>(); Set<Long> visitedXObjIds = new TreeSet<>();
for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) { for (PageIterator iterator = pdfDoc.getPageIterator(); iterator.hasNext(); ) {
@ -267,11 +264,6 @@ public class WatermarkRemovalService {
Page page = iterator.next(); Page page = iterator.next();
writeAllElementsExceptWatermarks(page, reader, writer, watermarksElementFeaturesList, visitedXObjIds); writeAllElementsExceptWatermarks(page, reader, writer, watermarksElementFeaturesList, visitedXObjIds);
}
reader.destroy();
writer.destroy();
} }
} }
} }
@ -402,7 +394,6 @@ public class WatermarkRemovalService {
processElements(page, reader, formWriter, watermarksElementFeaturesList, visitedXObjIds); processElements(page, reader, formWriter, watermarksElementFeaturesList, visitedXObjIds);
formWriter.end(); formWriter.end();
formWriter.destroy();
reader.end(); reader.end();
} }
} }