diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/model/Page.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/model/Page.java index 1bc71c23..dd3a6c00 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/model/Page.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/model/Page.java @@ -10,6 +10,8 @@ import lombok.RequiredArgsConstructor; import java.util.ArrayList; import java.util.List; +import org.apache.pdfbox.pdmodel.common.PDRectangle; + @Data @RequiredArgsConstructor public class Page { @@ -32,6 +34,7 @@ public class Page { private StringFrequencyCounter fontStyleCounter = new StringFrequencyCounter(); private double cropBoxArea; + private PDRectangle cropbox; public boolean isRotated() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java index 0ba9049a..75a89821 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/BlockificationService.java @@ -303,7 +303,7 @@ public class BlockificationService { } } - return new Rectangle(minY, minX, maxX - minX, maxY - minY); + return new Rectangle(minY , minX, maxX - minX, maxY - minY); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java index 13f3d366..d2160772 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/classification/service/ClassificationService.java @@ -6,11 +6,15 @@ import com.iqser.red.service.redaction.v1.server.classification.model.Orientatio import com.iqser.red.service.redaction.v1.server.classification.model.Page; import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; import com.iqser.red.service.redaction.v1.server.classification.utils.PositionUtils; +import com.iqser.red.service.redaction.v1.server.parsing.model.RedTextPosition; +import com.iqser.red.service.redaction.v1.server.parsing.model.TextDirection; import com.iqser.red.service.redaction.v1.server.redaction.utils.Patterns; import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer; import com.iqser.red.service.redaction.v1.server.tableextraction.model.Rectangle; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + +import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.springframework.stereotype.Service; import java.awt.geom.AffineTransform; @@ -41,10 +45,10 @@ public class ClassificationService { Rectangle btf = page.isLandscape() ? landscapeBodyTextFrame : bodyTextFrame; // if (page.getRotation() == 180 || page.getRotation() == 270){ -// var nBtf = getRectangle(btf.x, btf.y, btf.width, btf.height, page.getRotation(),((TextBlock) page.getTextBlocks().get(0)).getSequences().get(0).getPageWidth(),((TextBlock) page.getTextBlocks().get(0)).getSequences().get(0).getPageHeight()); -// btf = new Rectangle(nBtf.getTopLeft().getX(), nBtf.getTopLeft().getY(), nBtf.getWidth(), nBtf.getHeight()); + System.out.println(btf); + btf = getRectangle(btf, page.getRotation(), page.getCropbox()); // } - + System.out.println("CropBoxArea" + page.getCropBoxArea()); page.setBodyTextFrame(btf); classifyPage(btf, page, document, headlineFontSizes); } @@ -52,32 +56,33 @@ public class ClassificationService { - public com.iqser.red.service.redaction.v1.model.Rectangle getRectangle(float x, float y, float width, float height, int rotation, float pageWidth, float pageHeight) { + public Rectangle getRectangle(Rectangle rectangle, int rotation, PDRectangle cropbox) { - Point2D bottomLeft = new Point2D.Double(x, pageHeight - y); - Point2D topRight = new Point2D.Double(x + width,pageHeight - y - height); + Point2D bottomLeft = new Point2D.Double(rectangle.getMinX(), rectangle.getMinY()); + Point2D topRight = new Point2D.Double(rectangle.getMaxX(), rectangle.getMaxY()); AffineTransform transform = new AffineTransform(); - if (rotation == 0 || rotation == 180) { - transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageHeight / 2f); - transform.translate(0f, pageHeight); - transform.scale(1., -1.); - } else if (rotation == 90) { - transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageWidth / 2f); - transform.translate(0f, pageWidth); - transform.scale(1., -1.); - } else { - transform.rotate(Math.toRadians(rotation), pageHeight / 2f, pageHeight / 2f); - transform.translate(0f, pageWidth); - transform.scale(1., -1.); - } + + float ty = (cropbox.getLowerLeftY() + cropbox.getUpperRightY()) / 2; + + transform.translate(ty, ty); + transform.rotate(Math.toRadians(180), 0, 0); + transform.translate(-ty, -ty); + bottomLeft = transform.transform(bottomLeft, null); topRight = transform.transform(topRight, null); - return new com.iqser.red.service.redaction.v1.model.Rectangle( // - new Point((float) bottomLeft.getX(), (float) bottomLeft.getY()), (float) (topRight.getX() - bottomLeft.getX()), (float) (topRight.getY() - bottomLeft.getY()), 0); +// var r = new Rectangle((float)bottomLeft.getX(),(float) rectangle.getX() + (float) rectangle.getWidth(), (float)topRight.getX()- (float)bottomLeft.getX(), (float)topRight.getY()-(float) bottomLeft.getY()); + + + var r = new Rectangle((float)bottomLeft.getX() - (float) rectangle.getHeight(),(float) rectangle.getX(), (float) rectangle.getWidth(), (float) rectangle.getHeight()); + + + System.out.println(r); + return r; + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationService.java index ea13b605..11891a8d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/segmentation/PdfSegmentationService.java @@ -99,6 +99,8 @@ public class PdfSegmentationService { + + System.out.println("PageNr: " + pageNumber + " rotation: "+rotation); boolean isRotated = rotation != 0 && rotation != 360; @@ -125,6 +127,7 @@ public class PdfSegmentationService { PDRectangle cropbox = pdPage.getCropBox(); float cropboxArea = cropbox.getHeight() * cropbox.getWidth(); page.setCropBoxArea(cropboxArea); + page.setCropbox(cropbox); page.setRotation(rotation); page.setLandscape(isLandscape); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/PdfVisualisationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/PdfVisualisationService.java index e0a54b08..922c7bc0 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/PdfVisualisationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/PdfVisualisationService.java @@ -118,7 +118,7 @@ public class PdfVisualisationService { contentStream.setNonStrokingColor(Color.BLUE); contentStream.setFont(PDType1Font.TIMES_ROMAN, 6f); - contentStream.newLineAtOffset(rect.getTopLeft().getX(), rect.getTopLeft().getY()); + contentStream.newLineAtOffset(rect.getTopLeft().getX(), rect.getTopLeft().getY() + rect.getHeight()); contentStream.showText(textBlock.getClassification() /*" textBlock.getOrientation() + "--> "*/ + number); @@ -131,6 +131,11 @@ public class PdfVisualisationService { public Rectangle getRectangle(float x, float y, float width, float height, int rotation, float pageWidth, float pageHeight) { + if(rotation == 90){ + return new Rectangle( // + new Point(x, y), width, height, 0); + } + Point2D bottomLeft = new Point2D.Double(x, pageHeight - y); Point2D topRight = new Point2D.Double(x + width,pageHeight - y - height); @@ -139,11 +144,7 @@ public class PdfVisualisationService { transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageHeight / 2f); transform.translate(0f, pageHeight); transform.scale(1., -1.); - } else if (rotation == 90) { - transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageWidth / 2f); - transform.translate(0f, pageWidth); - transform.scale(1., -1.); - } else { + } else { transform.rotate(Math.toRadians(rotation), pageHeight / 2f, pageHeight / 2f); transform.translate(0f, pageWidth); transform.scale(1., -1.);