mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Only choose a (3, 1) cmap table for TrueType fonts that have an encoding specified (issue 6410)
For (1, 0) cmaps, we have two different codepaths depending on whether the font has/hasn't got an encoding. But with (3, 1) cmaps we don't have a good fallback when the encoding is missing, hence this patch changes `readCmapTable` to only choose a (3, 1) cmap table if the font is non-symbolic *and* an encoding exists. Without this, we'll not be able to successfully create a working glyph map for some TrueType fonts with (3, 1) cmap tables. Fixes 6410.
This commit is contained in:
parent
3daae40425
commit
29a1cdb6a6
4 changed files with 14 additions and 5 deletions
|
@ -3222,7 +3222,7 @@ var Font = (function FontClosure() {
|
|||
* Read the appropriate subtable from the cmap according to 9.6.6.4 from
|
||||
* PDF spec
|
||||
*/
|
||||
function readCmapTable(cmap, font, isSymbolicFont) {
|
||||
function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) {
|
||||
var segment;
|
||||
var start = (font.start ? font.start : 0) + cmap.offset;
|
||||
font.pos = start;
|
||||
|
@ -3253,7 +3253,7 @@ var Font = (function FontClosure() {
|
|||
// Continue the loop since there still may be a higher priority
|
||||
// table.
|
||||
} else if (platformId === 3 && encodingId === 1 &&
|
||||
(!isSymbolicFont || !potentialTable)) {
|
||||
((!isSymbolicFont && hasEncoding) || !potentialTable)) {
|
||||
useTable = true;
|
||||
if (!isSymbolicFont) {
|
||||
canBreak = true;
|
||||
|
@ -4202,13 +4202,14 @@ var Font = (function FontClosure() {
|
|||
} else {
|
||||
// Most of the following logic in this code branch is based on the
|
||||
// 9.6.6.4 of the PDF spec.
|
||||
var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont);
|
||||
var hasEncoding =
|
||||
properties.differences.length > 0 || !!properties.baseEncodingName;
|
||||
var cmapTable =
|
||||
readCmapTable(tables.cmap, font, this.isSymbolicFont, hasEncoding);
|
||||
var cmapPlatformId = cmapTable.platformId;
|
||||
var cmapEncodingId = cmapTable.encodingId;
|
||||
var cmapMappings = cmapTable.mappings;
|
||||
var cmapMappingsLength = cmapMappings.length;
|
||||
var hasEncoding = properties.differences.length ||
|
||||
!!properties.baseEncodingName;
|
||||
|
||||
// The spec seems to imply that if the font is symbolic the encoding
|
||||
// should be ignored, this doesn't appear to work for 'preistabelle.pdf'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue