1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Merge pull request #3209 from yurydelendik/remeasure

Forces to measure "standard" fonts
This commit is contained in:
Brendan Dahl 2013-05-09 14:00:09 -07:00
commit 9d8985f41e
2 changed files with 25 additions and 0 deletions

View file

@ -1049,6 +1049,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
continue;
}
var restoreNeeded = false;
var character = glyph.fontChar;
var vmetric = glyph.vmetric || defaultVMetrics;
if (vertical) {
@ -1074,6 +1075,22 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
}
if (font.remeasure && width > 0) {
// some standard fonts may not have the exact width, trying to
// rescale per character
var measuredWidth = ctx.measureText(character).width * 1000 /
current.fontSize * current.fontSizeScale;
var characterScaleX = width / measuredWidth;
restoreNeeded = true;
ctx.save();
ctx.scale(characterScaleX, 1);
scaledX /= characterScaleX;
if (accent) {
scaledAccentX /= characterScaleX;
}
}
switch (textRenderingMode) {
default: // other unsupported rendering modes
case TextRenderingMode.FILL:
@ -1115,6 +1132,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
x += charWidth;
canvasWidth += charWidth;
if (restoreNeeded) {
ctx.restore();
}
}
if (vertical) {
current.y -= x * textHScale;

View file

@ -2443,6 +2443,9 @@ var Font = (function FontClosure() {
// name ArialBlack for example will be replaced by Helvetica.
this.black = (name.search(/Black/g) != -1);
// if at least one width is present, remeasure all chars when exists
this.remeasure = Object.keys(this.widths).length > 0;
this.encoding = properties.baseEncoding;
this.noUnicodeAdaptation = true;
this.loadedName = fontName.split('-')[0];
@ -4656,6 +4659,7 @@ var Font = (function FontClosure() {
}
fontCharCode = this.toFontChar[charcode] || charcode;
break;
case 'MMType1': // XXX at the moment only "standard" fonts are supported
case 'Type1':
var glyphName = this.differences[charcode] || this.encoding[charcode];
if (!isNum(width))