Simulate Arial Black and Arial Narrow
This commit is contained in:
parent
81e1485e14
commit
00d2366d1d
14
fonts.js
14
fonts.js
@ -14,6 +14,14 @@ var kMaxWaitForFontFace = 1000;
|
||||
* fonts and their acronyms.
|
||||
*/
|
||||
var stdFontMap = {
|
||||
'ArialNarrow': 'Helvetica',
|
||||
'ArialNarrow_Bold': 'Helvetica-Bold',
|
||||
'ArialNarrow_BoldItalic': 'Helvetica-BoldOblique',
|
||||
'ArialNarrow_Italic': 'Helvetica-Oblique',
|
||||
'ArialBlack': 'Helvetica',
|
||||
'ArialBlack_Bold': 'Helvetica-Bold',
|
||||
'ArialBlack_BoldItalic': 'Helvetica-BoldOblique',
|
||||
'ArialBlack_Italic': 'Helvetica-Oblique',
|
||||
'Arial': 'Helvetica',
|
||||
'Arial_Bold': 'Helvetica-Bold',
|
||||
'Arial_BoldItalic': 'Helvetica-BoldOblique',
|
||||
@ -404,6 +412,12 @@ var Font = (function Font() {
|
||||
this.bold = (fontName.indexOf('Bold') != -1);
|
||||
this.italic = (fontName.indexOf('Oblique') != -1) ||
|
||||
(fontName.indexOf('Italic') != -1);
|
||||
|
||||
// Use 'name' instead of 'fontName' here because the original
|
||||
// name ArialNarrow for example will be replaced by Helvetica.
|
||||
this.narrow = (name.indexOf("Narrow") != -1)
|
||||
this.black = (name.indexOf("Black") != -1)
|
||||
|
||||
this.loadedName = fontName.split('-')[0];
|
||||
this.loading = false;
|
||||
return;
|
||||
|
21
pdf.js
21
pdf.js
@ -4417,9 +4417,7 @@ var PartialEvaluator = (function() {
|
||||
}
|
||||
|
||||
var descriptor = xref.fetch(fd);
|
||||
var fontName = fontDict.get('Name');
|
||||
if (!fontName)
|
||||
fontName = xref.fetchIfRef(descriptor.get('FontName'));
|
||||
var fontName = xref.fetchIfRef(descriptor.get('FontName'));
|
||||
assertWellFormed(IsName(fontName), 'invalid font name');
|
||||
fontName = fontName.name.replace(/[\+,\-]/g, '_');
|
||||
|
||||
@ -4805,7 +4803,9 @@ var CanvasGraphics = (function() {
|
||||
|
||||
size = (size <= kRasterizerMin) ? size * kScalePrecision : size;
|
||||
|
||||
var bold = fontObj.bold ? 'bold' : 'normal';
|
||||
var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold')
|
||||
: (fontObj.bold ? 'bold' : 'normal');
|
||||
|
||||
var italic = fontObj.italic ? 'italic' : 'normal';
|
||||
var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"';
|
||||
this.ctx.font = rule;
|
||||
@ -4841,8 +4841,6 @@ var CanvasGraphics = (function() {
|
||||
this.moveText(0, this.current.leading);
|
||||
},
|
||||
showText: function(text) {
|
||||
// TODO: apply charSpacing, wordSpacing, textHScale
|
||||
|
||||
var ctx = this.ctx;
|
||||
var current = this.current;
|
||||
|
||||
@ -4853,9 +4851,9 @@ var CanvasGraphics = (function() {
|
||||
ctx.translate(current.x, -1 * current.y);
|
||||
|
||||
var scaleFactorX = 1, scaleFactorY = 1;
|
||||
var font = this.current.font;
|
||||
var font = current.font;
|
||||
if (font) {
|
||||
if (this.current.fontSize <= kRasterizerMin) {
|
||||
if (current.fontSize <= kRasterizerMin) {
|
||||
scaleFactorX = scaleFactorY = kScalePrecision;
|
||||
ctx.scale(1 / scaleFactorX, 1 / scaleFactorY);
|
||||
}
|
||||
@ -4867,6 +4865,13 @@ var CanvasGraphics = (function() {
|
||||
var wordSpacing = current.wordSpacing;
|
||||
var textHScale = current.textHScale;
|
||||
|
||||
// This is a poor simulation for Arial Narrow while font-stretch
|
||||
// is not implemented (bug 3512)
|
||||
if (current.font.narrow) {
|
||||
textHScale += 0.2;
|
||||
charSpacing -= (0.09 * current.fontSize);
|
||||
}
|
||||
|
||||
if (charSpacing != 0 || wordSpacing != 0 || textHScale != 1) {
|
||||
scaleFactorX *= textHScale;
|
||||
ctx.scale(1 / textHScale, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user