mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Attempt to combine text runs positioned with setTextMatrix
This commit is contained in:
parent
8aa5901c20
commit
7ddb0bc718
4 changed files with 53 additions and 3 deletions
|
@ -1396,7 +1396,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||
textState = stateManager.state;
|
||||
var fn = operation.fn;
|
||||
args = operation.args;
|
||||
var advance;
|
||||
var advance, diff;
|
||||
|
||||
switch (fn | 0) {
|
||||
case OPS.setFont:
|
||||
|
@ -1429,8 +1429,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||
(args[0] - textContentItem.lastAdvanceWidth);
|
||||
textContentItem.height +=
|
||||
(args[1] - textContentItem.lastAdvanceHeight);
|
||||
var diff = (args[0] - textContentItem.lastAdvanceWidth) -
|
||||
(args[1] - textContentItem.lastAdvanceHeight);
|
||||
diff = (args[0] - textContentItem.lastAdvanceWidth) -
|
||||
(args[1] - textContentItem.lastAdvanceHeight);
|
||||
addFakeSpaces(diff, textContentItem.str);
|
||||
break;
|
||||
}
|
||||
|
@ -1450,6 +1450,24 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||
textState.carriageReturn();
|
||||
break;
|
||||
case OPS.setTextMatrix:
|
||||
// Optimization to treat same line movement as advance.
|
||||
advance = textState.calcTextLineMatrixAdvance(
|
||||
args[0], args[1], args[2], args[3], args[4], args[5]);
|
||||
if (advance !== null && textContentItem.initialized &&
|
||||
advance.value > 0 &&
|
||||
advance.value <= textContentItem.fakeMultiSpaceMax) {
|
||||
textState.translateTextLineMatrix(advance.width,
|
||||
advance.height);
|
||||
textContentItem.width +=
|
||||
(advance.width - textContentItem.lastAdvanceWidth);
|
||||
textContentItem.height +=
|
||||
(advance.height - textContentItem.lastAdvanceHeight);
|
||||
diff = (advance.width - textContentItem.lastAdvanceWidth) -
|
||||
(advance.height - textContentItem.lastAdvanceHeight);
|
||||
addFakeSpaces(diff, textContentItem.str);
|
||||
break;
|
||||
}
|
||||
|
||||
flushTextContentItem();
|
||||
textState.setTextMatrix(args[0], args[1], args[2], args[3],
|
||||
args[4], args[5]);
|
||||
|
@ -2547,6 +2565,30 @@ var TextState = (function TextStateClosure() {
|
|||
m[4] = m[0] * x + m[2] * y + m[4];
|
||||
m[5] = m[1] * x + m[3] * y + m[5];
|
||||
},
|
||||
calcTextLineMatrixAdvance:
|
||||
function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) {
|
||||
var font = this.font;
|
||||
if (!font) {
|
||||
return null;
|
||||
}
|
||||
var m = this.textLineMatrix;
|
||||
if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {
|
||||
return null;
|
||||
}
|
||||
var txDiff = e - m[4], tyDiff = f - m[5];
|
||||
if ((font.vertical && txDiff !== 0) || (!font.vertical && tyDiff !== 0)) {
|
||||
return null;
|
||||
}
|
||||
var tx, ty, denominator = a * d - b * c;
|
||||
if (font.vertical) {
|
||||
tx = -tyDiff * c / denominator;
|
||||
ty = tyDiff * a / denominator;
|
||||
} else {
|
||||
tx = txDiff * d / denominator;
|
||||
ty = -txDiff * b / denominator;
|
||||
}
|
||||
return { width: tx, height: ty, value: (font.vertical ? ty : tx), };
|
||||
},
|
||||
calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {
|
||||
// 9.4.4 Text Space Details
|
||||
var tsm = [this.fontSize * this.textHScale, 0,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue