mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Merge pull request #18412 from Snuffleupagus/issue-18059
Also update the width/unicode data when replacing missing glyphs in non-embedded Type1 fonts (issue 18059)
This commit is contained in:
commit
e8d35c25ee
4 changed files with 78 additions and 0 deletions
|
@ -3293,6 +3293,47 @@ class Font {
|
|||
return builder.toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
get _spaceWidth() {
|
||||
// trying to estimate space character width
|
||||
const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
|
||||
let width;
|
||||
for (const glyphName of possibleSpaceReplacements) {
|
||||
// if possible, getting width by glyph name
|
||||
if (glyphName in this.widths) {
|
||||
width = this.widths[glyphName];
|
||||
break;
|
||||
}
|
||||
const glyphsUnicodeMap = getGlyphsUnicode();
|
||||
const glyphUnicode = glyphsUnicodeMap[glyphName];
|
||||
// finding the charcode via unicodeToCID map
|
||||
let charcode = 0;
|
||||
if (this.composite && this.cMap.contains(glyphUnicode)) {
|
||||
charcode = this.cMap.lookup(glyphUnicode);
|
||||
|
||||
if (typeof charcode === "string") {
|
||||
charcode = convertCidString(glyphUnicode, charcode);
|
||||
}
|
||||
}
|
||||
// ... via toUnicode map
|
||||
if (!charcode && this.toUnicode) {
|
||||
charcode = this.toUnicode.charCodeOf(glyphUnicode);
|
||||
}
|
||||
// setting it to unicode if negative or undefined
|
||||
if (charcode <= 0) {
|
||||
charcode = glyphUnicode;
|
||||
}
|
||||
// trying to get width via charcode
|
||||
width = this.widths[charcode];
|
||||
if (width) {
|
||||
break; // the non-zero width found
|
||||
}
|
||||
}
|
||||
return shadow(this, "_spaceWidth", width || this.defaultWidth);
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
@ -3338,6 +3379,13 @@ class Font {
|
|||
// .notdef glyphs should be invisible in non-embedded Type1 fonts, so
|
||||
// replace them with spaces.
|
||||
fontCharCode = 0x20;
|
||||
|
||||
if (glyphName === "") {
|
||||
// Ensure that other relevant glyph properties are also updated
|
||||
// (fixes issue18059.pdf).
|
||||
width ||= this._spaceWidth;
|
||||
unicode = String.fromCharCode(fontCharCode);
|
||||
}
|
||||
}
|
||||
fontCharCode = mapSpecialUnicodeValues(fontCharCode);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue