Rotation fixed ?
This commit is contained in:
parent
d7d2bfff6b
commit
d669f92a7d
@ -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() {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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.);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user