From 45d9ab6e457fdd03b0e0c1bd56ad7f16ec900281 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 10 Dec 2020 15:29:07 -0800 Subject: [PATCH] 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. --- src/core/fonts.js | 13 +++++++------ test/pdfs/.gitignore | 1 + test/pdfs/bug1671312_reduced.pdf | Bin 0 -> 5748 bytes test/test_manifest.json | 6 ++++++ 4 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 test/pdfs/bug1671312_reduced.pdf diff --git a/src/core/fonts.js b/src/core/fonts.js index 6f8d60b31..890e4ca29 100644 --- a/src/core/fonts.js +++ b/src/core/fonts.js @@ -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-") ) { diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 6b7ae9e9a..91665f7eb 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -357,6 +357,7 @@ !issue6298.pdf !issue6889.pdf !bug1001080.pdf +!bug1671312_reduced.pdf !issue6108.pdf !issue6113.pdf !openoffice.pdf diff --git a/test/pdfs/bug1671312_reduced.pdf b/test/pdfs/bug1671312_reduced.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3242c303b4ab518f3e0ca7f1db8296e6232d0dd9 GIT binary patch literal 5748 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 YQ3!9+=V5U}dGL2IQ4}