diff --git a/src/core/core_utils.js b/src/core/core_utils.js index 2049eb139..c92a0374d 100644 --- a/src/core/core_utils.js +++ b/src/core/core_utils.js @@ -103,6 +103,16 @@ function arrayBuffersToBytes(arr) { return data; } +async function fetchBinaryData(url) { + const response = await fetch(url); + if (!response.ok) { + throw new Error( + `Failed to fetch file "${url}" with "${response.statusText}".` + ); + } + return new Uint8Array(await response.arrayBuffer()); +} + /** * Get the value of an inheritable property. * @@ -701,6 +711,7 @@ export { encodeToXmlString, escapePDFName, escapeString, + fetchBinaryData, getInheritableProperty, getLookupTableFactory, getNewAnnotationsMap, diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 5d3c3cf58..07253e647 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -32,6 +32,12 @@ import { import { CMapFactory, IdentityCMap } from "./cmap.js"; import { Cmd, Dict, EOF, isName, Name, Ref, RefSet } from "./primitives.js"; import { ErrorFont, Font } from "./fonts.js"; +import { + fetchBinaryData, + isNumberArray, + lookupMatrix, + lookupNormalRect, +} from "./core_utils.js"; import { getEncoding, MacRomanEncoding, @@ -51,7 +57,6 @@ import { import { getTilingPatternIR, Pattern } from "./pattern.js"; import { getXfaFontDict, getXfaFontName } from "./xfa_fonts.js"; import { IdentityToUnicodeMap, ToUnicodeMap } from "./to_unicode_map.js"; -import { isNumberArray, lookupMatrix, lookupNormalRect } from "./core_utils.js"; import { isPDFFunction, PDFFunctionFactory } from "./function.js"; import { Lexer, Parser } from "./parser.js"; import { @@ -382,16 +387,6 @@ class PartialEvaluator { return false; } - async #fetchData(url) { - const response = await fetch(url); - if (!response.ok) { - throw new Error( - `Failed to fetch file "${url}" with "${response.statusText}".` - ); - } - return new Uint8Array(await response.arrayBuffer()); - } - async fetchBuiltInCMap(name) { const cachedData = this.builtInCMapCache.get(name); if (cachedData) { @@ -401,7 +396,7 @@ class PartialEvaluator { if (this.options.cMapUrl !== null) { // Only compressed CMaps are (currently) supported here. - const cMapData = await this.#fetchData( + const cMapData = await fetchBinaryData( `${this.options.cMapUrl}${name}.bcmap` ); data = { cMapData, isCompressed: true }; @@ -437,7 +432,7 @@ class PartialEvaluator { try { if (this.options.standardFontDataUrl !== null) { - data = await this.#fetchData( + data = await fetchBinaryData( `${this.options.standardFontDataUrl}${filename}` ); } else { diff --git a/src/core/jpx.js b/src/core/jpx.js index e48faa46a..003fc7bf9 100644 --- a/src/core/jpx.js +++ b/src/core/jpx.js @@ -14,6 +14,7 @@ */ import { BaseException, warn } from "../shared/util.js"; +import { fetchBinaryData } from "./core_utils.js"; import OpenJPEG from "../../external/openjpeg/openjpeg.js"; import { Stream } from "./stream.js"; @@ -44,14 +45,14 @@ class JpxImage { } static async #instantiateWasm(imports, successCallback) { + const filename = "openjpeg.wasm"; try { if (!this.#buffer) { if (this.#wasmUrl !== null) { - const response = await fetch(`${this.#wasmUrl}openjpeg.wasm`); - this.#buffer = await response.arrayBuffer(); + this.#buffer = await fetchBinaryData(`${this.#wasmUrl}${filename}`); } else { this.#buffer = await this.#handler.sendWithPromise("FetchWasm", { - filename: "openjpeg.wasm", + filename, }); } } @@ -59,7 +60,7 @@ class JpxImage { return successCallback(results.instance); } catch (e) { this.#instantiationFailed = true; - warn(`Cannot load openjpeg.wasm: "${e}".`); + warn(`Cannot load ${filename}: "${e}".`); return false; } finally { this.#handler = null;