Rotation fixed ?

This commit is contained in:
deiflaender 2022-10-07 13:12:04 +02:00
parent d7d2bfff6b
commit d669f92a7d
5 changed files with 40 additions and 28 deletions

View File

@ -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() {

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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.);