Support (rare) Type3 fonts with Pattern resources (issue 16127)

This simply extends the approach in PR 10727 to also cover Patterns, which shouldn't be a common occurrence in Type3 fonts (since this is the first issue we've seen).
This commit is contained in:
Jonas Jenwald 2023-03-08 08:45:42 +01:00
parent e0d934ac9d
commit 471aef5fc6
5 changed files with 22 additions and 2 deletions

View File

@ -1482,9 +1482,17 @@ class PartialEvaluator {
); );
const patternIR = shadingFill.getIR(); const patternIR = shadingFill.getIR();
id = `pattern_${this.idFactory.createObjId()}`; id = `pattern_${this.idFactory.createObjId()}`;
if (this.parsingType3Font) {
id = `${this.idFactory.getDocId()}_type3_${id}`;
}
localShadingPatternCache.set(shading, id); localShadingPatternCache.set(shading, id);
if (this.parsingType3Font) {
this.handler.send("commonobj", [id, "Pattern", patternIR]);
} else {
this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]); this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]);
} }
}
return id; return id;
} }

View File

@ -2777,6 +2777,7 @@ class WorkerTransport {
break; break;
case "FontPath": case "FontPath":
case "Image": case "Image":
case "Pattern":
this.commonObjs.resolve(id, exportedData); this.commonObjs.resolve(id, exportedData);
break; break;
default: default:

View File

@ -2517,7 +2517,7 @@ class CanvasGraphics {
if (this.cachedPatterns.has(objId)) { if (this.cachedPatterns.has(objId)) {
pattern = this.cachedPatterns.get(objId); pattern = this.cachedPatterns.get(objId);
} else { } else {
pattern = getShadingPattern(this.objs.get(objId)); pattern = getShadingPattern(this.getObject(objId));
this.cachedPatterns.set(objId, pattern); this.cachedPatterns.set(objId, pattern);
} }
if (matrix) { if (matrix) {

View File

@ -0,0 +1 @@
https://github.com/mozilla/pdf.js/files/10913919/Noto.Color.Emoji.-.Google.Fonts.-.Chrome.112.-.Full.pdf

View File

@ -2378,6 +2378,16 @@
"type": "eq", "type": "eq",
"about": "Type3 fonts with image resources; both pages need to be tested, otherwise the bug won't manifest." "about": "Type3 fonts with image resources; both pages need to be tested, otherwise the bug won't manifest."
}, },
{ "id": "issue16127",
"file": "pdfs/issue16127.pdf",
"md5": "42714567a818876f51ef960df21600f5",
"link": true,
"rounds": 1,
"firstPage": 1,
"lastPage": 2,
"type": "eq",
"about": "Type3 fonts with pattern resources; both pages need to be tested, otherwise the bug won't manifest."
},
{ "id": "doc_actions", { "id": "doc_actions",
"file": "pdfs/doc_actions.pdf", "file": "pdfs/doc_actions.pdf",
"md5": "ceae4eb405a0b40394f4d63d7525a870", "md5": "ceae4eb405a0b40394f4d63d7525a870",