Use widths defined by font for standard fonts.

There doesn't seem to be anything definitive about this in
the spec, but from experimenting, it seems acrobat lets
PDFs override the widths of the standard fonts.
This commit is contained in:
Brendan Dahl 2020-12-10 15:29:07 -08:00
parent 00b4f86db3
commit 45d9ab6e45
4 changed files with 14 additions and 6 deletions

View File

@ -1319,11 +1319,12 @@ var Font = (function FontClosure() {
let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
var stdFontMap = getStdFontMap(),
nonStdFontMap = getNonStdFontMap();
var isStandardFont =
!!stdFontMap[fontName] ||
!!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
const isStandardFont = !!stdFontMap[fontName];
const isMappedToStandardFont = !!(
nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]
);
fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
this.bold = fontName.search(/bold/gi) !== -1;
this.italic =
fontName.search(/oblique/gi) !== -1 ||
@ -1334,9 +1335,9 @@ var Font = (function FontClosure() {
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.remeasure = !isStandardFont && Object.keys(this.widths).length > 0;
if (
isStandardFont &&
(isStandardFont || isMappedToStandardFont) &&
type === "CIDFontType2" &&
this.cidEncoding.startsWith("Identity-")
) {

View File

@ -357,6 +357,7 @@
!issue6298.pdf
!issue6889.pdf
!bug1001080.pdf
!bug1671312_reduced.pdf
!issue6108.pdf
!issue6113.pdf
!openoffice.pdf

Binary file not shown.

View File

@ -2259,6 +2259,12 @@
"link": false,
"type": "text"
},
{ "id": "bug1671312_reduced",
"file": "pdfs/bug1671312_reduced.pdf",
"md5": "db13fe3f03a7d0bd0e248f5c2bcb2a5d",
"rounds": 1,
"type": "eq"
},
{ "id": "issue7020",
"file": "pdfs/issue7020.pdf",
"md5": "93b464e21c649e64ae92eeafe99fc31b",