diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/parsing/model/TextPositionSequence.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/parsing/model/TextPositionSequence.java index 6770712d..6b9be1bf 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/parsing/model/TextPositionSequence.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/parsing/model/TextPositionSequence.java @@ -28,6 +28,9 @@ import lombok.extern.slf4j.Slf4j; @JsonIgnoreProperties({"empty"}) public class TextPositionSequence implements CharSequence { + public static final int SMALL_OFFSET = 1; + public static final int LARGE_OFFSET = 2; + public static final int WIDE_OFFSET = 3; private int page; private List textPositions = new ArrayList<>(); @@ -162,8 +165,7 @@ public class TextPositionSequence implements CharSequence { if (rotation == 90) { return textPositions.get(0).getYDirAdj(); } else { - return textPositions.get(textPositions.size() - 1) - .getXDirAdj() + textPositions.get(textPositions.size() - 1).getWidthDirAdj() + 1; + return textPositions.get(textPositions.size() - 1).getXDirAdj() + textPositions.get(textPositions.size() - 1).getWidthDirAdj() + SMALL_OFFSET; } } @@ -193,7 +195,7 @@ public class TextPositionSequence implements CharSequence { public float getY2() { if (rotation == 90) { - return textPositions.get(textPositions.size() - 1).getXDirAdj() + getTextHeight() - 2; + return textPositions.get(textPositions.size() - 1).getXDirAdj() + getTextHeight() - LARGE_OFFSET; } else { return pageHeight - textPositions.get(0).getYDirAdj() + getTextHeight(); } @@ -204,7 +206,7 @@ public class TextPositionSequence implements CharSequence { @JsonAttribute(ignore = true) public float getTextHeight() { - return textPositions.get(0).getHeightDir() + 2; + return textPositions.get(0).getHeightDir() + LARGE_OFFSET; } @@ -273,144 +275,143 @@ public class TextPositionSequence implements CharSequence { log.debug("Page: '{}', Word: '{}', Rotation: '{}', textRotation {}", page, toString(), rotation, dir); - float height = getTextHeight(); + float textHeight = getTextHeight(); float posXInit = getX1(); float posXEnd; float posYInit; float posYEnd; - if (rotation == 0 && dir == 90f) { + RedTextPosition firstTextPos = textPositions.get(0); + RedTextPosition lastTextPos = textPositions.get(textPositions.size() - 1); - posYInit = getX1(); - posYEnd = getX2() + textPositions.get(0).getWidthDirAdj() - textPositions.get(textPositions.size() - 1) - .getWidthDirAdj() - 3; - posXInit = textPositions.get(0).getYDirAdj() + 2; - posXEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height; + float xAndWidthDirAdjSum = lastTextPos.getXDirAdj() + lastTextPos.getWidthDirAdj(); + float widthDirAdjDelta = firstTextPos.getWidthDirAdj() - lastTextPos.getWidthDirAdj(); - } else if (rotation == 0 && dir == 180f) { + if (rotation == 0) { + if (dir == 0f) { + // Rot0Dir0 + posXEnd = xAndWidthDirAdjSum + SMALL_OFFSET; + posYInit = pageHeight - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posYEnd = pageHeight - lastTextPos.getYDirAdj() + LARGE_OFFSET; - posXInit = pageWidth - getX1() + 1; - posXEnd = pageWidth - getX2() + textPositions.get(0) - .getWidthDirAdj() - textPositions.get(textPositions.size() - 1).getWidthDirAdj() - 3; - posYInit = textPositions.get(0).getYDirAdj() - height + 2; - posYEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height + 2; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 90f) { + posXInit = firstTextPos.getYDirAdj() + LARGE_OFFSET; + posXEnd = lastTextPos.getYDirAdj() - textHeight; + posYInit = getX1(); + posYEnd = getX2() + widthDirAdjDelta - WIDE_OFFSET; - } else if (rotation == 0 && dir == 270f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 180f) { + // Rot180 Dir180 + posXInit = pageWidth - getX1() + SMALL_OFFSET; + posXEnd = pageWidth - getX2() + widthDirAdjDelta - WIDE_OFFSET; + posYInit = firstTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; + posYEnd = lastTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; - posYInit = pageHeight - getX1(); - posYEnd = pageHeight - getX2() - textPositions.get(0) - .getWidthDirAdj() - textPositions.get(textPositions.size() - 1).getWidthDirAdj() - 3; - posXInit = pageWidth - textPositions.get(0).getYDirAdj() - 2; - posXEnd = pageWidth - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + height; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 270f) { + posXInit = pageWidth - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posXEnd = pageWidth - lastTextPos.getYDirAdj() + textHeight; + posYInit = pageHeight - getX1(); + posYEnd = pageHeight - getX2() - widthDirAdjDelta - WIDE_OFFSET; - } else if (rotation == 90 && dir == 0.0f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } + } else if (rotation == 90) { + if (dir == 0.0f) { + posXInit = lastTextPos.getXDirAdj() + lastTextPos.getHeightDir(); + posXEnd = firstTextPos.getXDirAdj(); + posYInit = pageHeight - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posYEnd = pageHeight - lastTextPos.getYDirAdj() + LARGE_OFFSET; - posXInit = textPositions.get(textPositions.size() - 1) - .getXDirAdj() + textPositions.get(textPositions.size() - 1).getHeightDir(); - posXEnd = textPositions.get(0).getXDirAdj(); - posYInit = pageHeight - textPositions.get(0).getYDirAdj() - 2; - posYEnd = pageHeight - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + 2; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 90.0f) { + posXEnd = firstTextPos.getYDirAdj() + LARGE_OFFSET; + posYInit = getY1(); + posYEnd = lastTextPos.getXDirAdj() - textHeight + LARGE_OFFSET * 2; - } else if (rotation == 90 && dir == 90.0f) { - posXEnd = textPositions.get(0).getYDirAdj() + 2; - posYInit = getY1(); - posYEnd = textPositions.get(textPositions.size() - 1).getXDirAdj() - height + 4; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 180.0f) { + posXInit = pageWidth - lastTextPos.getXDirAdj() - LARGE_OFFSET * 2; + posXEnd = pageWidth - firstTextPos.getXDirAdj(); + posYInit = firstTextPos.getYDirAdj() - LARGE_OFFSET - lastTextPos.getHeightDir(); + posYEnd = lastTextPos.getYDirAdj() - lastTextPos.getHeightDir(); - } else if (rotation == 90 && dir == 180.0f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 270.0f) { + posXInit = pageWidth - getX1(); + posXEnd = pageWidth - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posYInit = pageHeight - getY1(); + posYEnd = pageHeight - lastTextPos.getXDirAdj() - textHeight - LARGE_OFFSET * 2; - posXInit = pageWidth - textPositions.get(textPositions.size() - 1) - .getXDirAdj() - 4; - posXEnd = pageWidth - textPositions.get(0).getXDirAdj(); - posYInit = textPositions.get(0).getYDirAdj() - 2 - textPositions.get(textPositions.size() - 1) - .getHeightDir(); - posYEnd = textPositions.get(textPositions.size() - 1) - .getYDirAdj() - textPositions.get(textPositions.size() - 1).getHeightDir(); + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } + } else if (rotation == 180) { + if (dir == 0f) { + // Rot0Dir0 + posXEnd = xAndWidthDirAdjSum + SMALL_OFFSET; + posYInit = pageHeight - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posYEnd = pageHeight - lastTextPos.getYDirAdj() + LARGE_OFFSET; - } else if (rotation == 90 && dir == 270.0f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 90f) { + posXInit = firstTextPos.getYDirAdj() + LARGE_OFFSET; + posXEnd = lastTextPos.getYDirAdj() - textHeight; + posYInit = getX1(); + posYEnd = getX2() - WIDE_OFFSET; - posXInit = pageWidth - getX1(); - posXEnd = pageWidth - textPositions.get(0).getYDirAdj() - 2; - posYInit = pageHeight - getY1(); - posYEnd = pageHeight - textPositions.get(textPositions.size() - 1) - .getXDirAdj() - height - 4; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 180f) { + // Rot180 Dir180 + posXInit = pageWidth - getX1() + SMALL_OFFSET; + posXEnd = pageWidth - getX2() + widthDirAdjDelta - WIDE_OFFSET; + posYInit = firstTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; + posYEnd = lastTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; - } else if (rotation == 180 && dir == 0f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 270.0f) { + posXInit = pageWidth - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posXEnd = pageWidth - lastTextPos.getYDirAdj() + textHeight; + posYInit = pageHeight - getX1(); + posYEnd = pageHeight - getX2() - widthDirAdjDelta; - posXEnd = textPositions.get(textPositions.size() - 1) - .getXDirAdj() + textPositions.get(textPositions.size() - 1).getWidthDirAdj() + 1; - posYInit = pageHeight - textPositions.get(0).getYDirAdj() - 2; - posYEnd = pageHeight - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + 2; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } + } else if (rotation == 270) { + if (dir == 0.0f) { + posXInit = firstTextPos.getXDirAdj(); + posXEnd = xAndWidthDirAdjSum + 0.1f; + posYInit = pageHeight - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posYEnd = posYInit + SMALL_OFFSET; - } else if (rotation == 180 && dir == 90f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 90.0f) { + posXInit = firstTextPos.getYDirAdj() + LARGE_OFFSET; + posXEnd = lastTextPos.getYDirAdj() - textHeight; + posYInit = getX1(); + posYEnd = getX2() - textHeight; - posYInit = getX1(); - posYEnd = getX2() - 3; - posXInit = textPositions.get(0).getYDirAdj() + 2; - posXEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 180.0f) { + posXInit = pageWidth - getX1() + SMALL_OFFSET; + posXEnd = pageWidth - getX2() - LARGE_OFFSET * 2; + posYInit = firstTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; + posYEnd = lastTextPos.getYDirAdj() - textHeight + LARGE_OFFSET; - } else if (rotation == 180 && dir == 180f) { + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } else if (dir == 270.0f) { + posXInit = pageWidth - firstTextPos.getYDirAdj() - LARGE_OFFSET; + posXEnd = pageWidth - lastTextPos.getYDirAdj() + textHeight; + posYInit = pageHeight - getX1(); + posYEnd = pageHeight - getX2() - textHeight; - posXInit = pageWidth - getX1() + 1; - posXEnd = pageWidth - getX2() + textPositions.get(0) - .getWidthDirAdj() - textPositions.get(textPositions.size() - 1).getWidthDirAdj() - 3; - posYInit = textPositions.get(0).getYDirAdj() - height + 2; - posYEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height + 2; - - } else if (rotation == 180 && dir == 270.0f) { - - posYInit = pageHeight - getX1(); - posYEnd = pageHeight - getX2() - textPositions.get(0) - .getWidthDirAdj() - textPositions.get(textPositions.size() - 1).getWidthDirAdj(); - posXInit = pageWidth - textPositions.get(0).getYDirAdj() - 2; - posXEnd = pageWidth - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + height; - - } else if (rotation == 270 && dir == 0.0f) { - - posYInit = pageHeight - textPositions.get(0).getYDirAdj() - 2; - posYEnd = posYInit + 1; - posXInit = textPositions.get(0).getXDirAdj(); - posXEnd = textPositions.get(textPositions.size() - 1) - .getXDirAdj() + textPositions.get(textPositions.size() - 1).getWidthDirAdj() + 0.1f; - - } else if (rotation == 270 && dir == 90.0f) { - - posYInit = getX1(); - posYEnd = getX2() - height; - posXInit = textPositions.get(0).getYDirAdj() + 2; - posXEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height; - - } else if (rotation == 270 && dir == 180.0f) { - - posXInit = pageWidth - getX1() + 1; - posXEnd = pageWidth - getX2() - 4; - posYInit = textPositions.get(0).getYDirAdj() - height + 2; - posYEnd = textPositions.get(textPositions.size() - 1).getYDirAdj() - height + 2; - - } else if (rotation == 270 && dir == 270.0f) { - - posYInit = pageHeight - getX1(); - posYEnd = pageHeight - getX2() - height; - posXInit = pageWidth - textPositions.get(0).getYDirAdj() - 2; - posXEnd = pageWidth - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + height; - - } else { - // page rotation = 0 and text direction = 0 - posXEnd = textPositions.get(textPositions.size() - 1) - .getXDirAdj() + textPositions.get(textPositions.size() - 1).getWidthDirAdj() + 1; - posYInit = pageHeight - textPositions.get(0).getYDirAdj() - 2; - posYEnd = pageHeight - textPositions.get(textPositions.size() - 1) - .getYDirAdj() + 2; + return new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + textHeight, page); + } } - var rectangle = new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + height, page); - log.debug("Rectangle: {}", rectangle); - return rectangle; + throw new RuntimeException("A case was missed while calculating the TextPositionSequence rectangle. This is a programming error"); } }