From 5c266f0e8c3f39b8d8dce146c5414dec82f2a8c7 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 26 Oct 2019 11:57:56 +0200 Subject: [PATCH] Support Blend Modes which are specified in an Array of Names (issue 11279) According to the specification, the first *supported* Blend Mode should be choosen in this case; please see https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G10.4848607 --- src/core/evaluator.js | 22 ++++++++++++++++++++-- test/pdfs/.gitignore | 1 + test/pdfs/issue11279.pdf | Bin 0 -> 2369 bytes test/test_manifest.json | 7 +++++++ 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/issue11279.pdf diff --git a/src/core/evaluator.js b/src/core/evaluator.js index b4d0ae68d2fb9..a3561655d3855 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -125,8 +125,23 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { }; // Convert PDF blend mode names to HTML5 blend mode names. - function normalizeBlendMode(value) { + function normalizeBlendMode(value, parsingArray = false) { + if (Array.isArray(value)) { + // Use the first *supported* BM value in the Array (fixes issue11279.pdf). + for (let i = 0, ii = value.length; i < ii; i++) { + const maybeBM = normalizeBlendMode(value[i], /* parsingArray = */ true); + if (maybeBM) { + return maybeBM; + } + } + warn(`Unsupported blend mode Array: ${value}`); + return 'source-over'; + } + if (!isName(value)) { + if (parsingArray) { + return null; + } return 'source-over'; } switch (value.name) { @@ -164,7 +179,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { case 'Luminosity': return 'luminosity'; } - warn('Unsupported blend mode: ' + value.name); + if (parsingArray) { + return null; + } + warn(`Unsupported blend mode: ${value.name}`); return 'source-over'; } diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 28f44733c305b..4bd389e2c8ec1 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -85,6 +85,7 @@ !issue11045.pdf !issue11150_reduced.pdf !issue11242_reduced.pdf +!issue11279.pdf !bad-PageLabels.pdf !decodeACSuccessive.pdf !filled-background.pdf diff --git a/test/pdfs/issue11279.pdf b/test/pdfs/issue11279.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b3ec3f5491cd61473b06378b313206ec63a3266 GIT binary patch literal 2369 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