cr
This commit is contained in:
parent
4f7f516348
commit
e969f79a20
@ -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())
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user