Merge pull request #16640 from calixteman/freetext_ap
[Editor] When saving/printing a FreeText, use the identity matrix for the AP and set the cm when rendering it
This commit is contained in:
commit
66fc19b272
@ -3743,7 +3743,7 @@ class FreeTextAnnotation extends MarkupAnnotation {
|
||||
evaluator,
|
||||
task,
|
||||
{
|
||||
fontName: "Helvetica",
|
||||
fontName: "Helv",
|
||||
fontSize,
|
||||
},
|
||||
resources
|
||||
@ -3783,26 +3783,52 @@ class FreeTextAnnotation extends MarkupAnnotation {
|
||||
}
|
||||
let vscale = 1;
|
||||
const lineHeight = LINE_FACTOR * fontSize;
|
||||
const lineDescent = LINE_DESCENT_FACTOR * fontSize;
|
||||
const lineAscent = (LINE_FACTOR - LINE_DESCENT_FACTOR) * fontSize;
|
||||
const totalHeight = lineHeight * lines.length;
|
||||
if (totalHeight > h) {
|
||||
vscale = h / totalHeight;
|
||||
}
|
||||
const fscale = Math.min(hscale, vscale);
|
||||
const newFontSize = fontSize * fscale;
|
||||
let firstPoint, clipBox, matrix;
|
||||
switch (rotation) {
|
||||
case 0:
|
||||
matrix = [1, 0, 0, 1];
|
||||
clipBox = [rect[0], rect[1], w, h];
|
||||
firstPoint = [rect[0], rect[3] - lineAscent];
|
||||
break;
|
||||
case 90:
|
||||
matrix = [0, 1, -1, 0];
|
||||
clipBox = [rect[1], -rect[2], w, h];
|
||||
firstPoint = [rect[1], -rect[0] - lineAscent];
|
||||
break;
|
||||
case 180:
|
||||
matrix = [-1, 0, 0, -1];
|
||||
clipBox = [-rect[2], -rect[3], w, h];
|
||||
firstPoint = [-rect[2], -rect[1] - lineAscent];
|
||||
break;
|
||||
case 270:
|
||||
matrix = [0, -1, 1, 0];
|
||||
clipBox = [-rect[3], rect[0], w, h];
|
||||
firstPoint = [-rect[3], rect[2] - lineAscent];
|
||||
break;
|
||||
}
|
||||
|
||||
const buffer = [
|
||||
"q",
|
||||
`0 0 ${numberToString(w)} ${numberToString(h)} re W n`,
|
||||
`${matrix.join(" ")} 0 0 cm`,
|
||||
`${clipBox.join(" ")} re W n`,
|
||||
`BT`,
|
||||
`1 0 0 1 0 ${numberToString(h + lineDescent)} Tm 0 Tc ${getPdfColor(
|
||||
color,
|
||||
/* isFill */ true
|
||||
)}`,
|
||||
`/Helv ${numberToString(newFontSize)} Tf`,
|
||||
`${getPdfColor(color, /* isFill */ true)}`,
|
||||
`0 Tc /Helv ${numberToString(newFontSize)} Tf`,
|
||||
];
|
||||
|
||||
buffer.push(
|
||||
`${firstPoint.join(" ")} Td (${escapeString(encodedLines[0])}) Tj`
|
||||
);
|
||||
const vShift = numberToString(lineHeight);
|
||||
for (const line of encodedLines) {
|
||||
for (let i = 1, ii = encodedLines.length; i < ii; i++) {
|
||||
const line = encodedLines[i];
|
||||
buffer.push(`0 -${vShift} Td (${escapeString(line)}) Tj`);
|
||||
}
|
||||
buffer.push("ET", "Q");
|
||||
@ -3812,13 +3838,9 @@ class FreeTextAnnotation extends MarkupAnnotation {
|
||||
appearanceStreamDict.set("FormType", 1);
|
||||
appearanceStreamDict.set("Subtype", Name.get("Form"));
|
||||
appearanceStreamDict.set("Type", Name.get("XObject"));
|
||||
appearanceStreamDict.set("BBox", [0, 0, w, h]);
|
||||
appearanceStreamDict.set("BBox", rect);
|
||||
appearanceStreamDict.set("Resources", resources);
|
||||
|
||||
if (rotation) {
|
||||
const matrix = getRotationMatrix(rotation, w, h);
|
||||
appearanceStreamDict.set("Matrix", matrix);
|
||||
}
|
||||
appearanceStreamDict.set("Matrix", [1, 0, 0, 1, -rect[0], -rect[1]]);
|
||||
|
||||
const ap = new StringStream(appearance);
|
||||
ap.dict = appearanceStreamDict;
|
||||
|
@ -4110,14 +4110,16 @@ describe("annotation", function () {
|
||||
const appearance = data.dependencies[1].data;
|
||||
expect(appearance).toEqual(
|
||||
"3 0 obj\n" +
|
||||
"<< /FormType 1 /Subtype /Form /Type /XObject /BBox [0 0 44 44] " +
|
||||
"/Resources << /Font << /Helv 1 0 R>>>> /Length 101>> stream\n" +
|
||||
"<< /FormType 1 /Subtype /Form /Type /XObject /BBox [12 34 56 78] " +
|
||||
"/Resources << /Font << /Helv 1 0 R>>>> /Matrix [1 0 0 1 -12 -34] " +
|
||||
"/Length 98>> stream\n" +
|
||||
"q\n" +
|
||||
"0 0 44 44 re W n\n" +
|
||||
"1 0 0 1 0 0 cm\n" +
|
||||
"12 34 44 44 re W n\n" +
|
||||
"BT\n" +
|
||||
"1 0 0 1 0 47.5 Tm 0 Tc 0 g\n" +
|
||||
"/Helv 10 Tf\n" +
|
||||
"0 -13.5 Td (Hello PDF.js World!) Tj\n" +
|
||||
"0 g\n" +
|
||||
"0 Tc /Helv 10 Tf\n" +
|
||||
"12 68 Td (Hello PDF.js World!) Tj\n" +
|
||||
"ET\n" +
|
||||
"Q\n" +
|
||||
"endstream\n" +
|
||||
@ -4153,13 +4155,13 @@ describe("annotation", function () {
|
||||
expect(opList.fnArray).toEqual([
|
||||
OPS.beginAnnotation,
|
||||
OPS.save,
|
||||
OPS.transform,
|
||||
OPS.constructPath,
|
||||
OPS.clip,
|
||||
OPS.endPath,
|
||||
OPS.beginText,
|
||||
OPS.setTextMatrix,
|
||||
OPS.setCharSpacing,
|
||||
OPS.setFillRGBColor,
|
||||
OPS.setCharSpacing,
|
||||
OPS.dependency,
|
||||
OPS.setFont,
|
||||
OPS.moveText,
|
||||
|
Loading…
Reference in New Issue
Block a user