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.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class Page {
|
public class Page {
|
||||||
@ -32,6 +34,7 @@ public class Page {
|
|||||||
private StringFrequencyCounter fontStyleCounter = new StringFrequencyCounter();
|
private StringFrequencyCounter fontStyleCounter = new StringFrequencyCounter();
|
||||||
|
|
||||||
private double cropBoxArea;
|
private double cropBoxArea;
|
||||||
|
private PDRectangle cropbox;
|
||||||
|
|
||||||
|
|
||||||
public boolean isRotated() {
|
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.Page;
|
||||||
import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock;
|
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.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.redaction.utils.Patterns;
|
||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer;
|
||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.model.Rectangle;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.model.Rectangle;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
@ -41,10 +45,10 @@ public class ClassificationService {
|
|||||||
Rectangle btf = page.isLandscape() ? landscapeBodyTextFrame : bodyTextFrame;
|
Rectangle btf = page.isLandscape() ? landscapeBodyTextFrame : bodyTextFrame;
|
||||||
|
|
||||||
// if (page.getRotation() == 180 || page.getRotation() == 270){
|
// 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());
|
System.out.println(btf);
|
||||||
// btf = new Rectangle(nBtf.getTopLeft().getX(), nBtf.getTopLeft().getY(), nBtf.getWidth(), nBtf.getHeight());
|
btf = getRectangle(btf, page.getRotation(), page.getCropbox());
|
||||||
// }
|
// }
|
||||||
|
System.out.println("CropBoxArea" + page.getCropBoxArea());
|
||||||
page.setBodyTextFrame(btf);
|
page.setBodyTextFrame(btf);
|
||||||
classifyPage(btf, page, document, headlineFontSizes);
|
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 bottomLeft = new Point2D.Double(rectangle.getMinX(), rectangle.getMinY());
|
||||||
Point2D topRight = new Point2D.Double(x + width,pageHeight - y - height);
|
Point2D topRight = new Point2D.Double(rectangle.getMaxX(), rectangle.getMaxY());
|
||||||
|
|
||||||
AffineTransform transform = new AffineTransform();
|
AffineTransform transform = new AffineTransform();
|
||||||
if (rotation == 0 || rotation == 180) {
|
|
||||||
transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageHeight / 2f);
|
float ty = (cropbox.getLowerLeftY() + cropbox.getUpperRightY()) / 2;
|
||||||
transform.translate(0f, pageHeight);
|
|
||||||
transform.scale(1., -1.);
|
transform.translate(ty, ty);
|
||||||
} else if (rotation == 90) {
|
transform.rotate(Math.toRadians(180), 0, 0);
|
||||||
transform.rotate(Math.toRadians(rotation), pageWidth / 2f, pageWidth / 2f);
|
transform.translate(-ty, -ty);
|
||||||
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.);
|
|
||||||
}
|
|
||||||
|
|
||||||
bottomLeft = transform.transform(bottomLeft, null);
|
bottomLeft = transform.transform(bottomLeft, null);
|
||||||
topRight = transform.transform(topRight, null);
|
topRight = transform.transform(topRight, null);
|
||||||
|
|
||||||
return new com.iqser.red.service.redaction.v1.model.Rectangle( //
|
// 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());
|
||||||
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.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);
|
System.out.println("PageNr: " + pageNumber + " rotation: "+rotation);
|
||||||
|
|
||||||
boolean isRotated = rotation != 0 && rotation != 360;
|
boolean isRotated = rotation != 0 && rotation != 360;
|
||||||
@ -125,6 +127,7 @@ public class PdfSegmentationService {
|
|||||||
PDRectangle cropbox = pdPage.getCropBox();
|
PDRectangle cropbox = pdPage.getCropBox();
|
||||||
float cropboxArea = cropbox.getHeight() * cropbox.getWidth();
|
float cropboxArea = cropbox.getHeight() * cropbox.getWidth();
|
||||||
page.setCropBoxArea(cropboxArea);
|
page.setCropBoxArea(cropboxArea);
|
||||||
|
page.setCropbox(cropbox);
|
||||||
|
|
||||||
page.setRotation(rotation);
|
page.setRotation(rotation);
|
||||||
page.setLandscape(isLandscape);
|
page.setLandscape(isLandscape);
|
||||||
|
|||||||
@ -118,7 +118,7 @@ public class PdfVisualisationService {
|
|||||||
contentStream.setNonStrokingColor(Color.BLUE);
|
contentStream.setNonStrokingColor(Color.BLUE);
|
||||||
contentStream.setFont(PDType1Font.TIMES_ROMAN, 6f);
|
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);
|
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) {
|
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 bottomLeft = new Point2D.Double(x, pageHeight - y);
|
||||||
Point2D topRight = new Point2D.Double(x + width,pageHeight - y - height);
|
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.rotate(Math.toRadians(rotation), pageWidth / 2f, pageHeight / 2f);
|
||||||
transform.translate(0f, pageHeight);
|
transform.translate(0f, pageHeight);
|
||||||
transform.scale(1., -1.);
|
transform.scale(1., -1.);
|
||||||
} else if (rotation == 90) {
|
} else {
|
||||||
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.rotate(Math.toRadians(rotation), pageHeight / 2f, pageHeight / 2f);
|
||||||
transform.translate(0f, pageWidth);
|
transform.translate(0f, pageWidth);
|
||||||
transform.scale(1., -1.);
|
transform.scale(1., -1.);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user