Simulate Arial Black and Arial Narrow

This commit is contained in:
Vivien Nicolas 2011-09-01 04:06:33 +02:00
parent 81e1485e14
commit 00d2366d1d
2 changed files with 27 additions and 8 deletions

View File

@ -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
View File

@ -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);