[TrueType] Recover from a missing "glyf" table by replacing it with dummy data, utilizing the existing code in sanitizeGlyphLocations

It seems to be fairly common for OCR software to include incomplete TrueType fonts, notable missing the "glyf" table, in PDF files. Since we currently reject such fonts, the result is that text-selection/copying is broken.

This patch contains a suggested approach to try and use these kind of broken fonts, by using existing code in `sanitizeGlyphLocations` to replace a missing "glyf" table with dummy data.

Fixes 4684.
Fixes 6007.
Fixes 6829.
This commit is contained in:
Jonas Jenwald 2016-01-09 11:50:48 +01:00
parent e134947533
commit d52495a9c8
4 changed files with 19 additions and 2 deletions

View File

@ -4154,8 +4154,16 @@ var Font = (function FontClosure() {
delete tables['cvt '];
this.isOpenType = true;
} else {
if (!tables.glyf || !tables.loca) {
error('Required "glyf" or "loca" tables are not found');
if (!tables.loca) {
error('Required "loca" table is not found');
}
if (!tables.glyf) {
warn('Required "glyf" table is not found -- trying to recover.');
// Note: We use `sanitizeGlyphLocations` to add dummy glyf data below.
tables.glyf = {
tag: 'glyf',
data: new Uint8Array(0),
};
}
this.isOpenType = false;
}

View File

@ -10,6 +10,7 @@
!issue2391-1.pdf
!issue2391-2.pdf
!issue4665.pdf
!issue4684.pdf
!issue5801.pdf
!issue5946.pdf
!issue5972.pdf

BIN
test/pdfs/issue4684.pdf Normal file

Binary file not shown.

View File

@ -1789,6 +1789,14 @@
"type": "eq",
"about": "Has a multi-byte char codes."
},
{ "id": "issue4684-text",
"file": "pdfs/issue4684.pdf",
"md5": "af5056fcdfb08bd7adc1710d36e4b5b5",
"link": false,
"rounds": 1,
"type": "text",
"about": "Invisible (and broken) TrueType font used for text-selection."
},
{ "id": "issue1912",
"file": "pdfs/issue1912.pdf",
"md5": "15305b7c2cba971e7423de3f6ad38fef",