Pull request #108: RED-1004: Fixed position problems when mediabox is bigger than cropbox
Merge in RED/redaction-service from RED-1004 to master * commit '62b960f2ead02b6f29537447077822c171f65bf8': RED-1004: Fixed position problems when mediabox is bigger than cropbox
This commit is contained in:
commit
40a9b39688
@ -159,7 +159,7 @@ public class AnnotationHighlightService {
|
|||||||
|
|
||||||
redactionLogEntry.getPositions().addAll(rectanglesPerLine);
|
redactionLogEntry.getPositions().addAll(rectanglesPerLine);
|
||||||
|
|
||||||
annotations.addAll(createAnnotation(rectanglesPerLine, entityPositionSequence.getId(), createAnnotationContent(entity), getColor(entity, ruleSetId, requestedToRemove), comments, !isHint(entity, ruleSetId)));
|
annotations.addAll(createAnnotation(rectanglesPerLine, entityPositionSequence.getId(), createAnnotationContent(entity), getColor(entity, ruleSetId, requestedToRemove), comments, !isHint(entity, ruleSetId), pdPage.getMediaBox(), pdPage.getCropBox()));
|
||||||
}
|
}
|
||||||
|
|
||||||
redactionLogEntry.setId(entityPositionSequence.getId());
|
redactionLogEntry.setId(entityPositionSequence.getId());
|
||||||
@ -225,7 +225,7 @@ public class AnnotationHighlightService {
|
|||||||
|
|
||||||
if (!rectanglesOnPage.isEmpty() && !approvedAndShouldBeInDictionary(manualRedactionEntry)) {
|
if (!rectanglesOnPage.isEmpty() && !approvedAndShouldBeInDictionary(manualRedactionEntry)) {
|
||||||
annotations.addAll(createAnnotation(rectanglesOnPage, id, createAnnotationContent(manualRedactionEntry), getColorForManualAdd(manualRedactionEntry
|
annotations.addAll(createAnnotation(rectanglesOnPage, id, createAnnotationContent(manualRedactionEntry), getColorForManualAdd(manualRedactionEntry
|
||||||
.getType(), ruleSetId, manualRedactionEntry.getStatus()), manualRedactions.getComments().get(id), true));
|
.getType(), ruleSetId, manualRedactionEntry.getStatus()), manualRedactions.getComments().get(id), true, pdPage.getMediaBox(), pdPage.getCropBox()));
|
||||||
classifiedDoc.getRedactionLogEntities().add(redactionLogEntry);
|
classifiedDoc.getRedactionLogEntities().add(redactionLogEntry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,15 +281,15 @@ public class AnnotationHighlightService {
|
|||||||
|
|
||||||
|
|
||||||
private List<PDAnnotation> createAnnotation(List<Rectangle> rectangles, String id, String content, float[] color,
|
private List<PDAnnotation> createAnnotation(List<Rectangle> rectangles, String id, String content, float[] color,
|
||||||
List<Comment> comments, boolean popup) {
|
List<Comment> comments, boolean popup, PDRectangle mediaBox, PDRectangle cropBox) {
|
||||||
|
|
||||||
List<PDAnnotation> annotations = new ArrayList<>();
|
List<PDAnnotation> annotations = new ArrayList<>();
|
||||||
|
|
||||||
PDAnnotationTextMarkup annotation = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);
|
PDAnnotationTextMarkup annotation = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);
|
||||||
annotation.constructAppearances();
|
annotation.constructAppearances();
|
||||||
PDRectangle pdRectangle = toPDRectangle(rectangles);
|
PDRectangle pdRectangle = toPDRectangle(rectangles, mediaBox, cropBox);
|
||||||
annotation.setRectangle(pdRectangle);
|
annotation.setRectangle(pdRectangle);
|
||||||
annotation.setQuadPoints(toQuadPoints(rectangles));
|
annotation.setQuadPoints(toQuadPoints(rectangles, mediaBox, cropBox));
|
||||||
if (popup) {
|
if (popup) {
|
||||||
annotation.setContents(content);
|
annotation.setContents(content);
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ public class AnnotationHighlightService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private PDRectangle toPDRectangle(List<Rectangle> rectangles) {
|
private PDRectangle toPDRectangle(List<Rectangle> rectangles, PDRectangle mediaBox, PDRectangle cropBox) {
|
||||||
|
|
||||||
float lowerLeftX = Float.MAX_VALUE;
|
float lowerLeftX = Float.MAX_VALUE;
|
||||||
float upperRightX = 0;
|
float upperRightX = 0;
|
||||||
@ -351,22 +351,27 @@ public class AnnotationHighlightService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var x1 = lowerLeftX + cropBox.getLowerLeftX() - mediaBox.getLowerLeftY();
|
||||||
|
var y1 = lowerLeftY + (mediaBox.getLowerLeftY() - cropBox.getLowerLeftY());
|
||||||
|
var x2 = upperRightX + cropBox.getLowerLeftX() - mediaBox.getLowerLeftY();
|
||||||
|
var y2 = upperRightY - (mediaBox.getLowerLeftY() - cropBox.getLowerLeftY());
|
||||||
|
|
||||||
PDRectangle annotationPosition = new PDRectangle();
|
PDRectangle annotationPosition = new PDRectangle();
|
||||||
annotationPosition.setLowerLeftX(lowerLeftX);
|
annotationPosition.setLowerLeftX(x1);
|
||||||
annotationPosition.setLowerLeftY(lowerLeftY);
|
annotationPosition.setLowerLeftY(y1);
|
||||||
annotationPosition.setUpperRightX(upperRightX);
|
annotationPosition.setUpperRightX(x2);
|
||||||
annotationPosition.setUpperRightY(upperRightY);
|
annotationPosition.setUpperRightY(y2);
|
||||||
return annotationPosition;
|
return annotationPosition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private float[] toQuadPoints(List<Rectangle> rectangles) {
|
private float[] toQuadPoints(List<Rectangle> rectangles,PDRectangle mediaBox, PDRectangle cropBox) {
|
||||||
|
|
||||||
float[] quadPoints = new float[rectangles.size() * 8];
|
float[] quadPoints = new float[rectangles.size() * 8];
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
for (Rectangle rectangle : rectangles) {
|
for (Rectangle rectangle : rectangles) {
|
||||||
float[] quadPoint = toQuadPoint(rectangle);
|
float[] quadPoint = toQuadPoint(rectangle, mediaBox, cropBox);
|
||||||
for (int j = 0; j <= 7; j++) {
|
for (int j = 0; j <= 7; j++) {
|
||||||
quadPoints[i + j] = quadPoint[j];
|
quadPoints[i + j] = quadPoint[j];
|
||||||
}
|
}
|
||||||
@ -376,14 +381,26 @@ public class AnnotationHighlightService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private float[] toQuadPoint(Rectangle rectangle) {
|
private float[] toQuadPoint(Rectangle rectangle, PDRectangle mediaBox, PDRectangle cropBox) {
|
||||||
|
|
||||||
|
var x1 = rectangle.getTopLeft().getX() + cropBox.getLowerLeftX() - mediaBox.getLowerLeftY();
|
||||||
|
var y1 = rectangle.getTopLeft().getY() + (mediaBox.getLowerLeftY() - cropBox.getLowerLeftY());
|
||||||
|
var x2 = rectangle.getTopLeft().getX() + rectangle.getWidth() + cropBox.getLowerLeftX() - mediaBox.getLowerLeftY();
|
||||||
|
var y2 = rectangle.getTopLeft().getY() + rectangle.getHeight() - (mediaBox.getLowerLeftY() - cropBox.getLowerLeftY());
|
||||||
|
|
||||||
|
|
||||||
// quadPoints is array of x,y coordinates in Z-like order (top-left, top-right, bottom-left,bottom-right)
|
// quadPoints is array of x,y coordinates in Z-like order (top-left, top-right, bottom-left,bottom-right)
|
||||||
// of the area to be highlighted
|
// of the area to be highlighted
|
||||||
return new float[]{rectangle.getTopLeft().getX(), rectangle.getTopLeft().getY(), rectangle.getTopLeft()
|
return new float[]{
|
||||||
.getX() + rectangle.getWidth(), rectangle.getTopLeft().getY(), rectangle.getTopLeft().getX(), rectangle.getTopLeft()
|
x1,
|
||||||
.getY() + rectangle.getHeight(), rectangle.getTopLeft()
|
y1,
|
||||||
.getX() + rectangle.getWidth(), rectangle.getTopLeft().getY() + rectangle.getHeight()};
|
x2,
|
||||||
|
y2,
|
||||||
|
x1,
|
||||||
|
y2 - rectangle.getHeight(),
|
||||||
|
x2,
|
||||||
|
y1 - rectangle.getHeight()
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -423,7 +423,7 @@ public class RedactionIntegrationTest {
|
|||||||
|
|
||||||
System.out.println("redactionTest");
|
System.out.println("redactionTest");
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
ClassPathResource pdfFileResource = new ClassPathResource("files/Metolachlor/S-Metolachlor_RAR_02_Volume_2_2018-09-06.pdf");
|
ClassPathResource pdfFileResource = new ClassPathResource("files/new/Lambda-cyhalothrin - Toxicokinetics - Rat - Spain - 2006.pdf");
|
||||||
|
|
||||||
RedactionRequest request = RedactionRequest.builder()
|
RedactionRequest request = RedactionRequest.builder()
|
||||||
.ruleSetId(TEST_RULESET_ID)
|
.ruleSetId(TEST_RULESET_ID)
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user