mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-26 10:08:06 +02:00
[Editor] Try to make the position of an edited FreeText the more accurated as possible
- Take into account the page translation, - Take into account the correct translation for the editor border, - Take into account the position of the first glyph in the annotation, - Take into account the rotation of the editor. Close #16633.
This commit is contained in:
parent
35202ec0f3
commit
944c68ee85
11 changed files with 424 additions and 59 deletions
|
@ -546,7 +546,7 @@ class Annotation {
|
|||
|
||||
const MK = dict.get("MK");
|
||||
this.setBorderAndBackgroundColors(MK);
|
||||
this.setRotation(MK);
|
||||
this.setRotation(MK, dict);
|
||||
this.ref = params.ref instanceof Ref ? params.ref : null;
|
||||
|
||||
this._streams = [];
|
||||
|
@ -838,18 +838,21 @@ class Annotation {
|
|||
}
|
||||
}
|
||||
|
||||
setRotation(mk) {
|
||||
setRotation(mk, dict) {
|
||||
this.rotation = 0;
|
||||
let angle;
|
||||
if (mk instanceof Dict) {
|
||||
let angle = mk.get("R") || 0;
|
||||
if (Number.isInteger(angle) && angle !== 0) {
|
||||
angle %= 360;
|
||||
if (angle < 0) {
|
||||
angle += 360;
|
||||
}
|
||||
if (angle % 90 === 0) {
|
||||
this.rotation = angle;
|
||||
}
|
||||
angle = mk.get("R") || 0;
|
||||
} else {
|
||||
angle = dict.get("Rotate") || 0;
|
||||
}
|
||||
if (Number.isInteger(angle) && angle !== 0) {
|
||||
angle %= 360;
|
||||
if (angle < 0) {
|
||||
angle += 360;
|
||||
}
|
||||
if (angle % 90 === 0) {
|
||||
this.rotation = angle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1069,6 +1072,7 @@ class Annotation {
|
|||
|
||||
const text = [];
|
||||
const buffer = [];
|
||||
let firstPosition = null;
|
||||
const sink = {
|
||||
desiredSize: Math.Infinity,
|
||||
ready: true,
|
||||
|
@ -1078,6 +1082,7 @@ class Annotation {
|
|||
if (item.str === undefined) {
|
||||
continue;
|
||||
}
|
||||
firstPosition ||= item.transform.slice(-2);
|
||||
buffer.push(item.str);
|
||||
if (item.hasEOL) {
|
||||
text.push(buffer.join(""));
|
||||
|
@ -1102,6 +1107,17 @@ class Annotation {
|
|||
}
|
||||
|
||||
if (text.length > 1 || text[0]) {
|
||||
const appearanceDict = this.appearance.dict;
|
||||
const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
|
||||
const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
|
||||
const rect = this.data.rect;
|
||||
const transform = getTransformMatrix(rect, bbox, matrix);
|
||||
transform[4] -= rect[0];
|
||||
transform[5] -= rect[1];
|
||||
firstPosition = Util.applyTransform(firstPosition, transform);
|
||||
firstPosition = Util.applyTransform(firstPosition, matrix);
|
||||
|
||||
this.data.textPosition = firstPosition;
|
||||
this.data.textContent = text;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue