From 9ab7c280aa816b2665f9d393c38c1a480b0eef1b Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 16 Jan 2020 15:08:25 +0100 Subject: [PATCH] Cache the fallback font dictionary on the `PartialEvaluator` (PR 11218 follow-up) This way we'll benefit from the existing font caching, and can thus avoid re-creating a fallback font over and over again during parsing. (Thece changes necessitated the previous patch, since otherwise breakage could occur e.g. with fake workers.) --- src/core/evaluator.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 34147e921..182094065 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -935,11 +935,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // Falling back to a default font to avoid completely broken rendering, // but note that there're no guarantees that things will look "correct". - fontRef = new Dict(); - fontRef.set("BaseFont", Name.get("PDFJS-FallbackFont")); - fontRef.set("Type", Name.get("FallbackType")); - fontRef.set("Subtype", Name.get("FallbackType")); - fontRef.set("Encoding", Name.get("WinAnsiEncoding")); + fontRef = PartialEvaluator.getFallbackFontDict(); } if (this.fontCache.has(fontRef)) { @@ -3134,6 +3130,21 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } }; + // TODO: Change this to a `static` getter, using shadowing, once + // `PartialEvaluator` is converted to a proper class. + PartialEvaluator.getFallbackFontDict = function() { + if (this._fallbackFontDict) { + return this._fallbackFontDict; + } + const dict = new Dict(); + dict.set("BaseFont", Name.get("PDFJS-FallbackFont")); + dict.set("Type", Name.get("FallbackType")); + dict.set("Subtype", Name.get("FallbackType")); + dict.set("Encoding", Name.get("WinAnsiEncoding")); + + return (this._fallbackFontDict = dict); + }; + return PartialEvaluator; })();