diff --git a/server/src/main/config/application.properties b/server/src/main/config/application.properties index e896ec0f..31f74bdb 100644 --- a/server/src/main/config/application.properties +++ b/server/src/main/config/application.properties @@ -66,7 +66,6 @@ trust.host = ${KK_TRUST_HOST:default} #是否启用缓存 cache.enabled = ${KK_CACHE_ENABLED:true} - #文本类型,默认如下,可自定义添加 simText = ${KK_SIMTEXT:txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd} #多媒体类型,默认如下,可自定义添加 @@ -81,6 +80,7 @@ office.preview.type = ${KK_OFFICE_PREVIEW_TYPE:image} #是否关闭office预览切换开关,默认为false,可配置为true关闭 office.preview.switch.disabled = ${KK_OFFICE_PREVIEW_SWITCH_DISABLED:false} +#PDF预览模块设置 #是否禁止演示模式 pdf.presentationMode.disable = ${KK_PDF_PRESENTATION_MODE_DISABLE:true} #是否禁止打开文件 @@ -91,8 +91,8 @@ pdf.print.disable = ${KK_PDF_PRINT_DISABLE:true} pdf.download.disable = ${KK_PDF_DOWNLOAD_DISABLE:true} #是否禁止bookmark pdf.bookmark.disable = ${KK_PDF_BOOKMARK_DISABLE:true} -#是否禁用首页文件上传 -file.upload.disable = ${KK_FILE_UPLOAD_ENABLED:false} +#是否禁止签名 +pdf.disable.editing = ${KK_PDF_DISABLE_EDITING:false} #预览源为FTP时 FTP用户名,可在ftp url后面加参数ftp.username=ftpuser指定,不指定默认用配置的 ftp.username = ${KK_FTP_USERNAME:ftpuser} @@ -124,6 +124,9 @@ watermark.height = ${WATERMARK_HEIGHT:80} #水印倾斜度数,要求设置在大于等于0,小于90 watermark.angle = ${WATERMARK_ANGLE:10} + +#是否禁用首页文件上传 +file.upload.disable = ${KK_FILE_UPLOAD_ENABLED:false} #Tif类型图片浏览模式:tif(利用前端js插件浏览);jpg(转换为jpg后前端显示);pdf(转换为pdf后显示,便于打印) tif.preview.type = ${KK_TIF_PREVIEW_TYPE:tif} # 备案信息,默认为空 diff --git a/server/src/main/java/cn/keking/config/ConfigConstants.java b/server/src/main/java/cn/keking/config/ConfigConstants.java index 0c786fce..e9d2d0f2 100644 --- a/server/src/main/java/cn/keking/config/ConfigConstants.java +++ b/server/src/main/java/cn/keking/config/ConfigConstants.java @@ -36,6 +36,7 @@ public class ConfigConstants { private static String localPreviewDir; private static CopyOnWriteArraySet trustHostSet; private static String pdfPresentationModeDisable; + private static String pdfDisableEditing; private static String pdfOpenFileDisable; private static String pdfPrintDisable; private static String pdfDownloadDisable; @@ -78,6 +79,7 @@ public class ConfigConstants { public static final String DEFAULT_PDF_PRINT_DISABLE = "true"; public static final String DEFAULT_PDF_DOWNLOAD_DISABLE = "true"; public static final String DEFAULT_PDF_BOOKMARK_DISABLE = "true"; + public static final String DEFAULT_PDF_DISABLE_EDITING = "true"; public static final String DEFAULT_FILE_UPLOAD_DISABLE = "false"; public static final String DEFAULT_TIF_PREVIEW_TYPE = "tif"; public static final String DEFAULT_CAD_PREVIEW_TYPE = "pdf"; @@ -355,6 +357,18 @@ public class ConfigConstants { ConfigConstants.pdfBookmarkDisable = pdfBookmarkDisable; } + + public static String getPdfDisableEditing() { + return pdfDisableEditing; + } + @Value("${pdf.disable.editing:true}") + public void setpdfDisableEditing(String pdfDisableEditing) { + setPdfDisableEditingValue(pdfDisableEditing); + } + public static void setPdfDisableEditingValue(String pdfDisableEditing) { + ConfigConstants.pdfDisableEditing = pdfDisableEditing; + } + public static String getOfficePreviewSwitchDisabled() { return officePreviewSwitchDisabled; } diff --git a/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java b/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java index 3c70e1a2..7abb7c90 100644 --- a/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java +++ b/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java @@ -51,6 +51,7 @@ public class ConfigRefreshComponent { String pdfPrintDisable; String pdfDownloadDisable; String pdfBookmarkDisable; + String pdfDisableEditing; boolean fileUploadDisable; String tifPreviewType; String prohibit; @@ -94,6 +95,7 @@ public class ConfigRefreshComponent { pdfPrintDisable = properties.getProperty("pdf.print.disable", ConfigConstants.DEFAULT_PDF_PRINT_DISABLE); pdfDownloadDisable = properties.getProperty("pdf.download.disable", ConfigConstants.DEFAULT_PDF_DOWNLOAD_DISABLE); pdfBookmarkDisable = properties.getProperty("pdf.bookmark.disable", ConfigConstants.DEFAULT_PDF_BOOKMARK_DISABLE); + pdfDisableEditing = properties.getProperty("pdf.disable.editing", ConfigConstants.DEFAULT_PDF_DISABLE_EDITING); fileUploadDisable = Boolean.parseBoolean(properties.getProperty("file.upload.disable", ConfigConstants.DEFAULT_FILE_UPLOAD_DISABLE)); tifPreviewType = properties.getProperty("tif.preview.type", ConfigConstants.DEFAULT_TIF_PREVIEW_TYPE); cadPreviewType = properties.getProperty("cad.preview.type", ConfigConstants.DEFAULT_CAD_PREVIEW_TYPE); @@ -131,6 +133,7 @@ public class ConfigRefreshComponent { ConfigConstants.setPdfPrintDisableValue(pdfPrintDisable); ConfigConstants.setPdfDownloadDisableValue(pdfDownloadDisable); ConfigConstants.setPdfBookmarkDisableValue(pdfBookmarkDisable); + ConfigConstants.setPdfDisableEditingValue(pdfDisableEditing); ConfigConstants.setFileUploadDisableValue(fileUploadDisable); ConfigConstants.setTifPreviewTypeValue(tifPreviewType); ConfigConstants.setCadPreviewTypeValue(cadPreviewType); diff --git a/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java b/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java index 933e8cf5..d5ffb146 100644 --- a/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java +++ b/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java @@ -37,6 +37,7 @@ public class AttributeSetFilter implements Filter { request.setAttribute("pdfPrintDisable", ConfigConstants.getPdfPrintDisable()); request.setAttribute("pdfDownloadDisable", ConfigConstants.getPdfDownloadDisable()); request.setAttribute("pdfBookmarkDisable", ConfigConstants.getPdfBookmarkDisable()); + request.setAttribute("pdfDisableEditing", ConfigConstants.getPdfDisableEditing()); request.setAttribute("fileKey", httpRequest.getParameter("fileKey")); request.setAttribute("switchDisabled", ConfigConstants.getOfficePreviewSwitchDisabled()); request.setAttribute("fileUploadDisable", ConfigConstants.getFileUploadDisable()); diff --git a/server/src/main/resources/static/pdfjs/build/pdf.js b/server/src/main/resources/static/pdfjs/build/pdf.js index fde8904f..d99ad577 100644 --- a/server/src/main/resources/static/pdfjs/build/pdf.js +++ b/server/src/main/resources/static/pdfjs/build/pdf.js @@ -1,8 +1,8 @@ /** * @licstart The following is the entire license notice for the - * Javascript code in this page + * JavaScript code in this page * - * Copyright 2021 Mozilla Foundation + * Copyright 2023 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ * limitations under the License. * * @licend The above is the entire license notice for the - * Javascript code in this page + * JavaScript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { @@ -29,570 +29,108 @@ exports["pdfjs-dist/build/pdf"] = factory(); else root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); -})(this, function() { +})(globalThis, () => { return /******/ (() => { // webpackBootstrap -/******/ "use strict"; /******/ var __webpack_modules__ = ([ /* 0 */, /* 1 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.addLinkAttributes = addLinkAttributes; -exports.deprecated = deprecated; -exports.getFilenameFromUrl = getFilenameFromUrl; -exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; -exports.getXfaPageViewport = getXfaPageViewport; -exports.isDataScheme = isDataScheme; -exports.isPdfFile = isPdfFile; -exports.isValidFetchUrl = isValidFetchUrl; -exports.loadScript = loadScript; -exports.StatTimer = exports.RenderingCancelledException = exports.PDFDateString = exports.PageViewport = exports.LinkTarget = exports.DOMSVGFactory = exports.DOMStandardFontDataFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = void 0; - -var _util = __w_pdfjs_require__(2); - -var _base_factory = __w_pdfjs_require__(5); - -const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; -exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; -const SVG_NS = "http://www.w3.org/2000/svg"; - -class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { - constructor({ - ownerDocument = globalThis.document - } = {}) { - super(); - this._document = ownerDocument; - } - - _createCanvas(width, height) { - const canvas = this._document.createElement("canvas"); - - canvas.width = width; - canvas.height = height; - return canvas; - } - -} - -exports.DOMCanvasFactory = DOMCanvasFactory; - -async function fetchData(url, asTypedArray = false) { - if (isValidFetchUrl(url, document.baseURI)) { - const response = await fetch(url); - - if (!response.ok) { - throw new Error(response.statusText); - } - - return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); - } - - return new Promise((resolve, reject) => { - const request = new XMLHttpRequest(); - request.open("GET", url, true); - - if (asTypedArray) { - request.responseType = "arraybuffer"; - } - - request.onreadystatechange = () => { - if (request.readyState !== XMLHttpRequest.DONE) { - return; - } - - if (request.status === 200 || request.status === 0) { - let data; - - if (asTypedArray && request.response) { - data = new Uint8Array(request.response); - } else if (!asTypedArray && request.responseText) { - data = (0, _util.stringToBytes)(request.responseText); - } - - if (data) { - resolve(data); - return; - } - } - - reject(new Error(request.statusText)); - }; - - request.send(null); - }); -} - -class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url, this.isCompressed).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } - -} - -exports.DOMCMapReaderFactory = DOMCMapReaderFactory; - -class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url, true); - } - -} - -exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; - -class DOMSVGFactory extends _base_factory.BaseSVGFactory { - _createSVG(type) { - return document.createElementNS(SVG_NS, type); - } - -} - -exports.DOMSVGFactory = DOMSVGFactory; - -class PageViewport { - constructor({ - viewBox, - scale, - rotation, - offsetX = 0, - offsetY = 0, - dontFlip = false - }) { - this.viewBox = viewBox; - this.scale = scale; - this.rotation = rotation; - this.offsetX = offsetX; - this.offsetY = offsetY; - const centerX = (viewBox[2] + viewBox[0]) / 2; - const centerY = (viewBox[3] + viewBox[1]) / 2; - let rotateA, rotateB, rotateC, rotateD; - rotation %= 360; - - if (rotation < 0) { - rotation += 360; - } - - switch (rotation) { - case 180: - rotateA = -1; - rotateB = 0; - rotateC = 0; - rotateD = 1; - break; - - case 90: - rotateA = 0; - rotateB = 1; - rotateC = 1; - rotateD = 0; - break; - - case 270: - rotateA = 0; - rotateB = -1; - rotateC = -1; - rotateD = 0; - break; - - case 0: - rotateA = 1; - rotateB = 0; - rotateC = 0; - rotateD = -1; - break; - - default: - throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); - } - - if (dontFlip) { - rotateC = -rotateC; - rotateD = -rotateD; - } - - let offsetCanvasX, offsetCanvasY; - let width, height; - - if (rotateA === 0) { - offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; - offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; - width = Math.abs(viewBox[3] - viewBox[1]) * scale; - height = Math.abs(viewBox[2] - viewBox[0]) * scale; - } else { - offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; - offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; - width = Math.abs(viewBox[2] - viewBox[0]) * scale; - height = Math.abs(viewBox[3] - viewBox[1]) * scale; - } - - this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; - this.width = width; - this.height = height; - } - - clone({ - scale = this.scale, - rotation = this.rotation, - offsetX = this.offsetX, - offsetY = this.offsetY, - dontFlip = false - } = {}) { - return new PageViewport({ - viewBox: this.viewBox.slice(), - scale, - rotation, - offsetX, - offsetY, - dontFlip - }); - } - - convertToViewportPoint(x, y) { - return _util.Util.applyTransform([x, y], this.transform); - } - - convertToViewportRectangle(rect) { - const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); - - const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); - - return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; - } - - convertToPdfPoint(x, y) { - return _util.Util.applyInverseTransform([x, y], this.transform); - } - -} - -exports.PageViewport = PageViewport; - -class RenderingCancelledException extends _util.BaseException { - constructor(msg, type) { - super(msg); - this.type = type; - } - -} - -exports.RenderingCancelledException = RenderingCancelledException; -const LinkTarget = { - NONE: 0, - SELF: 1, - BLANK: 2, - PARENT: 3, - TOP: 4 -}; -exports.LinkTarget = LinkTarget; - -function addLinkAttributes(link, { - url, - target, - rel, - enabled = true -} = {}) { - (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); - const urlNullRemoved = (0, _util.removeNullCharacters)(url); - - if (enabled) { - link.href = link.title = urlNullRemoved; - } else { - link.href = ""; - link.title = `Disabled: ${urlNullRemoved}`; - - link.onclick = () => { - return false; - }; - } - - let targetStr = ""; - - switch (target) { - case LinkTarget.NONE: - break; - - case LinkTarget.SELF: - targetStr = "_self"; - break; - - case LinkTarget.BLANK: - targetStr = "_blank"; - break; - - case LinkTarget.PARENT: - targetStr = "_parent"; - break; - - case LinkTarget.TOP: - targetStr = "_top"; - break; - } - - link.target = targetStr; - link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; -} - -function isDataScheme(url) { - const ii = url.length; - let i = 0; - - while (i < ii && url[i].trim() === "") { - i++; - } - - return url.substring(i, i + 5).toLowerCase() === "data:"; -} - -function isPdfFile(filename) { - return typeof filename === "string" && /\.pdf$/i.test(filename); -} - -function getFilenameFromUrl(url) { - const anchor = url.indexOf("#"); - const query = url.indexOf("?"); - const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); - return url.substring(url.lastIndexOf("/", end) + 1, end); -} - -function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { - if (typeof url !== "string") { - return defaultFilename; - } - - if (isDataScheme(url)) { - (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); - return defaultFilename; - } - - const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; - const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; - const splitURI = reURI.exec(url); - let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); - - if (suggestedFilename) { - suggestedFilename = suggestedFilename[0]; - - if (suggestedFilename.includes("%")) { - try { - suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; - } catch (ex) {} - } - } - - return suggestedFilename || defaultFilename; -} - -class StatTimer { - constructor() { - this.started = Object.create(null); - this.times = []; - } - - time(name) { - if (name in this.started) { - (0, _util.warn)(`Timer is already running for ${name}`); - } - - this.started[name] = Date.now(); - } - - timeEnd(name) { - if (!(name in this.started)) { - (0, _util.warn)(`Timer has not been started for ${name}`); - } - - this.times.push({ - name, - start: this.started[name], - end: Date.now() - }); - delete this.started[name]; - } - - toString() { - const outBuf = []; - let longest = 0; - - for (const time of this.times) { - const name = time.name; - - if (name.length > longest) { - longest = name.length; - } - } - - for (const time of this.times) { - const duration = time.end - time.start; - outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); - } - - return outBuf.join(""); - } - -} - -exports.StatTimer = StatTimer; - -function isValidFetchUrl(url, baseUrl) { - try { - const { - protocol - } = baseUrl ? new URL(url, baseUrl) : new URL(url); - return protocol === "http:" || protocol === "https:"; - } catch (ex) { - return false; - } -} - -function loadScript(src, removeScriptElement = false) { - return new Promise((resolve, reject) => { - const script = document.createElement("script"); - script.src = src; - - script.onload = function (evt) { - if (removeScriptElement) { - script.remove(); - } - - resolve(evt); - }; - - script.onerror = function () { - reject(new Error(`Cannot load script at: ${script.src}`)); - }; - - (document.head || document.documentElement).appendChild(script); - }); -} - -function deprecated(details) { - console.log("Deprecated API usage: " + details); -} - -let pdfDateStringRegex; - -class PDFDateString { - static toDateObject(input) { - if (!input || !(0, _util.isString)(input)) { - return null; - } - - if (!pdfDateStringRegex) { - pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); - } - - const matches = pdfDateStringRegex.exec(input); - - if (!matches) { - return null; - } - - const year = parseInt(matches[1], 10); - let month = parseInt(matches[2], 10); - month = month >= 1 && month <= 12 ? month - 1 : 0; - let day = parseInt(matches[3], 10); - day = day >= 1 && day <= 31 ? day : 1; - let hour = parseInt(matches[4], 10); - hour = hour >= 0 && hour <= 23 ? hour : 0; - let minute = parseInt(matches[5], 10); - minute = minute >= 0 && minute <= 59 ? minute : 0; - let second = parseInt(matches[6], 10); - second = second >= 0 && second <= 59 ? second : 0; - const universalTimeRelation = matches[7] || "Z"; - let offsetHour = parseInt(matches[8], 10); - offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; - let offsetMinute = parseInt(matches[9], 10) || 0; - offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; - - if (universalTimeRelation === "-") { - hour += offsetHour; - minute += offsetMinute; - } else if (universalTimeRelation === "+") { - hour -= offsetHour; - minute -= offsetMinute; - } - - return new Date(Date.UTC(year, month, day, hour, minute, second)); - } - -} - -exports.PDFDateString = PDFDateString; - -function getXfaPageViewport(xfaPage, { - scale = 1, - rotation = 0 -}) { - const { - width, - height - } = xfaPage.attributes.style; - const viewBox = [0, 0, parseInt(width), parseInt(height)]; - return new PageViewport({ - viewBox, - scale, - rotation - }); -} - -/***/ }), -/* 2 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.arrayByteLength = arrayByteLength; -exports.arraysToBytes = arraysToBytes; +exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.MAX_IMAGE_SIZE_TO_CACHE = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.BASELINE_FACTOR = exports.AnnotationType = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; exports.assert = assert; exports.bytesToString = bytesToString; -exports.createObjectURL = createObjectURL; -exports.createPromiseCapability = createPromiseCapability; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; -exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; +exports.getUuid = getUuid; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; -exports.isAscii = isAscii; -exports.isBool = isBool; -exports.isNum = isNum; -exports.isSameOrigin = isSameOrigin; -exports.isString = isString; +exports.isNodeJS = void 0; +exports.normalizeUnicode = normalizeUnicode; exports.objectFromMap = objectFromMap; exports.objectSize = objectSize; -exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; -exports.stringToUTF16BEString = stringToUTF16BEString; exports.stringToUTF8String = stringToUTF8String; exports.unreachable = unreachable; exports.utf8StringToString = utf8StringToString; exports.warn = warn; -exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; - -__w_pdfjs_require__(3); - +__w_pdfjs_require__(2); +__w_pdfjs_require__(84); +__w_pdfjs_require__(86); +__w_pdfjs_require__(87); +__w_pdfjs_require__(89); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +exports.isNodeJS = isNodeJS; const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; +const MAX_IMAGE_SIZE_TO_CACHE = 10e6; +exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE; +const LINE_FACTOR = 1.35; +exports.LINE_FACTOR = LINE_FACTOR; +const LINE_DESCENT_FACTOR = 0.35; +exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; +const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +exports.BASELINE_FACTOR = BASELINE_FACTOR; +const RenderingIntentFlag = { + ANY: 0x01, + DISPLAY: 0x02, + PRINT: 0x04, + SAVE: 0x08, + ANNOTATIONS_FORMS: 0x10, + ANNOTATIONS_STORAGE: 0x20, + ANNOTATIONS_DISABLE: 0x40, + OPLIST: 0x100 +}; +exports.RenderingIntentFlag = RenderingIntentFlag; +const AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +exports.AnnotationMode = AnnotationMode; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +exports.AnnotationEditorPrefix = AnnotationEditorPrefix; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + STAMP: 13, + INK: 15 +}; +exports.AnnotationEditorType = AnnotationEditorType; +const AnnotationEditorParamsType = { + RESIZE: 1, + FREETEXT_SIZE: 11, + FREETEXT_COLOR: 12, + FREETEXT_OPACITY: 13, + INK_COLOR: 21, + INK_THICKNESS: 22, + INK_OPACITY: 23 +}; +exports.AnnotationEditorParamsType = AnnotationEditorParamsType; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, @@ -652,24 +190,6 @@ const AnnotationType = { REDACT: 26 }; exports.AnnotationType = AnnotationType; -const AnnotationStateModelType = { - MARKED: "Marked", - REVIEW: "Review" -}; -exports.AnnotationStateModelType = AnnotationStateModelType; -const AnnotationMarkedState = { - MARKED: "Marked", - UNMARKED: "Unmarked" -}; -exports.AnnotationMarkedState = AnnotationMarkedState; -const AnnotationReviewState = { - ACCEPTED: "Accepted", - REJECTED: "Rejected", - CANCELLED: "Cancelled", - COMPLETED: "Completed", - NONE: "None" -}; -exports.AnnotationReviewState = AnnotationReviewState; const AnnotationReplyType = { GROUP: "Group", REPLY: "R" @@ -748,34 +268,6 @@ const PageActionEventType = { C: "PageClose" }; exports.PageActionEventType = PageActionEventType; -const StreamType = { - UNKNOWN: "UNKNOWN", - FLATE: "FLATE", - LZW: "LZW", - DCT: "DCT", - JPX: "JPX", - JBIG: "JBIG", - A85: "A85", - AHX: "AHX", - CCF: "CCF", - RLX: "RLX" -}; -exports.StreamType = StreamType; -const FontType = { - UNKNOWN: "UNKNOWN", - TYPE1: "TYPE1", - TYPE1STANDARD: "TYPE1STANDARD", - TYPE1C: "TYPE1C", - CIDFONTTYPE0: "CIDFONTTYPE0", - CIDFONTTYPE0C: "CIDFONTTYPE0C", - TRUETYPE: "TRUETYPE", - CIDFONTTYPE2: "CIDFONTTYPE2", - TYPE3: "TYPE3", - OPENTYPE: "OPENTYPE", - TYPE0: "TYPE0", - MMTYPE1: "MMTYPE1" -}; -exports.FontType = FontType; const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, @@ -784,8 +276,7 @@ const VerbosityLevel = { exports.VerbosityLevel = VerbosityLevel; const CMapCompressionType = { NONE: 0, - BINARY: 1, - STREAM: 2 + BINARY: 1 }; exports.CMapCompressionType = CMapCompressionType; const OPS = { @@ -866,11 +357,8 @@ const OPS = { paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, - beginAnnotations: 78, - endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, - paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, @@ -882,369 +370,298 @@ const OPS = { constructPath: 91 }; exports.OPS = OPS; -const UNSUPPORTED_FEATURES = { - unknown: "unknown", - forms: "forms", - javaScript: "javaScript", - signatures: "signatures", - smask: "smask", - shadingPattern: "shadingPattern", - font: "font", - errorTilingPattern: "errorTilingPattern", - errorExtGState: "errorExtGState", - errorXObject: "errorXObject", - errorFontLoadType3: "errorFontLoadType3", - errorFontState: "errorFontState", - errorFontMissing: "errorFontMissing", - errorFontTranslate: "errorFontTranslate", - errorColorSpace: "errorColorSpace", - errorOperatorList: "errorOperatorList", - errorFontToUnicode: "errorFontToUnicode", - errorFontLoadNative: "errorFontLoadNative", - errorFontBuildPath: "errorFontBuildPath", - errorFontGetPath: "errorFontGetPath", - errorMarkedContent: "errorMarkedContent" -}; -exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; let verbosity = VerbosityLevel.WARNINGS; - function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } - function getVerbosityLevel() { return verbosity; } - function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } - function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } - function unreachable(msg) { throw new Error(msg); } - function assert(cond, msg) { if (!cond) { unreachable(msg); } } - -function isSameOrigin(baseUrl, otherUrl) { - let base; - - try { - base = new URL(baseUrl); - - if (!base.origin || base.origin === "null") { - return false; - } - } catch (e) { - return false; - } - - const other = new URL(otherUrl, base); - return base.origin === other.origin; -} - function _isValidProtocol(url) { - if (!url) { - return false; - } - - switch (url.protocol) { + switch (url?.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; - default: return false; } } - -function createValidAbsoluteUrl(url, baseUrl) { +function createValidAbsoluteUrl(url) { + let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; if (!url) { return null; } - try { + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + if (dots?.length >= 2) { + url = `http://${url}`; + } + } + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch {} + } + } const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); - if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } - } catch (ex) {} - + } catch {} return null; } - function shadow(obj, prop, value) { + let nonSerializable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; Object.defineProperty(obj, prop, { value, - enumerable: true, + enumerable: !nonSerializable, configurable: true, writable: false }); return value; } - const BaseException = function BaseExceptionClosure() { - function BaseException(message) { + function BaseException(message, name) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } - this.message = message; - this.name = this.constructor.name; + this.name = name; } - BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); - exports.BaseException = BaseException; - class PasswordException extends BaseException { constructor(msg, code) { - super(msg); + super(msg, "PasswordException"); this.code = code; } - } - exports.PasswordException = PasswordException; - class UnknownErrorException extends BaseException { constructor(msg, details) { - super(msg); + super(msg, "UnknownErrorException"); this.details = details; } - } - exports.UnknownErrorException = UnknownErrorException; - -class InvalidPDFException extends BaseException {} - +class InvalidPDFException extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } +} exports.InvalidPDFException = InvalidPDFException; - -class MissingPDFException extends BaseException {} - +class MissingPDFException extends BaseException { + constructor(msg) { + super(msg, "MissingPDFException"); + } +} exports.MissingPDFException = MissingPDFException; - class UnexpectedResponseException extends BaseException { constructor(msg, status) { - super(msg); + super(msg, "UnexpectedResponseException"); this.status = status; } - } - exports.UnexpectedResponseException = UnexpectedResponseException; - -class FormatError extends BaseException {} - -exports.FormatError = FormatError; - -class AbortException extends BaseException {} - -exports.AbortException = AbortException; -const NullCharactersRegExp = /\x00/g; - -function removeNullCharacters(str) { - if (typeof str !== "string") { - warn("The argument for removeNullCharacters must be a string."); - return str; +class FormatError extends BaseException { + constructor(msg) { + super(msg, "FormatError"); } - - return str.replace(NullCharactersRegExp, ""); } - +exports.FormatError = FormatError; +class AbortException extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } +} +exports.AbortException = AbortException; function bytesToString(bytes) { - assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); + if (typeof bytes !== "object" || bytes?.length === undefined) { + unreachable("Invalid argument for bytesToString"); + } const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; - if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } - const strBuf = []; - for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } - return strBuf.join(""); } - function stringToBytes(str) { - assert(typeof str === "string", "Invalid argument for stringToBytes"); + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } const length = str.length; const bytes = new Uint8Array(length); - for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } - return bytes; } - -function arrayByteLength(arr) { - if (arr.length !== undefined) { - return arr.length; - } - - assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); - return arr.byteLength; -} - -function arraysToBytes(arr) { - const length = arr.length; - - if (length === 1 && arr[0] instanceof Uint8Array) { - return arr[0]; - } - - let resultLength = 0; - - for (let i = 0; i < length; i++) { - resultLength += arrayByteLength(arr[i]); - } - - let pos = 0; - const data = new Uint8Array(resultLength); - - for (let i = 0; i < length; i++) { - let item = arr[i]; - - if (!(item instanceof Uint8Array)) { - if (typeof item === "string") { - item = stringToBytes(item); - } else { - item = new Uint8Array(item); - } - } - - const itemLength = item.byteLength; - data.set(item, pos); - pos += itemLength; - } - - return data; -} - function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } - function objectSize(obj) { return Object.keys(obj).length; } - function objectFromMap(map) { const obj = Object.create(null); - for (const [key, value] of map) { obj[key] = value; } - return obj; } - function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } - -const IsLittleEndianCached = { - get value() { - return shadow(this, "value", isLittleEndian()); - } - -}; -exports.IsLittleEndianCached = IsLittleEndianCached; - function isEvalSupported() { try { new Function(""); return true; - } catch (e) { + } catch { return false; } } - -const IsEvalSupportedCached = { - get value() { - return shadow(this, "value", isEvalSupported()); +class FeatureTest { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); } - -}; -exports.IsEvalSupportedCached = IsEvalSupportedCached; + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + static get platform() { + if (typeof navigator === "undefined") { + return shadow(this, "platform", { + isWin: false, + isMac: false + }); + } + return shadow(this, "platform", { + isWin: navigator.platform.includes("Win"), + isMac: navigator.platform.includes("Mac") + }); + } +} +exports.FeatureTest = FeatureTest; const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); - class Util { static makeHexColor(r, g, b) { return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; } - + static scaleMinMax(transform, minMax) { + let temp; + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[0]; + minMax[1] *= transform[0]; + if (transform[3] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + if (transform[1] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + minMax[2] *= transform[1]; + minMax[3] *= transform[1]; + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + minMax[0] *= transform[2]; + minMax[1] *= transform[2]; + } + minMax[0] += transform[4]; + minMax[1] += transform[4]; + minMax[2] += transform[5]; + minMax[3] += transform[5]; + } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } - static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } - static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } - static getAxialAlignedBoundingBox(r, m) { - const p1 = Util.applyTransform(r, m); - const p2 = Util.applyTransform(r.slice(2, 4), m); - const p3 = Util.applyTransform([r[0], r[3]], m); - const p4 = Util.applyTransform([r[2], r[1]], m); + const p1 = this.applyTransform(r, m); + const p2 = this.applyTransform(r.slice(2, 4), m); + const p3 = this.applyTransform([r[0], r[3]], m); + const p4 = this.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } - static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } - - static apply3dTransform(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - } - static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; @@ -1257,718 +674,2906 @@ class Util { const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } - static normalizeRect(rect) { const r = rect.slice(0); - if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } - if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } - return r; } - static intersect(rect1, rect2) { - function compare(a, b) { - return a - b; - } - - const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); - const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); - const result = []; - rect1 = Util.normalizeRect(rect1); - rect2 = Util.normalizeRect(rect2); - - if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { - result[0] = orderedX[1]; - result[2] = orderedX[2]; - } else { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + if (xLow > xHigh) { return null; } - - if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { - result[1] = orderedY[1]; - result[3] = orderedY[2]; - } else { + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + if (yLow > yHigh) { return null; } - - return result; + return [xLow, yLow, xHigh, yHigh]; + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { + const tvalues = [], + bounds = [[], []]; + let a, b, c, t, t1, t2, b2ac, sqrtb2ac; + for (let i = 0; i < 2; ++i) { + if (i === 0) { + b = 6 * x0 - 12 * x1 + 6 * x2; + a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; + c = 3 * x1 - 3 * x0; + } else { + b = 6 * y0 - 12 * y1 + 6 * y2; + a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; + c = 3 * y1 - 3 * y0; + } + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) < 1e-12) { + continue; + } + t = -c / b; + if (0 < t && t < 1) { + tvalues.push(t); + } + continue; + } + b2ac = b * b - 4 * c * a; + sqrtb2ac = Math.sqrt(b2ac); + if (b2ac < 0) { + continue; + } + t1 = (-b + sqrtb2ac) / (2 * a); + if (0 < t1 && t1 < 1) { + tvalues.push(t1); + } + t2 = (-b - sqrtb2ac) / (2 * a); + if (0 < t2 && t2 < 1) { + tvalues.push(t2); + } + } + let j = tvalues.length, + mt; + const jlen = j; + while (j--) { + t = tvalues[j]; + mt = 1 - t; + bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; + bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; + } + bounds[0][jlen] = x0; + bounds[1][jlen] = y0; + bounds[0][jlen + 1] = x3; + bounds[1][jlen + 1] = y3; + bounds[0].length = bounds[1].length = jlen + 2; + return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; } - } - exports.Util = Util; const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; - function stringToPDFString(str) { - const length = str.length, - strBuf = []; - - if (str[0] === "\xFE" && str[1] === "\xFF") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); + if (str[0] >= "\xEF") { + let encoding; + if (str[0] === "\xFE" && str[1] === "\xFF") { + encoding = "utf-16be"; + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + encoding = "utf-16le"; + } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { + encoding = "utf-8"; } - } else if (str[0] === "\xFF" && str[1] === "\xFE") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); - } - } else { - for (let i = 0; i < length; ++i) { - const code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + if (encoding) { + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(str); + return decoder.decode(buffer); + } catch (ex) { + warn(`stringToPDFString: "${ex}".`); + } } } - + const strBuf = []; + for (let i = 0, ii = str.length; i < ii; i++) { + const code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } return strBuf.join(""); } - -function escapeString(str) { - return str.replace(/([()\\\n\r])/g, match => { - if (match === "\n") { - return "\\n"; - } else if (match === "\r") { - return "\\r"; - } - - return `\\${match}`; - }); -} - -function isAscii(str) { - return /^[\x00-\x7F]*$/.test(str); -} - -function stringToUTF16BEString(str) { - const buf = ["\xFE\xFF"]; - - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); - } - - return buf.join(""); -} - function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } - function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } - -function isBool(v) { - return typeof v === "boolean"; -} - -function isNum(v) { - return typeof v === "number"; -} - -function isString(v) { - return typeof v === "string"; -} - function isArrayBuffer(v) { - return typeof v === "object" && v !== null && v.byteLength !== undefined; + return typeof v === "object" && v?.byteLength !== undefined; } - function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } - for (let i = 0, ii = arr1.length; i < ii; i++) { if (arr1[i] !== arr2[i]) { return false; } } - return true; } - -function getModificationDate(date = new Date()) { +function getModificationDate() { + let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } - -function createPromiseCapability() { - const capability = Object.create(null); - let isSettled = false; - Object.defineProperty(capability, "settled", { - get() { - return isSettled; +class PromiseCapability { + #settled = false; + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = data => { + this.#settled = true; + resolve(data); + }; + this.reject = reason => { + this.#settled = true; + reject(reason); + }; + }); + } + get settled() { + return this.#settled; + } +} +exports.PromiseCapability = PromiseCapability; +let NormalizeRegex = null; +let NormalizationMap = null; +function normalizeUnicode(str) { + if (!NormalizeRegex) { + NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + NormalizationMap = new Map([["ſt", "ſt"]]); + } + return str.replaceAll(NormalizeRegex, (_, p1, p2) => { + return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); + }); +} +function getUuid() { + if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { + return crypto.randomUUID(); + } + const buf = new Uint8Array(32); + if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") { + crypto.getRandomValues(buf); + } else { + for (let i = 0; i < 32; i++) { + buf[i] = Math.floor(Math.random() * 255); } - - }); - capability.promise = new Promise(function (resolve, reject) { - capability.resolve = function (data) { - isSettled = true; - resolve(data); - }; - - capability.reject = function (reason) { - isSettled = true; - reject(reason); - }; - }); - return capability; + } + return bytesToString(buf); } -function createObjectURL(data, contentType = "", forceDataSchema = false) { - if (URL.createObjectURL && !forceDataSchema) { - return URL.createObjectURL(new Blob([data], { - type: contentType - })); - } +/***/ }), +/* 2 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - let buffer = `data:${contentType};base64,`; - - for (let i = 0, ii = data.length; i < ii; i += 3) { - const b1 = data[i] & 0xff; - const b2 = data[i + 1] & 0xff; - const b3 = data[i + 2] & 0xff; - const d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; - const d4 = i + 2 < ii ? b3 & 0x3f : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - - return buffer; -} +var $ = __w_pdfjs_require__(3); +var global = __w_pdfjs_require__(4); +var apply = __w_pdfjs_require__(69); +var wrapErrorConstructorWithCause = __w_pdfjs_require__(70); +var WEB_ASSEMBLY = 'WebAssembly'; +var WebAssembly = global[WEB_ASSEMBLY]; +var FORCED = Error('e', { cause: 7 }).cause !== 7; +var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); + $({ + global: true, + constructor: true, + arity: 1, + forced: FORCED + }, O); +}; +var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) { + if (WebAssembly && WebAssembly[ERROR_NAME]) { + var O = {}; + O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED); + $({ + target: WEB_ASSEMBLY, + stat: true, + constructor: true, + arity: 1, + forced: FORCED + }, O); + } +}; +exportGlobalErrorCauseWrapper('Error', function (init) { + return function Error(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('EvalError', function (init) { + return function EvalError(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('RangeError', function (init) { + return function RangeError(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('ReferenceError', function (init) { + return function ReferenceError(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('SyntaxError', function (init) { + return function SyntaxError(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('TypeError', function (init) { + return function TypeError(message) { + return apply(init, this, arguments); + }; +}); +exportGlobalErrorCauseWrapper('URIError', function (init) { + return function URIError(message) { + return apply(init, this, arguments); + }; +}); +exportWebAssemblyErrorCauseWrapper('CompileError', function (init) { + return function CompileError(message) { + return apply(init, this, arguments); + }; +}); +exportWebAssemblyErrorCauseWrapper('LinkError', function (init) { + return function LinkError(message) { + return apply(init, this, arguments); + }; +}); +exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) { + return function RuntimeError(message) { + return apply(init, this, arguments); + }; +}); /***/ }), /* 3 */ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { - - -var _is_node = __w_pdfjs_require__(4); - -; +var global = __w_pdfjs_require__(4); +var getOwnPropertyDescriptor = (__w_pdfjs_require__(5).f); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var defineBuiltIn = __w_pdfjs_require__(48); +var defineGlobalProperty = __w_pdfjs_require__(38); +var copyConstructorProperties = __w_pdfjs_require__(56); +var isForced = __w_pdfjs_require__(68); +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) + for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else + targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) + continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + defineBuiltIn(target, key, sourceProperty, options); + } +}; /***/ }), /* 4 */ -/***/ ((__unused_webpack_module, exports) => { +/***/ (function(module) { - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isNodeJS = void 0; -const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); -exports.isNodeJS = isNodeJS; +var check = function (it) { + return it && it.Math == Math && it; +}; +module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || (function () { + return this; +}()) || this || Function('return this')(); /***/ }), /* 5 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseSVGFactory = exports.BaseStandardFontDataFactory = exports.BaseCMapReaderFactory = exports.BaseCanvasFactory = void 0; - -var _util = __w_pdfjs_require__(2); - -class BaseCanvasFactory { - constructor() { - if (this.constructor === BaseCanvasFactory) { - (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); - } +var DESCRIPTORS = __w_pdfjs_require__(6); +var call = __w_pdfjs_require__(8); +var propertyIsEnumerableModule = __w_pdfjs_require__(10); +var createPropertyDescriptor = __w_pdfjs_require__(11); +var toIndexedObject = __w_pdfjs_require__(12); +var toPropertyKey = __w_pdfjs_require__(18); +var hasOwn = __w_pdfjs_require__(39); +var IE8_DOM_DEFINE = __w_pdfjs_require__(42); +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { } - - create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } - - const canvas = this._createCanvas(width, height); - - return { - canvas, - context: canvas.getContext("2d") - }; - } - - reset(canvasAndContext, width, height) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } - - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } - - canvasAndContext.canvas.width = width; - canvasAndContext.canvas.height = height; - } - - destroy(canvasAndContext) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } - - canvasAndContext.canvas.width = 0; - canvasAndContext.canvas.height = 0; - canvasAndContext.canvas = null; - canvasAndContext.context = null; - } - - _createCanvas(width, height) { - (0, _util.unreachable)("Abstract method `_createCanvas` called."); - } - -} - -exports.BaseCanvasFactory = BaseCanvasFactory; - -class BaseCMapReaderFactory { - constructor({ - baseUrl = null, - isCompressed = false - }) { - if (this.constructor === BaseCMapReaderFactory) { - (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); - } - - this.baseUrl = baseUrl; - this.isCompressed = isCompressed; - } - - async fetch({ - name - }) { - if (!this.baseUrl) { - throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); - } - - if (!name) { - throw new Error("CMap name must be specified."); - } - - const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); - const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; - return this._fetchData(url, compressionType).catch(reason => { - throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); - }); - } - - _fetchData(url, compressionType) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); - } - -} - -exports.BaseCMapReaderFactory = BaseCMapReaderFactory; - -class BaseStandardFontDataFactory { - constructor({ - baseUrl = null - }) { - if (this.constructor === BaseStandardFontDataFactory) { - (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); - } - - this.baseUrl = baseUrl; - } - - async fetch({ - filename - }) { - if (!this.baseUrl) { - throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); - } - - if (!filename) { - throw new Error("Font filename must be specified."); - } - - const url = `${this.baseUrl}${filename}`; - return this._fetchData(url).catch(reason => { - throw new Error(`Unable to load font data at: ${url}`); - }); - } - - _fetchData(url) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); - } - -} - -exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; - -class BaseSVGFactory { - constructor() { - if (this.constructor === BaseSVGFactory) { - (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); - } - } - - create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid SVG dimensions"); - } - - const svg = this._createSVG("svg:svg"); - - svg.setAttribute("version", "1.1"); - svg.setAttribute("width", `${width}px`); - svg.setAttribute("height", `${height}px`); - svg.setAttribute("preserveAspectRatio", "none"); - svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - return svg; - } - - createElement(type) { - if (typeof type !== "string") { - throw new Error("Invalid SVG element type"); - } - - return this._createSVG(type); - } - - _createSVG(type) { - (0, _util.unreachable)("Abstract method `_createSVG` called."); - } - -} - -exports.BaseSVGFactory = BaseSVGFactory; + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; /***/ }), /* 6 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var fails = __w_pdfjs_require__(7); +module.exports = !fails(function () { + return Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7; +}); + +/***/ }), +/* 7 */ +/***/ ((module) => { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +/***/ }), +/* 8 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var NATIVE_BIND = __w_pdfjs_require__(9); +var call = Function.prototype.call; +module.exports = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + +/***/ }), +/* 9 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var fails = __w_pdfjs_require__(7); +module.exports = !fails(function () { + var test = function () { + }.bind(); + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + +/***/ }), +/* 10 */ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + +/***/ }), +/* 11 */ +/***/ ((module) => { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +/***/ }), +/* 12 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var IndexedObject = __w_pdfjs_require__(13); +var requireObjectCoercible = __w_pdfjs_require__(16); +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + +/***/ }), +/* 13 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var fails = __w_pdfjs_require__(7); +var classof = __w_pdfjs_require__(15); +var $Object = Object; +var split = uncurryThis(''.split); +module.exports = fails(function () { + return !$Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) == 'String' ? split(it, '') : $Object(it); +} : $Object; + +/***/ }), +/* 14 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var NATIVE_BIND = __w_pdfjs_require__(9); +var FunctionPrototype = Function.prototype; +var call = FunctionPrototype.call; +var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); +module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; +}; + +/***/ }), +/* 15 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + +/***/ }), +/* 16 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isNullOrUndefined = __w_pdfjs_require__(17); +var $TypeError = TypeError; +module.exports = function (it) { + if (isNullOrUndefined(it)) + throw $TypeError("Can't call method on " + it); + return it; +}; + +/***/ }), +/* 17 */ +/***/ ((module) => { + +module.exports = function (it) { + return it === null || it === undefined; +}; + +/***/ }), +/* 18 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toPrimitive = __w_pdfjs_require__(19); +var isSymbol = __w_pdfjs_require__(23); +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + +/***/ }), +/* 19 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +var isObject = __w_pdfjs_require__(20); +var isSymbol = __w_pdfjs_require__(23); +var getMethod = __w_pdfjs_require__(30); +var ordinaryToPrimitive = __w_pdfjs_require__(33); +var wellKnownSymbol = __w_pdfjs_require__(34); +var $TypeError = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) + pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) + pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + +/***/ }), +/* 20 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isCallable = __w_pdfjs_require__(21); +var $documentAll = __w_pdfjs_require__(22); +var documentAll = $documentAll.all; +module.exports = $documentAll.IS_HTMLDDA ? function (it) { + return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll; +} : function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + +/***/ }), +/* 21 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var $documentAll = __w_pdfjs_require__(22); +var documentAll = $documentAll.all; +module.exports = $documentAll.IS_HTMLDDA ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + +/***/ }), +/* 22 */ +/***/ ((module) => { + +var documentAll = typeof document == 'object' && document.all; +var IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined; +module.exports = { + all: documentAll, + IS_HTMLDDA: IS_HTMLDDA +}; + +/***/ }), +/* 23 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var getBuiltIn = __w_pdfjs_require__(24); +var isCallable = __w_pdfjs_require__(21); +var isPrototypeOf = __w_pdfjs_require__(25); +var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26); +var $Object = Object; +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); +}; + +/***/ }), +/* 24 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var isCallable = __w_pdfjs_require__(21); +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; +}; + +/***/ }), +/* 25 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +module.exports = uncurryThis({}.isPrototypeOf); + +/***/ }), +/* 26 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var NATIVE_SYMBOL = __w_pdfjs_require__(27); +module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol'; + +/***/ }), +/* 27 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var V8_VERSION = __w_pdfjs_require__(28); +var fails = __w_pdfjs_require__(7); +var global = __w_pdfjs_require__(4); +var $String = global.String; +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol(); + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + +/***/ }), +/* 28 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var userAgent = __w_pdfjs_require__(29); +var process = global.process; +var Deno = global.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; +if (v8) { + match = v8.split('.'); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } +} +module.exports = version; + +/***/ }), +/* 29 */ +/***/ ((module) => { + +module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; + +/***/ }), +/* 30 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var aCallable = __w_pdfjs_require__(31); +var isNullOrUndefined = __w_pdfjs_require__(17); +module.exports = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); +}; + +/***/ }), +/* 31 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isCallable = __w_pdfjs_require__(21); +var tryToString = __w_pdfjs_require__(32); +var $TypeError = TypeError; +module.exports = function (argument) { + if (isCallable(argument)) + return argument; + throw $TypeError(tryToString(argument) + ' is not a function'); +}; + +/***/ }), +/* 32 */ +/***/ ((module) => { + +var $String = String; +module.exports = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } +}; + +/***/ }), +/* 33 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +var isCallable = __w_pdfjs_require__(21); +var isObject = __w_pdfjs_require__(20); +var $TypeError = TypeError; +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) + return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) + return val; + throw $TypeError("Can't convert object to primitive value"); +}; + +/***/ }), +/* 34 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var shared = __w_pdfjs_require__(35); +var hasOwn = __w_pdfjs_require__(39); +var uid = __w_pdfjs_require__(41); +var NATIVE_SYMBOL = __w_pdfjs_require__(27); +var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26); +var Symbol = global.Symbol; +var WellKnownSymbolsStore = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) ? Symbol[name] : createWellKnownSymbol('Symbol.' + name); + } + return WellKnownSymbolsStore[name]; +}; + +/***/ }), +/* 35 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var IS_PURE = __w_pdfjs_require__(36); +var store = __w_pdfjs_require__(37); +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.31.1', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + +/***/ }), +/* 36 */ +/***/ ((module) => { + +module.exports = false; + +/***/ }), +/* 37 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var defineGlobalProperty = __w_pdfjs_require__(38); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || defineGlobalProperty(SHARED, {}); +module.exports = store; + +/***/ }), +/* 38 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var defineProperty = Object.defineProperty; +module.exports = function (key, value) { + try { + defineProperty(global, key, { + value: value, + configurable: true, + writable: true + }); + } catch (error) { + global[key] = value; + } + return value; +}; + +/***/ }), +/* 39 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var toObject = __w_pdfjs_require__(40); +var hasOwnProperty = uncurryThis({}.hasOwnProperty); +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + +/***/ }), +/* 40 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var requireObjectCoercible = __w_pdfjs_require__(16); +var $Object = Object; +module.exports = function (argument) { + return $Object(requireObjectCoercible(argument)); +}; + +/***/ }), +/* 41 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + +/***/ }), +/* 42 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var DESCRIPTORS = __w_pdfjs_require__(6); +var fails = __w_pdfjs_require__(7); +var createElement = __w_pdfjs_require__(43); +module.exports = !DESCRIPTORS && !fails(function () { + return Object.defineProperty(createElement('div'), 'a', { + get: function () { + return 7; + } + }).a != 7; +}); + +/***/ }), +/* 43 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var isObject = __w_pdfjs_require__(20); +var document = global.document; +var EXISTS = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + +/***/ }), +/* 44 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var DESCRIPTORS = __w_pdfjs_require__(6); +var definePropertyModule = __w_pdfjs_require__(45); +var createPropertyDescriptor = __w_pdfjs_require__(11); +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +/***/ }), +/* 45 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +var DESCRIPTORS = __w_pdfjs_require__(6); +var IE8_DOM_DEFINE = __w_pdfjs_require__(42); +var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46); +var anObject = __w_pdfjs_require__(47); +var toPropertyKey = __w_pdfjs_require__(18); +var $TypeError = TypeError; +var $defineProperty = Object.defineProperty; +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE = 'configurable'; +var WRITABLE = 'writable'; +exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ('get' in Attributes || 'set' in Attributes) + throw $TypeError('Accessors not supported'); + if ('value' in Attributes) + O[P] = Attributes.value; + return O; +}; + +/***/ }), +/* 46 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var DESCRIPTORS = __w_pdfjs_require__(6); +var fails = __w_pdfjs_require__(7); +module.exports = DESCRIPTORS && fails(function () { + return Object.defineProperty(function () { + }, 'prototype', { + value: 42, + writable: false + }).prototype != 42; +}); + +/***/ }), +/* 47 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isObject = __w_pdfjs_require__(20); +var $String = String; +var $TypeError = TypeError; +module.exports = function (argument) { + if (isObject(argument)) + return argument; + throw $TypeError($String(argument) + ' is not an object'); +}; + +/***/ }), +/* 48 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isCallable = __w_pdfjs_require__(21); +var definePropertyModule = __w_pdfjs_require__(45); +var makeBuiltIn = __w_pdfjs_require__(49); +var defineGlobalProperty = __w_pdfjs_require__(38); +module.exports = function (O, key, value, options) { + if (!options) + options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) + makeBuiltIn(value, name, options); + if (options.global) { + if (simple) + O[key] = value; + else + defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) + delete O[key]; + else if (O[key]) + simple = true; + } catch (error) { + } + if (simple) + O[key] = value; + else + definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; +}; + +/***/ }), +/* 49 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var fails = __w_pdfjs_require__(7); +var isCallable = __w_pdfjs_require__(21); +var hasOwn = __w_pdfjs_require__(39); +var DESCRIPTORS = __w_pdfjs_require__(6); +var CONFIGURABLE_FUNCTION_NAME = (__w_pdfjs_require__(50).CONFIGURABLE); +var inspectSource = __w_pdfjs_require__(51); +var InternalStateModule = __w_pdfjs_require__(52); +var enforceInternalState = InternalStateModule.enforce; +var getInternalState = InternalStateModule.get; +var $String = String; +var defineProperty = Object.defineProperty; +var stringSlice = uncurryThis(''.slice); +var replace = uncurryThis(''.replace); +var join = uncurryThis([].join); +var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () { + return defineProperty(function () { + }, 'length', { value: 8 }).length !== 8; +}); +var TEMPLATE = String(String).split('String'); +var makeBuiltIn = module.exports = function (value, name, options) { + if (stringSlice($String(name), 0, 7) === 'Symbol(') { + name = '[' + replace($String(name), /^Symbol\(([^)]*)\)/, '$1') + ']'; + } + if (options && options.getter) + name = 'get ' + name; + if (options && options.setter) + name = 'set ' + name; + if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) + defineProperty(value, 'name', { + value: name, + configurable: true + }); + else + value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) { + defineProperty(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn(options, 'constructor') && options.constructor) { + if (DESCRIPTORS) + defineProperty(value, 'prototype', { writable: false }); + } else if (value.prototype) + value.prototype = undefined; + } catch (error) { + } + var state = enforceInternalState(value); + if (!hasOwn(state, 'source')) { + state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); + } + return value; +}; +Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}, 'toString'); + +/***/ }), +/* 50 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var DESCRIPTORS = __w_pdfjs_require__(6); +var hasOwn = __w_pdfjs_require__(39); +var FunctionPrototype = Function.prototype; +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; +var EXISTS = hasOwn(FunctionPrototype, 'name'); +var PROPER = EXISTS && function something() { +}.name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable); +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + +/***/ }), +/* 51 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var isCallable = __w_pdfjs_require__(21); +var store = __w_pdfjs_require__(37); +var functionToString = uncurryThis(Function.toString); +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} +module.exports = store.inspectSource; + +/***/ }), +/* 52 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var NATIVE_WEAK_MAP = __w_pdfjs_require__(53); +var global = __w_pdfjs_require__(4); +var isObject = __w_pdfjs_require__(20); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var hasOwn = __w_pdfjs_require__(39); +var shared = __w_pdfjs_require__(37); +var sharedKey = __w_pdfjs_require__(54); +var hiddenKeys = __w_pdfjs_require__(55); +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = global.TypeError; +var WeakMap = global.WeakMap; +var set, get, has; +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } + return state; + }; +}; +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + store.get = store.get; + store.has = store.has; + store.set = store.set; + set = function (it, metadata) { + if (store.has(it)) + throw TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) + throw TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + +/***/ }), +/* 53 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var isCallable = __w_pdfjs_require__(21); +var WeakMap = global.WeakMap; +module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + +/***/ }), +/* 54 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var shared = __w_pdfjs_require__(35); +var uid = __w_pdfjs_require__(41); +var keys = shared('keys'); +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + +/***/ }), +/* 55 */ +/***/ ((module) => { + +module.exports = {}; + +/***/ }), +/* 56 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var hasOwn = __w_pdfjs_require__(39); +var ownKeys = __w_pdfjs_require__(57); +var getOwnPropertyDescriptorModule = __w_pdfjs_require__(5); +var definePropertyModule = __w_pdfjs_require__(45); +module.exports = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + +/***/ }), +/* 57 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var getBuiltIn = __w_pdfjs_require__(24); +var uncurryThis = __w_pdfjs_require__(14); +var getOwnPropertyNamesModule = __w_pdfjs_require__(58); +var getOwnPropertySymbolsModule = __w_pdfjs_require__(67); +var anObject = __w_pdfjs_require__(47); +var concat = uncurryThis([].concat); +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + +/***/ }), +/* 58 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +var internalObjectKeys = __w_pdfjs_require__(59); +var enumBugKeys = __w_pdfjs_require__(66); +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + +/***/ }), +/* 59 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var hasOwn = __w_pdfjs_require__(39); +var toIndexedObject = __w_pdfjs_require__(12); +var indexOf = (__w_pdfjs_require__(60).indexOf); +var hiddenKeys = __w_pdfjs_require__(55); +var push = uncurryThis([].push); +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + +/***/ }), +/* 60 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toIndexedObject = __w_pdfjs_require__(12); +var toAbsoluteIndex = __w_pdfjs_require__(61); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el != el) + while (length > index) { + value = O[index++]; + if (value != value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; +}; +module.exports = { + includes: createMethod(true), + indexOf: createMethod(false) +}; + +/***/ }), +/* 61 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + +/***/ }), +/* 62 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var trunc = __w_pdfjs_require__(63); +module.exports = function (argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); +}; + +/***/ }), +/* 63 */ +/***/ ((module) => { + +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); +}; + +/***/ }), +/* 64 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toLength = __w_pdfjs_require__(65); +module.exports = function (obj) { + return toLength(obj.length); +}; + +/***/ }), +/* 65 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var min = Math.min; +module.exports = function (argument) { + return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; +}; + +/***/ }), +/* 66 */ +/***/ ((module) => { + +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + +/***/ }), +/* 67 */ +/***/ ((__unused_webpack_module, exports) => { + +exports.f = Object.getOwnPropertySymbols; + +/***/ }), +/* 68 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var fails = __w_pdfjs_require__(7); +var isCallable = __w_pdfjs_require__(21); +var replacement = /#|\.prototype\./; +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; +}; +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; +module.exports = isForced; + +/***/ }), +/* 69 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var NATIVE_BIND = __w_pdfjs_require__(9); +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var call = FunctionPrototype.call; +module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + +/***/ }), +/* 70 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var getBuiltIn = __w_pdfjs_require__(24); +var hasOwn = __w_pdfjs_require__(39); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var isPrototypeOf = __w_pdfjs_require__(25); +var setPrototypeOf = __w_pdfjs_require__(71); +var copyConstructorProperties = __w_pdfjs_require__(56); +var proxyAccessor = __w_pdfjs_require__(74); +var inheritIfRequired = __w_pdfjs_require__(75); +var normalizeStringArgument = __w_pdfjs_require__(76); +var installErrorCause = __w_pdfjs_require__(80); +var installErrorStack = __w_pdfjs_require__(81); +var DESCRIPTORS = __w_pdfjs_require__(6); +var IS_PURE = __w_pdfjs_require__(36); +module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { + var STACK_TRACE_LIMIT = 'stackTraceLimit'; + var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; + var path = FULL_NAME.split('.'); + var ERROR_NAME = path[path.length - 1]; + var OriginalError = getBuiltIn.apply(null, path); + if (!OriginalError) + return; + var OriginalErrorPrototype = OriginalError.prototype; + if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) + delete OriginalErrorPrototype.cause; + if (!FORCED) + return OriginalError; + var BaseError = getBuiltIn('Error'); + var WrappedError = wrapper(function (a, b) { + var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined); + var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); + if (message !== undefined) + createNonEnumerableProperty(result, 'message', message); + installErrorStack(result, WrappedError, result.stack, 2); + if (this && isPrototypeOf(OriginalErrorPrototype, this)) + inheritIfRequired(result, this, WrappedError); + if (arguments.length > OPTIONS_POSITION) + installErrorCause(result, arguments[OPTIONS_POSITION]); + return result; + }); + WrappedError.prototype = OriginalErrorPrototype; + if (ERROR_NAME !== 'Error') { + if (setPrototypeOf) + setPrototypeOf(WrappedError, BaseError); + else + copyConstructorProperties(WrappedError, BaseError, { name: true }); + } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { + proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); + proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace'); + } + copyConstructorProperties(WrappedError, OriginalError); + if (!IS_PURE) + try { + if (OriginalErrorPrototype.name !== ERROR_NAME) { + createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME); + } + OriginalErrorPrototype.constructor = WrappedError; + } catch (error) { + } + return WrappedError; +}; + +/***/ }), +/* 71 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThisAccessor = __w_pdfjs_require__(72); +var anObject = __w_pdfjs_require__(47); +var aPossiblePrototype = __w_pdfjs_require__(73); +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; +}()) : undefined); + +/***/ }), +/* 72 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var aCallable = __w_pdfjs_require__(31); +module.exports = function (object, key, method) { + try { + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { + } +}; + +/***/ }), +/* 73 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isCallable = __w_pdfjs_require__(21); +var $String = String; +var $TypeError = TypeError; +module.exports = function (argument) { + if (typeof argument == 'object' || isCallable(argument)) + return argument; + throw $TypeError("Can't set " + $String(argument) + ' as a prototype'); +}; + +/***/ }), +/* 74 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var defineProperty = (__w_pdfjs_require__(45).f); +module.exports = function (Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function () { + return Source[key]; + }, + set: function (it) { + Source[key] = it; + } + }); +}; + +/***/ }), +/* 75 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isCallable = __w_pdfjs_require__(21); +var isObject = __w_pdfjs_require__(20); +var setPrototypeOf = __w_pdfjs_require__(71); +module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if (setPrototypeOf && isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype) + setPrototypeOf($this, NewTargetPrototype); + return $this; +}; + +/***/ }), +/* 76 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toString = __w_pdfjs_require__(77); +module.exports = function (argument, $default) { + return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); +}; + +/***/ }), +/* 77 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classof = __w_pdfjs_require__(78); +var $String = String; +module.exports = function (argument) { + if (classof(argument) === 'Symbol') + throw TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + +/***/ }), +/* 78 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); +var isCallable = __w_pdfjs_require__(21); +var classofRaw = __w_pdfjs_require__(15); +var wellKnownSymbol = __w_pdfjs_require__(34); +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Object = Object; +var CORRECT_ARGUMENTS = classofRaw((function () { + return arguments; +}())) == 'Arguments'; +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { + } +}; +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + +/***/ }), +/* 79 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var wellKnownSymbol = __w_pdfjs_require__(34); +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; +test[TO_STRING_TAG] = 'z'; +module.exports = String(test) === '[object z]'; + +/***/ }), +/* 80 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var isObject = __w_pdfjs_require__(20); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +module.exports = function (O, options) { + if (isObject(options) && 'cause' in options) { + createNonEnumerableProperty(O, 'cause', options.cause); + } +}; + +/***/ }), +/* 81 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var clearErrorStack = __w_pdfjs_require__(82); +var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83); +var captureStackTrace = Error.captureStackTrace; +module.exports = function (error, C, stack, dropEntries) { + if (ERROR_STACK_INSTALLABLE) { + if (captureStackTrace) + captureStackTrace(error, C); + else + createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries)); + } +}; + +/***/ }), +/* 82 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var $Error = Error; +var replace = uncurryThis(''.replace); +var TEST = function (arg) { + return String($Error(arg).stack); +}('zxcasd'); +var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; +var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); +module.exports = function (stack, dropEntries) { + if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) { + while (dropEntries--) + stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); + } + return stack; +}; + +/***/ }), +/* 83 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var fails = __w_pdfjs_require__(7); +var createPropertyDescriptor = __w_pdfjs_require__(11); +module.exports = !fails(function () { + var error = Error('a'); + if (!('stack' in error)) + return true; + Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); + return error.stack !== 7; +}); + +/***/ }), +/* 84 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var defineBuiltIn = __w_pdfjs_require__(48); +var uncurryThis = __w_pdfjs_require__(14); +var toString = __w_pdfjs_require__(77); +var validateArgumentsLength = __w_pdfjs_require__(85); +var $URLSearchParams = URLSearchParams; +var URLSearchParamsPrototype = $URLSearchParams.prototype; +var append = uncurryThis(URLSearchParamsPrototype.append); +var $delete = uncurryThis(URLSearchParamsPrototype['delete']); +var forEach = uncurryThis(URLSearchParamsPrototype.forEach); +var push = uncurryThis([].push); +var params = new $URLSearchParams('a=1&a=2'); +params['delete']('a', 1); +if (params + '' !== 'a=2') { + defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name) { + var length = arguments.length; + var $value = length < 2 ? undefined : arguments[1]; + if (length && $value === undefined) + return $delete(this, name); + var entries = []; + forEach(this, function (v, k) { + push(entries, { + key: k, + value: v + }); + }); + validateArgumentsLength(length, 1); + var key = toString(name); + var value = toString($value); + var index = 0; + var dindex = 0; + var found = false; + var entriesLength = entries.length; + var entry; + while (index < entriesLength) { + entry = entries[index++]; + if (found || entry.key === key) { + found = true; + $delete(this, entry.key); + } else + dindex++; + } + while (dindex < entriesLength) { + entry = entries[dindex++]; + if (!(entry.key === key && entry.value === value)) + append(this, entry.key, entry.value); + } + }, { + enumerable: true, + unsafe: true + }); +} + +/***/ }), +/* 85 */ +/***/ ((module) => { + +var $TypeError = TypeError; +module.exports = function (passed, required) { + if (passed < required) + throw $TypeError('Not enough arguments'); + return passed; +}; + +/***/ }), +/* 86 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var defineBuiltIn = __w_pdfjs_require__(48); +var uncurryThis = __w_pdfjs_require__(14); +var toString = __w_pdfjs_require__(77); +var validateArgumentsLength = __w_pdfjs_require__(85); +var $URLSearchParams = URLSearchParams; +var URLSearchParamsPrototype = $URLSearchParams.prototype; +var getAll = uncurryThis(URLSearchParamsPrototype.getAll); +var $has = uncurryThis(URLSearchParamsPrototype.has); +var params = new $URLSearchParams('a=1'); +if (params.has('a', 2)) { + defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name) { + var length = arguments.length; + var $value = length < 2 ? undefined : arguments[1]; + if (length && $value === undefined) + return $has(this, name); + var values = getAll(this, name); + validateArgumentsLength(length, 1); + var value = toString($value); + var index = 0; + while (index < values.length) { + if (values[index++] === value) + return true; + } + return false; + }, { + enumerable: true, + unsafe: true + }); +} + +/***/ }), +/* 87 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var DESCRIPTORS = __w_pdfjs_require__(6); +var uncurryThis = __w_pdfjs_require__(14); +var defineBuiltInAccessor = __w_pdfjs_require__(88); +var URLSearchParamsPrototype = URLSearchParams.prototype; +var forEach = uncurryThis(URLSearchParamsPrototype.forEach); +if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) { + defineBuiltInAccessor(URLSearchParamsPrototype, 'size', { + get: function size() { + var count = 0; + forEach(this, function () { + count++; + }); + return count; + }, + configurable: true, + enumerable: true + }); +} + +/***/ }), +/* 88 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var makeBuiltIn = __w_pdfjs_require__(49); +var defineProperty = __w_pdfjs_require__(45); +module.exports = function (target, name, descriptor) { + if (descriptor.get) + makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) + makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); +}; + +/***/ }), +/* 89 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var toObject = __w_pdfjs_require__(40); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var setArrayLength = __w_pdfjs_require__(90); +var doesNotExceedSafeInteger = __w_pdfjs_require__(92); +var fails = __w_pdfjs_require__(7); +var INCORRECT_TO_LENGTH = fails(function () { + return [].push.call({ length: 0x100000000 }, 1) !== 4294967297; +}); +var properErrorOnNonWritableLength = function () { + try { + Object.defineProperty([], 'length', { writable: false }).push(); + } catch (error) { + return error instanceof TypeError; + } +}; +var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); +$({ + target: 'Array', + proto: true, + arity: 1, + forced: FORCED +}, { + push: function push(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + doesNotExceedSafeInteger(len + argCount); + for (var i = 0; i < argCount; i++) { + O[len] = arguments[i]; + len++; + } + setArrayLength(O, len); + return len; + } +}); + +/***/ }), +/* 90 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var DESCRIPTORS = __w_pdfjs_require__(6); +var isArray = __w_pdfjs_require__(91); +var $TypeError = TypeError; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !(function () { + if (this !== undefined) + return true; + try { + Object.defineProperty([], 'length', { writable: false }).length = 1; + } catch (error) { + return error instanceof TypeError; + } +}()); +module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) { + if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) { + throw $TypeError('Cannot set read only .length'); + } + return O.length = length; +} : function (O, length) { + return O.length = length; +}; + +/***/ }), +/* 91 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classof = __w_pdfjs_require__(15); +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) == 'Array'; +}; + +/***/ }), +/* 92 */ +/***/ ((module) => { + +var $TypeError = TypeError; +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; +module.exports = function (it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError('Maximum allowed index exceeded'); + return it; +}; + +/***/ }), +/* 93 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var $findLast = (__w_pdfjs_require__(98).findLast); +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +exportTypedArrayMethod('findLast', function findLast(predicate) { + return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +/***/ }), +/* 94 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var NATIVE_ARRAY_BUFFER = __w_pdfjs_require__(95); +var DESCRIPTORS = __w_pdfjs_require__(6); +var global = __w_pdfjs_require__(4); +var isCallable = __w_pdfjs_require__(21); +var isObject = __w_pdfjs_require__(20); +var hasOwn = __w_pdfjs_require__(39); +var classof = __w_pdfjs_require__(78); +var tryToString = __w_pdfjs_require__(32); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var defineBuiltIn = __w_pdfjs_require__(48); +var defineBuiltInAccessor = __w_pdfjs_require__(88); +var isPrototypeOf = __w_pdfjs_require__(25); +var getPrototypeOf = __w_pdfjs_require__(96); +var setPrototypeOf = __w_pdfjs_require__(71); +var wellKnownSymbol = __w_pdfjs_require__(34); +var uid = __w_pdfjs_require__(41); +var InternalStateModule = __w_pdfjs_require__(52); +var enforceInternalState = InternalStateModule.enforce; +var getInternalState = InternalStateModule.get; +var Int8Array = global.Int8Array; +var Int8ArrayPrototype = Int8Array && Int8Array.prototype; +var Uint8ClampedArray = global.Uint8ClampedArray; +var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype; +var TypedArray = Int8Array && getPrototypeOf(Int8Array); +var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype); +var ObjectPrototype = Object.prototype; +var TypeError = global.TypeError; +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG'); +var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor'; +var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera'; +var TYPED_ARRAY_TAG_REQUIRED = false; +var NAME, Constructor, Prototype; +var TypedArrayConstructorsList = { + Int8Array: 1, + Uint8Array: 1, + Uint8ClampedArray: 1, + Int16Array: 2, + Uint16Array: 2, + Int32Array: 4, + Uint32Array: 4, + Float32Array: 4, + Float64Array: 8 +}; +var BigIntArrayConstructorsList = { + BigInt64Array: 8, + BigUint64Array: 8 +}; +var isView = function isView(it) { + if (!isObject(it)) + return false; + var klass = classof(it); + return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass); +}; +var getTypedArrayConstructor = function (it) { + var proto = getPrototypeOf(it); + if (!isObject(proto)) + return; + var state = getInternalState(proto); + return state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto); +}; +var isTypedArray = function (it) { + if (!isObject(it)) + return false; + var klass = classof(it); + return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass); +}; +var aTypedArray = function (it) { + if (isTypedArray(it)) + return it; + throw TypeError('Target is not a typed array'); +}; +var aTypedArrayConstructor = function (C) { + if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) + return C; + throw TypeError(tryToString(C) + ' is not a typed array constructor'); +}; +var exportTypedArrayMethod = function (KEY, property, forced, options) { + if (!DESCRIPTORS) + return; + if (forced) + for (var ARRAY in TypedArrayConstructorsList) { + var TypedArrayConstructor = global[ARRAY]; + if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) + try { + delete TypedArrayConstructor.prototype[KEY]; + } catch (error) { + try { + TypedArrayConstructor.prototype[KEY] = property; + } catch (error2) { + } + } + } + if (!TypedArrayPrototype[KEY] || forced) { + defineBuiltIn(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options); + } +}; +var exportTypedArrayStaticMethod = function (KEY, property, forced) { + var ARRAY, TypedArrayConstructor; + if (!DESCRIPTORS) + return; + if (setPrototypeOf) { + if (forced) + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global[ARRAY]; + if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) + try { + delete TypedArrayConstructor[KEY]; + } catch (error) { + } + } + if (!TypedArray[KEY] || forced) { + try { + return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property); + } catch (error) { + } + } else + return; + } + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global[ARRAY]; + if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) { + defineBuiltIn(TypedArrayConstructor, KEY, property); + } + } +}; +for (NAME in TypedArrayConstructorsList) { + Constructor = global[NAME]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) + enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor; + else + NATIVE_ARRAY_BUFFER_VIEWS = false; +} +for (NAME in BigIntArrayConstructorsList) { + Constructor = global[NAME]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) + enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor; +} +if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) { + TypedArray = function TypedArray() { + throw TypeError('Incorrect invocation'); + }; + if (NATIVE_ARRAY_BUFFER_VIEWS) + for (NAME in TypedArrayConstructorsList) { + if (global[NAME]) + setPrototypeOf(global[NAME], TypedArray); + } +} +if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) { + TypedArrayPrototype = TypedArray.prototype; + if (NATIVE_ARRAY_BUFFER_VIEWS) + for (NAME in TypedArrayConstructorsList) { + if (global[NAME]) + setPrototypeOf(global[NAME].prototype, TypedArrayPrototype); + } +} +if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) { + setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype); +} +if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) { + TYPED_ARRAY_TAG_REQUIRED = true; + defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, { + configurable: true, + get: function () { + return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined; + } + }); + for (NAME in TypedArrayConstructorsList) + if (global[NAME]) { + createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME); + } +} +module.exports = { + NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS, + TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG, + aTypedArray: aTypedArray, + aTypedArrayConstructor: aTypedArrayConstructor, + exportTypedArrayMethod: exportTypedArrayMethod, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod, + getTypedArrayConstructor: getTypedArrayConstructor, + isView: isView, + isTypedArray: isTypedArray, + TypedArray: TypedArray, + TypedArrayPrototype: TypedArrayPrototype +}; + +/***/ }), +/* 95 */ +/***/ ((module) => { + +module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined'; + +/***/ }), +/* 96 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var hasOwn = __w_pdfjs_require__(39); +var isCallable = __w_pdfjs_require__(21); +var toObject = __w_pdfjs_require__(40); +var sharedKey = __w_pdfjs_require__(54); +var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(97); +var IE_PROTO = sharedKey('IE_PROTO'); +var $Object = Object; +var ObjectPrototype = $Object.prototype; +module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; +}; + +/***/ }), +/* 97 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var fails = __w_pdfjs_require__(7); +module.exports = !fails(function () { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + +/***/ }), +/* 98 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var bind = __w_pdfjs_require__(99); +var IndexedObject = __w_pdfjs_require__(13); +var toObject = __w_pdfjs_require__(40); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var createMethod = function (TYPE) { + var IS_FIND_LAST_INDEX = TYPE == 1; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var index = lengthOfArrayLike(self); + var value, result; + while (index-- > 0) { + value = self[index]; + result = boundFunction(value, index, O); + if (result) + switch (TYPE) { + case 0: + return value; + case 1: + return index; + } + } + return IS_FIND_LAST_INDEX ? -1 : undefined; + }; +}; +module.exports = { + findLast: createMethod(0), + findLastIndex: createMethod(1) +}; + +/***/ }), +/* 99 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(100); +var aCallable = __w_pdfjs_require__(31); +var NATIVE_BIND = __w_pdfjs_require__(9); +var bind = uncurryThis(uncurryThis.bind); +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function () { + return fn.apply(that, arguments); + }; +}; + +/***/ }), +/* 100 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classofRaw = __w_pdfjs_require__(15); +var uncurryThis = __w_pdfjs_require__(14); +module.exports = function (fn) { + if (classofRaw(fn) === 'Function') + return uncurryThis(fn); +}; + +/***/ }), +/* 101 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var $findLastIndex = (__w_pdfjs_require__(98).findLastIndex); +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +exportTypedArrayMethod('findLastIndex', function findLastIndex(predicate) { + return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +/***/ }), +/* 102 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var global = __w_pdfjs_require__(4); +var call = __w_pdfjs_require__(8); +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var toOffset = __w_pdfjs_require__(103); +var toIndexedObject = __w_pdfjs_require__(40); +var fails = __w_pdfjs_require__(7); +var RangeError = global.RangeError; +var Int8Array = global.Int8Array; +var Int8ArrayPrototype = Int8Array && Int8Array.prototype; +var $set = Int8ArrayPrototype && Int8ArrayPrototype.set; +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +var WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () { + var array = new Uint8ClampedArray(2); + call($set, array, { + length: 1, + 0: 3 + }, 1); + return array[1] !== 3; +}); +var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () { + var array = new Int8Array(2); + array.set(1); + array.set('2', 1); + return array[0] !== 0 || array[1] !== 2; +}); +exportTypedArrayMethod('set', function set(arrayLike) { + aTypedArray(this); + var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); + var src = toIndexedObject(arrayLike); + if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) + return call($set, this, src, offset); + var length = this.length; + var len = lengthOfArrayLike(src); + var index = 0; + if (len + offset > length) + throw RangeError('Wrong length'); + while (index < len) + this[offset + index] = src[index++]; +}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG); + +/***/ }), +/* 103 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toPositiveInteger = __w_pdfjs_require__(104); +var $RangeError = RangeError; +module.exports = function (it, BYTES) { + var offset = toPositiveInteger(it); + if (offset % BYTES) + throw $RangeError('Wrong offset'); + return offset; +}; + +/***/ }), +/* 104 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var $RangeError = RangeError; +module.exports = function (it) { + var result = toIntegerOrInfinity(it); + if (result < 0) + throw $RangeError("The argument can't be less than 0"); + return result; +}; + +/***/ }), +/* 105 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var arrayToReversed = __w_pdfjs_require__(106); +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; +exportTypedArrayMethod('toReversed', function toReversed() { + return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this)); +}); + +/***/ }), +/* 106 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var lengthOfArrayLike = __w_pdfjs_require__(64); +module.exports = function (O, C) { + var len = lengthOfArrayLike(O); + var A = new C(len); + var k = 0; + for (; k < len; k++) + A[k] = O[len - k - 1]; + return A; +}; + +/***/ }), +/* 107 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var uncurryThis = __w_pdfjs_require__(14); +var aCallable = __w_pdfjs_require__(31); +var arrayFromConstructorAndList = __w_pdfjs_require__(108); +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +var sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort); +exportTypedArrayMethod('toSorted', function toSorted(compareFn) { + if (compareFn !== undefined) + aCallable(compareFn); + var O = aTypedArray(this); + var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O); + return sort(A, compareFn); +}); + +/***/ }), +/* 108 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var lengthOfArrayLike = __w_pdfjs_require__(64); +module.exports = function (Constructor, list) { + var index = 0; + var length = lengthOfArrayLike(list); + var result = new Constructor(length); + while (length > index) + result[index] = list[index++]; + return result; +}; + +/***/ }), +/* 109 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var arrayWith = __w_pdfjs_require__(110); +var ArrayBufferViewCore = __w_pdfjs_require__(94); +var isBigIntArray = __w_pdfjs_require__(111); +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var toBigInt = __w_pdfjs_require__(112); +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; +var PROPER_ORDER = !!(function () { + try { + new Int8Array(1)['with'](2, { + valueOf: function () { + throw 8; + } + }); + } catch (error) { + return error === 8; + } +}()); +exportTypedArrayMethod('with', { + 'with': function (index, value) { + var O = aTypedArray(this); + var relativeIndex = toIntegerOrInfinity(index); + var actualValue = isBigIntArray(O) ? toBigInt(value) : +value; + return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue); + } +}['with'], !PROPER_ORDER); + +/***/ }), +/* 110 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var lengthOfArrayLike = __w_pdfjs_require__(64); +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var $RangeError = RangeError; +module.exports = function (O, C, index, value) { + var len = lengthOfArrayLike(O); + var relativeIndex = toIntegerOrInfinity(index); + var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex; + if (actualIndex >= len || actualIndex < 0) + throw $RangeError('Incorrect index'); + var A = new C(len); + var k = 0; + for (; k < len; k++) + A[k] = k === actualIndex ? value : O[k]; + return A; +}; + +/***/ }), +/* 111 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classof = __w_pdfjs_require__(78); +module.exports = function (it) { + var klass = classof(it); + return klass == 'BigInt64Array' || klass == 'BigUint64Array'; +}; + +/***/ }), +/* 112 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toPrimitive = __w_pdfjs_require__(19); +var $TypeError = TypeError; +module.exports = function (argument) { + var prim = toPrimitive(argument, 'number'); + if (typeof prim == 'number') + throw $TypeError("Can't convert number to bigint"); + return BigInt(prim); +}; + +/***/ }), +/* 113 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var DESCRIPTORS = __w_pdfjs_require__(6); +var defineBuiltInAccessor = __w_pdfjs_require__(88); +var isDetached = __w_pdfjs_require__(114); +var ArrayBufferPrototype = ArrayBuffer.prototype; +if (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) { + defineBuiltInAccessor(ArrayBufferPrototype, 'detached', { + configurable: true, + get: function detached() { + return isDetached(this); + } + }); +} + +/***/ }), +/* 114 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var arrayBufferByteLength = __w_pdfjs_require__(115); +var slice = uncurryThis(ArrayBuffer.prototype.slice); +module.exports = function (O) { + if (arrayBufferByteLength(O) !== 0) + return false; + try { + slice(O, 0, 0); + return false; + } catch (error) { + return true; + } +}; + +/***/ }), +/* 115 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThisAccessor = __w_pdfjs_require__(72); +var classof = __w_pdfjs_require__(15); +var $TypeError = TypeError; +module.exports = uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) { + if (classof(O) != 'ArrayBuffer') + throw $TypeError('ArrayBuffer expected'); + return O.byteLength; +}; + +/***/ }), +/* 116 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var $transfer = __w_pdfjs_require__(117); +if ($transfer) + $({ + target: 'ArrayBuffer', + proto: true + }, { + transfer: function transfer() { + return $transfer(this, arguments.length ? arguments[0] : undefined, true); + } + }); + +/***/ }), +/* 117 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var uncurryThis = __w_pdfjs_require__(14); +var uncurryThisAccessor = __w_pdfjs_require__(72); +var toIndex = __w_pdfjs_require__(118); +var isDetached = __w_pdfjs_require__(114); +var arrayBufferByteLength = __w_pdfjs_require__(115); +var PROPER_TRANSFER = __w_pdfjs_require__(119); +var TypeError = global.TypeError; +var structuredClone = global.structuredClone; +var ArrayBuffer = global.ArrayBuffer; +var DataView = global.DataView; +var min = Math.min; +var ArrayBufferPrototype = ArrayBuffer.prototype; +var DataViewPrototype = DataView.prototype; +var slice = uncurryThis(ArrayBufferPrototype.slice); +var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get'); +var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get'); +var getInt8 = uncurryThis(DataViewPrototype.getInt8); +var setInt8 = uncurryThis(DataViewPrototype.setInt8); +module.exports = PROPER_TRANSFER && function (arrayBuffer, newLength, preserveResizability) { + var byteLength = arrayBufferByteLength(arrayBuffer); + var newByteLength = newLength === undefined ? byteLength : toIndex(newLength); + var fixedLength = !isResizable || !isResizable(arrayBuffer); + if (isDetached(arrayBuffer)) + throw TypeError('ArrayBuffer is detached'); + var newBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); + if (byteLength == newByteLength && (preserveResizability || fixedLength)) + return newBuffer; + if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) + return slice(newBuffer, 0, newByteLength); + var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(newBuffer) } : undefined; + var newNewBuffer = new ArrayBuffer(newByteLength, options); + var a = new DataView(newBuffer); + var b = new DataView(newNewBuffer); + var copyLength = min(newByteLength, byteLength); + for (var i = 0; i < copyLength; i++) + setInt8(b, i, getInt8(a, i)); + return newNewBuffer; +}; + +/***/ }), +/* 118 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var toLength = __w_pdfjs_require__(65); +var $RangeError = RangeError; +module.exports = function (it) { + if (it === undefined) + return 0; + var number = toIntegerOrInfinity(it); + var length = toLength(number); + if (number !== length) + throw $RangeError('Wrong length or index'); + return length; +}; + +/***/ }), +/* 119 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var global = __w_pdfjs_require__(4); +var fails = __w_pdfjs_require__(7); +var V8 = __w_pdfjs_require__(28); +var IS_BROWSER = __w_pdfjs_require__(120); +var IS_DENO = __w_pdfjs_require__(121); +var IS_NODE = __w_pdfjs_require__(122); +var structuredClone = global.structuredClone; +module.exports = !!structuredClone && !fails(function () { + if (IS_DENO && V8 > 92 || IS_NODE && V8 > 94 || IS_BROWSER && V8 > 97) + return false; + var buffer = new ArrayBuffer(8); + var clone = structuredClone(buffer, { transfer: [buffer] }); + return buffer.byteLength != 0 || clone.byteLength != 8; +}); + +/***/ }), +/* 120 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var IS_DENO = __w_pdfjs_require__(121); +var IS_NODE = __w_pdfjs_require__(122); +module.exports = !IS_DENO && !IS_NODE && typeof window == 'object' && typeof document == 'object'; + +/***/ }), +/* 121 */ +/***/ ((module) => { + +module.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object'; + +/***/ }), +/* 122 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classof = __w_pdfjs_require__(15); +module.exports = typeof process != 'undefined' && classof(process) == 'process'; + +/***/ }), +/* 123 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var $transfer = __w_pdfjs_require__(117); +if ($transfer) + $({ + target: 'ArrayBuffer', + proto: true + }, { + transferToFixedLength: function transferToFixedLength() { + return $transfer(this, arguments.length ? arguments[0] : undefined, false); + } + }); + +/***/ }), +/* 124 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; +Object.defineProperty(exports, "SVGGraphics", ({ + enumerable: true, + get: function () { + return _displaySvg.SVGGraphics; + } +})); +exports.build = void 0; exports.getDocument = getDocument; -exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; -exports.version = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCMapReaderFactory = exports.DefaultCanvasFactory = exports.build = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -var _font_loader = __w_pdfjs_require__(7); - -var _node_utils = __w_pdfjs_require__(8); - -var _annotation_storage = __w_pdfjs_require__(9); - -var _canvas = __w_pdfjs_require__(10); - -var _worker_options = __w_pdfjs_require__(12); - -var _is_node = __w_pdfjs_require__(4); - -var _message_handler = __w_pdfjs_require__(13); - -var _metadata = __w_pdfjs_require__(14); - -var _optional_content_config = __w_pdfjs_require__(15); - -var _transport_stream = __w_pdfjs_require__(16); - +exports.version = void 0; +__w_pdfjs_require__(84); +__w_pdfjs_require__(86); +__w_pdfjs_require__(87); +__w_pdfjs_require__(2); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(89); +__w_pdfjs_require__(125); +__w_pdfjs_require__(135); +__w_pdfjs_require__(137); +__w_pdfjs_require__(140); +__w_pdfjs_require__(142); +__w_pdfjs_require__(144); +__w_pdfjs_require__(146); +__w_pdfjs_require__(148); +__w_pdfjs_require__(151); +var _util = __w_pdfjs_require__(1); +var _annotation_storage = __w_pdfjs_require__(162); +var _display_utils = __w_pdfjs_require__(167); +var _font_loader = __w_pdfjs_require__(170); +var _displayNode_utils = __w_pdfjs_require__(171); +var _canvas = __w_pdfjs_require__(172); +var _worker_options = __w_pdfjs_require__(175); +var _message_handler = __w_pdfjs_require__(176); +var _metadata = __w_pdfjs_require__(177); +var _optional_content_config = __w_pdfjs_require__(178); +var _transport_stream = __w_pdfjs_require__(179); +var _displayFetch_stream = __w_pdfjs_require__(180); +var _displayNetwork = __w_pdfjs_require__(183); +var _displayNode_stream = __w_pdfjs_require__(184); +var _displaySvg = __w_pdfjs_require__(185); +var _xfa_text = __w_pdfjs_require__(193); const DEFAULT_RANGE_CHUNK_SIZE = 65536; const RENDERING_CANCELLED_TIMEOUT = 100; -const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; +const DELAYED_CLEANUP_TIMEOUT = 5000; +const DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; exports.DefaultCanvasFactory = DefaultCanvasFactory; -const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; +const DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; -const DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; +const DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory; +exports.DefaultFilterFactory = DefaultFilterFactory; +const DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; -let createPDFNetworkStream; - -function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { - createPDFNetworkStream = pdfNetworkStreamFactory; -} - function getDocument(src) { - const task = new PDFDocumentLoadingTask(); - let source; - if (typeof src === "string" || src instanceof URL) { - source = { + src = { url: src }; } else if ((0, _util.isArrayBuffer)(src)) { - source = { + src = { data: src }; - } else if (src instanceof PDFDataRangeTransport) { - source = { - range: src - }; - } else { - if (typeof src !== "object") { - throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object."); - } - - if (!src.url && !src.data && !src.range) { - throw new Error("Invalid parameter object: need either .data, .range or .url"); - } - - source = src; } - - const params = Object.create(null); - let rangeTransport = null, - worker = null; - - for (const key in source) { - const value = source[key]; - - switch (key) { - case "url": - if (typeof window !== "undefined") { - try { - params[key] = new URL(value, window.location).href; - continue; - } catch (ex) { - (0, _util.warn)(`Cannot create valid URL: "${ex}".`); - } - } else if (typeof value === "string" || value instanceof URL) { - params[key] = value.toString(); - continue; - } - - throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); - - case "range": - rangeTransport = value; - continue; - - case "worker": - worker = value; - continue; - - case "data": - if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) { - params[key] = new Uint8Array(value); - } else if (value instanceof Uint8Array) { - break; - } else if (typeof value === "string") { - params[key] = (0, _util.stringToBytes)(value); - } else if (typeof value === "object" && value !== null && !isNaN(value.length)) { - params[key] = new Uint8Array(value); - } else if ((0, _util.isArrayBuffer)(value)) { - params[key] = new Uint8Array(value); - } else { - throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property."); - } - - continue; - } - - params[key] = value; + if (typeof src !== "object") { + throw new Error("Invalid parameter in getDocument, need parameter object."); } - - params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; - params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; - params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory; - params.ignoreErrors = params.stopAtErrors !== true; - params.fontExtraProperties = params.fontExtraProperties === true; - params.pdfBug = params.pdfBug === true; - params.enableXfa = params.enableXfa === true; - - if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) { - params.docBaseUrl = null; + if (!src.url && !src.data && !src.range) { + throw new Error("Invalid parameter object: need either .data, .range or .url"); } - - if (!Number.isInteger(params.maxImageSize)) { - params.maxImageSize = -1; + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = src.password ?? null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !(0, _display_utils.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; + const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; + const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_util.isNodeJS; + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _util.isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_util.isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === _display_utils.DOMCMapReaderFactory && StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && (0, _display_utils.isValidFetchUrl)(cMapUrl, document.baseURI) && (0, _display_utils.isValidFetchUrl)(standardFontDataUrl, document.baseURI); + const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ + ownerDocument + }); + const filterFactory = src.filterFactory || new DefaultFilterFactory({ + docId, + ownerDocument + }); + const styleElement = null; + (0, _util.setVerbosityLevel)(verbosity); + const transportFactory = { + canvasFactory, + filterFactory + }; + if (!useWorkerFetch) { + transportFactory.cMapReaderFactory = new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }); + transportFactory.standardFontDataFactory = new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }); } - - if (typeof params.useWorkerFetch !== "boolean") { - params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory; - } - - if (typeof params.isEvalSupported !== "boolean") { - params.isEvalSupported = true; - } - - if (typeof params.disableFontFace !== "boolean") { - params.disableFontFace = _is_node.isNodeJS; - } - - if (typeof params.useSystemFonts !== "boolean") { - params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace; - } - - if (typeof params.ownerDocument === "undefined") { - params.ownerDocument = globalThis.document; - } - - if (typeof params.disableRange !== "boolean") { - params.disableRange = false; - } - - if (typeof params.disableStream !== "boolean") { - params.disableStream = false; - } - - if (typeof params.disableAutoFetch !== "boolean") { - params.disableAutoFetch = false; - } - - (0, _util.setVerbosityLevel)(params.verbosity); - if (!worker) { const workerParams = { - verbosity: params.verbosity, + verbosity, port: _worker_options.GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } - - const docId = task.docId; + const fetchDocParams = { + docId, + apiVersion: '3.9.179', + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported, + isOffscreenCanvasSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + cMapUrl: useWorkerFetch ? cMapUrl : null, + standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null + } + }; + const transportParams = { + ignoreErrors, + isEvalSupported, + disableFontFace, + fontExtraProperties, + enableXfa, + ownerDocument, + disableAutoFetch, + pdfBug, + styleElement + }; worker.promise.then(function () { if (task.destroyed) { throw new Error("Loading aborted"); } - - const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); - + const workerIdPromise = _fetchDocument(worker, fetchDocParams); const networkStreamPromise = new Promise(function (resolve) { let networkStream; - if (rangeTransport) { networkStream = new _transport_stream.PDFDataTransportStream({ - length: params.length, - initialData: params.initialData, - progressiveDone: params.progressiveDone, - contentDispositionFilename: params.contentDispositionFilename, - disableRange: params.disableRange, - disableStream: params.disableStream + length, + initialData: rangeTransport.initialData, + progressiveDone: rangeTransport.progressiveDone, + contentDispositionFilename: rangeTransport.contentDispositionFilename, + disableRange, + disableStream }, rangeTransport); - } else if (!params.data) { + } else if (!data) { + const createPDFNetworkStream = params => { + if (_util.isNodeJS) { + return new _displayNode_stream.PDFNodeStream(params); + } + return (0, _display_utils.isValidFetchUrl)(params.url) ? new _displayFetch_stream.PDFFetchStream(params) : new _displayNetwork.PDFNetworkStream(params); + }; networkStream = createPDFNetworkStream({ - url: params.url, - length: params.length, - httpHeaders: params.httpHeaders, - withCredentials: params.withCredentials, - rangeChunkSize: params.rangeChunkSize, - disableRange: params.disableRange, - disableStream: params.disableStream + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream }); } - resolve(networkStream); }); - return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { + return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) { + let [workerId, networkStream] = _ref; if (task.destroyed) { throw new Error("Loading aborted"); } - const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); - messageHandler.postMessageTransfers = worker.postMessageTransfers; - const transport = new WorkerTransport(messageHandler, task, networkStream, params); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); task._transport = transport; messageHandler.send("Ready", null); }); }).catch(task._capability.reject); return task; } - -function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { +async function _fetchDocument(worker, source) { if (worker.destroyed) { - return Promise.reject(new Error("Worker was destroyed")); + throw new Error("Worker was destroyed"); } - - if (pdfDataRangeTransport) { - source.length = pdfDataRangeTransport.length; - source.initialData = pdfDataRangeTransport.initialData; - source.progressiveDone = pdfDataRangeTransport.progressiveDone; - source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; + const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); + if (worker.destroyed) { + throw new Error("Worker was destroyed"); } - - return worker.messageHandler.sendWithPromise("GetDocRequest", { - docId, - apiVersion: '2.10.377', - source: { - data: source.data, - url: source.url, - password: source.password, - disableAutoFetch: source.disableAutoFetch, - rangeChunkSize: source.rangeChunkSize, - length: source.length - }, - maxImageSize: source.maxImageSize, - disableFontFace: source.disableFontFace, - postMessageTransfers: worker.postMessageTransfers, - docBaseUrl: source.docBaseUrl, - ignoreErrors: source.ignoreErrors, - isEvalSupported: source.isEvalSupported, - fontExtraProperties: source.fontExtraProperties, - enableXfa: source.enableXfa, - useSystemFonts: source.useSystemFonts, - cMapUrl: source.useWorkerFetch ? source.cMapUrl : null, - standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null - }).then(function (workerId) { - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - - return workerId; - }); + return workerId; } - -const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { - let nextDocumentId = 0; - - class PDFDocumentLoadingTask { - constructor() { - this._capability = (0, _util.createPromiseCapability)(); - this._transport = null; - this._worker = null; - this.docId = "d" + nextDocumentId++; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - this.onUnsupportedFeature = null; - } - - get promise() { - return this._capability.promise; - } - - destroy() { - this.destroyed = true; - const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); - return transportDestroyed.then(() => { - this._transport = null; - - if (this._worker) { - this._worker.destroy(); - - this._worker = null; - } - }); - } - +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; } - - return PDFDocumentLoadingTask; -}(); - + try { + return new URL(val, window.location).href; + } catch { + if (_util.isNodeJS && typeof val === "string") { + return val; + } + } + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (_util.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return (0, _util.stringToBytes)(val); + } + if (typeof val === "object" && !isNaN(val?.length) || (0, _util.isArrayBuffer)(val)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); +} +class PDFDocumentLoadingTask { + static #docId = 0; + constructor() { + this._capability = new _util.PromiseCapability(); + this._transport = null; + this._worker = null; + this.docId = `d${PDFDocumentLoadingTask.#docId++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + } + get promise() { + return this._capability.promise; + } + async destroy() { + this.destroyed = true; + await this._transport?.destroy(); + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + } +} +exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; class PDFDataRangeTransport { - constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + constructor(length, initialData) { + let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; @@ -1977,31 +3582,25 @@ class PDFDataRangeTransport { this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; - this._readyCapability = (0, _util.createPromiseCapability)(); + this._readyCapability = new _util.PromiseCapability(); } - addRangeListener(listener) { this._rangeListeners.push(listener); } - addProgressListener(listener) { this._progressListeners.push(listener); } - addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } - addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } - onDataRange(begin, chunk) { for (const listener of this._rangeListeners) { listener(begin, chunk); } } - onDataProgress(loaded, total) { this._readyCapability.promise.then(() => { for (const listener of this._progressListeners) { @@ -2009,7 +3608,6 @@ class PDFDataRangeTransport { } }); } - onDataProgressiveRead(chunk) { this._readyCapability.promise.then(() => { for (const listener of this._progressiveReadListeners) { @@ -2017,7 +3615,6 @@ class PDFDataRangeTransport { } }); } - onDataProgressiveDone() { this._readyCapability.promise.then(() => { for (const listener of this._progressiveDoneListeners) { @@ -2025,217 +3622,161 @@ class PDFDataRangeTransport { } }); } - transportReady() { this._readyCapability.resolve(); } - requestDataRange(begin, end) { (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); } - abort() {} - } - exports.PDFDataRangeTransport = PDFDataRangeTransport; - class PDFDocumentProxy { constructor(pdfInfo, transport) { this._pdfInfo = pdfInfo; this._transport = transport; - Object.defineProperty(this, "fingerprint", { - get() { - (0, _display_utils.deprecated)("`PDFDocumentProxy.fingerprint`, " + "please use `PDFDocumentProxy.fingerprints` instead."); - return this.fingerprints[0]; - } - - }); } - get annotationStorage() { return this._transport.annotationStorage; } - + get filterFactory() { + return this._transport.filterFactory; + } get numPages() { return this._pdfInfo.numPages; } - get fingerprints() { return this._pdfInfo.fingerprints; } - get isPureXfa() { - return !!this._transport._htmlForXfa; + return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); } - get allXfaHtml() { return this._transport._htmlForXfa; } - getPage(pageNumber) { return this._transport.getPage(pageNumber); } - getPageIndex(ref) { return this._transport.getPageIndex(ref); } - getDestinations() { return this._transport.getDestinations(); } - getDestination(id) { return this._transport.getDestination(id); } - getPageLabels() { return this._transport.getPageLabels(); } - getPageLayout() { return this._transport.getPageLayout(); } - getPageMode() { return this._transport.getPageMode(); } - getViewerPreferences() { return this._transport.getViewerPreferences(); } - getOpenAction() { return this._transport.getOpenAction(); } - getAttachments() { return this._transport.getAttachments(); } - getJavaScript() { return this._transport.getJavaScript(); } - getJSActions() { return this._transport.getDocJSActions(); } - getOutline() { return this._transport.getOutline(); } - getOptionalContentConfig() { return this._transport.getOptionalContentConfig(); } - getPermissions() { return this._transport.getPermissions(); } - getMetadata() { return this._transport.getMetadata(); } - getMarkInfo() { return this._transport.getMarkInfo(); } - getData() { return this._transport.getData(); } - + saveDocument() { + return this._transport.saveDocument(); + } getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } - - getStats() { - return this._transport.getStats(); - } - - cleanup(keepLoadedFonts = false) { + cleanup() { + let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); } - destroy() { return this.loadingTask.destroy(); } - get loadingParams() { return this._transport.loadingParams; } - get loadingTask() { return this._transport.loadingTask; } - - saveDocument() { - if (this._transport.annotationStorage.size <= 0) { - (0, _display_utils.deprecated)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); - } - - return this._transport.saveDocument(); - } - getFieldObjects() { return this._transport.getFieldObjects(); } - hasJSActions() { return this._transport.hasJSActions(); } - getCalculationOrderIds() { return this._transport.getCalculationOrderIds(); } - } - exports.PDFDocumentProxy = PDFDocumentProxy; - class PDFPageProxy { - constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { + #delayedCleanupTimeout = null; + #pendingCleanup = false; + constructor(pageIndex, pageInfo, transport) { + let pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; this._pageIndex = pageIndex; this._pageInfo = pageInfo; - this._ownerDocument = ownerDocument; this._transport = transport; this._stats = pdfBug ? new _display_utils.StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); - this.cleanupAfterRender = false; - this.pendingCleanup = false; + this._maybeCleanupAfterRender = false; this._intentStates = new Map(); this.destroyed = false; } - get pageNumber() { return this._pageIndex + 1; } - get rotate() { return this._pageInfo.rotate; } - get ref() { return this._pageInfo.ref; } - get userUnit() { return this._pageInfo.userUnit; } - get view() { return this._pageInfo.view; } - - getViewport({ - scale, - rotation = this.rotate, - offsetX = 0, - offsetY = 0, - dontFlip = false - } = {}) { + getViewport() { + let { + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return new _display_utils.PageViewport({ viewBox: this.view, scale, @@ -2245,147 +3786,112 @@ class PDFPageProxy { dontFlip }); } - - getAnnotations({ - intent = null - } = {}) { - const renderingIntent = intent === "display" || intent === "print" ? intent : null; - - if (!this._annotationsPromise || this._annotationsIntent !== renderingIntent) { - this._annotationsPromise = this._transport.getAnnotations(this._pageIndex, renderingIntent); - this._annotationsIntent = renderingIntent; - } - - return this._annotationsPromise; + getAnnotations() { + let { + intent = "display" + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + const intentArgs = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); } - getJSActions() { - return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex)); + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); } - async getXfa() { return this._transport._htmlForXfa?.children[this._pageIndex] || null; } - - render({ - canvasContext, - viewport, - intent = "display", - renderInteractiveForms = false, - transform = null, - imageLayer = null, - canvasFactory = null, - background = null, - includeAnnotationStorage = false, - optionalContentConfigPromise = null - }) { - var _intentState; - - if (this._stats) { - this._stats.time("Overall"); - } - - const renderingIntent = intent === "print" ? "print" : "display"; - this.pendingCleanup = false; - + render(_ref2) { + let { + canvasContext, + viewport, + intent = "display", + annotationMode = _util.AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null + } = _ref2; + this._stats?.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); if (!optionalContentConfigPromise) { optionalContentConfigPromise = this._transport.getOptionalContentConfig(); } - - let intentState = this._intentStates.get(renderingIntent); - + let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = Object.create(null); - - this._intentStates.set(renderingIntent, intentState); + this._intentStates.set(intentArgs.cacheKey, intentState); } - if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } - - const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ - ownerDocument: this._ownerDocument - }); - const annotationStorage = includeAnnotationStorage ? this._transport.annotationStorage.serializable : null; - + const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); if (!intentState.displayReadyCapability) { - intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); + intentState.displayReadyCapability = new _util.PromiseCapability(); intentState.operatorList = { fnArray: [], argsArray: [], - lastChunk: false + lastChunk: false, + separateAnnots: null }; - - if (this._stats) { - this._stats.time("Page Request"); - } - - this._pumpOperatorList({ - pageIndex: this._pageIndex, - intent: renderingIntent, - renderInteractiveForms: renderInteractiveForms === true, - annotationStorage - }); + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); } - const complete = error => { intentState.renderTasks.delete(internalRenderTask); - - if (this.cleanupAfterRender || renderingIntent === "print") { - this.pendingCleanup = true; + if (this._maybeCleanupAfterRender || intentPrint) { + this.#pendingCleanup = true; } - - this._tryCleanup(); - + this.#tryCleanup(!intentPrint); if (error) { internalRenderTask.capability.reject(error); - this._abortOperatorList({ intentState, - reason: error + reason: error instanceof Error ? error : new Error(error) }); } else { internalRenderTask.capability.resolve(); } - - if (this._stats) { - this._stats.timeEnd("Rendering"); - - this._stats.timeEnd("Overall"); - } + this._stats?.timeEnd("Rendering"); + this._stats?.timeEnd("Overall"); }; - const internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext, viewport, transform, - imageLayer, background }, objs: this.objs, commonObjs: this.commonObjs, + annotationCanvasMap, operatorList: intentState.operatorList, pageIndex: this._pageIndex, - canvasFactory: canvasFactoryInstance, - useRequestAnimationFrame: renderingIntent !== "print", - pdfBug: this._pdfBug + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors }); - ((_intentState = intentState).renderTasks || (_intentState.renderTasks = new Set())).add(internalRenderTask); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); const renderTask = internalRenderTask.task; - Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { - if (this.pendingCleanup) { + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(_ref3 => { + let [transparency, optionalContentConfig] = _ref3; + if (this.destroyed) { complete(); return; } - - if (this._stats) { - this._stats.time("Rendering"); - } - + this._stats?.time("Rendering"); internalRenderTask.initializeGraphics({ transparency, optionalContentConfig @@ -2394,95 +3900,82 @@ class PDFPageProxy { }).catch(complete); return renderTask; } - - getOperatorList({ - intent = "display" - } = {}) { + getOperatorList() { + let { + intent = "display", + annotationMode = _util.AnnotationMode.ENABLE, + printAnnotationStorage = null + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); intentState.renderTasks.delete(opListTask); } } - - const renderingIntent = `oplist-${intent === "print" ? "print" : "display"}`; - - let intentState = this._intentStates.get(renderingIntent); - + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = Object.create(null); - - this._intentStates.set(renderingIntent, intentState); + this._intentStates.set(intentArgs.cacheKey, intentState); } - let opListTask; - if (!intentState.opListReadCapability) { - var _intentState2; - opListTask = Object.create(null); opListTask.operatorListChanged = operatorListChanged; - intentState.opListReadCapability = (0, _util.createPromiseCapability)(); - ((_intentState2 = intentState).renderTasks || (_intentState2.renderTasks = new Set())).add(opListTask); + intentState.opListReadCapability = new _util.PromiseCapability(); + (intentState.renderTasks ||= new Set()).add(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], - lastChunk: false + lastChunk: false, + separateAnnots: null }; - - if (this._stats) { - this._stats.time("Page Request"); - } - - this._pumpOperatorList({ - pageIndex: this._pageIndex, - intent: renderingIntent - }); + this._stats?.time("Page Request"); + this._pumpOperatorList(intentArgs); } - return intentState.opListReadCapability.promise; } - - streamTextContent({ - normalizeWhitespace = false, - disableCombineTextItems = false, - includeMarkedContent = false - } = {}) { + streamTextContent() { + let { + includeMarkedContent = false, + disableNormalization = false + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, - normalizeWhitespace: normalizeWhitespace === true, - combineTextItems: disableCombineTextItems !== true, - includeMarkedContent: includeMarkedContent === true + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, - size(textContent) { return textContent.items.length; } - }); } - - getTextContent(params = {}) { + getTextContent() { + let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => { + return _xfa_text.XfaText.textContent(xfa); + }); + } const readableStream = this.streamTextContent(params); return new Promise(function (resolve, reject) { function pump() { - reader.read().then(function ({ - value, - done - }) { + reader.read().then(function (_ref4) { + let { + value, + done + } = _ref4; if (done) { resolve(textContent); return; } - Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); } - const reader = readableStream.getReader(); const textContent = { items: [], @@ -2491,51 +3984,53 @@ class PDFPageProxy { pump(); }); } - getStructTree() { - return this._structTreePromise || (this._structTreePromise = this._transport.getStructTree(this._pageIndex)); + return this._transport.getStructTree(this._pageIndex); } - _destroy() { this.destroyed = true; - this._transport.pageCache[this._pageIndex] = null; const waitOn = []; - - for (const [intent, intentState] of this._intentStates) { + for (const intentState of this._intentStates.values()) { this._abortOperatorList({ intentState, reason: new Error("Page was destroyed."), force: true }); - - if (intent.startsWith("oplist-")) { + if (intentState.opListReadCapability) { continue; } - for (const internalRenderTask of intentState.renderTasks) { waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } - this.objs.clear(); - this._annotationsPromise = null; - this._jsActionsPromise = null; - this._structTreePromise = null; - this.pendingCleanup = false; + this.#pendingCleanup = false; + this.#abortDelayedCleanup(); return Promise.all(waitOn); } - - cleanup(resetStats = false) { - this.pendingCleanup = true; - return this._tryCleanup(resetStats); + cleanup() { + let resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + this.#pendingCleanup = true; + const success = this.#tryCleanup(false); + if (resetStats && success) { + this._stats &&= new _display_utils.StatTimer(); + } + return success; } - - _tryCleanup(resetStats = false) { - if (!this.pendingCleanup) { + #tryCleanup() { + let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + this.#abortDelayedCleanup(); + if (!this.#pendingCleanup || this.destroyed) { + return false; + } + if (delayed) { + this.#delayedCleanupTimeout = setTimeout(() => { + this.#delayedCleanupTimeout = null; + this.#tryCleanup(false); + }, DELAYED_CLEANUP_TIMEOUT); return false; } - for (const { renderTasks, operatorList @@ -2544,100 +4039,85 @@ class PDFPageProxy { return false; } } - this._intentStates.clear(); - this.objs.clear(); - this._annotationsPromise = null; - this._jsActionsPromise = null; - this._structTreePromise = null; - - if (resetStats && this._stats) { - this._stats = new _display_utils.StatTimer(); - } - - this.pendingCleanup = false; + this.#pendingCleanup = false; return true; } - - _startRenderPage(transparency, intent) { - const intentState = this._intentStates.get(intent); - + #abortDelayedCleanup() { + if (this.#delayedCleanupTimeout) { + clearTimeout(this.#delayedCleanupTimeout); + this.#delayedCleanupTimeout = null; + } + } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey); if (!intentState) { return; } - - if (this._stats) { - this._stats.timeEnd("Page Request"); - } - - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.resolve(transparency); - } + this._stats?.timeEnd("Page Request"); + intentState.displayReadyCapability?.resolve(transparency); } - _renderPageChunk(operatorListChunk, intentState) { for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } - intentState.operatorList.lastChunk = operatorListChunk.lastChunk; - + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } - if (operatorListChunk.lastChunk) { - this._tryCleanup(); + this.#tryCleanup(true); } } - - _pumpOperatorList(args) { - (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.'); - - const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args); - + _pumpOperatorList(_ref5) { + let { + renderingIntent, + cacheKey, + annotationStorageSerializable + } = _ref5; + const { + map, + transfers + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map + }, transfers); const reader = readableStream.getReader(); - - const intentState = this._intentStates.get(args.intent); - + const intentState = this._intentStates.get(cacheKey); intentState.streamReader = reader; - const pump = () => { - reader.read().then(({ - value, - done - }) => { + reader.read().then(_ref6 => { + let { + value, + done + } = _ref6; if (done) { intentState.streamReader = null; return; } - if (this._transport.destroyed) { return; } - this._renderPageChunk(value, intentState); - pump(); }, reason => { intentState.streamReader = null; - if (this._transport.destroyed) { return; } - if (intentState.operatorList) { intentState.operatorList.lastChunk = true; - for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } - - this._tryCleanup(); + this.#tryCleanup(true); } - if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { @@ -2647,560 +4127,431 @@ class PDFPageProxy { } }); }; - pump(); } - - _abortOperatorList({ - intentState, - reason, - force = false - }) { - (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.'); - + _abortOperatorList(_ref7) { + let { + intentState, + reason, + force = false + } = _ref7; if (!intentState.streamReader) { return; } - + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } if (!force) { if (intentState.renderTasks.size > 0) { return; } - if (reason instanceof _display_utils.RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1000) { + delay += reason.extraDelay; + } intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; this._abortOperatorList({ intentState, reason, force: true }); - - intentState.streamReaderCancelTimeout = null; - }, RENDERING_CANCELLED_TIMEOUT); + }, delay); return; } } - - intentState.streamReader.cancel(new _util.AbortException(reason?.message)); + intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); intentState.streamReader = null; - if (this._transport.destroyed) { return; } - - for (const [intent, curIntentState] of this._intentStates) { + for (const [curCacheKey, curIntentState] of this._intentStates) { if (curIntentState === intentState) { - this._intentStates.delete(intent); - + this._intentStates.delete(curCacheKey); break; } } - this.cleanup(); } - get stats() { return this._stats; } - } - exports.PDFPageProxy = PDFPageProxy; - class LoopbackPort { - constructor() { - this._listeners = []; - this._deferred = Promise.resolve(undefined); - } - - postMessage(obj, transfers) { - function cloneValue(value) { - if (typeof value === "function" || typeof value === "symbol" || value instanceof URL) { - throw new Error(`LoopbackPort.postMessage - cannot clone: ${value?.toString()}`); - } - - if (typeof value !== "object" || value === null) { - return value; - } - - if (cloned.has(value)) { - return cloned.get(value); - } - - let buffer, result; - - if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { - if (transfers?.includes(buffer)) { - result = new value.constructor(buffer, value.byteOffset, value.byteLength); - } else { - result = new value.constructor(value); - } - - cloned.set(value, result); - return result; - } - - if (value instanceof Map) { - result = new Map(); - cloned.set(value, result); - - for (const [key, val] of value) { - result.set(key, cloneValue(val)); - } - - return result; - } - - if (value instanceof Set) { - result = new Set(); - cloned.set(value, result); - - for (const val of value) { - result.add(cloneValue(val)); - } - - return result; - } - - result = Array.isArray(value) ? [] : Object.create(null); - cloned.set(value, result); - - for (const i in value) { - let desc, - p = value; - - while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { - p = Object.getPrototypeOf(p); - } - - if (typeof desc.value === "undefined") { - continue; - } - - if (typeof desc.value === "function" && !value.hasOwnProperty?.(i)) { - continue; - } - - result[i] = cloneValue(desc.value); - } - - return result; - } - - const cloned = new WeakMap(); + #listeners = new Set(); + #deferred = Promise.resolve(); + postMessage(obj, transfer) { const event = { - data: cloneValue(obj) + data: structuredClone(obj, null) }; - - this._deferred.then(() => { - for (const listener of this._listeners) { + this.#deferred.then(() => { + for (const listener of this.#listeners) { listener.call(this, event); } }); } - addEventListener(name, listener) { - this._listeners.push(listener); + this.#listeners.add(listener); } - removeEventListener(name, listener) { - const i = this._listeners.indexOf(listener); - - this._listeners.splice(i, 1); + this.#listeners.delete(listener); } - terminate() { - this._listeners.length = 0; + this.#listeners.clear(); } - } - exports.LoopbackPort = LoopbackPort; - -const PDFWorker = function PDFWorkerClosure() { - const pdfWorkerPorts = new WeakMap(); - let isWorkerDisabled = false; - let fallbackWorkerSrc; - let nextFakeWorkerId = 0; - let fakeWorkerCapability; - - if (_is_node.isNodeJS && typeof require === "function") { - isWorkerDisabled = true; - fallbackWorkerSrc = "./pdf.worker.js"; - } else if (typeof document === "object" && "currentScript" in document) { - const pdfjsFilePath = document.currentScript?.src; - +const PDFWorkerUtil = { + isWorkerDisabled: false, + fallbackWorkerSrc: null, + fakeWorkerId: 0 +}; +exports.PDFWorkerUtil = PDFWorkerUtil; +{ + if (_util.isNodeJS && typeof require === "function") { + PDFWorkerUtil.isWorkerDisabled = true; + PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js"; + } else if (typeof document === "object") { + const pdfjsFilePath = document?.currentScript?.src; if (pdfjsFilePath) { - fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); + PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); } } - - function getWorkerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - - if (typeof fallbackWorkerSrc !== "undefined") { - if (!_is_node.isNodeJS) { - (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - return fallbackWorkerSrc; - } - - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - function getMainThreadWorkerMessageHandler() { - let mainWorkerMessageHandler; - + PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { + let base; try { - mainWorkerMessageHandler = globalThis.pdfjsWorker?.WorkerMessageHandler; - } catch (ex) {} - - return mainWorkerMessageHandler || null; - } - - function setupFakeWorkerGlobal() { - if (fakeWorkerCapability) { - return fakeWorkerCapability.promise; + base = new URL(baseUrl); + if (!base.origin || base.origin === "null") { + return false; + } + } catch { + return false; } - - fakeWorkerCapability = (0, _util.createPromiseCapability)(); - - const loader = async function () { - const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); - - if (mainWorkerMessageHandler) { - return mainWorkerMessageHandler; - } - - if (_is_node.isNodeJS && typeof require === "function") { - const worker = eval("require")(getWorkerSrc()); - return worker.WorkerMessageHandler; - } - - await (0, _display_utils.loadScript)(getWorkerSrc()); - return window.pdfjsWorker.WorkerMessageHandler; - }; - - loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject); - return fakeWorkerCapability.promise; - } - - function createCDNWrapper(url) { - const wrapper = "importScripts('" + url + "');"; + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + PDFWorkerUtil.createCDNWrapper = function (url) { + const wrapper = `importScripts("${url}");`; return URL.createObjectURL(new Blob([wrapper])); - } - - class PDFWorker { - constructor({ + }; +} +class PDFWorker { + static #workerPorts = new WeakMap(); + constructor() { + let { name = null, port = null, verbosity = (0, _util.getVerbosityLevel)() - } = {}) { - if (port && pdfWorkerPorts.has(port)) { - throw new Error("Cannot use more than one PDFWorker per port"); - } - - this.name = name; - this.destroyed = false; - this.postMessageTransfers = true; - this.verbosity = verbosity; - this._readyCapability = (0, _util.createPromiseCapability)(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - - if (port) { - pdfWorkerPorts.set(port, this); - - this._initializeFromPort(port); - - return; - } - - this._initialize(); + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (port && PDFWorker.#workerPorts.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); } - - get promise() { - return this._readyCapability.promise; + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = new _util.PromiseCapability(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + PDFWorker.#workerPorts.set(port, this); + this._initializeFromPort(port); + return; } - - get port() { - return this._port; - } - - get messageHandler() { - return this._messageHandler; - } - - _initializeFromPort(port) { - this._port = port; - this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); - - this._messageHandler.on("ready", function () {}); - - this._readyCapability.resolve(); - } - - _initialize() { - if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { - let workerSrc = getWorkerSrc(); - - try { - if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { - workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href); + this._initialize(); + } + get promise() { + return this._readyCapability.promise; + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function () {}); + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); + } + _initialize() { + if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { + let { + workerSrc + } = PDFWorker; + try { + if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { + workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc); + const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); + const terminateEarly = () => { + worker.removeEventListener("error", onWorkerError); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); } - - const worker = new Worker(workerSrc); - const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); - - const terminateEarly = () => { - worker.removeEventListener("error", onWorkerError); + }; + const onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + }; + worker.addEventListener("error", onWorkerError); + messageHandler.on("test", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + if (data) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + } else { + this._setupFakeWorker(); messageHandler.destroy(); worker.terminate(); - - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - } else { - this._setupFakeWorker(); - } - }; - - const onWorkerError = () => { - if (!this._webWorker) { - terminateEarly(); - } - }; - - worker.addEventListener("error", onWorkerError); - messageHandler.on("test", data => { - worker.removeEventListener("error", onWorkerError); - - if (this.destroyed) { - terminateEarly(); - return; - } - - if (data) { - this._messageHandler = messageHandler; - this._port = worker; - this._webWorker = worker; - - if (!data.supportTransfers) { - this.postMessageTransfers = false; - } - - this._readyCapability.resolve(); - - messageHandler.send("configure", { - verbosity: this.verbosity - }); - } else { - this._setupFakeWorker(); - - messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on("ready", data => { - worker.removeEventListener("error", onWorkerError); - - if (this.destroyed) { - terminateEarly(); - return; - } - - try { - sendTest(); - } catch (e) { - this._setupFakeWorker(); - } - }); - - const sendTest = () => { - const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]); - - try { - messageHandler.send("test", testObj, [testObj.buffer]); - } catch (ex) { - (0, _util.warn)("Cannot use postMessage transfers."); - testObj[0] = 0; - messageHandler.send("test", testObj); - } - }; - - sendTest(); - return; - } catch (e) { - (0, _util.info)("The worker has been disabled."); - } - } - - this._setupFakeWorker(); - } - - _setupFakeWorker() { - if (!isWorkerDisabled) { - (0, _util.warn)("Setting up fake worker."); - isWorkerDisabled = true; - } - - setupFakeWorkerGlobal().then(WorkerMessageHandler => { - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - - return; - } - - const port = new LoopbackPort(); - this._port = port; - const id = "fake" + nextFakeWorkerId++; - const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); - WorkerMessageHandler.setup(workerHandler, port); - const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); - this._messageHandler = messageHandler; - - this._readyCapability.resolve(); - - messageHandler.send("configure", { - verbosity: this.verbosity + } }); - }).catch(reason => { - this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); - }); - } - - destroy() { - this.destroyed = true; - - if (this._webWorker) { - this._webWorker.terminate(); - - this._webWorker = null; - } - - pdfWorkerPorts.delete(this._port); - this._port = null; - - if (this._messageHandler) { - this._messageHandler.destroy(); - - this._messageHandler = null; + messageHandler.on("ready", data => { + worker.removeEventListener("error", onWorkerError); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch { + (0, _util.info)("The worker has been disabled."); } } - - static fromPort(params) { - if (!params || !params.port) { - throw new Error("PDFWorker.fromPort - invalid method signature."); - } - - if (pdfWorkerPorts.has(params.port)) { - return pdfWorkerPorts.get(params.port); - } - - return new PDFWorker(params); - } - - static getWorkerSrc() { - return getWorkerSrc(); - } - + this._setupFakeWorker(); } - - return PDFWorker; -}(); - + _setupFakeWorker() { + if (!PDFWorkerUtil.isWorkerDisabled) { + (0, _util.warn)("Setting up fake worker."); + PDFWorkerUtil.isWorkerDisabled = true; + } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; + const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); + this._messageHandler = messageHandler; + this._readyCapability.resolve(); + messageHandler.send("configure", { + verbosity: this.verbosity + }); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + PDFWorker.#workerPorts.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + if (this.#workerPorts.has(params.port)) { + return this.#workerPorts.get(params.port); + } + return new PDFWorker(params); + } + static get workerSrc() { + if (_worker_options.GlobalWorkerOptions.workerSrc) { + return _worker_options.GlobalWorkerOptions.workerSrc; + } + if (PDFWorkerUtil.fallbackWorkerSrc !== null) { + if (!_util.isNodeJS) { + (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); + } + return PDFWorkerUtil.fallbackWorkerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get _mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch { + return null; + } + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; + if (mainWorkerMessageHandler) { + return mainWorkerMessageHandler; + } + if (_util.isNodeJS && typeof require === "function") { + const worker = eval("require")(this.workerSrc); + return worker.WorkerMessageHandler; + } + await (0, _display_utils.loadScript)(this.workerSrc); + return window.pdfjsWorker.WorkerMessageHandler; + }; + return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); + } +} exports.PDFWorker = PDFWorker; - class WorkerTransport { - constructor(messageHandler, loadingTask, networkStream, params) { + #methodPromises = new Map(); + #pageCache = new Map(); + #pagePromises = new Map(); + #passwordCapability = null; + constructor(messageHandler, loadingTask, networkStream, params, factory) { this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new _font_loader.FontLoader({ - docId: loadingTask.docId, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), ownerDocument: params.ownerDocument, styleElement: params.styleElement }); this._params = params; - - if (!params.useWorkerFetch) { - this.CMapReaderFactory = new params.CMapReaderFactory({ - baseUrl: params.cMapUrl, - isCompressed: params.cMapPacked - }); - this.StandardFontDataFactory = new params.StandardFontDataFactory({ - baseUrl: params.standardFontDataUrl - }); - } - + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; this.destroyed = false; this.destroyCapability = null; - this._passwordCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; - this.pageCache = []; - this.pagePromises = []; - this.downloadInfoCapability = (0, _util.createPromiseCapability)(); + this.downloadInfoCapability = new _util.PromiseCapability(); this.setupMessageHandler(); } - + #cacheSimpleMethod(name) { + let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + const cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + this.#methodPromises.set(name, promise); + return promise; + } get annotationStorage() { return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); } - + getRenderingIntent(intent) { + let annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util.AnnotationMode.ENABLE; + let printAnnotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + let isOpList = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + let renderingIntent = _util.RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = _annotation_storage.SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = _util.RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = _util.RenderingIntentFlag.PRINT; + break; + default: + (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); + } + switch (annotationMode) { + case _util.AnnotationMode.DISABLE: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case _util.AnnotationMode.ENABLE: + break; + case _util.AnnotationMode.ENABLE_FORMS: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case _util.AnnotationMode.ENABLE_STORAGE: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; + const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isOpList) { + renderingIntent += _util.RenderingIntentFlag.OPLIST; + } + return { + renderingIntent, + cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, + annotationStorageSerializable + }; + } destroy() { if (this.destroyCapability) { return this.destroyCapability.promise; } - this.destroyed = true; - this.destroyCapability = (0, _util.createPromiseCapability)(); - - if (this._passwordCapability) { - this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); - } - + this.destroyCapability = new _util.PromiseCapability(); + this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); const waitOn = []; - - for (const page of this.pageCache) { - if (page) { - waitOn.push(page._destroy()); - } + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); } - - this.pageCache.length = 0; - this.pagePromises.length = 0; - + this.#pageCache.clear(); + this.#pagePromises.clear(); if (this.hasOwnProperty("annotationStorage")) { this.annotationStorage.resetModified(); } - const terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); Promise.all(waitOn).then(() => { this.commonObjs.clear(); this.fontLoader.clear(); - this._hasJSActionsPromise = null; - + this.#methodPromises.clear(); + this.filterFactory.destroy(); if (this._networkStream) { this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); } - if (this.messageHandler) { this.messageHandler.destroy(); this.messageHandler = null; } - this.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } - setupMessageHandler() { const { messageHandler, @@ -3209,62 +4560,53 @@ class WorkerTransport { messageHandler.on("GetReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); this._fullReader = this._networkStream.getFullReader(); - this._fullReader.onProgress = evt => { this._lastProgress = { loaded: evt.loaded, total: evt.total }; }; - sink.onPull = () => { - this._fullReader.read().then(function ({ - value, - done - }) { + this._fullReader.read().then(function (_ref8) { + let { + value, + done + } = _ref8; if (done) { sink.close(); return; } - - (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); + (0, _util.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; - sink.onCancel = reason => { this._fullReader.cancel(reason); - sink.ready.catch(readyReason => { if (this.destroyed) { return; } - throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", data => { - const headersCapability = (0, _util.createPromiseCapability)(); + const headersCapability = new _util.PromiseCapability(); const fullReader = this._fullReader; fullReader.headersReady.then(() => { if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (this._lastProgress && loadingTask.onProgress) { - loadingTask.onProgress(this._lastProgress); + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); } - fullReader.onProgress = evt => { - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: evt.loaded, - total: evt.total - }); - } + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); }; } - headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, @@ -3275,162 +4617,128 @@ class WorkerTransport { }); messageHandler.on("GetRangeReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); - const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); - if (!rangeReader) { sink.close(); return; } - sink.onPull = () => { - rangeReader.read().then(function ({ - value, - done - }) { + rangeReader.read().then(function (_ref9) { + let { + value, + done + } = _ref9; if (done) { sink.close(); return; } - - (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); + (0, _util.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; - sink.onCancel = reason => { rangeReader.cancel(reason); sink.ready.catch(readyReason => { if (this.destroyed) { return; } - throw readyReason; }); }; }); - messageHandler.on("GetDoc", ({ - pdfInfo - }) => { + messageHandler.on("GetDoc", _ref10 => { + let { + pdfInfo + } = _ref10; this._numPages = pdfInfo.numPages; this._htmlForXfa = pdfInfo.htmlForXfa; delete pdfInfo.htmlForXfa; - loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); messageHandler.on("DocException", function (ex) { let reason; - switch (ex.name) { case "PasswordException": reason = new _util.PasswordException(ex.message, ex.code); break; - case "InvalidPDFException": reason = new _util.InvalidPDFException(ex.message); break; - case "MissingPDFException": reason = new _util.MissingPDFException(ex.message); break; - case "UnexpectedResponseException": reason = new _util.UnexpectedResponseException(ex.message, ex.status); break; - case "UnknownErrorException": reason = new _util.UnknownErrorException(ex.message, ex.details); break; + default: + (0, _util.unreachable)("DocException - expected a valid Error."); } - - if (!(reason instanceof Error)) { - const msg = "DocException - expected a valid Error."; - (0, _util.warn)(msg); - } - loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", exception => { - this._passwordCapability = (0, _util.createPromiseCapability)(); - + this.#passwordCapability = new _util.PromiseCapability(); if (loadingTask.onPassword) { const updatePassword = password => { - this._passwordCapability.resolve({ - password - }); + if (password instanceof Error) { + this.#passwordCapability.reject(password); + } else { + this.#passwordCapability.resolve({ + password + }); + } }; - try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { - this._passwordCapability.reject(ex); + this.#passwordCapability.reject(ex); } } else { - this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); + this.#passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); } - - return this._passwordCapability.promise; + return this.#passwordCapability.promise; }); messageHandler.on("DataLoaded", data => { - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: data.length, - total: data.length - }); - } - + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); this.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", data => { if (this.destroyed) { return; } - - const page = this.pageCache[data.pageIndex]; - - page._startRenderPage(data.transparency, data.intent); + const page = this.#pageCache.get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); }); - messageHandler.on("commonobj", data => { + messageHandler.on("commonobj", _ref11 => { + let [id, type, exportedData] = _ref11; if (this.destroyed) { return; } - - const [id, type, exportedData] = data; - if (this.commonObjs.has(id)) { return; } - switch (type) { case "Font": const params = this._params; - if ("error" in exportedData) { const exportedError = exportedData.error; (0, _util.warn)(`Error during font loading: ${exportedError}`); this.commonObjs.resolve(id, exportedError); break; } - - let fontRegistry = null; - - if (params.pdfBug && globalThis.FontInspector?.enabled) { - fontRegistry = { - registerFont(font, url) { - globalThis.FontInspector.fontAdded(font, url); - } - - }; - } - + const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; const font = new _font_loader.FontFaceObject(exportedData, { isEvalSupported: params.isEvalSupported, disableFontFace: params.disableFontFace, ignoreErrors: params.ignoreErrors, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - fontRegistry + inspectFont }); this.fontLoader.bind(font).catch(reason => { return messageHandler.sendWithPromise("FontFallback", { @@ -3440,244 +4748,210 @@ class WorkerTransport { if (!params.fontExtraProperties && font.data) { font.data = null; } - this.commonObjs.resolve(id, font); }); break; - case "FontPath": case "Image": + case "Pattern": this.commonObjs.resolve(id, exportedData); break; - default: throw new Error(`Got unknown common object type ${type}`); } }); - messageHandler.on("obj", data => { + messageHandler.on("obj", _ref12 => { + let [id, pageIndex, type, imageData] = _ref12; if (this.destroyed) { - return undefined; + return; } - - const [id, pageIndex, type, imageData] = data; - const pageProxy = this.pageCache[pageIndex]; - + const pageProxy = this.#pageCache.get(pageIndex); if (pageProxy.objs.has(id)) { - return undefined; + return; } - switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); - const MAX_IMAGE_SIZE_TO_STORE = 8000000; - - if (imageData?.data?.length > MAX_IMAGE_SIZE_TO_STORE) { - pageProxy.cleanupAfterRender = true; + if (imageData) { + let length; + if (imageData.bitmap) { + const { + width, + height + } = imageData; + length = width * height * 4; + } else { + length = imageData.data?.length || 0; + } + if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) { + pageProxy._maybeCleanupAfterRender = true; + } } - break; - case "Pattern": pageProxy.objs.resolve(id, imageData); break; - default: throw new Error(`Got unknown object type ${type}`); } - - return undefined; }); messageHandler.on("DocProgress", data => { if (this.destroyed) { return; } - - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: data.loaded, - total: data.total - }); - } + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); }); - messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); messageHandler.on("FetchBuiltInCMap", data => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } - - if (!this.CMapReaderFactory) { + if (!this.cMapReaderFactory) { return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); } - - return this.CMapReaderFactory.fetch(data); + return this.cMapReaderFactory.fetch(data); }); messageHandler.on("FetchStandardFontData", data => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } - - if (!this.StandardFontDataFactory) { + if (!this.standardFontDataFactory) { return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); } - - return this.StandardFontDataFactory.fetch(data); + return this.standardFontDataFactory.fetch(data); }); } - - _onUnsupportedFeature({ - featureId - }) { - if (this.destroyed) { - return; - } - - if (this.loadingTask.onUnsupportedFeature) { - this.loadingTask.onUnsupportedFeature(featureId); - } - } - getData() { return this.messageHandler.sendWithPromise("GetData", null); } - + saveDocument() { + if (this.annotationStorage.size <= 0) { + (0, _util.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); + } + const { + map, + transfers + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: this._fullReader?.filename ?? null + }, transfers).finally(() => { + this.annotationStorage.resetModified(); + }); + } getPage(pageNumber) { if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { - return Promise.reject(new Error("Invalid page request")); + return Promise.reject(new Error("Invalid page request.")); } - - const pageIndex = pageNumber - 1; - - if (pageIndex in this.pagePromises) { - return this.pagePromises[pageIndex]; + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex); + if (cachedPromise) { + return cachedPromise; } - const promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex }).then(pageInfo => { if (this.destroyed) { throw new Error("Transport destroyed"); } - - const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); - this.pageCache[pageIndex] = page; + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); return page; }); - this.pagePromises[pageIndex] = promise; + this.#pagePromises.set(pageIndex, promise); return promise; } - getPageIndex(ref) { + if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } return this.messageHandler.sendWithPromise("GetPageIndex", { - ref - }).catch(function (reason) { - return Promise.reject(new Error(reason)); + num: ref.num, + gen: ref.gen }); } - getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex, intent }); } - - saveDocument() { - return this.messageHandler.sendWithPromise("SaveDocument", { - isPureXfa: !!this._htmlForXfa, - numPages: this._numPages, - annotationStorage: this.annotationStorage.serializable, - filename: this._fullReader?.filename ?? null - }).finally(() => { - this.annotationStorage.resetModified(); - }); - } - getFieldObjects() { - return this.messageHandler.sendWithPromise("GetFieldObjects", null); + return this.#cacheSimpleMethod("GetFieldObjects"); } - hasJSActions() { - return this._hasJSActionsPromise || (this._hasJSActionsPromise = this.messageHandler.sendWithPromise("HasJSActions", null)); + return this.#cacheSimpleMethod("HasJSActions"); } - getCalculationOrderIds() { return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); } - getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } - getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } - return this.messageHandler.sendWithPromise("GetDestination", { id }); } - getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } - getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } - getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } - getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } - getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } - getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } - getJavaScript() { return this.messageHandler.sendWithPromise("GetJavaScript", null); } - getDocJSActions() { return this.messageHandler.sendWithPromise("GetDocJSActions", null); } - getPageJSActions(pageIndex) { return this.messageHandler.sendWithPromise("GetPageJSActions", { pageIndex }); } - getStructTree(pageIndex) { return this.messageHandler.sendWithPromise("GetStructTree", { pageIndex }); } - getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } - getOptionalContentConfig() { return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { return new _optional_content_config.OptionalContentConfig(results); }); } - getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } - getMetadata() { - return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { + const name = "GetMetadata", + cachedPromise = this.#methodPromises.get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then(results => { return { info: results[0], metadata: results[1] ? new _metadata.Metadata(results[1]) : null, @@ -3685,827 +4959,1813 @@ class WorkerTransport { contentLength: this._fullReader?.contentLength ?? null }; }); + this.#methodPromises.set(name, promise); + return promise; } - getMarkInfo() { return this.messageHandler.sendWithPromise("GetMarkInfo", null); } - - getStats() { - return this.messageHandler.sendWithPromise("GetStats", null); - } - - async startCleanup(keepLoadedFonts = false) { - await this.messageHandler.sendWithPromise("Cleanup", null); - + async startCleanup() { + let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (this.destroyed) { return; } - - for (let i = 0, ii = this.pageCache.length; i < ii; i++) { - const page = this.pageCache[i]; - - if (!page) { - continue; - } - + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of this.#pageCache.values()) { const cleanupSuccessful = page.cleanup(); - if (!cleanupSuccessful) { - throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`); + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); } } - this.commonObjs.clear(); - if (!keepLoadedFonts) { this.fontLoader.clear(); } - - this._hasJSActionsPromise = null; + this.#methodPromises.clear(); + this.filterFactory.destroy(true); } - get loadingParams() { - const params = this._params; + const { + disableAutoFetch, + enableXfa + } = this._params; return (0, _util.shadow)(this, "loadingParams", { - disableAutoFetch: params.disableAutoFetch + disableAutoFetch, + enableXfa }); } - } - class PDFObjects { - constructor() { - this._objs = Object.create(null); - } - - _ensureObj(objId) { - if (this._objs[objId]) { - return this._objs[objId]; + #objs = Object.create(null); + #ensureObj(objId) { + const obj = this.#objs[objId]; + if (obj) { + return obj; } - - return this._objs[objId] = { - capability: (0, _util.createPromiseCapability)(), - data: null, - resolved: false + return this.#objs[objId] = { + capability: new _util.PromiseCapability(), + data: null }; } - - get(objId, callback = null) { + get(objId) { + let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (callback) { - this._ensureObj(objId).capability.promise.then(callback); - + const obj = this.#ensureObj(objId); + obj.capability.promise.then(() => callback(obj.data)); return null; } - - const obj = this._objs[objId]; - - if (!obj || !obj.resolved) { + const obj = this.#objs[objId]; + if (!obj?.capability.settled) { throw new Error(`Requesting object that isn't resolved yet ${objId}.`); } - return obj.data; } - has(objId) { - const obj = this._objs[objId]; - return obj?.resolved || false; + const obj = this.#objs[objId]; + return obj?.capability.settled || false; } - - resolve(objId, data) { - const obj = this._ensureObj(objId); - - obj.resolved = true; + resolve(objId) { + let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + const obj = this.#ensureObj(objId); obj.data = data; - obj.capability.resolve(data); + obj.capability.resolve(); } - clear() { - this._objs = Object.create(null); + for (const objId in this.#objs) { + const { + data + } = this.#objs[objId]; + data?.bitmap?.close(); + } + this.#objs = Object.create(null); } - } - class RenderTask { + #internalRenderTask = null; constructor(internalRenderTask) { - this._internalRenderTask = internalRenderTask; + this.#internalRenderTask = internalRenderTask; this.onContinue = null; } - get promise() { - return this._internalRenderTask.capability.promise; + return this.#internalRenderTask.capability.promise; } - cancel() { - this._internalRenderTask.cancel(); + let extraDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + this.#internalRenderTask.cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = this.#internalRenderTask.operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = this.#internalRenderTask; + return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; } - } - -const InternalRenderTask = function InternalRenderTaskClosure() { - const canvasInRendering = new WeakSet(); - - class InternalRenderTask { - constructor({ +exports.RenderTask = RenderTask; +class InternalRenderTask { + static #canvasInUse = new WeakSet(); + constructor(_ref13) { + let { callback, params, objs, commonObjs, + annotationCanvasMap, operatorList, pageIndex, canvasFactory, + filterFactory, useRequestAnimationFrame = false, - pdfBug = false - }) { - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.operatorListIdx = null; - this.operatorList = operatorList; - this._pageIndex = pageIndex; - this.canvasFactory = canvasFactory; - this._pdfBug = pdfBug; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; - this.cancelled = false; - this.capability = (0, _util.createPromiseCapability)(); - this.task = new RenderTask(this); - this._cancelBound = this.cancel.bind(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - } - - get completed() { - return this.capability.promise.catch(function () {}); - } - - initializeGraphics({ + pdfBug = false, + pageColors = null + } = _ref13; + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = new _util.PromiseCapability(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + get completed() { + return this.capability.promise.catch(function () {}); + } + initializeGraphics(_ref14) { + let { transparency = false, optionalContentConfig - }) { - if (this.cancelled) { - return; - } - - if (this._canvas) { - if (canvasInRendering.has(this._canvas)) { - throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); - } - - canvasInRendering.add(this._canvas); - } - - if (this._pdfBug && globalThis.StepperManager?.enabled) { - this.stepper = globalThis.StepperManager.create(this._pageIndex); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); - } - - const { - canvasContext, - viewport, - transform, - imageLayer, - background - } = this.params; - this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig); - this.gfx.beginDrawing({ - transform, - viewport, - transparency, - background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; - - if (this.graphicsReadyCallback) { - this.graphicsReadyCallback(); - } + } = _ref14; + if (this.cancelled) { + return; } - - cancel(error = null) { - this.running = false; - this.cancelled = true; - - if (this.gfx) { - this.gfx.endDrawing(); + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); } - - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - - this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); + InternalRenderTask.#canvasInUse.add(this._canvas); } - - operatorListChanged() { - if (!this.graphicsReady) { - if (!this.graphicsReadyCallback) { - this.graphicsReadyCallback = this._continueBound; - } - - return; - } - - if (this.stepper) { - this.stepper.updateOperatorList(this.operatorList); - } - - if (this.running) { - return; - } - - this._continue(); + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } - - _continue() { - this.running = true; - - if (this.cancelled) { - return; - } - - if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } - } - - _scheduleNext() { - if (this._useRequestAnimationFrame) { - window.requestAnimationFrame(() => { - this._nextBound().catch(this._cancelBound); - }); - } else { - Promise.resolve().then(this._nextBound).catch(this._cancelBound); - } - } - - async _next() { - if (this.cancelled) { - return; - } - - this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); - - if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; - - if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); - - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - - this.callback(); - } - } - } - + const { + canvasContext, + viewport, + transform, + background + } = this.params; + this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + this.graphicsReadyCallback?.(); } - - return InternalRenderTask; -}(); - -const version = '2.10.377'; + cancel() { + let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + this.running = false; + this.cancelled = true; + this.gfx?.endDrawing(); + if (this._canvas) { + InternalRenderTask.#canvasInUse.delete(this._canvas); + } + this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); + } + operatorListChanged() { + if (!this.graphicsReady) { + this.graphicsReadyCallback ||= this._continueBound; + return; + } + this.stepper?.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(() => { + this._nextBound().catch(this._cancelBound); + }); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(this.pageColors); + if (this._canvas) { + InternalRenderTask.#canvasInUse.delete(this._canvas); + } + this.callback(); + } + } + } +} +const version = '3.9.179'; exports.version = version; -const build = '156762c48'; +const build = '1ef6fbc52'; exports.build = build; /***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +/* 125 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { +var $ = __w_pdfjs_require__(3); +var difference = __w_pdfjs_require__(126); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('difference') +}, { difference: difference }); +/***/ }), +/* 126 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontLoader = exports.FontFaceObject = void 0; +"use strict"; -var _util = __w_pdfjs_require__(2); +var aSet = __w_pdfjs_require__(127); +var SetHelpers = __w_pdfjs_require__(128); +var clone = __w_pdfjs_require__(129); +var size = __w_pdfjs_require__(132); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSet = __w_pdfjs_require__(130); +var iterateSimple = __w_pdfjs_require__(131); +var has = SetHelpers.has; +var remove = SetHelpers.remove; +module.exports = function difference(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = clone(O); + if (size(O) <= otherRec.size) + iterateSet(O, function (e) { + if (otherRec.includes(e)) + remove(result, e); + }); + else + iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) + remove(result, e); + }); + return result; +}; -class BaseFontLoader { - constructor({ - docId, - onUnsupportedFeature, - ownerDocument = globalThis.document, - styleElement = null - }) { - if (this.constructor === BaseFontLoader) { - (0, _util.unreachable)("Cannot initialize BaseFontLoader."); +/***/ }), +/* 127 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var has = (__w_pdfjs_require__(128).has); +module.exports = function (it) { + has(it); + return it; +}; + +/***/ }), +/* 128 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var SetPrototype = Set.prototype; +module.exports = { + Set: Set, + add: uncurryThis(SetPrototype.add), + has: uncurryThis(SetPrototype.has), + remove: uncurryThis(SetPrototype['delete']), + proto: SetPrototype +}; + +/***/ }), +/* 129 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var SetHelpers = __w_pdfjs_require__(128); +var iterate = __w_pdfjs_require__(130); +var Set = SetHelpers.Set; +var add = SetHelpers.add; +module.exports = function (set) { + var result = new Set(); + iterate(set, function (it) { + add(result, it); + }); + return result; +}; + +/***/ }), +/* 130 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var iterateSimple = __w_pdfjs_require__(131); +var SetHelpers = __w_pdfjs_require__(128); +var Set = SetHelpers.Set; +var SetPrototype = SetHelpers.proto; +var forEach = uncurryThis(SetPrototype.forEach); +var keys = uncurryThis(SetPrototype.keys); +var next = keys(new Set()).next; +module.exports = function (set, fn, interruptible) { + return interruptible ? iterateSimple(keys(set), fn, next) : forEach(set, fn); +}; + +/***/ }), +/* 131 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +module.exports = function (iterator, fn, $next) { + var next = $next || iterator.next; + var step, result; + while (!(step = call(next, iterator)).done) { + result = fn(step.value); + if (result !== undefined) + return result; + } +}; + +/***/ }), +/* 132 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThisAccessor = __w_pdfjs_require__(72); +var SetHelpers = __w_pdfjs_require__(128); +module.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) { + return set.size; +}; + +/***/ }), +/* 133 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var aCallable = __w_pdfjs_require__(31); +var anObject = __w_pdfjs_require__(47); +var call = __w_pdfjs_require__(8); +var toIntegerOrInfinity = __w_pdfjs_require__(62); +var $TypeError = TypeError; +var max = Math.max; +var SetRecord = function (set, size, has, keys) { + this.set = set; + this.size = size; + this.has = has; + this.keys = keys; +}; +SetRecord.prototype = { + getIterator: function () { + return anObject(call(this.keys, this.set)); + }, + includes: function (it) { + return call(this.has, this.set, it); + } +}; +module.exports = function (obj) { + anObject(obj); + var numSize = +obj.size; + if (numSize != numSize) + throw $TypeError('Invalid size'); + return new SetRecord(obj, max(toIntegerOrInfinity(numSize), 0), aCallable(obj.has), aCallable(obj.keys)); +}; + +/***/ }), +/* 134 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var getBuiltIn = __w_pdfjs_require__(24); +var createEmptySetLike = function () { + return { + size: 0, + has: function () { + return false; + }, + keys: function () { + return { + next: function () { + return { done: true }; } - - this.docId = docId; - this._onUnsupportedFeature = onUnsupportedFeature; - this._document = ownerDocument; - this.nativeFontFaces = []; - this.styleElement = null; + }; } + }; +}; +module.exports = function (name) { + try { + var Set = getBuiltIn('Set'); + new Set()[name](createEmptySetLike()); + return true; + } catch (error) { + return false; + } +}; - addNativeFontFace(nativeFontFace) { - this.nativeFontFaces.push(nativeFontFace); +/***/ }), +/* 135 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - this._document.fonts.add(nativeFontFace); +var $ = __w_pdfjs_require__(3); +var fails = __w_pdfjs_require__(7); +var intersection = __w_pdfjs_require__(136); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () { + return Array.from(new Set([ + 1, + 2, + 3 + ]).intersection(new Set([ + 3, + 2 + ]))) != '3,2'; +}); +$({ + target: 'Set', + proto: true, + real: true, + forced: INCORRECT +}, { intersection: intersection }); + +/***/ }), +/* 136 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var SetHelpers = __w_pdfjs_require__(128); +var size = __w_pdfjs_require__(132); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSet = __w_pdfjs_require__(130); +var iterateSimple = __w_pdfjs_require__(131); +var Set = SetHelpers.Set; +var add = SetHelpers.add; +var has = SetHelpers.has; +module.exports = function intersection(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = new Set(); + if (size(O) > otherRec.size) { + iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) + add(result, e); + }); + } else { + iterateSet(O, function (e) { + if (otherRec.includes(e)) + add(result, e); + }); + } + return result; +}; + +/***/ }), +/* 137 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var $ = __w_pdfjs_require__(3); +var isDisjointFrom = __w_pdfjs_require__(138); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('isDisjointFrom') +}, { isDisjointFrom: isDisjointFrom }); + +/***/ }), +/* 138 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var has = (__w_pdfjs_require__(128).has); +var size = __w_pdfjs_require__(132); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSet = __w_pdfjs_require__(130); +var iterateSimple = __w_pdfjs_require__(131); +var iteratorClose = __w_pdfjs_require__(139); +module.exports = function isDisjointFrom(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) <= otherRec.size) + return iterateSet(O, function (e) { + if (otherRec.includes(e)) + return false; + }, true) !== false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (has(O, e)) + return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + +/***/ }), +/* 139 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +var anObject = __w_pdfjs_require__(47); +var getMethod = __w_pdfjs_require__(30); +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') + throw value; + return value; } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; +}; - insertRule(rule) { - let styleElement = this.styleElement; +/***/ }), +/* 140 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - if (!styleElement) { - styleElement = this.styleElement = this._document.createElement("style"); - styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`; +var $ = __w_pdfjs_require__(3); +var isSubsetOf = __w_pdfjs_require__(141); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('isSubsetOf') +}, { isSubsetOf: isSubsetOf }); - this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); - } +/***/ }), +/* 141 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { - const styleSheet = styleElement.sheet; - styleSheet.insertRule(rule, styleSheet.cssRules.length); +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var size = __w_pdfjs_require__(132); +var iterate = __w_pdfjs_require__(130); +var getSetRecord = __w_pdfjs_require__(133); +module.exports = function isSubsetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) > otherRec.size) + return false; + return iterate(O, function (e) { + if (!otherRec.includes(e)) + return false; + }, true) !== false; +}; + +/***/ }), +/* 142 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var $ = __w_pdfjs_require__(3); +var isSupersetOf = __w_pdfjs_require__(143); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('isSupersetOf') +}, { isSupersetOf: isSupersetOf }); + +/***/ }), +/* 143 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var has = (__w_pdfjs_require__(128).has); +var size = __w_pdfjs_require__(132); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSimple = __w_pdfjs_require__(131); +var iteratorClose = __w_pdfjs_require__(139); +module.exports = function isSupersetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) < otherRec.size) + return false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (!has(O, e)) + return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + +/***/ }), +/* 144 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var $ = __w_pdfjs_require__(3); +var symmetricDifference = __w_pdfjs_require__(145); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('symmetricDifference') +}, { symmetricDifference: symmetricDifference }); + +/***/ }), +/* 145 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var SetHelpers = __w_pdfjs_require__(128); +var clone = __w_pdfjs_require__(129); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSimple = __w_pdfjs_require__(131); +var add = SetHelpers.add; +var has = SetHelpers.has; +var remove = SetHelpers.remove; +module.exports = function symmetricDifference(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (e) { + if (has(O, e)) + remove(result, e); + else + add(result, e); + }); + return result; +}; + +/***/ }), +/* 146 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var $ = __w_pdfjs_require__(3); +var union = __w_pdfjs_require__(147); +var setMethodAcceptSetLike = __w_pdfjs_require__(134); +$({ + target: 'Set', + proto: true, + real: true, + forced: !setMethodAcceptSetLike('union') +}, { union: union }); + +/***/ }), +/* 147 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var aSet = __w_pdfjs_require__(127); +var add = (__w_pdfjs_require__(128).add); +var clone = __w_pdfjs_require__(129); +var getSetRecord = __w_pdfjs_require__(133); +var iterateSimple = __w_pdfjs_require__(131); +module.exports = function union(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (it) { + add(result, it); + }); + return result; +}; + +/***/ }), +/* 148 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var global = __w_pdfjs_require__(4); +var getBuiltIn = __w_pdfjs_require__(24); +var createPropertyDescriptor = __w_pdfjs_require__(11); +var defineProperty = (__w_pdfjs_require__(45).f); +var hasOwn = __w_pdfjs_require__(39); +var anInstance = __w_pdfjs_require__(149); +var inheritIfRequired = __w_pdfjs_require__(75); +var normalizeStringArgument = __w_pdfjs_require__(76); +var DOMExceptionConstants = __w_pdfjs_require__(150); +var clearErrorStack = __w_pdfjs_require__(82); +var DESCRIPTORS = __w_pdfjs_require__(6); +var IS_PURE = __w_pdfjs_require__(36); +var DOM_EXCEPTION = 'DOMException'; +var Error = getBuiltIn('Error'); +var NativeDOMException = getBuiltIn(DOM_EXCEPTION); +var $DOMException = function DOMException() { + anInstance(this, DOMExceptionPrototype); + var argumentsLength = arguments.length; + var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]); + var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error'); + var that = new NativeDOMException(message, name); + var error = Error(message); + error.name = DOM_EXCEPTION; + defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1))); + inheritIfRequired(that, this, $DOMException); + return that; +}; +var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype; +var ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION); +var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2); +var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION); +var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable); +var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK; +$({ + global: true, + constructor: true, + forced: IS_PURE || FORCED_CONSTRUCTOR +}, { DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException }); +var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION); +var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype; +if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) { + if (!IS_PURE) { + defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException)); + } + for (var key in DOMExceptionConstants) + if (hasOwn(DOMExceptionConstants, key)) { + var constant = DOMExceptionConstants[key]; + var constantName = constant.s; + if (!hasOwn(PolyfilledDOMException, constantName)) { + defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c)); + } } - - clear() { - for (const nativeFontFace of this.nativeFontFaces) { - this._document.fonts.delete(nativeFontFace); - } - - this.nativeFontFaces.length = 0; - - if (this.styleElement) { - this.styleElement.remove(); - this.styleElement = null; - } - } - - async bind(font) { - if (font.attached || font.missingFile) { - return; - } - - font.attached = true; - - if (this.isFontLoadingAPISupported) { - const nativeFontFace = font.createNativeFontFace(); - - if (nativeFontFace) { - this.addNativeFontFace(nativeFontFace); - - try { - await nativeFontFace.loaded; - } catch (ex) { - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative - }); - - (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); - font.disableFontFace = true; - throw ex; - } - } - - return; - } - - const rule = font.createFontFaceRule(); - - if (rule) { - this.insertRule(rule); - - if (this.isSyncFontLoadingSupported) { - return; - } - - await new Promise(resolve => { - const request = this._queueLoadingCallback(resolve); - - this._prepareFontLoadEvent([rule], [font], request); - }); - } - } - - _queueLoadingCallback(callback) { - (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); - } - - get isFontLoadingAPISupported() { - const hasFonts = !!this._document?.fonts; - return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); - } - - get isSyncFontLoadingSupported() { - (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); - } - - get _loadTestFont() { - (0, _util.unreachable)("Abstract method `_loadTestFont`."); - } - - _prepareFontLoadEvent(rules, fontsToLoad, request) { - (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); - } - } -let FontLoader; -exports.FontLoader = FontLoader; -{ - exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader { - constructor(params) { - super(params); - this.loadingContext = { - requests: [], - nextRequestId: 0 - }; - this.loadTestFontId = 0; - } +/***/ }), +/* 149 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { - get isSyncFontLoadingSupported() { - let supported = false; +var isPrototypeOf = __w_pdfjs_require__(25); +var $TypeError = TypeError; +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) + return it; + throw $TypeError('Incorrect invocation'); +}; - if (typeof navigator === "undefined") { - supported = true; - } else { - const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); +/***/ }), +/* 150 */ +/***/ ((module) => { - if (m?.[1] >= 14) { - supported = true; - } - } +module.exports = { + IndexSizeError: { + s: 'INDEX_SIZE_ERR', + c: 1, + m: 1 + }, + DOMStringSizeError: { + s: 'DOMSTRING_SIZE_ERR', + c: 2, + m: 0 + }, + HierarchyRequestError: { + s: 'HIERARCHY_REQUEST_ERR', + c: 3, + m: 1 + }, + WrongDocumentError: { + s: 'WRONG_DOCUMENT_ERR', + c: 4, + m: 1 + }, + InvalidCharacterError: { + s: 'INVALID_CHARACTER_ERR', + c: 5, + m: 1 + }, + NoDataAllowedError: { + s: 'NO_DATA_ALLOWED_ERR', + c: 6, + m: 0 + }, + NoModificationAllowedError: { + s: 'NO_MODIFICATION_ALLOWED_ERR', + c: 7, + m: 1 + }, + NotFoundError: { + s: 'NOT_FOUND_ERR', + c: 8, + m: 1 + }, + NotSupportedError: { + s: 'NOT_SUPPORTED_ERR', + c: 9, + m: 1 + }, + InUseAttributeError: { + s: 'INUSE_ATTRIBUTE_ERR', + c: 10, + m: 1 + }, + InvalidStateError: { + s: 'INVALID_STATE_ERR', + c: 11, + m: 1 + }, + SyntaxError: { + s: 'SYNTAX_ERR', + c: 12, + m: 1 + }, + InvalidModificationError: { + s: 'INVALID_MODIFICATION_ERR', + c: 13, + m: 1 + }, + NamespaceError: { + s: 'NAMESPACE_ERR', + c: 14, + m: 1 + }, + InvalidAccessError: { + s: 'INVALID_ACCESS_ERR', + c: 15, + m: 1 + }, + ValidationError: { + s: 'VALIDATION_ERR', + c: 16, + m: 0 + }, + TypeMismatchError: { + s: 'TYPE_MISMATCH_ERR', + c: 17, + m: 1 + }, + SecurityError: { + s: 'SECURITY_ERR', + c: 18, + m: 1 + }, + NetworkError: { + s: 'NETWORK_ERR', + c: 19, + m: 1 + }, + AbortError: { + s: 'ABORT_ERR', + c: 20, + m: 1 + }, + URLMismatchError: { + s: 'URL_MISMATCH_ERR', + c: 21, + m: 1 + }, + QuotaExceededError: { + s: 'QUOTA_EXCEEDED_ERR', + c: 22, + m: 1 + }, + TimeoutError: { + s: 'TIMEOUT_ERR', + c: 23, + m: 1 + }, + InvalidNodeTypeError: { + s: 'INVALID_NODE_TYPE_ERR', + c: 24, + m: 1 + }, + DataCloneError: { + s: 'DATA_CLONE_ERR', + c: 25, + m: 1 + } +}; - return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); - } +/***/ }), +/* 151 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - _queueLoadingCallback(callback) { - function completeRequest() { - (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); - request.done = true; - - while (context.requests.length > 0 && context.requests[0].done) { - const otherRequest = context.requests.shift(); - setTimeout(otherRequest.callback, 0); - } - } - - const context = this.loadingContext; - const request = { - id: `pdfjs-font-loading-${context.nextRequestId++}`, - done: false, - complete: completeRequest, - callback - }; - context.requests.push(request); - return request; - } - - get _loadTestFont() { - const getLoadTestFont = function () { - return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); - }; - - return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont()); - } - - _prepareFontLoadEvent(rules, fonts, request) { - function int32(data, offset) { - return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; - } - - function spliceString(s, offset, remove, insert) { - const chunk1 = s.substring(0, offset); - const chunk2 = s.substring(offset + remove); - return chunk1 + insert + chunk2; - } - - let i, ii; - - const canvas = this._document.createElement("canvas"); - - canvas.width = 1; - canvas.height = 1; - const ctx = canvas.getContext("2d"); - let called = 0; - - function isFontReady(name, callback) { - called++; - - if (called > 30) { - (0, _util.warn)("Load test font never loaded."); - callback(); - return; - } - - ctx.font = "30px " + name; - ctx.fillText(".", 0, 20); - const imageData = ctx.getImageData(0, 0, 1, 1); - - if (imageData.data[3] > 0) { - callback(); - return; - } - - setTimeout(isFontReady.bind(null, name, callback)); - } - - const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; - let data = this._loadTestFont; - const COMMENT_OFFSET = 976; - data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); - const CFF_CHECKSUM_OFFSET = 16; - const XXXX_VALUE = 0x58585858; - let checksum = int32(data, CFF_CHECKSUM_OFFSET); - - for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; - } - - if (i < loadTestFontId.length) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; - } - - data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); - const url = `url(data:font/opentype;base64,${btoa(data)});`; - const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; - this.insertRule(rule); - const names = []; - - for (const font of fonts) { - names.push(font.loadedName); - } - - names.push(loadTestFontId); - - const div = this._document.createElement("div"); - - div.style.visibility = "hidden"; - div.style.width = div.style.height = "10px"; - div.style.position = "absolute"; - div.style.top = div.style.left = "0px"; - - for (const name of names) { - const span = this._document.createElement("span"); - - span.textContent = "Hi"; - span.style.fontFamily = name; - div.appendChild(span); - } - - this._document.body.appendChild(div); - - isFontReady(loadTestFontId, () => { - this._document.body.removeChild(div); - - request.complete(); - }); - } - - }; -} - -class FontFaceObject { - constructor(translatedData, { - isEvalSupported = true, - disableFontFace = false, - ignoreErrors = false, - onUnsupportedFeature, - fontRegistry = null - }) { - this.compiledGlyphs = Object.create(null); - - for (const i in translatedData) { - this[i] = translatedData[i]; - } - - this.isEvalSupported = isEvalSupported !== false; - this.disableFontFace = disableFontFace === true; - this.ignoreErrors = ignoreErrors === true; - this._onUnsupportedFeature = onUnsupportedFeature; - this.fontRegistry = fontRegistry; +var IS_PURE = __w_pdfjs_require__(36); +var $ = __w_pdfjs_require__(3); +var global = __w_pdfjs_require__(4); +var getBuiltin = __w_pdfjs_require__(24); +var uncurryThis = __w_pdfjs_require__(14); +var fails = __w_pdfjs_require__(7); +var uid = __w_pdfjs_require__(41); +var isCallable = __w_pdfjs_require__(21); +var isConstructor = __w_pdfjs_require__(152); +var isNullOrUndefined = __w_pdfjs_require__(17); +var isObject = __w_pdfjs_require__(20); +var isSymbol = __w_pdfjs_require__(23); +var iterate = __w_pdfjs_require__(153); +var anObject = __w_pdfjs_require__(47); +var classof = __w_pdfjs_require__(78); +var hasOwn = __w_pdfjs_require__(39); +var createProperty = __w_pdfjs_require__(158); +var createNonEnumerableProperty = __w_pdfjs_require__(44); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var validateArgumentsLength = __w_pdfjs_require__(85); +var getRegExpFlags = __w_pdfjs_require__(159); +var MapHelpers = __w_pdfjs_require__(161); +var SetHelpers = __w_pdfjs_require__(128); +var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83); +var PROPER_TRANSFER = __w_pdfjs_require__(119); +var Object = global.Object; +var Array = global.Array; +var Date = global.Date; +var Error = global.Error; +var EvalError = global.EvalError; +var RangeError = global.RangeError; +var ReferenceError = global.ReferenceError; +var SyntaxError = global.SyntaxError; +var TypeError = global.TypeError; +var URIError = global.URIError; +var PerformanceMark = global.PerformanceMark; +var WebAssembly = global.WebAssembly; +var CompileError = WebAssembly && WebAssembly.CompileError || Error; +var LinkError = WebAssembly && WebAssembly.LinkError || Error; +var RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error; +var DOMException = getBuiltin('DOMException'); +var Map = MapHelpers.Map; +var mapHas = MapHelpers.has; +var mapGet = MapHelpers.get; +var mapSet = MapHelpers.set; +var Set = SetHelpers.Set; +var setAdd = SetHelpers.add; +var objectKeys = getBuiltin('Object', 'keys'); +var push = uncurryThis([].push); +var thisBooleanValue = uncurryThis(true.valueOf); +var thisNumberValue = uncurryThis(1.0.valueOf); +var thisStringValue = uncurryThis(''.valueOf); +var thisTimeValue = uncurryThis(Date.prototype.getTime); +var PERFORMANCE_MARK = uid('structuredClone'); +var DATA_CLONE_ERROR = 'DataCloneError'; +var TRANSFERRING = 'Transferring'; +var checkBasicSemantic = function (structuredCloneImplementation) { + return !fails(function () { + var set1 = new global.Set([7]); + var set2 = structuredCloneImplementation(set1); + var number = structuredCloneImplementation(Object(7)); + return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7; + }) && structuredCloneImplementation; +}; +var checkErrorsCloning = function (structuredCloneImplementation, $Error) { + return !fails(function () { + var error = new $Error(); + var test = structuredCloneImplementation({ + a: error, + b: error + }); + return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack); + }); +}; +var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) { + return !fails(function () { + var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 })); + return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3; + }); +}; +var nativeStructuredClone = global.structuredClone; +var FORCED_REPLACEMENT = IS_PURE || !checkErrorsCloning(nativeStructuredClone, Error) || !checkErrorsCloning(nativeStructuredClone, DOMException) || !checkNewErrorsCloningSemantic(nativeStructuredClone); +var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) { + return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail; +}); +var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark; +var throwUncloneable = function (type) { + throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR); +}; +var throwUnpolyfillable = function (type, action) { + throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR); +}; +var tryNativeRestrictedStructuredClone = function (value, type) { + if (!nativeRestrictedStructuredClone) + throwUnpolyfillable(type); + return nativeRestrictedStructuredClone(value); +}; +var createDataTransfer = function () { + var dataTransfer; + try { + dataTransfer = new global.DataTransfer(); + } catch (error) { + try { + dataTransfer = new global.ClipboardEvent('').clipboardData; + } catch (error2) { } - - createNativeFontFace() { - if (!this.data || this.disableFontFace) { - return null; + } + return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null; +}; +var cloneBuffer = function (value, map, $type) { + if (mapHas(map, value)) + return mapGet(map, value); + var type = $type || classof(value); + var clone, length, options, source, target, i; + if (type === 'SharedArrayBuffer') { + if (nativeRestrictedStructuredClone) + clone = nativeRestrictedStructuredClone(value); + else + clone = value; + } else { + var DataView = global.DataView; + if (!DataView && typeof value.slice != 'function') + throwUnpolyfillable('ArrayBuffer'); + try { + if (typeof value.slice == 'function' && !value.resizable) { + clone = value.slice(0); + } else { + length = value.byteLength; + options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined; + clone = new ArrayBuffer(length, options); + source = new DataView(value); + target = new DataView(clone); + for (i = 0; i < length; i++) { + target.setUint8(i, source.getUint8(i)); } - - let nativeFontFace; - - if (!this.cssFontInfo) { - nativeFontFace = new FontFace(this.loadedName, this.data, {}); - } else { - const css = { - weight: this.cssFontInfo.fontWeight - }; - - if (this.cssFontInfo.italicAngle) { - css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; - } - - nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this); - } - - return nativeFontFace; + } + } catch (error) { + throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR); } - - createFontFaceRule() { - if (!this.data || this.disableFontFace) { - return null; - } - - const data = (0, _util.bytesToString)(this.data); - const url = `url(data:${this.mimetype};base64,${btoa(data)});`; - let rule; - - if (!this.cssFontInfo) { - rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; - } else { - let css = `font-weight: ${this.cssFontInfo.fontWeight};`; - - if (this.cssFontInfo.italicAngle) { - css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; - } - - rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this, url); - } - - return rule; + } + mapSet(map, value, clone); + return clone; +}; +var cloneView = function (value, type, offset, length, map) { + var C = global[type]; + if (!isObject(C)) + throwUnpolyfillable(type); + return new C(cloneBuffer(value.buffer, map), offset, length); +}; +var Placeholder = function (object, type, metadata) { + this.object = object; + this.type = type; + this.metadata = metadata; +}; +var structuredCloneInternal = function (value, map, transferredBuffers) { + if (isSymbol(value)) + throwUncloneable('Symbol'); + if (!isObject(value)) + return value; + if (map) { + if (mapHas(map, value)) + return mapGet(map, value); + } else + map = new Map(); + var type = classof(value); + var C, name, cloned, dataTransfer, i, length, keys, key; + switch (type) { + case 'Array': + cloned = Array(lengthOfArrayLike(value)); + break; + case 'Object': + cloned = {}; + break; + case 'Map': + cloned = new Map(); + break; + case 'Set': + cloned = new Set(); + break; + case 'RegExp': + cloned = new RegExp(value.source, getRegExpFlags(value)); + break; + case 'Error': + name = value.name; + switch (name) { + case 'AggregateError': + cloned = getBuiltin('AggregateError')([]); + break; + case 'EvalError': + cloned = EvalError(); + break; + case 'RangeError': + cloned = RangeError(); + break; + case 'ReferenceError': + cloned = ReferenceError(); + break; + case 'SyntaxError': + cloned = SyntaxError(); + break; + case 'TypeError': + cloned = TypeError(); + break; + case 'URIError': + cloned = URIError(); + break; + case 'CompileError': + cloned = CompileError(); + break; + case 'LinkError': + cloned = LinkError(); + break; + case 'RuntimeError': + cloned = RuntimeError(); + break; + default: + cloned = Error(); } - - getPathGenerator(objs, character) { - if (this.compiledGlyphs[character] !== undefined) { - return this.compiledGlyphs[character]; - } - - let cmds; - + break; + case 'DOMException': + cloned = new DOMException(value.message, value.name); + break; + case 'ArrayBuffer': + case 'SharedArrayBuffer': + cloned = transferredBuffers ? new Placeholder(value, type) : cloneBuffer(value, map, type); + break; + case 'DataView': + case 'Int8Array': + case 'Uint8Array': + case 'Uint8ClampedArray': + case 'Int16Array': + case 'Uint16Array': + case 'Int32Array': + case 'Uint32Array': + case 'Float16Array': + case 'Float32Array': + case 'Float64Array': + case 'BigInt64Array': + case 'BigUint64Array': + length = type === 'DataView' ? value.byteLength : value.length; + cloned = transferredBuffers ? new Placeholder(value, type, { + offset: value.byteOffset, + length: length + }) : cloneView(value, type, value.byteOffset, length, map); + break; + case 'DOMQuad': + try { + cloned = new DOMQuad(structuredCloneInternal(value.p1, map, transferredBuffers), structuredCloneInternal(value.p2, map, transferredBuffers), structuredCloneInternal(value.p3, map, transferredBuffers), structuredCloneInternal(value.p4, map, transferredBuffers)); + } catch (error) { + cloned = tryNativeRestrictedStructuredClone(value, type); + } + break; + case 'File': + if (nativeRestrictedStructuredClone) + try { + cloned = nativeRestrictedStructuredClone(value); + if (classof(cloned) !== type) + cloned = undefined; + } catch (error) { + } + if (!cloned) + try { + cloned = new File([value], value.name, value); + } catch (error) { + } + if (!cloned) + throwUnpolyfillable(type); + break; + case 'FileList': + dataTransfer = createDataTransfer(); + if (dataTransfer) { + for (i = 0, length = lengthOfArrayLike(value); i < length; i++) { + dataTransfer.items.add(structuredCloneInternal(value[i], map, transferredBuffers)); + } + cloned = dataTransfer.files; + } else + cloned = tryNativeRestrictedStructuredClone(value, type); + break; + case 'ImageData': + try { + cloned = new ImageData(structuredCloneInternal(value.data, map, transferredBuffers), value.width, value.height, { colorSpace: value.colorSpace }); + } catch (error) { + cloned = tryNativeRestrictedStructuredClone(value, type); + } + break; + default: + if (nativeRestrictedStructuredClone) { + cloned = nativeRestrictedStructuredClone(value); + } else + switch (type) { + case 'BigInt': + cloned = Object(value.valueOf()); + break; + case 'Boolean': + cloned = Object(thisBooleanValue(value)); + break; + case 'Number': + cloned = Object(thisNumberValue(value)); + break; + case 'String': + cloned = Object(thisStringValue(value)); + break; + case 'Date': + cloned = new Date(thisTimeValue(value)); + break; + case 'Blob': try { - cmds = objs.get(this.loadedName + "_path_" + character); - } catch (ex) { - if (!this.ignoreErrors) { - throw ex; - } - - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath - }); - - (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); - return this.compiledGlyphs[character] = function (c, size) {}; + cloned = value.slice(0, value.size, value.type); + } catch (error) { + throwUnpolyfillable(type); } - - if (this.isEvalSupported && _util.IsEvalSupportedCached.value) { - const jsBuf = []; - - for (const current of cmds) { - const args = current.args !== undefined ? current.args.join(",") : ""; - jsBuf.push("c.", current.cmd, "(", args, ");\n"); - } - - return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); + break; + case 'DOMPoint': + case 'DOMPointReadOnly': + C = global[type]; + try { + cloned = C.fromPoint ? C.fromPoint(value) : new C(value.x, value.y, value.z, value.w); + } catch (error) { + throwUnpolyfillable(type); } - - return this.compiledGlyphs[character] = function (c, size) { - for (const current of cmds) { - if (current.cmd === "scale") { - current.args = [size, -size]; - } - - c[current.cmd].apply(c, current.args); - } - }; + break; + case 'DOMRect': + case 'DOMRectReadOnly': + C = global[type]; + try { + cloned = C.fromRect ? C.fromRect(value) : new C(value.x, value.y, value.width, value.height); + } catch (error) { + throwUnpolyfillable(type); + } + break; + case 'DOMMatrix': + case 'DOMMatrixReadOnly': + C = global[type]; + try { + cloned = C.fromMatrix ? C.fromMatrix(value) : new C(value); + } catch (error) { + throwUnpolyfillable(type); + } + break; + case 'AudioData': + case 'VideoFrame': + if (!isCallable(value.clone)) + throwUnpolyfillable(type); + try { + cloned = value.clone(); + } catch (error) { + throwUncloneable(type); + } + break; + case 'CropTarget': + case 'CryptoKey': + case 'FileSystemDirectoryHandle': + case 'FileSystemFileHandle': + case 'FileSystemHandle': + case 'GPUCompilationInfo': + case 'GPUCompilationMessage': + case 'ImageBitmap': + case 'RTCCertificate': + case 'WebAssembly.Module': + throwUnpolyfillable(type); + default: + throwUncloneable(type); + } + } + mapSet(map, value, cloned); + switch (type) { + case 'Array': + case 'Object': + keys = objectKeys(value); + for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) { + key = keys[i]; + createProperty(cloned, key, structuredCloneInternal(value[key], map, transferredBuffers)); } - -} - -exports.FontFaceObject = FontFaceObject; + break; + case 'Map': + value.forEach(function (v, k) { + mapSet(cloned, structuredCloneInternal(k, map, transferredBuffers), structuredCloneInternal(v, map, transferredBuffers)); + }); + break; + case 'Set': + value.forEach(function (v) { + setAdd(cloned, structuredCloneInternal(v, map, transferredBuffers)); + }); + break; + case 'Error': + createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map, transferredBuffers)); + if (hasOwn(value, 'cause')) { + createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map, transferredBuffers)); + } + if (name == 'AggregateError') { + cloned.errors = structuredCloneInternal(value.errors, map, transferredBuffers); + } + case 'DOMException': + if (ERROR_STACK_INSTALLABLE) { + createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map, transferredBuffers)); + } + } + return cloned; +}; +var replacePlaceholders = function (value, map) { + if (!isObject(value)) + return value; + if (mapHas(map, value)) + return mapGet(map, value); + var type, object, metadata, i, length, keys, key, replacement; + if (value instanceof Placeholder) { + type = value.type; + object = value.object; + switch (type) { + case 'ArrayBuffer': + case 'SharedArrayBuffer': + replacement = cloneBuffer(object, map, type); + break; + case 'DataView': + case 'Int8Array': + case 'Uint8Array': + case 'Uint8ClampedArray': + case 'Int16Array': + case 'Uint16Array': + case 'Int32Array': + case 'Uint32Array': + case 'Float16Array': + case 'Float32Array': + case 'Float64Array': + case 'BigInt64Array': + case 'BigUint64Array': + metadata = value.metadata; + replacement = cloneView(object, type, metadata.offset, metadata.length, map); + } + } else + switch (classof(value)) { + case 'Array': + case 'Object': + keys = objectKeys(value); + for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) { + key = keys[i]; + value[key] = replacePlaceholders(value[key], map); + } + break; + case 'Map': + replacement = new Map(); + value.forEach(function (v, k) { + mapSet(replacement, replacePlaceholders(k, map), replacePlaceholders(v, map)); + }); + break; + case 'Set': + replacement = new Set(); + value.forEach(function (v) { + setAdd(replacement, replacePlaceholders(v, map)); + }); + break; + case 'Error': + value.message = replacePlaceholders(value.message, map); + if (hasOwn(value, 'cause')) { + value.cause = replacePlaceholders(value.cause, map); + } + if (value.name == 'AggregateError') { + value.errors = replacePlaceholders(value.errors, map); + } + case 'DOMException': + if (ERROR_STACK_INSTALLABLE) { + value.stack = replacePlaceholders(value.stack, map); + } + } + mapSet(map, value, replacement || value); + return replacement || value; +}; +var tryToTransfer = function (rawTransfer, map) { + if (!isObject(rawTransfer)) + throw TypeError('Transfer option cannot be converted to a sequence'); + var transfer = []; + iterate(rawTransfer, function (value) { + push(transfer, anObject(value)); + }); + var i = 0; + var length = lengthOfArrayLike(transfer); + var buffers = []; + var value, type, C, transferred, canvas, context; + while (i < length) { + value = transfer[i++]; + type = classof(value); + if (type === 'ArrayBuffer') { + push(buffers, value); + continue; + } + if (mapHas(map, value)) + throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR); + if (PROPER_TRANSFER) { + transferred = nativeStructuredClone(value, { transfer: [value] }); + } else + switch (type) { + case 'ImageBitmap': + C = global.OffscreenCanvas; + if (!isConstructor(C)) + throwUnpolyfillable(type, TRANSFERRING); + try { + canvas = new C(value.width, value.height); + context = canvas.getContext('bitmaprenderer'); + context.transferFromImageBitmap(value); + transferred = canvas.transferToImageBitmap(); + } catch (error) { + } + break; + case 'AudioData': + case 'VideoFrame': + if (!isCallable(value.clone) || !isCallable(value.close)) + throwUnpolyfillable(type, TRANSFERRING); + try { + transferred = value.clone(); + value.close(); + } catch (error) { + } + break; + case 'MediaSourceHandle': + case 'MessagePort': + case 'OffscreenCanvas': + case 'ReadableStream': + case 'TransformStream': + case 'WritableStream': + throwUnpolyfillable(type, TRANSFERRING); + } + if (transferred === undefined) + throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR); + mapSet(map, value, transferred); + } + return buffers; +}; +var tryToTransferBuffers = function (transfer, map) { + var i = 0; + var length = lengthOfArrayLike(transfer); + var value, transferred; + while (i < length) { + value = transfer[i++]; + if (mapHas(map, value)) + throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR); + if (PROPER_TRANSFER) { + transferred = nativeStructuredClone(value, { transfer: [value] }); + } else { + if (!isCallable(value.transfer)) + throwUnpolyfillable('ArrayBuffer', TRANSFERRING); + transferred = value.transfer(); + } + mapSet(map, value, transferred); + } +}; +$({ + global: true, + enumerable: true, + sham: !PROPER_TRANSFER, + forced: FORCED_REPLACEMENT +}, { + structuredClone: function structuredClone(value) { + var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined; + var transfer = options ? options.transfer : undefined; + var transferredBuffers = false; + var map, buffers; + if (transfer !== undefined) { + map = new Map(); + buffers = tryToTransfer(transfer, map); + transferredBuffers = !!lengthOfArrayLike(buffers); + } + var clone = structuredCloneInternal(value, map, transferredBuffers); + if (transferredBuffers) { + map = new Map(); + tryToTransferBuffers(transfer, map); + clone = replacePlaceholders(clone, map); + } + return clone; + } +}); /***/ }), -/* 8 */ +/* 152 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var fails = __w_pdfjs_require__(7); +var isCallable = __w_pdfjs_require__(21); +var classof = __w_pdfjs_require__(78); +var getBuiltIn = __w_pdfjs_require__(24); +var inspectSource = __w_pdfjs_require__(51); +var noop = function () { +}; +var empty = []; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } +}; +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; +isConstructorLegacy.sham = true; +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () { + called = true; + }) || called; +}) ? isConstructorLegacy : isConstructorModern; + +/***/ }), +/* 153 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var bind = __w_pdfjs_require__(99); +var call = __w_pdfjs_require__(8); +var anObject = __w_pdfjs_require__(47); +var tryToString = __w_pdfjs_require__(32); +var isArrayIteratorMethod = __w_pdfjs_require__(154); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var isPrototypeOf = __w_pdfjs_require__(25); +var getIterator = __w_pdfjs_require__(156); +var getIteratorMethod = __w_pdfjs_require__(157); +var iteratorClose = __w_pdfjs_require__(139); +var $TypeError = TypeError; +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; +var ResultPrototype = Result.prototype; +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + var stop = function (condition) { + if (iterator) + iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) + throw $TypeError(tryToString(iterable) + ' is not iterable'); + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) + return result; + } + return new Result(false); +}; + +/***/ }), +/* 154 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var wellKnownSymbol = __w_pdfjs_require__(34); +var Iterators = __w_pdfjs_require__(155); +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + +/***/ }), +/* 155 */ +/***/ ((module) => { + +module.exports = {}; + +/***/ }), +/* 156 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +var aCallable = __w_pdfjs_require__(31); +var anObject = __w_pdfjs_require__(47); +var tryToString = __w_pdfjs_require__(32); +var getIteratorMethod = __w_pdfjs_require__(157); +var $TypeError = TypeError; +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw $TypeError(tryToString(argument) + ' is not iterable'); +}; + +/***/ }), +/* 157 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var classof = __w_pdfjs_require__(78); +var getMethod = __w_pdfjs_require__(30); +var isNullOrUndefined = __w_pdfjs_require__(17); +var Iterators = __w_pdfjs_require__(155); +var wellKnownSymbol = __w_pdfjs_require__(34); +var ITERATOR = wellKnownSymbol('iterator'); +module.exports = function (it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, '@@iterator') || Iterators[classof(it)]; +}; + +/***/ }), +/* 158 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var toPropertyKey = __w_pdfjs_require__(18); +var definePropertyModule = __w_pdfjs_require__(45); +var createPropertyDescriptor = __w_pdfjs_require__(11); +module.exports = function (object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) + definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else + object[propertyKey] = value; +}; + +/***/ }), +/* 159 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var call = __w_pdfjs_require__(8); +var hasOwn = __w_pdfjs_require__(39); +var isPrototypeOf = __w_pdfjs_require__(25); +var regExpFlags = __w_pdfjs_require__(160); +var RegExpPrototype = RegExp.prototype; +module.exports = function (R) { + var flags = R.flags; + return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; +}; + +/***/ }), +/* 160 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var anObject = __w_pdfjs_require__(47); +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.hasIndices) + result += 'd'; + if (that.global) + result += 'g'; + if (that.ignoreCase) + result += 'i'; + if (that.multiline) + result += 'm'; + if (that.dotAll) + result += 's'; + if (that.unicode) + result += 'u'; + if (that.unicodeSets) + result += 'v'; + if (that.sticky) + result += 'y'; + return result; +}; + +/***/ }), +/* 161 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var MapPrototype = Map.prototype; +module.exports = { + Map: Map, + set: uncurryThis(MapPrototype.set), + get: uncurryThis(MapPrototype.get), + has: uncurryThis(MapPrototype.has), + remove: uncurryThis(MapPrototype['delete']), + proto: MapPrototype +}; + +/***/ }), +/* 162 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NodeStandardFontDataFactory = exports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0; - -var _base_factory = __w_pdfjs_require__(5); - -var _is_node = __w_pdfjs_require__(4); - -var _util = __w_pdfjs_require__(2); - -let NodeCanvasFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); - } - -}; -exports.NodeCanvasFactory = NodeCanvasFactory; -let NodeCMapReaderFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); - } - -}; -exports.NodeCMapReaderFactory = NodeCMapReaderFactory; -let NodeStandardFontDataFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeStandardFontDataFactory"); - } - -}; -exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; - -if (_is_node.isNodeJS) { - const fetchData = function (url) { - return new Promise((resolve, reject) => { - const fs = require("fs"); - - fs.readFile(url, (error, data) => { - if (error || !data) { - reject(new Error(error)); - return; - } - - resolve(new Uint8Array(data)); - }); - }); - }; - - exports.NodeCanvasFactory = NodeCanvasFactory = class extends _base_factory.BaseCanvasFactory { - _createCanvas(width, height) { - const Canvas = require("canvas"); - - return Canvas.createCanvas(width, height); - } - - }; - exports.NodeCMapReaderFactory = NodeCMapReaderFactory = class extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } - - }; - exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = class extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url); - } - - }; -} - -/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AnnotationStorage = void 0; - -var _util = __w_pdfjs_require__(2); - +exports.SerializableEmpty = exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0; +__w_pdfjs_require__(89); +__w_pdfjs_require__(148); +__w_pdfjs_require__(151); +var _util = __w_pdfjs_require__(1); +var _editor = __w_pdfjs_require__(163); +var _murmurhash = __w_pdfjs_require__(169); +const SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfers: undefined +}); +exports.SerializableEmpty = SerializableEmpty; class AnnotationStorage { + #modified = false; + #storage = new Map(); constructor() { - this._storage = new Map(); - this._modified = false; this.onSetModified = null; this.onResetModified = null; + this.onAnnotationEditor = null; } - getValue(key, defaultValue) { - const obj = this._storage.get(key); - - return obj !== undefined ? obj : defaultValue; + const value = this.#storage.get(key); + if (value === undefined) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return this.#storage.get(key); + } + remove(key) { + this.#storage.delete(key); + if (this.#storage.size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of this.#storage.values()) { + if (value instanceof _editor.AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } } - setValue(key, value) { - const obj = this._storage.get(key); - + const obj = this.#storage.get(key); let modified = false; - if (obj !== undefined) { for (const [entry, val] of Object.entries(value)) { if (obj[entry] !== val) { @@ -4514,211 +6774,3608 @@ class AnnotationStorage { } } } else { - this._storage.set(key, value); - modified = true; + this.#storage.set(key, value); } - if (modified) { - this._setModified(); + this.#setModified(); + } + if (value instanceof _editor.AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); } } - + has(key) { + return this.#storage.has(key); + } getAll() { - return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null; + return this.#storage.size > 0 ? (0, _util.objectFromMap)(this.#storage) : null; + } + setAll(obj) { + for (const [key, val] of Object.entries(obj)) { + this.setValue(key, val); + } } - get size() { - return this._storage.size; + return this.#storage.size; } - - _setModified() { - if (!this._modified) { - this._modified = true; - + #setModified() { + if (!this.#modified) { + this.#modified = true; if (typeof this.onSetModified === "function") { this.onSetModified(); } } } - resetModified() { - if (this._modified) { - this._modified = false; - + if (this.#modified) { + this.#modified = false; if (typeof this.onResetModified === "function") { this.onResetModified(); } } } - - get serializable() { - return this._storage.size > 0 ? this._storage : null; + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (this.#storage.size === 0) { + return SerializableEmpty; + } + const map = new Map(), + hash = new _murmurhash.MurmurHash3_64(), + transfers = []; + const context = Object.create(null); + let hasBitmap = false; + for (const [key, val] of this.#storage) { + const serialized = val instanceof _editor.AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap ||= !!serialized.bitmap; + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfers.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfers + } : SerializableEmpty; } - } - exports.AnnotationStorage = AnnotationStorage; +class PrintAnnotationStorage extends AnnotationStorage { + #serializable; + constructor(parent) { + super(); + const { + map, + hash, + transfers + } = parent.serializable; + const clone = structuredClone(map, null); + this.#serializable = { + map: clone, + hash, + transfers + }; + } + get print() { + (0, _util.unreachable)("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return this.#serializable; + } +} +exports.PrintAnnotationStorage = PrintAnnotationStorage; /***/ }), -/* 10 */ +/* 163 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditor = void 0; +__w_pdfjs_require__(89); +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +var _tools = __w_pdfjs_require__(164); +class AnnotationEditor { + #keepAspectRatio = false; + #resizersDiv = null; + #resizePosition = null; + #boundFocusin = this.focusin.bind(this); + #boundFocusout = this.focusout.bind(this); + #hasBeenSelected = false; + #isEditing = false; + #isInEditMode = false; + _uiManager = null; + #zIndex = AnnotationEditor._zIndex++; + static _colorManager = new _tools.ColorManager(); + static _zIndex = 1; + constructor(parameters) { + if (this.constructor === AnnotationEditor) { + (0, _util.unreachable)("Cannot initialize AnnotationEditor."); + } + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + const { + rotation, + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + static get _defaultLineColor() { + return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager + }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); + } + static initialize(_l10n) {} + static updateDefaultParams(_type, _value) {} + static get defaultPropertiesToUpdate() { + return []; + } + get propertiesToUpdate() { + return []; + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = this.#zIndex; + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } + this.parent = parent; + } + focusin(event) { + if (!this.#hasBeenSelected) { + this.parent.setSelected(this); + } else { + this.#hasBeenSelected = false; + } + } + focusout(event) { + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target?.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!this.parent?.isMultipleSelection) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + dragstart(event) { + const rect = this.parent.div.getBoundingClientRect(); + this.startX = event.clientX - rect.x; + this.startY = event.clientY - rect.y; + event.dataTransfer.setData("text/plain", this.id); + event.dataTransfer.effectAllowed = "move"; + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + #translate(_ref, x, y) { + let [width, height] = _ref; + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.fixAndSetPosition(); + } + translate(x, y) { + this.#translate(this.parentDimensions, x, y); + } + translateInPage(x, y) { + this.#translate(this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + fixAndSetPosition() { + const [pageWidth, pageHeight] = this.pageDimensions; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + switch (this.rotation) { + case 0: + x = Math.max(0, Math.min(pageWidth - width, x)); + y = Math.max(0, Math.min(pageHeight - height, y)); + break; + case 90: + x = Math.max(0, Math.min(pageWidth - height, x)); + y = Math.min(pageHeight, Math.max(width, y)); + break; + case 180: + x = Math.min(pageWidth, Math.max(width, x)); + y = Math.min(pageHeight, Math.max(height, y)); + break; + case 270: + x = Math.min(pageWidth, Math.max(height, x)); + y = Math.max(0, Math.min(pageHeight - width, y)); + break; + } + this.x = x / pageWidth; + this.y = y / pageHeight; + this.div.style.left = `${(100 * this.x).toFixed(2)}%`; + this.div.style.top = `${(100 * this.y).toFixed(2)}%`; + } + screenToPageTranslation(x, y) { + switch (this.parentRotation) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } + } + pageTranslationToScreen(x, y) { + switch (this.parentRotation) { + case 90: + return [-y, x]; + case 180: + return [-x, -y]; + case 270: + return [y, -x]; + default: + return [x, y]; + } + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + realScale + } = this._uiManager.viewParameters; + const [pageWidth, pageHeight] = this.pageDimensions; + return [pageWidth * realScale, pageHeight * realScale]; + } + setDims(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; + if (!this.#keepAspectRatio) { + this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!this.#keepAspectRatio && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + #createResizers() { + if (this.#resizersDiv) { + return; + } + this.#resizersDiv = document.createElement("div"); + this.#resizersDiv.classList.add("resizers"); + const classes = ["topLeft", "topRight", "bottomRight", "bottomLeft"]; + if (!this._willKeepAspectRatio) { + classes.push("topMiddle", "middleRight", "bottomMiddle", "middleLeft"); + } + for (const name of classes) { + const div = document.createElement("div"); + this.#resizersDiv.append(div); + div.classList.add("resizer", name); + div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); + } + this.div.prepend(this.#resizersDiv); + } + #resizerPointerdown(name, event) { + event.preventDefault(); + this.#resizePosition = [event.clientX, event.clientY]; + const boundResizerPointermove = this.#resizerPointermove.bind(this, name); + const savedDraggable = this.div.draggable; + this.div.draggable = false; + const resizingClassName = `resizing${name.charAt(0).toUpperCase()}${name.slice(1)}`; + this.parent.div.classList.add(resizingClassName); + const pointerMoveOptions = { + passive: true, + capture: true + }; + window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + const pointerUpCallback = () => { + this._uiManager.stopUndoAccumulation(); + this.div.draggable = savedDraggable; + this.parent.div.classList.remove(resizingClassName); + window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); + }; + window.addEventListener("pointerup", pointerUpCallback, { + once: true + }); + } + #resizerPointermove(name, event) { + const { + clientX, + clientY + } = event; + const deltaX = clientX - this.#resizePosition[0]; + const deltaY = clientY - this.#resizePosition[1]; + this.#resizePosition[0] = clientX; + this.#resizePosition[1] = clientY; + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; + let cmd; + const round = x => Math.round(x * 10000) / 10000; + const updatePosition = (width, height) => { + const [pWidth, pHeight] = this.parentDimensions; + this.setDims(pWidth * width, pHeight * height); + this.fixAndSetPosition(); + }; + const undo = () => { + this.width = savedWidth; + this.height = savedHeight; + this.x = savedX; + this.y = savedY; + updatePosition(savedWidth, savedHeight); + }; + switch (name) { + case "topLeft": + { + if (Math.sign(deltaX) * Math.sign(deltaY) < 0) { + return; + } + const dist = Math.hypot(deltaX, deltaY); + const oldDiag = Math.hypot(savedWidth * parentWidth, savedHeight * parentHeight); + const brX = round(savedX + savedWidth); + const brY = round(savedY + savedHeight); + const ratio = Math.max(Math.min(1 - Math.sign(deltaX) * (dist / oldDiag), 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + const newWidth = round(savedWidth * ratio); + const newHeight = round(savedHeight * ratio); + const newX = brX - newWidth; + const newY = brY - newHeight; + cmd = () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + updatePosition(newWidth, newHeight); + }; + break; + } + case "topMiddle": + { + const bmY = round(this.y + savedHeight); + const newHeight = round(Math.max(minHeight, Math.min(1, savedHeight - deltaY / parentHeight))); + const newY = bmY - newHeight; + cmd = () => { + this.height = newHeight; + this.y = newY; + updatePosition(savedWidth, newHeight); + }; + break; + } + case "topRight": + { + if (Math.sign(deltaX) * Math.sign(deltaY) > 0) { + return; + } + const dist = Math.hypot(deltaX, deltaY); + const oldDiag = Math.hypot(this.width * parentWidth, this.height * parentHeight); + const blY = round(savedY + this.height); + const ratio = Math.max(Math.min(1 + Math.sign(deltaX) * (dist / oldDiag), 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + const newWidth = round(savedWidth * ratio); + const newHeight = round(savedHeight * ratio); + const newY = blY - newHeight; + cmd = () => { + this.width = newWidth; + this.height = newHeight; + this.y = newY; + updatePosition(newWidth, newHeight); + }; + break; + } + case "middleRight": + { + const newWidth = round(Math.max(minWidth, Math.min(1, savedWidth + deltaX / parentWidth))); + cmd = () => { + this.width = newWidth; + updatePosition(newWidth, savedHeight); + }; + break; + } + case "bottomRight": + { + if (Math.sign(deltaX) * Math.sign(deltaY) < 0) { + return; + } + const dist = Math.hypot(deltaX, deltaY); + const oldDiag = Math.hypot(this.width * parentWidth, this.height * parentHeight); + const ratio = Math.max(Math.min(1 + Math.sign(deltaX) * (dist / oldDiag), 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + const newWidth = round(savedWidth * ratio); + const newHeight = round(savedHeight * ratio); + cmd = () => { + this.width = newWidth; + this.height = newHeight; + updatePosition(newWidth, newHeight); + }; + break; + } + case "bottomMiddle": + { + const newHeight = round(Math.max(minHeight, Math.min(1, savedHeight + deltaY / parentHeight))); + cmd = () => { + this.height = newHeight; + updatePosition(savedWidth, newHeight); + }; + break; + } + case "bottomLeft": + { + if (Math.sign(deltaX) * Math.sign(deltaY) > 0) { + return; + } + const dist = Math.hypot(deltaX, deltaY); + const oldDiag = Math.hypot(this.width * parentWidth, this.height * parentHeight); + const trX = round(savedX + this.width); + const ratio = Math.max(Math.min(1 - Math.sign(deltaX) * (dist / oldDiag), 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + const newWidth = round(savedWidth * ratio); + const newHeight = round(savedHeight * ratio); + const newX = trX - newWidth; + cmd = () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + updatePosition(newWidth, newHeight); + }; + break; + } + case "middleLeft": + { + const mrX = round(savedX + savedWidth); + const newWidth = round(Math.max(minWidth, Math.min(1, savedWidth - deltaX / parentWidth))); + const newX = mrX - newWidth; + cmd = () => { + this.width = newWidth; + this.x = newX; + updatePosition(newWidth, savedHeight); + }; + break; + } + } + this.addCommands({ + cmd, + undo, + mustExec: true, + type: _util.AnnotationEditorParamsType.RESIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.setAttribute("tabIndex", 0); + this.setInForeground(); + this.div.addEventListener("focusin", this.#boundFocusin); + this.div.addEventListener("focusout", this.#boundFocusout); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + (0, _tools.bindEvents)(this, this.div, ["dragstart", "pointerdown"]); + return this.div; + } + pointerdown(event) { + const { + isMac + } = _util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + } + this.#hasBeenSelected = true; + } + getRect(tx, ty) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (this.rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); + } + } + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); + } + } + onceAdded() {} + isEmpty() { + return false; + } + enableEditMode() { + this.#isInEditMode = true; + } + disableEditMode() { + this.#isInEditMode = false; + } + isInEditMode() { + return this.#isInEditMode; + } + shouldGetKeyboardEvents() { + return false; + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + rebuild() { + this.div?.addEventListener("focusin", this.#boundFocusin); + this.div?.addEventListener("focusout", this.#boundFocusout); + } + serialize() { + let _isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + let _context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + (0, _util.unreachable)("An editor must be serializable"); + } + static deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + remove() { + this.div.removeEventListener("focusin", this.#boundFocusin); + this.div.removeEventListener("focusout", this.#boundFocusout); + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + this.#createResizers(); + this.#resizersDiv.classList.remove("hidden"); + } + } + select() { + this.makeResizable(); + this.div?.classList.add("selectedEditor"); + } + unselect() { + this.#resizersDiv?.classList.add("hidden"); + this.div?.classList.remove("selectedEditor"); + if (this.div?.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus(); + } + } + updateParams(type, value) {} + disableEditing() {} + enableEditing() {} + enterInEditMode() {} + get contentDiv() { + return this.div; + } + get isEditing() { + return this.#isEditing; + } + set isEditing(value) { + this.#isEditing = value; + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + this.#keepAspectRatio = true; + const aspectRatio = width / height; + const { + style + } = this.div; + style.aspectRatio = aspectRatio; + style.height = "auto"; + } + static get MIN_SIZE() { + return 16; + } +} +exports.AnnotationEditor = AnnotationEditor; +class FakeEditor extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; + } + serialize() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex + }; + } +} + +/***/ }), +/* 164 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0; +exports.bindEvents = bindEvents; +exports.opacityToHex = opacityToHex; +__w_pdfjs_require__(2); +__w_pdfjs_require__(89); +__w_pdfjs_require__(125); +__w_pdfjs_require__(135); +__w_pdfjs_require__(137); +__w_pdfjs_require__(140); +__w_pdfjs_require__(142); +__w_pdfjs_require__(144); +__w_pdfjs_require__(146); +__w_pdfjs_require__(165); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } +} +function opacityToHex(opacity) { + return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); +} +class IdManager { + #id = 0; + getId() { + return `${_util.AnnotationEditorPrefix}${this.#id++}`; + } +} +class ImageManager { + #baseId = (0, _util.getUuid)(); + #id = 0; + #cache = null; + async #get(key, rawData) { + this.#cache ||= new Map(); + let data = this.#cache.get(key); + if (data === null) { + return null; + } + if (data?.bitmap) { + data.refCounter += 1; + return data; + } + try { + data ||= { + bitmap: null, + id: `image_${this.#baseId}_${this.#id++}`, + refCounter: 0, + isSvg: false + }; + let image; + if (typeof rawData === "string") { + data.url = rawData; + const response = await fetch(rawData); + if (!response.ok) { + throw new Error(response.statusText); + } + image = await response.blob(); + } else { + image = data.file = rawData; + } + if (image.type === "image/svg+xml") { + const fileReader = new FileReader(); + const imageElement = new Image(); + const imagePromise = new Promise((resolve, reject) => { + imageElement.onload = () => { + data.bitmap = imageElement; + data.isSvg = true; + resolve(); + }; + fileReader.onload = () => { + imageElement.src = data.svgUrl = fileReader.result; + }; + imageElement.onerror = fileReader.onerror = reject; + }); + fileReader.readAsDataURL(image); + await imagePromise; + } else { + data.bitmap = await createImageBitmap(image); + } + data.refCounter = 1; + } catch (e) { + console.error(e); + data = null; + } + this.#cache.set(key, data); + if (data) { + this.#cache.set(data.id, data); + } + return data; + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return this.#get(`${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return this.#get(url, url); + } + async getFromId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return null; + } + if (data.bitmap) { + data.refCounter += 1; + return data; + } + if (data.file) { + return this.getFromFile(data.file); + } + return this.getFromUrl(data.url); + } + getSvgUrl(id) { + const data = this.#cache.get(id); + if (!data?.isSvg) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + this.#cache ||= new Map(); + const data = this.#cache.get(id); + if (!data) { + return; + } + data.refCounter -= 1; + if (data.refCounter !== 0) { + return; + } + data.bitmap = null; + } + isValidId(id) { + return id.startsWith(`image_${this.#baseId}_`); + } +} +class CommandManager { + #commands = []; + #locked = false; + #maxSize; + #position = -1; + constructor() { + let maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128; + this.#maxSize = maxSize; + } + add(_ref) { + let { + cmd, + undo, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + } = _ref; + if (mustExec) { + cmd(); + } + if (this.#locked) { + return; + } + const save = { + cmd, + undo, + type + }; + if (this.#position === -1) { + if (this.#commands.length > 0) { + this.#commands.length = 0; + } + this.#position = 0; + this.#commands.push(save); + return; + } + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + } + this.#commands[this.#position] = save; + return; + } + const next = this.#position + 1; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next; + if (next < this.#commands.length) { + this.#commands.splice(next); + } + } + this.#commands.push(save); + } + stopUndoAccumulation() { + if (this.#position !== -1) { + this.#commands[this.#position].type = NaN; + } + } + undo() { + if (this.#position === -1) { + return; + } + this.#locked = true; + this.#commands[this.#position].undo(); + this.#locked = false; + this.#position -= 1; + } + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#locked = true; + this.#commands[this.#position].cmd(); + this.#locked = false; + } + } + hasSomethingToUndo() { + return this.#position !== -1; + } + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + } + destroy() { + this.#commands = null; + } +} +exports.CommandManager = CommandManager; +class KeyboardManager { + constructor(callbacks) { + this.buffer = []; + this.callbacks = new Map(); + this.allKeys = new Set(); + const { + isMac + } = _util.FeatureTest.platform; + for (const [keys, callback, options = {}] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+"); + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + } + #serialize(event) { + if (event.altKey) { + this.buffer.push("alt"); + } + if (event.ctrlKey) { + this.buffer.push("ctrl"); + } + if (event.metaKey) { + this.buffer.push("meta"); + } + if (event.shiftKey) { + this.buffer.push("shift"); + } + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info = this.callbacks.get(this.#serialize(event)); + if (!info) { + return; + } + const { + callback, + options: { + bubbles = false, + args = [], + checker = null + } + } = info; + if (checker && !checker(self, event)) { + return; + } + callback.bind(self, ...args)(); + if (!bubbles) { + event.stopPropagation(); + event.preventDefault(); + } + } +} +exports.KeyboardManager = KeyboardManager; +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + get _colors() { + const colors = new Map([["CanvasText", null], ["Canvas", null]]); + (0, _display_utils.getColorValues)(colors); + return (0, _util.shadow)(this, "_colors", colors); + } + convert(color) { + const rgb = (0, _display_utils.getRGB)(color); + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; + } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return ColorManager._colorsMapping.get(name); + } + } + return rgb; + } + getHexCode(name) { + const rgb = this._colors.get(name); + if (!rgb) { + return name; + } + return _util.Util.makeHexColor(...rgb); + } +} +exports.ColorManager = ColorManager; +class AnnotationEditorUIManager { + #activeEditor = null; + #allEditors = new Map(); + #allLayers = new Map(); + #annotationStorage = null; + #commandManager = new CommandManager(); + #currentPageIndex = 0; + #deletedAnnotationsElementIds = new Set(); + #editorTypes = null; + #editorsToRescale = new Set(); + #eventBus = null; + #filterFactory = null; + #idManager = new IdManager(); + #isEnabled = false; + #mode = _util.AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #pageColors = null; + #boundCopy = this.copy.bind(this); + #boundCut = this.cut.bind(this); + #boundPaste = this.paste.bind(this); + #boundKeydown = this.keydown.bind(this); + #boundOnEditingAction = this.onEditingAction.bind(this); + #boundOnPageChanging = this.onPageChanging.bind(this); + #boundOnScaleChanging = this.onScaleChanging.bind(this); + #boundOnRotationChanging = this.onRotationChanging.bind(this); + #previousStates = { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false + }; + #translation = [0, 0]; + #translationTimeoutId = null; + #container = null; + static TRANSLATE_SMALL = 1; + static TRANSLATE_BIG = 10; + static get _keyboardManager() { + const proto = AnnotationEditorUIManager.prototype; + const arrowChecker = self => { + const { + activeElement + } = document; + return activeElement && self.#container.contains(activeElement) && self.hasSomethingToControl(); + }; + const small = this.TRANSLATE_SMALL; + const big = this.TRANSLATE_BIG; + return (0, _util.shadow)(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll], [["ctrl+z", "mac+meta+z"], proto.undo], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { + args: [0, big], + checker: arrowChecker + }]])); + } + constructor(container, eventBus, pdfDocument, pageColors) { + this.#container = container; + this.#eventBus = eventBus; + this.#eventBus._on("editingaction", this.#boundOnEditingAction); + this.#eventBus._on("pagechanging", this.#boundOnPageChanging); + this.#eventBus._on("scalechanging", this.#boundOnScaleChanging); + this.#eventBus._on("rotationchanging", this.#boundOnRotationChanging); + this.#annotationStorage = pdfDocument.annotationStorage; + this.#filterFactory = pdfDocument.filterFactory; + this.#pageColors = pageColors; + this.viewParameters = { + realScale: _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + } + destroy() { + this.#removeKeyboardManager(); + this.#eventBus._off("editingaction", this.#boundOnEditingAction); + this.#eventBus._off("pagechanging", this.#boundOnPageChanging); + this.#eventBus._off("scalechanging", this.#boundOnScaleChanging); + this.#eventBus._off("rotationchanging", this.#boundOnRotationChanging); + for (const layer of this.#allLayers.values()) { + layer.destroy(); + } + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#editorsToRescale.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#commandManager.destroy(); + } + get hcmFilter() { + return (0, _util.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); + } + onPageChanging(_ref2) { + let { + pageNumber + } = _ref2; + this.#currentPageIndex = pageNumber - 1; + } + focusMainContainer() { + this.#container.focus(); + } + addShouldRescale(editor) { + this.#editorsToRescale.add(editor); + } + removeShouldRescale(editor) { + this.#editorsToRescale.delete(editor); + } + onScaleChanging(_ref3) { + let { + scale + } = _ref3; + this.commitOrRemove(); + this.viewParameters.realScale = scale * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of this.#editorsToRescale) { + editor.onScaleChanging(); + } + } + onRotationChanging(_ref4) { + let { + pagesRotation + } = _ref4; + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { + this.#annotationStorage.setValue(editor.id, editor); + } + } + #addKeyboardManager() { + window.addEventListener("keydown", this.#boundKeydown, { + capture: true + }); + } + #removeKeyboardManager() { + window.removeEventListener("keydown", this.#boundKeydown, { + capture: true + }); + } + #addCopyPasteListeners() { + document.addEventListener("copy", this.#boundCopy); + document.addEventListener("cut", this.#boundCut); + document.addEventListener("paste", this.#boundPaste); + } + #removeCopyPasteListeners() { + document.removeEventListener("copy", this.#boundCopy); + document.removeEventListener("cut", this.#boundCut); + document.removeEventListener("paste", this.#boundPaste); + } + copy(event) { + event.preventDefault(); + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of this.#selectedEditors) { + const serialized = editor.serialize(true); + if (serialized) { + editors.push(serialized); + } + } + if (editors.length === 0) { + return; + } + event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); + } + cut(event) { + this.copy(event); + this.delete(); + } + paste(event) { + event.preventDefault(); + let data = event.clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + (0, _util.warn)(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); + } + this.#selectEditors(newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + (0, _util.warn)(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.getActive()?.shouldGetKeyboardEvents()) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + onEditingAction(details) { + if (["undo", "redo", "delete", "selectAll"].includes(details.name)) { + this[details.name](); + } + } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(_ref5 => { + let [key, value] = _ref5; + return this.#previousStates[key] !== value; + }); + if (hasChanged) { + this.#eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + } + } + #dispatchUpdateUI(details) { + this.#eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + } + setEditingState(isEditing) { + if (isEditing) { + this.#addKeyboardManager(); + this.#addCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== _util.AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + this.#removeKeyboardManager(); + this.#removeCopyPasteListeners(); + this.#dispatchUpdateStates({ + isEditing: false + }); + } + } + registerEditorTypes(types) { + if (this.#editorTypes) { + return; + } + this.#editorTypes = types; + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + } + getId() { + return this.#idManager.getId(); + } + get currentLayer() { + return this.#allLayers.get(this.#currentPageIndex); + } + get currentPageIndex() { + return this.#currentPageIndex; + } + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + } + updateMode(mode) { + let editId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + this.#mode = mode; + if (mode === _util.AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); + return; + } + this.setEditingState(true); + this.#enableAll(); + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); + } + if (!editId) { + return; + } + for (const editor of this.#allEditors.values()) { + if (editor.annotationElementId === editId) { + this.setSelected(editor); + editor.enterInEditMode(); + break; + } + } + } + updateToolbar(mode) { + if (mode === this.#mode) { + return; + } + this.#eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + } + updateParams(type, value) { + if (!this.#editorTypes) { + return; + } + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + } + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } + } + #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true; + for (const layer of this.#allLayers.values()) { + layer.enable(); + } + } + } + #disableAll() { + this.unselectAll(); + if (this.#isEnabled) { + this.#isEnabled = false; + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + } + } + getEditors(pageIndex) { + const editors = []; + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + } + return editors; + } + getEditor(id) { + return this.#allEditors.get(id); + } + addEditor(editor) { + this.#allEditors.set(editor.id, editor); + } + removeEditor(editor) { + this.#allEditors.delete(editor.id); + this.unselect(editor); + if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { + this.#annotationStorage?.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.add(editor.annotationElementId); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return this.#deletedAnnotationsElementIds.has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); + editor.deleted = false; + } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + } + } + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + } + this.#activeEditor = editor; + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + } + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; + } + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + setSelected(editor) { + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + } + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + isSelected(editor) { + return this.#selectedEditors.has(editor); + } + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return this.#selectedEditors.size !== 0; + } + stopUndoAccumulation() { + this.#commandManager.stopUndoAccumulation(); + } + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + } + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); + } + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + } + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + } + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } + } + return false; + } + delete() { + this.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = [...this.#selectedEditors]; + const cmd = () => { + for (const editor of editors) { + editor.remove(); + } + }; + const undo = () => { + for (const editor of editors) { + this.#addEditorToLayer(editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + this.#activeEditor?.commitOrRemove(); + } + hasSomethingToControl() { + return this.#activeEditor || this.hasSelection; + } + #selectEditors(editors) { + this.#selectedEditors.clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + this.#selectedEditors.add(editor); + editor.select(); + } + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); + } + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + } + this.#selectEditors(this.#allEditors.values()); + } + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + return; + } + if (!this.hasSelection) { + return; + } + for (const editor of this.#selectedEditors) { + editor.unselect(); + } + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y) { + let noCommit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + this.#translation[0] += x; + this.#translation[1] += y; + const [totalX, totalY] = this.#translation; + const editors = [...this.#selectedEditors]; + const TIME_TO_WAIT = 1000; + if (this.#translationTimeoutId) { + clearTimeout(this.#translationTimeoutId); + } + this.#translationTimeoutId = setTimeout(() => { + this.#translationTimeoutId = null; + this.#translation[0] = this.#translation[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(totalX, totalY); + } + } + }, + undo: () => { + for (const editor of editors) { + if (this.#allEditors.has(editor.id)) { + editor.translateInPage(-totalX, -totalY); + } + } + }, + mustExec: false + }); + }, TIME_TO_WAIT); + for (const editor of editors) { + editor.translateInPage(x, y); + } + } + isActive(editor) { + return this.#activeEditor === editor; + } + getActive() { + return this.#activeEditor; + } + getMode() { + return this.#mode; + } + get imageManager() { + return (0, _util.shadow)(this, "imageManager", new ImageManager()); + } +} +exports.AnnotationEditorUIManager = AnnotationEditorUIManager; + +/***/ }), +/* 165 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var DESCRIPTORS = __w_pdfjs_require__(6); +var global = __w_pdfjs_require__(4); +var getBuiltIn = __w_pdfjs_require__(24); +var uncurryThis = __w_pdfjs_require__(14); +var call = __w_pdfjs_require__(8); +var isCallable = __w_pdfjs_require__(21); +var isObject = __w_pdfjs_require__(20); +var isArray = __w_pdfjs_require__(91); +var hasOwn = __w_pdfjs_require__(39); +var toString = __w_pdfjs_require__(77); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var createProperty = __w_pdfjs_require__(158); +var fails = __w_pdfjs_require__(7); +var parseJSONString = __w_pdfjs_require__(166); +var NATIVE_SYMBOL = __w_pdfjs_require__(27); +var JSON = global.JSON; +var Number = global.Number; +var SyntaxError = global.SyntaxError; +var nativeParse = JSON && JSON.parse; +var enumerableOwnProperties = getBuiltIn('Object', 'keys'); +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var at = uncurryThis(''.charAt); +var slice = uncurryThis(''.slice); +var exec = uncurryThis(/./.exec); +var push = uncurryThis([].push); +var IS_DIGIT = /^\d$/; +var IS_NON_ZERO_DIGIT = /^[1-9]$/; +var IS_NUMBER_START = /^(-|\d)$/; +var IS_WHITESPACE = /^[\t\n\r ]$/; +var PRIMITIVE = 0; +var OBJECT = 1; +var $parse = function (source, reviver) { + source = toString(source); + var context = new Context(source, 0, ''); + var root = context.parse(); + var value = root.value; + var endIndex = context.skip(IS_WHITESPACE, root.end); + if (endIndex < source.length) { + throw SyntaxError('Unexpected extra character: "' + at(source, endIndex) + '" after the parsed data at: ' + endIndex); + } + return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value; +}; +var internalize = function (holder, name, reviver, node) { + var val = holder[name]; + var unmodified = node && val === node.value; + var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {}; + var elementRecordsLen, keys, len, i, P; + if (isObject(val)) { + var nodeIsArray = isArray(val); + var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {}; + if (nodeIsArray) { + elementRecordsLen = nodes.length; + len = lengthOfArrayLike(val); + for (i = 0; i < len; i++) { + internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined)); + } + } else { + keys = enumerableOwnProperties(val); + len = lengthOfArrayLike(keys); + for (i = 0; i < len; i++) { + P = keys[i]; + internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined)); + } + } + } + return call(reviver, holder, name, val, context); +}; +var internalizeProperty = function (object, key, value) { + if (DESCRIPTORS) { + var descriptor = getOwnPropertyDescriptor(object, key); + if (descriptor && !descriptor.configurable) + return; + } + if (value === undefined) + delete object[key]; + else + createProperty(object, key, value); +}; +var Node = function (value, end, source, nodes) { + this.value = value; + this.end = end; + this.source = source; + this.nodes = nodes; +}; +var Context = function (source, index) { + this.source = source; + this.index = index; +}; +Context.prototype = { + fork: function (nextIndex) { + return new Context(this.source, nextIndex); + }, + parse: function () { + var source = this.source; + var i = this.skip(IS_WHITESPACE, this.index); + var fork = this.fork(i); + var chr = at(source, i); + if (exec(IS_NUMBER_START, chr)) + return fork.number(); + switch (chr) { + case '{': + return fork.object(); + case '[': + return fork.array(); + case '"': + return fork.string(); + case 't': + return fork.keyword(true); + case 'f': + return fork.keyword(false); + case 'n': + return fork.keyword(null); + } + throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i); + }, + node: function (type, value, start, end, nodes) { + return new Node(value, end, type ? null : slice(this.source, start, end), nodes); + }, + object: function () { + var source = this.source; + var i = this.index + 1; + var expectKeypair = false; + var object = {}; + var nodes = {}; + while (i < source.length) { + i = this.until([ + '"', + '}' + ], i); + if (at(source, i) == '}' && !expectKeypair) { + i++; + break; + } + var result = this.fork(i).string(); + var key = result.value; + i = result.end; + i = this.until([':'], i) + 1; + i = this.skip(IS_WHITESPACE, i); + result = this.fork(i).parse(); + createProperty(nodes, key, result); + createProperty(object, key, result.value); + i = this.until([ + ',', + '}' + ], result.end); + var chr = at(source, i); + if (chr == ',') { + expectKeypair = true; + i++; + } else if (chr == '}') { + i++; + break; + } + } + return this.node(OBJECT, object, this.index, i, nodes); + }, + array: function () { + var source = this.source; + var i = this.index + 1; + var expectElement = false; + var array = []; + var nodes = []; + while (i < source.length) { + i = this.skip(IS_WHITESPACE, i); + if (at(source, i) == ']' && !expectElement) { + i++; + break; + } + var result = this.fork(i).parse(); + push(nodes, result); + push(array, result.value); + i = this.until([ + ',', + ']' + ], result.end); + if (at(source, i) == ',') { + expectElement = true; + i++; + } else if (at(source, i) == ']') { + i++; + break; + } + } + return this.node(OBJECT, array, this.index, i, nodes); + }, + string: function () { + var index = this.index; + var parsed = parseJSONString(this.source, this.index + 1); + return this.node(PRIMITIVE, parsed.value, index, parsed.end); + }, + number: function () { + var source = this.source; + var startIndex = this.index; + var i = startIndex; + if (at(source, i) == '-') + i++; + if (at(source, i) == '0') + i++; + else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) + i = this.skip(IS_DIGIT, ++i); + else + throw SyntaxError('Failed to parse number at: ' + i); + if (at(source, i) == '.') + i = this.skip(IS_DIGIT, ++i); + if (at(source, i) == 'e' || at(source, i) == 'E') { + i++; + if (at(source, i) == '+' || at(source, i) == '-') + i++; + var exponentStartIndex = i; + i = this.skip(IS_DIGIT, i); + if (exponentStartIndex == i) + throw SyntaxError("Failed to parse number's exponent value at: " + i); + } + return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i); + }, + keyword: function (value) { + var keyword = '' + value; + var index = this.index; + var endIndex = index + keyword.length; + if (slice(this.source, index, endIndex) != keyword) + throw SyntaxError('Failed to parse value at: ' + index); + return this.node(PRIMITIVE, value, index, endIndex); + }, + skip: function (regex, i) { + var source = this.source; + for (; i < source.length; i++) + if (!exec(regex, at(source, i))) + break; + return i; + }, + until: function (array, i) { + i = this.skip(IS_WHITESPACE, i); + var chr = at(this.source, i); + for (var j = 0; j < array.length; j++) + if (array[j] == chr) + return i; + throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i); + } +}; +var NO_SOURCE_SUPPORT = fails(function () { + var unsafeInt = '9007199254740993'; + var source; + nativeParse(unsafeInt, function (key, value, context) { + source = context.source; + }); + return source !== unsafeInt; +}); +var PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () { + return 1 / nativeParse('-0 \t') !== -Infinity; +}); +$({ + target: 'JSON', + stat: true, + forced: NO_SOURCE_SUPPORT +}, { + parse: function parse(text, reviver) { + return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver); + } +}); + +/***/ }), +/* 166 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var uncurryThis = __w_pdfjs_require__(14); +var hasOwn = __w_pdfjs_require__(39); +var $SyntaxError = SyntaxError; +var $parseInt = parseInt; +var fromCharCode = String.fromCharCode; +var at = uncurryThis(''.charAt); +var slice = uncurryThis(''.slice); +var exec = uncurryThis(/./.exec); +var codePoints = { + '\\"': '"', + '\\\\': '\\', + '\\/': '/', + '\\b': '\b', + '\\f': '\f', + '\\n': '\n', + '\\r': '\r', + '\\t': '\t' +}; +var IS_4_HEX_DIGITS = /^[\da-f]{4}$/i; +var IS_C0_CONTROL_CODE = /^[\u0000-\u001F]$/; +module.exports = function (source, i) { + var unterminated = true; + var value = ''; + while (i < source.length) { + var chr = at(source, i); + if (chr == '\\') { + var twoChars = slice(source, i, i + 2); + if (hasOwn(codePoints, twoChars)) { + value += codePoints[twoChars]; + i += 2; + } else if (twoChars == '\\u') { + i += 2; + var fourHexDigits = slice(source, i, i + 4); + if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) + throw $SyntaxError('Bad Unicode escape at: ' + i); + value += fromCharCode($parseInt(fourHexDigits, 16)); + i += 4; + } else + throw $SyntaxError('Unknown escape sequence: "' + twoChars + '"'); + } else if (chr == '"') { + unterminated = false; + i++; + break; + } else { + if (exec(IS_C0_CONTROL_CODE, chr)) + throw $SyntaxError('Bad control character in string literal at: ' + i); + value += chr; + i++; + } + } + if (unterminated) + throw $SyntaxError('Unterminated string at: ' + i); + return { + value: value, + end: i + }; +}; + +/***/ }), +/* 167 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = exports.AnnotationPrefix = void 0; +exports.deprecated = deprecated; +exports.getColorValues = getColorValues; +exports.getCurrentTransform = getCurrentTransform; +exports.getCurrentTransformInverse = getCurrentTransformInverse; +exports.getFilenameFromUrl = getFilenameFromUrl; +exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; +exports.getRGB = getRGB; +exports.getXfaPageViewport = getXfaPageViewport; +exports.isDataScheme = isDataScheme; +exports.isPdfFile = isPdfFile; +exports.isValidFetchUrl = isValidFetchUrl; +exports.loadScript = loadScript; +exports.setLayerDimensions = setLayerDimensions; +__w_pdfjs_require__(2); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(89); +__w_pdfjs_require__(84); +__w_pdfjs_require__(86); +__w_pdfjs_require__(87); +var _base_factory = __w_pdfjs_require__(168); +var _util = __w_pdfjs_require__(1); +const SVG_NS = "http://www.w3.org/2000/svg"; +const AnnotationPrefix = "pdfjs_internal_id_"; +exports.AnnotationPrefix = AnnotationPrefix; +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +} +exports.PixelsPerInch = PixelsPerInch; +class DOMFilterFactory extends _base_factory.BaseFilterFactory { + #_cache; + #_defs; + #docId; + #document; + #hcmFilter; + #hcmKey; + #hcmUrl; + #hcmHighlightFilter; + #hcmHighlightKey; + #hcmHighlightUrl; + #id = 0; + constructor() { + let { + docId, + ownerDocument = globalThis.document + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + super(); + this.#docId = docId; + this.#document = ownerDocument; + } + get #cache() { + return this.#_cache ||= new Map(); + } + get #defs() { + if (!this.#_defs) { + const div = this.#document.createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = this.#document.createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); + div.append(svg); + svg.append(this.#_defs); + this.#document.body.append(div); + } + return this.#_defs; + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = this.#cache.get(maps); + if (value) { + return value; + } + let tableR, tableG, tableB, key; + if (maps.length === 1) { + const mapR = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR[i] / 255; + } + key = tableR = tableG = tableB = buffer.join(","); + } else { + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + tableR = bufferR.join(","); + tableG = bufferG.join(","); + tableB = bufferB.join(","); + key = `${tableR}${tableG}${tableB}`; + } + value = this.#cache.get(key); + if (value) { + this.#cache.set(maps, value); + return value; + } + const id = `g_${this.#docId}_transfer_map_${this.#id++}`; + const url = `url(#${id})`; + this.#cache.set(maps, url); + this.#cache.set(key, url); + const filter = this.#createFilter(id); + this.#addTransferMapConversion(tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + const key = `${fgColor}-${bgColor}`; + if (this.#hcmKey === key) { + return this.#hcmUrl; + } + this.#hcmKey = key; + this.#hcmUrl = "none"; + this.#hcmFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmUrl; + } + const fgRGB = this.#getRGB(fgColor); + fgColor = _util.Util.makeHexColor(...fgRGB); + const bgRGB = this.#getRGB(bgColor); + bgColor = _util.Util.makeHexColor(...bgRGB); + this.#defs.style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return this.#hcmUrl; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${this.#docId}_hcm_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addTransferMapConversion(table, table, table, filter); + this.#addGrayConversion(filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + this.#hcmUrl = `url(#${id})`; + return this.#hcmUrl; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + if (this.#hcmHighlightKey === key) { + return this.#hcmHighlightUrl; + } + this.#hcmHighlightKey = key; + this.#hcmHighlightUrl = "none"; + this.#hcmHighlightFilter?.remove(); + if (!fgColor || !bgColor) { + return this.#hcmHighlightUrl; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + this.#defs.style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${this.#docId}_hcm_highlight_filter`; + const filter = this.#hcmHighlightFilter = this.#createFilter(id); + this.#addGrayConversion(filter); + this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + this.#hcmHighlightUrl = `url(#${id})`; + return this.#hcmHighlightUrl; + } + destroy() { + let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { + return; + } + if (this.#_defs) { + this.#_defs.parentNode.parentNode.remove(); + this.#_defs = null; + } + if (this.#_cache) { + this.#_cache.clear(); + this.#_cache = null; + } + this.#id = 0; + } + #addGrayConversion(filter) { + const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); + } + #createFilter(id) { + const filter = this.#document.createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + this.#defs.append(filter); + return filter; + } + #appendFeFunc(feComponentTransfer, func, table) { + const feFunc = this.#document.createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); + } + #addTransferMapConversion(rTable, gTable, bTable, filter) { + const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); + this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); + this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); + } + #getRGB(color) { + this.#defs.style.color = color; + return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); + } +} +exports.DOMFilterFactory = DOMFilterFactory; +class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { + constructor() { + let { + ownerDocument = globalThis.document + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + super(); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +} +exports.DOMCanvasFactory = DOMCanvasFactory; +async function fetchData(url) { + let asTypedArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + if (asTypedArray) { + request.responseType = "arraybuffer"; + } + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + let data; + if (asTypedArray && request.response) { + data = new Uint8Array(request.response); + } else if (!asTypedArray && request.responseText) { + data = (0, _util.stringToBytes)(request.responseText); + } + if (data) { + resolve(data); + return; + } + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed).then(data => { + return { + cMapData: data, + compressionType + }; + }); + } +} +exports.DOMCMapReaderFactory = DOMCMapReaderFactory; +class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, true); + } +} +exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; +class DOMSVGFactory extends _base_factory.BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +} +exports.DOMSVGFactory = DOMSVGFactory; +class PageViewport { + constructor(_ref) { + let { + viewBox, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = _ref; + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const { + viewBox + } = this; + return (0, _util.shadow)(this, "rawDims", { + pageWidth: viewBox[2] - viewBox[0], + pageHeight: viewBox[3] - viewBox[1], + pageX: viewBox[0], + pageY: viewBox[1] + }); + } + clone() { + let { + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return new PageViewport({ + viewBox: this.viewBox.slice(), + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + convertToViewportPoint(x, y) { + return _util.Util.applyTransform([x, y], this.transform); + } + convertToViewportRectangle(rect) { + const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); + const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; + } + convertToPdfPoint(x, y) { + return _util.Util.applyInverseTransform([x, y], this.transform); + } +} +exports.PageViewport = PageViewport; +class RenderingCancelledException extends _util.BaseException { + constructor(msg) { + let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; + } +} +exports.RenderingCancelledException = RenderingCancelledException; +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; + } + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url) { + let onlyStripPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + if (!onlyStripPath) { + [url] = url.split(/[#?]/, 1); + } + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url) { + let defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf"; + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch {} + } + } + return suggestedFilename || defaultFilename; +} +class StatTimer { + started = Object.create(null); + times = []; + time(name) { + if (name in this.started) { + (0, _util.warn)(`Timer is already running for ${name}`); + } + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + (0, _util.warn)(`Timer has not been started for ${name}`); + } + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; + } + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); + } + for (const { + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); + } + return outBuf.join(""); + } +} +exports.StatTimer = StatTimer; +function isValidFetchUrl(url, baseUrl) { + try { + const { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch { + return false; + } +} +function loadScript(src) { + let removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = src; + script.onload = function (evt) { + if (removeScriptElement) { + script.remove(); + } + resolve(evt); + }; + script.onerror = function () { + reject(new Error(`Cannot load script at: ${script.src}`)); + }; + (document.head || document.documentElement).append(script); + }); +} +function deprecated(details) { + console.log("Deprecated API usage: " + details); +} +let pdfDateStringRegex; +class PDFDateString { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + } + pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); + const matches = pdfDateStringRegex.exec(input); + if (!matches) { + return null; + } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + } + return new Date(Date.UTC(year, month, day, hour, minute, second)); + } +} +exports.PDFDateString = PDFDateString; +function getXfaPageViewport(xfaPage, _ref2) { + let { + scale = 1, + rotation = 0 + } = _ref2; + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; + } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); + } + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); + } + (0, _util.warn)(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); + } + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport) { + let mustFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + let mustRotate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + if (viewport instanceof PageViewport) { + const { + pageWidth, + pageHeight + } = viewport.rawDims; + const { + style + } = div; + const widthStr = `calc(var(--scale-factor) * ${pageWidth}px)`; + const heightStr = `calc(var(--scale-factor) * ${pageHeight}px)`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; + } else { + style.width = heightStr; + style.height = widthStr; + } + } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); + } +} + +/***/ }), +/* 168 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +class BaseFilterFactory { + constructor() { + if (this.constructor === BaseFilterFactory) { + (0, _util.unreachable)("Cannot initialize BaseFilterFactory."); + } + } + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy() { + let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + } +} +exports.BaseFilterFactory = BaseFilterFactory; +class BaseCanvasFactory { + constructor() { + if (this.constructor === BaseCanvasFactory) { + (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); + } + } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d") + }; + } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; + } + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; + } + _createCanvas(width, height) { + (0, _util.unreachable)("Abstract method `_createCanvas` called."); + } +} +exports.BaseCanvasFactory = BaseCanvasFactory; +class BaseCMapReaderFactory { + constructor(_ref) { + let { + baseUrl = null, + isCompressed = true + } = _ref; + if (this.constructor === BaseCMapReaderFactory) { + (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); + } + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch(_ref2) { + let { + name + } = _ref2; + if (!this.baseUrl) { + throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); + } + _fetchData(url, compressionType) { + (0, _util.unreachable)("Abstract method `_fetchData` called."); + } +} +exports.BaseCMapReaderFactory = BaseCMapReaderFactory; +class BaseStandardFontDataFactory { + constructor(_ref3) { + let { + baseUrl = null + } = _ref3; + if (this.constructor === BaseStandardFontDataFactory) { + (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); + } + this.baseUrl = baseUrl; + } + async fetch(_ref4) { + let { + filename + } = _ref4; + if (!this.baseUrl) { + throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); + } + _fetchData(url) { + (0, _util.unreachable)("Abstract method `_fetchData` called."); + } +} +exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; +class BaseSVGFactory { + constructor() { + if (this.constructor === BaseSVGFactory) { + (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); + } + } + create(width, height) { + let skipDimensions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + (0, _util.unreachable)("Abstract method `_createSVG` called."); + } +} +exports.BaseSVGFactory = BaseSVGFactory; + +/***/ }), +/* 169 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MurmurHash3_64 = void 0; +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff; +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + update(input) { + let data, length; + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if ((0, _util.isArrayBuffer)(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + } + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + } + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); + } +} +exports.MurmurHash3_64 = MurmurHash3_64; + +/***/ }), +/* 170 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FontLoader = exports.FontFaceObject = void 0; +__w_pdfjs_require__(125); +__w_pdfjs_require__(135); +__w_pdfjs_require__(137); +__w_pdfjs_require__(140); +__w_pdfjs_require__(142); +__w_pdfjs_require__(144); +__w_pdfjs_require__(146); +__w_pdfjs_require__(89); +__w_pdfjs_require__(148); +var _util = __w_pdfjs_require__(1); +class FontLoader { + #systemFonts = new Set(); + constructor(_ref) { + let { + ownerDocument = globalThis.document, + styleElement = null + } = _ref; + this._document = ownerDocument; + this.nativeFontFaces = new Set(); + this.styleElement = null; + this.loadingRequests = []; + this.loadTestFontId = 0; + } + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.add(nativeFontFace); + this._document.fonts.add(nativeFontFace); + } + removeNativeFontFace(nativeFontFace) { + this.nativeFontFaces.delete(nativeFontFace); + this._document.fonts.delete(nativeFontFace); + } + insertRule(rule) { + if (!this.styleElement) { + this.styleElement = this._document.createElement("style"); + this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); + } + const styleSheet = this.styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + } + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); + } + this.nativeFontFaces.clear(); + this.#systemFonts.clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont(info) { + if (!info || this.#systemFonts.has(info.loadedName)) { + return; + } + (0, _util.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + if (this.isFontLoadingAPISupported) { + const { + loadedName, + src, + style + } = info; + const fontFace = new FontFace(loadedName, src, style); + this.addNativeFontFace(fontFace); + try { + await fontFace.load(); + this.#systemFonts.add(loadedName); + } catch { + (0, _util.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); + this.removeNativeFontFace(fontFace); + } + return; + } + (0, _util.unreachable)("Not implemented: loadSystemFont without the Font Loading API."); + } + async bind(font) { + if (font.attached || font.missingFile && !font.systemFontInfo) { + return; + } + font.attached = true; + if (font.systemFontInfo) { + await this.loadSystemFont(font.systemFontInfo); + return; + } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + try { + await nativeFontFace.loaded; + } catch (ex) { + (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; + } + } + return; + } + const rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + if (this.isSyncFontLoadingSupported) { + return; + } + await new Promise(resolve => { + const request = this._queueLoadingCallback(resolve); + this._prepareFontLoadEvent(font, request); + }); + } + } + get isFontLoadingAPISupported() { + const hasFonts = !!this._document?.fonts; + return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); + } + get isSyncFontLoadingSupported() { + let supported = false; + if (_util.isNodeJS) { + supported = true; + } else if (typeof navigator !== "undefined" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { + supported = true; + } + return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); + } + _queueLoadingCallback(callback) { + function completeRequest() { + (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); + request.done = true; + while (loadingRequests.length > 0 && loadingRequests[0].done) { + const otherRequest = loadingRequests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + const { + loadingRequests + } = this; + const request = { + done: false, + complete: completeRequest, + callback + }; + loadingRequests.push(request); + return request; + } + get _loadTestFont() { + const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); + return (0, _util.shadow)(this, "_loadTestFont", testFont); + } + _prepareFontLoadEvent(font, request) { + function int32(data, offset) { + return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; + } + function spliceString(s, offset, remove, insert) { + const chunk1 = s.substring(0, offset); + const chunk2 = s.substring(offset + remove); + return chunk1 + insert + chunk2; + } + let i, ii; + const canvas = this._document.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; + const ctx = canvas.getContext("2d"); + let called = 0; + function isFontReady(name, callback) { + if (++called > 30) { + (0, _util.warn)("Load test font never loaded."); + callback(); + return; + } + ctx.font = "30px " + name; + ctx.fillText(".", 0, 20); + const imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; + let data = this._loadTestFont; + const COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + const CFF_CHECKSUM_OFFSET = 16; + const XXXX_VALUE = 0x58585858; + let checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); + const url = `url(data:font/opentype;base64,${btoa(data)});`; + const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; + this.insertRule(rule); + const div = this._document.createElement("div"); + div.style.visibility = "hidden"; + div.style.width = div.style.height = "10px"; + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + for (const name of [font.loadedName, loadTestFontId]) { + const span = this._document.createElement("span"); + span.textContent = "Hi"; + span.style.fontFamily = name; + div.append(span); + } + this._document.body.append(div); + isFontReady(loadTestFontId, () => { + div.remove(); + request.complete(); + }); + } +} +exports.FontLoader = FontLoader; +class FontFaceObject { + constructor(translatedData, _ref2) { + let { + isEvalSupported = true, + disableFontFace = false, + ignoreErrors = false, + inspectFont = null + } = _ref2; + this.compiledGlyphs = Object.create(null); + for (const i in translatedData) { + this[i] = translatedData[i]; + } + this.isEvalSupported = isEvalSupported !== false; + this.disableFontFace = disableFontFace === true; + this.ignoreErrors = ignoreErrors === true; + this._inspectFont = inspectFont; + } + createNativeFontFace() { + if (!this.data || this.disableFontFace) { + return null; + } + let nativeFontFace; + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + }; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; + } + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); + } + this._inspectFont?.(this); + return nativeFontFace; + } + createFontFaceRule() { + if (!this.data || this.disableFontFace) { + return null; + } + const data = (0, _util.bytesToString)(this.data); + const url = `url(data:${this.mimetype};base64,${btoa(data)});`; + let rule; + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; + } + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; + } + this._inspectFont?.(this, url); + return rule; + } + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== undefined) { + return this.compiledGlyphs[character]; + } + let cmds; + try { + cmds = objs.get(this.loadedName + "_path_" + character); + } catch (ex) { + if (!this.ignoreErrors) { + throw ex; + } + (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); + return this.compiledGlyphs[character] = function (c, size) {}; + } + if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) { + const jsBuf = []; + for (const current of cmds) { + const args = current.args !== undefined ? current.args.join(",") : ""; + jsBuf.push("c.", current.cmd, "(", args, ");\n"); + } + return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); + } + return this.compiledGlyphs[character] = function (c, size) { + for (const current of cmds) { + if (current.cmd === "scale") { + current.args = [size, -size]; + } + c[current.cmd].apply(c, current.args); + } + }; + } +} +exports.FontFaceObject = FontFaceObject; + +/***/ }), +/* 171 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0; +__w_pdfjs_require__(2); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +var _base_factory = __w_pdfjs_require__(168); +var _util = __w_pdfjs_require__(1); +; +{ + (function checkDOMMatrix() { + if (globalThis.DOMMatrix || !_util.isNodeJS) { + return; + } + try { + globalThis.DOMMatrix = require("canvas").DOMMatrix; + } catch (ex) { + (0, _util.warn)(`Cannot polyfill \`DOMMatrix\`, rendering may be broken: "${ex}".`); + } + })(); + (function checkPath2D() { + if (globalThis.Path2D || !_util.isNodeJS) { + return; + } + try { + const { + CanvasRenderingContext2D + } = require("canvas"); + const { + polyfillPath2D + } = require("path2d-polyfill"); + globalThis.CanvasRenderingContext2D = CanvasRenderingContext2D; + polyfillPath2D(globalThis); + } catch (ex) { + (0, _util.warn)(`Cannot polyfill \`Path2D\`, rendering may be broken: "${ex}".`); + } + })(); +} +const fetchData = function (url) { + return new Promise((resolve, reject) => { + const fs = require("fs"); + fs.readFile(url, (error, data) => { + if (error || !data) { + reject(new Error(error)); + return; + } + resolve(new Uint8Array(data)); + }); + }); +}; +class NodeFilterFactory extends _base_factory.BaseFilterFactory {} +exports.NodeFilterFactory = NodeFilterFactory; +class NodeCanvasFactory extends _base_factory.BaseCanvasFactory { + _createCanvas(width, height) { + const Canvas = require("canvas"); + return Canvas.createCanvas(width, height); + } +} +exports.NodeCanvasFactory = NodeCanvasFactory; +class NodeCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url).then(data => { + return { + cMapData: data, + compressionType + }; + }); + } +} +exports.NodeCMapReaderFactory = NodeCMapReaderFactory; +class NodeStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url); + } +} +exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; + +/***/ }), +/* 172 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CanvasGraphics = void 0; - -var _util = __w_pdfjs_require__(2); - -var _pattern_helper = __w_pdfjs_require__(11); - +__w_pdfjs_require__(2); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(89); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +var _pattern_helper = __w_pdfjs_require__(173); +var _image_utils = __w_pdfjs_require__(174); const MIN_FONT_SIZE = 16; const MAX_FONT_SIZE = 100; const MAX_GROUP_SIZE = 4096; -const COMPILE_TYPE3_GLYPHS = true; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; const MAX_SIZE_TO_COMPILE = 1000; const FULL_CHUNK_HEIGHT = 16; -const LINEWIDTH_SCALE_FACTOR = 1.000001; - -function addContextCurrentTransform(ctx) { - if (ctx.mozCurrentTransform) { - return; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); } - - ctx._originalSave = ctx.save; - ctx._originalRestore = ctx.restore; - ctx._originalRotate = ctx.rotate; - ctx._originalScale = ctx.scale; - ctx._originalTranslate = ctx.translate; - ctx._originalTransform = ctx.transform; - ctx._originalSetTransform = ctx.setTransform; - ctx._originalResetTransform = ctx.resetTransform; - ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; - ctx._transformStack = []; - - try { - const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth"); - ctx._setLineWidth = desc.set; - ctx._getLineWidth = desc.get; - Object.defineProperty(ctx, "lineWidth", { - set: function setLineWidth(width) { - this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR); - }, - get: function getLineWidth() { - return this._getLineWidth(); - } - }); - } catch (_) {} - - Object.defineProperty(ctx, "mozCurrentTransform", { - get: function getCurrentTransform() { - return this._transformMatrix; - } - }); - Object.defineProperty(ctx, "mozCurrentTransformInverse", { - get: function getCurrentTransformInverse() { - const [a, b, c, d, e, f] = this._transformMatrix; - const ad_bc = a * d - b * c; - const bc_ad = b * c - a * d; - return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; - } - }); - + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; ctx.save = function ctxSave() { - const old = this._transformMatrix; - - this._transformStack.push(old); - - this._transformMatrix = old.slice(0, 6); - - this._originalSave(); + destCtx.save(); + this.__originalSave(); }; - ctx.restore = function ctxRestore() { - const prev = this._transformStack.pop(); - - if (prev) { - this._transformMatrix = prev; - - this._originalRestore(); - } + destCtx.restore(); + this.__originalRestore(); }; - ctx.translate = function ctxTranslate(x, y) { - const m = this._transformMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - - this._originalTranslate(x, y); + destCtx.translate(x, y); + this.__originalTranslate(x, y); }; - ctx.scale = function ctxScale(x, y) { - const m = this._transformMatrix; - m[0] *= x; - m[1] *= x; - m[2] *= y; - m[3] *= y; - - this._originalScale(x, y); + destCtx.scale(x, y); + this.__originalScale(x, y); }; - ctx.transform = function ctxTransform(a, b, c, d, e, f) { - const m = this._transformMatrix; - this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; - - ctx._originalTransform(a, b, c, d, e, f); + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); }; - ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - this._transformMatrix = [a, b, c, d, e, f]; - - ctx._originalSetTransform(a, b, c, d, e, f); + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); }; - ctx.resetTransform = function ctxResetTransform() { - this._transformMatrix = [1, 0, 0, 1, 0, 0]; - - ctx._originalResetTransform(); + destCtx.resetTransform(); + this.__originalResetTransform(); }; - ctx.rotate = function ctxRotate(angle) { - const cosValue = Math.cos(angle); - const sinValue = Math.sin(angle); - const m = this._transformMatrix; - this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; - - this._originalRotate(angle); + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function () { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function () { + destCtx.beginPath(); + this.__originalBeginPath(); }; } - class CachedCanvases { constructor(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = Object.create(null); } - - getCanvas(id, width, height, trackTransform) { + getCanvas(id, width, height) { let canvasEntry; - if (this.cache[id] !== undefined) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); - canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } - - if (trackTransform) { - addContextCurrentTransform(canvasEntry.context); - } - return canvasEntry; } - + delete(id) { + delete this.cache[id]; + } clear() { for (const id in this.cache) { const canvasEntry = this.cache[id]; @@ -4726,140 +10383,146 @@ class CachedCanvases { delete this.cache[id]; } } - } - +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = (0, _display_utils.getCurrentTransform)(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} function compileType3Glyph(imgData) { + const { + width, + height + } = imgData; + if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; + } const POINT_TO_PROCESS_LIMIT = 1000; const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); - const width = imgData.width, - height = imgData.height, - width1 = width + 1; - let i, ii, j, j0; - const points = new Uint8Array(width1 * (height + 1)); - const lineSize = width + 7 & ~7, - data0 = imgData.data; - const data = new Uint8Array(lineSize * height); - let pos = 0; - - for (i = 0, ii = data0.length; i < ii; i++) { - const elem = data0[i]; + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), + pos = 0; + for (const elem of imgData.data) { let mask = 128; - while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } - let count = 0; pos = 0; - if (data[pos] !== 0) { points[0] = 1; ++count; } - for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } - pos++; } - if (data[pos] !== 0) { points[j] = 2; ++count; } - for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; - if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } - let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); - for (j = 1; j < width; j++) { sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); - if (POINT_TYPES[sum]) { points[j0 + j] = POINT_TYPES[sum]; ++count; } - pos++; } - if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } - if (count > POINT_TO_PROCESS_LIMIT) { return null; } } - pos = lineSize * (height - 1); j0 = i * width1; - if (data[pos] !== 0) { points[j0] = 8; ++count; } - for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } - pos++; } - if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } - if (count > POINT_TO_PROCESS_LIMIT) { return null; } - const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); - const outlines = []; - + const path = new Path2D(); for (i = 0; count && i <= height; i++) { let p = i * width1; const end = p + width; - while (p < end && !points[p]) { p++; } - if (p === end) { continue; } - - const coords = [p % width1, i]; + path.moveTo(p % width1, i); const p0 = p; let type = points[p]; - do { const step = steps[type]; - do { p += step; } while (!points[p]); - const pp = points[p]; - if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; @@ -4867,43 +10530,27 @@ function compileType3Glyph(imgData) { type = pp & 0x33 * type >> 4; points[p] &= type >> 2 | type << 2; } - - coords.push(p % width1, p / width1 | 0); - + path.lineTo(p % width1, p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); - - outlines.push(coords); --i; } - + data = null; + points = null; const drawOutline = function (c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); - c.beginPath(); - - for (let k = 0, kk = outlines.length; k < kk; k++) { - const o = outlines[k]; - c.moveTo(o[0], o[1]); - - for (let l = 2, ll = o.length; l < ll; l += 2) { - c.lineTo(o[l], o[l + 1]); - } - } - - c.fill(); + c.fill(path); c.beginPath(); c.restore(); }; - return drawOutline; } - class CanvasExtraState { - constructor() { + constructor(width, height) { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; @@ -4927,2047 +10574,1938 @@ class CanvasExtraState { this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; - this.resumeSMaskCtx = null; - this.transferMaps = null; + this.transferMaps = "none"; + this.startNewPathAndClipBox([0, 0, width, height]); } - clone() { - return Object.create(this); + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; } - setCurrentPoint(x, y) { this.x = x; this.y = y; } - -} - -const CanvasGraphics = function CanvasGraphicsClosure() { - const EXECUTION_TIME = 15; - const EXECUTION_STEPS = 10; - - function putBinaryImageData(ctx, imgData, transferMaps = null) { - if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { - ctx.putImageData(imgData, 0, 0); + updatePathMinMax(transform, x, y) { + [x, y] = _util.Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + } + updateRectMinMax(transform, rect) { + const p1 = _util.Util.applyTransform(rect, transform); + const p2 = _util.Util.applyTransform(rect.slice(2), transform); + this.minX = Math.min(this.minX, p1[0], p2[0]); + this.minY = Math.min(this.minY, p1[1], p2[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1]); + } + updateScalingPathMinMax(transform, minMax) { + _util.Util.scaleMinMax(transform, minMax); + this.minX = Math.min(this.minX, minMax[0]); + this.maxX = Math.max(this.maxX, minMax[1]); + this.minY = Math.min(this.minY, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); + } + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); + if (minMax) { + minMax[0] = Math.min(minMax[0], box[0], box[2]); + minMax[1] = Math.max(minMax[1], box[0], box[2]); + minMax[2] = Math.min(minMax[2], box[1], box[3]); + minMax[3] = Math.max(minMax[3], box[1], box[3]); return; } - - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0, - destPos; - const src = imgData.data; - const dest = chunkImgData.data; - let i, j, thisChunkHeight, elemsInThisChunk; - let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; - - if (transferMaps) { - switch (transferMaps.length) { - case 1: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[0]; - transferMapBlue = transferMaps[0]; - transferMapGray = transferMaps[0]; - break; - - case 4: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[1]; - transferMapBlue = transferMaps[2]; - transferMapGray = transferMaps[3]; - break; - } - } - - if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { - const srcLength = src.byteLength; - const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); - const dest32DataLength = dest32.length; - const fullSrcDiff = width + 7 >> 3; - let white = 0xffffffff; - let black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff; - - if (transferMapGray) { - if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { - [white, black] = [black, white]; - } - } - - for (i = 0; i < totalChunks; i++) { - thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - destPos = 0; - - for (j = 0; j < thisChunkHeight; j++) { - const srcDiff = srcLength - srcPos; - let k = 0; - const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; - const kEndUnrolled = kEnd & ~7; - let mask = 0; - let srcByte = 0; - - for (; k < kEndUnrolled; k += 8) { - srcByte = src[srcPos++]; - dest32[destPos++] = srcByte & 128 ? white : black; - dest32[destPos++] = srcByte & 64 ? white : black; - dest32[destPos++] = srcByte & 32 ? white : black; - dest32[destPos++] = srcByte & 16 ? white : black; - dest32[destPos++] = srcByte & 8 ? white : black; - dest32[destPos++] = srcByte & 4 ? white : black; - dest32[destPos++] = srcByte & 2 ? white : black; - dest32[destPos++] = srcByte & 1 ? white : black; - } - - for (; k < kEnd; k++) { - if (mask === 0) { - srcByte = src[srcPos++]; - mask = 128; - } - - dest32[destPos++] = srcByte & mask ? white : black; - mask >>= 1; - } - } - - while (destPos < dest32DataLength) { - dest32[destPos++] = 0; - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - j = 0; - elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; - - for (i = 0; i < fullChunks; i++) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; - - if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, j); - j += FULL_CHUNK_HEIGHT; - } - - if (i < totalChunks) { - elemsInThisChunk = width * partialChunkHeight * 4; - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - - if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, j); - } - } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - thisChunkHeight = FULL_CHUNK_HEIGHT; - elemsInThisChunk = width * thisChunkHeight; - - for (i = 0; i < totalChunks; i++) { - if (i >= fullChunks) { - thisChunkHeight = partialChunkHeight; - elemsInThisChunk = width * thisChunkHeight; - } - - destPos = 0; - - for (j = elemsInThisChunk; j--;) { - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = 255; - } - - if (hasTransferMaps) { - for (let k = 0; k < destPos; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else { - throw new Error(`bad image kind: ${imgData.kind}`); - } + this.updateRectMinMax(transform, box); } - - function putBinaryImageMask(ctx, imgData) { - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0; - const src = imgData.data; - const dest = chunkImgData.data; - - for (let i = 0; i < totalChunks; i++) { - const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - let destPos = 3; - - for (let j = 0; j < thisChunkHeight; j++) { - let elem, - mask = 0; - - for (let k = 0; k < width; k++) { - if (!mask) { - elem = src[srcPos++]; + getPathBoundingBox() { + let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL; + let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + const box = [this.minX, this.minY, this.maxX, this.maxY]; + if (pathType === _pattern_helper.PathType.STROKE) { + if (!transform) { + (0, _util.unreachable)("Stroke bounding box must include transform."); + } + const scale = _util.Util.singularValueDecompose2dScale(transform); + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minX === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; + } + getClippedPathBoundingBox() { + let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL; + let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +} +function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 0xffffffff; + const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; mask = 128; } - - dest[destPos] = elem & mask ? 0 : 255; - destPos += 4; + dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } - + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } - } - - function copyCtxState(sourceCtx, destCtx) { - const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; - - for (let i = 0, ii = properties.length; i < ii; i++) { - const property = properties[i]; - - if (sourceCtx[property] !== undefined) { - destCtx[property] = sourceCtx[property]; + } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; } - } - - if (sourceCtx.setLineDash !== undefined) { - destCtx.setLineDash(sourceCtx.getLineDash()); - destCtx.lineDashOffset = sourceCtx.lineDashOffset; - } - } - - function resetCtxToDefault(ctx) { - ctx.strokeStyle = "#000000"; - ctx.fillStyle = "#000000"; - ctx.fillRule = "nonzero"; - ctx.globalAlpha = 1; - ctx.lineWidth = 1; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 10; - ctx.globalCompositeOperation = "source-over"; - ctx.font = "10px sans-serif"; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash([]); - ctx.lineDashOffset = 0; - } - } - - function composeSMaskBackdrop(bytes, r0, g0, b0) { - const length = bytes.length; - - for (let i = 3; i < length; i += 4) { - const alpha = bytes[i]; - - if (alpha === 0) { - bytes[i - 3] = r0; - bytes[i - 2] = g0; - bytes[i - 1] = b0; - } else if (alpha < 255) { - const alpha_ = 255 - alpha; - bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; - bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; - bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; + destPos = 0; + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = (0, _image_utils.convertBlackAndWhiteToRGBA)({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; } } - - function composeSMaskAlpha(maskData, layerData, transferMap) { - const length = maskData.length; - const scale = 1 / 255; - - for (let i = 3; i < length; i += 4) { - const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; - layerData[i] = layerData[i] * alpha * scale | 0; + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + if (!_util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; } } - - function composeSMaskLuminosity(maskData, layerData, transferMap) { - const length = maskData.length; - - for (let i = 3; i < length; i += 4) { - const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; - layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; +} +function composeSMaskBackdrop(bytes, r0, g0, b0) { + const length = bytes.length; + for (let i = 3; i < length; i += 4) { + const alpha = bytes[i]; + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + const alpha_ = 255 - alpha; + bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; + bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; + bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; } } - - function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) { - const hasBackdrop = !!backdrop; - const r0 = hasBackdrop ? backdrop[0] : 0; - const g0 = hasBackdrop ? backdrop[1] : 0; - const b0 = hasBackdrop ? backdrop[2] : 0; - let composeFn; - - if (subtype === "Luminosity") { - composeFn = composeSMaskLuminosity; - } else { - composeFn = composeSMaskAlpha; - } - - const PIXELS_TO_PROCESS = 1048576; - const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); - - for (let row = 0; row < height; row += chunkSize) { - const chunkHeight = Math.min(chunkSize, height - row); - const maskData = maskCtx.getImageData(0, row, width, chunkHeight); - const layerData = layerCtx.getImageData(0, row, width, chunkHeight); - - if (hasBackdrop) { - composeSMaskBackdrop(maskData.data, r0, g0, b0); - } - - composeFn(maskData.data, layerData.data, transferMap); - maskCtx.putImageData(layerData, 0, row); - } +} +function composeSMaskAlpha(maskData, layerData, transferMap) { + const length = maskData.length; + const scale = 1 / 255; + for (let i = 3; i < length; i += 4) { + const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; + layerData[i] = layerData[i] * alpha * scale | 0; } - - function composeSMask(ctx, smask, layerCtx) { - const mask = smask.canvas; - const maskCtx = smask.context; - ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); - genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, smask.backdrop, smask.transferMap); - ctx.drawImage(mask, 0, 0); +} +function composeSMaskLuminosity(maskData, layerData, transferMap) { + const length = maskData.length; + for (let i = 3; i < length; i += 4) { + const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; + layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; } - - const LINE_CAP_STYLES = ["butt", "round", "square"]; - const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; - const NORMAL_CLIP = {}; - const EO_CLIP = {}; - - class CanvasGraphics { - constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig) { - this.ctx = canvasCtx; - this.current = new CanvasExtraState(); - this.stateStack = []; - this.pendingClip = null; - this.pendingEOFill = false; - this.res = null; - this.xobjs = null; - this.commonObjs = commonObjs; - this.objs = objs; - this.canvasFactory = canvasFactory; - this.imageLayer = imageLayer; - this.groupStack = []; - this.processingType3 = null; - this.baseTransform = null; - this.baseTransformStack = []; - this.groupLevel = 0; - this.smaskStack = []; - this.smaskCounter = 0; - this.tempSMask = null; - this.contentVisible = true; - this.markedContentStack = []; - this.optionalContentConfig = optionalContentConfig; - this.cachedCanvases = new CachedCanvases(this.canvasFactory); - this.cachedPatterns = new Map(); - - if (canvasCtx) { - addContextCurrentTransform(canvasCtx); - } - - this._cachedGetSinglePixelWidth = null; +} +function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + const hasBackdrop = !!backdrop; + const r0 = hasBackdrop ? backdrop[0] : 0; + const g0 = hasBackdrop ? backdrop[1] : 0; + const b0 = hasBackdrop ? backdrop[2] : 0; + const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; + const PIXELS_TO_PROCESS = 1048576; + const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + for (let row = 0; row < height; row += chunkSize) { + const chunkHeight = Math.min(chunkSize, height - row); + const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); + const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); } - - beginDrawing({ + composeFn(maskData.data, layerData.data, transferMap); + layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); + } +} +function composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); +} +function getImageSmoothingEnabled(transform, interpolate) { + const scale = _util.Util.singularValueDecompose2dScale(transform); + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + if (interpolate !== undefined) { + return interpolate; + } else if (scale[0] <= actualScale || scale[1] <= actualScale) { + return true; + } + return false; +} +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, _ref, annotationCanvasMap, pageColors) { + let { + optionalContentConfig, + markedContentStack = null + } = _ref; + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + } + getObject(data) { + let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing(_ref2) { + let { transform, viewport, transparency = false, background = null - }) { - const width = this.ctx.canvas.width; - const height = this.ctx.canvas.height; + } = _ref2; + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; this.ctx.save(); - this.ctx.fillStyle = background || "rgb(255, 255, 255)"; - this.ctx.fillRect(0, 0, width, height); - this.ctx.restore(); - - if (transparency) { - const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); - this.compositeCtx = this.ctx; - this.transparentCanvas = transparentCanvas.canvas; - this.ctx = transparentCanvas.context; - this.ctx.save(); - this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); - } - - this.ctx.save(); - resetCtxToDefault(this.ctx); - - if (transform) { - this.ctx.transform.apply(this.ctx, transform); - } - - this.ctx.transform.apply(this.ctx, viewport.transform); - this.baseTransform = this.ctx.mozCurrentTransform.slice(); - this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]); - - if (this.imageLayer) { - this.imageLayer.beginLayout(); - } + this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx)); } - - executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - let i = executionStartIdx || 0; - const argsArrayLen = argsArray.length; - - if (argsArrayLen === i) { + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); return i; } - - const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; - const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; - let steps = 0; - const commonObjs = this.commonObjs; - const objs = this.objs; - let fnId; - - while (true) { - if (stepper !== undefined && i === stepper.nextBreakPoint) { - stepper.breakIt(i, continueCallback); - return i; - } - - fnId = fnArray[i]; - - if (fnId !== _util.OPS.dependency) { - this[fnId].apply(this, argsArray[i]); - } else { - for (const depObjId of argsArray[i]) { - const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; - - if (!objsPool.has(depObjId)) { - objsPool.get(depObjId, continueCallback); - return i; - } - } - } - - i++; - - if (i === argsArrayLen) { - return i; - } - - if (chunkOperations && ++steps > EXECUTION_STEPS) { - if (Date.now() > endTime) { - continueCallback(); + fnId = fnArray[i]; + if (fnId !== _util.OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); return i; } - - steps = 0; } } - } - - endDrawing() { - while (this.stateStack.length || this.current.activeSMask !== null) { - this.restore(); + i++; + if (i === argsArrayLen) { + return i; } - - this.ctx.restore(); - - if (this.transparentCanvas) { - this.ctx = this.compositeCtx; - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.drawImage(this.transparentCanvas, 0, 0); - this.ctx.restore(); - this.transparentCanvas = null; - } - - this.cachedCanvases.clear(); - this.cachedPatterns.clear(); - - if (this.imageLayer) { - this.imageLayer.endLayout(); - } - } - - _scaleImage(img, inverseTransform) { - const width = img.width; - const height = img.height; - let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); - let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); - let paintWidth = width, - paintHeight = height; - let tmpCanvasId = "prescale1"; - let tmpCanvas, tmpCtx; - - while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { - let newWidth = paintWidth, - newHeight = paintHeight; - - if (widthScale > 2 && paintWidth > 1) { - newWidth = Math.ceil(paintWidth / 2); - widthScale /= paintWidth / newWidth; + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; } - - if (heightScale > 2 && paintHeight > 1) { - newHeight = Math.ceil(paintHeight / 2); - heightScale /= paintHeight / newHeight; - } - - tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); - tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, newWidth, newHeight); - tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); - img = tmpCanvas.canvas; - paintWidth = newWidth; - paintHeight = newHeight; - tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; - } - - return { - img, - paintWidth, - paintHeight - }; - } - - _createMaskCanvas(img) { - const ctx = this.ctx; - const width = img.width, - height = img.height; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - const maskCtx = maskCanvas.context; - putBinaryImageMask(maskCtx, img); - const objToCanvas = ctx.mozCurrentTransform; - - let maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]); - - maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); - - const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); - - const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); - - const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); - - const drawnWidth = Math.ceil(rect[2] - rect[0]); - const drawnHeight = Math.ceil(rect[3] - rect[1]); - const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true); - const fillCtx = fillCanvas.context; - const offsetX = Math.min(cord1[0], cord2[0]); - const offsetY = Math.min(cord1[1], cord2[1]); - fillCtx.translate(-offsetX, -offsetY); - fillCtx.transform.apply(fillCtx, maskToCanvas); - - const scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse); - - fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height); - fillCtx.globalCompositeOperation = "source-in"; - - const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]); - - fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, false) : fillColor; - fillCtx.fillRect(0, 0, width, height); - return { - canvas: fillCanvas.canvas, - offsetX: Math.round(offsetX), - offsetY: Math.round(offsetY) - }; - } - - setLineWidth(width) { - this.current.lineWidth = width; - this.ctx.lineWidth = width; - } - - setLineCap(style) { - this.ctx.lineCap = LINE_CAP_STYLES[style]; - } - - setLineJoin(style) { - this.ctx.lineJoin = LINE_JOIN_STYLES[style]; - } - - setMiterLimit(limit) { - this.ctx.miterLimit = limit; - } - - setDash(dashArray, dashPhase) { - const ctx = this.ctx; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash(dashArray); - ctx.lineDashOffset = dashPhase; + steps = 0; } } - - setRenderingIntent(intent) {} - - setFlatness(flatness) {} - - setGState(states) { - for (let i = 0, ii = states.length; i < ii; i++) { - const state = states[i]; - const key = state[0]; - const value = state[1]; - - switch (key) { - case "LW": - this.setLineWidth(value); - break; - - case "LC": - this.setLineCap(value); - break; - - case "LJ": - this.setLineJoin(value); - break; - - case "ML": - this.setMiterLimit(value); - break; - - case "D": - this.setDash(value[0], value[1]); - break; - - case "RI": - this.setRenderingIntent(value); - break; - - case "FL": - this.setFlatness(value); - break; - - case "Font": - this.setFont(value[0], value[1]); - break; - - case "CA": - this.current.strokeAlpha = state[1]; - break; - - case "ca": - this.current.fillAlpha = state[1]; - this.ctx.globalAlpha = state[1]; - break; - - case "BM": - this.ctx.globalCompositeOperation = value; - break; - - case "SMask": - if (this.current.activeSMask) { - if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { - this.suspendSMaskGroup(); - } else { - this.endSMaskGroup(); - } - } - - this.current.activeSMask = value ? this.tempSMask : null; - - if (this.current.activeSMask) { - this.beginSMaskGroup(); - } - - this.tempSMask = null; - break; - - case "TR": - this.current.transferMaps = value; - } - } + } + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); } - - beginSMaskGroup() { - const activeSMask = this.current.activeSMask; - const drawnWidth = activeSMask.canvas.width; - const drawnHeight = activeSMask.canvas.height; - const cacheId = "smaskGroupAt" + this.groupLevel; - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - const currentCtx = this.ctx; - const currentTransform = currentCtx.mozCurrentTransform; + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; this.ctx.save(); - const groupCtx = scratchCanvas.context; - groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); - groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); - groupCtx.transform.apply(groupCtx, currentTransform); - activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; - } - - suspendSMaskGroup() { - const groupCtx = this.ctx; - this.groupLevel--; - this.ctx = this.groupStack.pop(); - composeSMask(this.ctx, this.current.activeSMask, groupCtx); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); - this.ctx.save(); - copyCtxState(groupCtx, this.ctx); - this.current.resumeSMaskCtx = groupCtx; - - const deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); - - this.ctx.transform.apply(this.ctx, deltaTransform); - groupCtx.save(); - groupCtx.setTransform(1, 0, 0, 1, 0, 0); - groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); - groupCtx.restore(); + this.transparentCanvas = null; } - - resumeSMaskGroup() { - const groupCtx = this.current.resumeSMaskCtx; - const currentCtx = this.ctx; - this.ctx = groupCtx; - this.groupStack.push(currentCtx); - this.groupLevel++; - } - - endSMaskGroup() { - const groupCtx = this.ctx; - this.groupLevel--; - this.ctx = this.groupStack.pop(); - composeSMask(this.ctx, this.current.activeSMask, groupCtx); - this.ctx.restore(); - copyCtxState(groupCtx, this.ctx); - - const deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); - - this.ctx.transform.apply(this.ctx, deltaTransform); - } - - save() { - this.ctx.save(); - const old = this.current; - this.stateStack.push(old); - this.current = old.clone(); - this.current.resumeSMaskCtx = null; - } - - restore() { - if (this.current.resumeSMaskCtx) { - this.resumeSMaskGroup(); + } + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } } - - if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { - this.endSMaskGroup(); + cache.clear(); + } + this._cachedBitmapsMap.clear(); + this.#drawFilter(); + } + #drawFilter() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; } - - if (this.stateStack.length !== 0) { - this.current = this.stateStack.pop(); - this.ctx.restore(); - this.pendingClip = null; - this._cachedGetSinglePixelWidth = null; + } + } + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); + const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); + const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); + const drawnWidth = Math.round(rect[2] - rect[0]) || 1; + const drawnHeight = Math.round(rect[3] - rect[1]) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = Math.min(cord1[0], cord2[0]); + const offsetY = Math.min(cord1[1], cord2[1]); + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, (0, _display_utils.getCurrentTransformInverse)(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = _util.Util.transform((0, _display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(intent) {} + setFlatness(flatness) {} + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value[0], value[1]); + break; + case "CA": + this.current.strokeAlpha = value; + break; + case "ca": + this.current.fillAlpha = value; + this.ctx.globalAlpha = value; + break; + case "BM": + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform(...(0, _display_utils.getCurrentTransform)(this.suspendedCtx)); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); } else { - this.current.activeSMask = null; + this.ctx.restore(); } - } - - transform(a, b, c, d, e, f) { - this.ctx.transform(a, b, c, d, e, f); + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; } - - constructPath(ops, args) { - const ctx = this.ctx; - const current = this.current; - let x = current.x, - y = current.y; - - for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - ctx.moveTo(x, y); - - if (width === 0 || height === 0) { - ctx.lineTo(xw, yh); - } else { - ctx.lineTo(xw, y); - ctx.lineTo(xw, yh); - ctx.lineTo(x, yh); - } - - ctx.closePath(); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - ctx.moveTo(x, y); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - ctx.lineTo(x, y); - break; - - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - j += 6; - break; - - case _util.OPS.curveTo2: - ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); - j += 4; - break; - - case _util.OPS.closePath: - ctx.closePath(); - break; - } - } - - current.setCurrentPoint(x, y); - } - - closePath() { - this.ctx.closePath(); - } - - stroke(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const strokeColor = this.current.strokeColor; - ctx.globalAlpha = this.current.strokeAlpha; - - if (this.contentVisible) { - if (typeof strokeColor === "object" && strokeColor?.getPattern) { - const lineWidth = this.getSinglePixelWidth(); - ctx.save(); - ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse); - ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); - ctx.stroke(); - ctx.restore(); - } else { - const lineWidth = this.getSinglePixelWidth(); - - if (lineWidth < 0 && -lineWidth >= this.current.lineWidth) { - ctx.save(); - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); - ctx.stroke(); - ctx.restore(); + } + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, + y = current.y; + let startX, startY; + const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case _util.OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); } else { - ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); - ctx.stroke(); + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); } - } - } - - if (consumePath) { - this.consumePath(); - } - - ctx.globalAlpha = this.current.fillAlpha; - } - - closeStroke() { - this.closePath(); - this.stroke(); - } - - fill(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - let needRestore = false; - - if (isPatternFill) { - ctx.save(); - ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse); - needRestore = true; - } - - if (this.contentVisible) { - if (this.pendingEOFill) { - ctx.fill("evenodd"); - this.pendingEOFill = false; - } else { - ctx.fill(); - } - } - - if (needRestore) { - ctx.restore(); - } - - if (consumePath) { - this.consumePath(); - } - } - - eoFill() { - this.pendingEOFill = true; - this.fill(); - } - - fillStroke() { - this.fill(false); - this.stroke(false); - this.consumePath(); - } - - eoFillStroke() { - this.pendingEOFill = true; - this.fillStroke(); - } - - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - - closeEOFillStroke() { - this.pendingEOFill = true; - this.closePath(); - this.fillStroke(); - } - - endPath() { - this.consumePath(); - } - - clip() { - this.pendingClip = NORMAL_CLIP; - } - - eoClip() { - this.pendingClip = EO_CLIP; - } - - beginText() { - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.textMatrixScale = 1; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - - endText() { - const paths = this.pendingTextPaths; - const ctx = this.ctx; - - if (paths === undefined) { - ctx.beginPath(); - return; - } - - ctx.save(); - ctx.beginPath(); - - for (let i = 0; i < paths.length; i++) { - const path = paths[i]; - ctx.setTransform.apply(ctx, path.transform); - ctx.translate(path.x, path.y); - path.addToPath(ctx, path.fontSize); - } - - ctx.restore(); - ctx.clip(); - ctx.beginPath(); - delete this.pendingTextPaths; - } - - setCharSpacing(spacing) { - this.current.charSpacing = spacing; - } - - setWordSpacing(spacing) { - this.current.wordSpacing = spacing; - } - - setHScale(scale) { - this.current.textHScale = scale / 100; - } - - setLeading(leading) { - this.current.leading = -leading; - } - - setFont(fontRefName, size) { - const fontObj = this.commonObjs.get(fontRefName); - const current = this.current; - - if (!fontObj) { - throw new Error(`Can't find font for ${fontRefName}`); - } - - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - - if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { - (0, _util.warn)("Invalid font matrix for font " + fontRefName); - } - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - this.current.font = fontObj; - this.current.fontSize = size; - - if (fontObj.isType3Font) { - return; - } - - const name = fontObj.loadedName || "sans-serif"; - let bold = "normal"; - - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - - const italic = fontObj.italic ? "italic" : "normal"; - const typeface = `"${name}", ${fontObj.fallbackName}`; - let browserFontSize = size; - - if (size < MIN_FONT_SIZE) { - browserFontSize = MIN_FONT_SIZE; - } else if (size > MAX_FONT_SIZE) { - browserFontSize = MAX_FONT_SIZE; - } - - this.current.fontSizeScale = size / browserFontSize; - this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; - } - - setTextRenderingMode(mode) { - this.current.textRenderingMode = mode; - } - - setTextRise(rise) { - this.current.textRise = rise; - } - - moveText(x, y) { - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; - } - - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - - setTextMatrix(a, b, c, d, e, f) { - this.current.textMatrix = [a, b, c, d, e, f]; - this.current.textMatrixScale = Math.hypot(a, b); - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - - nextLine() { - this.moveText(0, this.current.leading); - } - - paintChar(character, x, y, patternTransform, resetLineWidthToOne) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const textRenderingMode = current.textRenderingMode; - const fontSize = current.fontSize / current.fontSizeScale; - const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - const patternFill = current.patternFill && !font.missingFile; - let addToPath; - - if (font.disableFontFace || isAddToPathSet || patternFill) { - addToPath = font.getPathGenerator(this.commonObjs, character); - } - - if (font.disableFontFace || patternFill) { - ctx.save(); - ctx.translate(x, y); - ctx.beginPath(); - addToPath(ctx, fontSize); - - if (patternTransform) { - ctx.setTransform.apply(ctx, patternTransform); - } - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fill(); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (resetLineWidthToOne) { - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); } - - ctx.stroke(); - } - - ctx.restore(); - } else { - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fillText(character, x, y); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (resetLineWidthToOne) { - ctx.save(); - ctx.moveTo(x, y); - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); - ctx.strokeText(character, 0, 0); - ctx.restore(); - } else { - ctx.strokeText(character, x, y); - } - } - } - - if (isAddToPathSet) { - const paths = this.pendingTextPaths || (this.pendingTextPaths = []); - paths.push({ - transform: ctx.mozCurrentTransform, - x, - y, - fontSize, - addToPath - }); - } - } - - get isFontSubpixelAAEnabled() { - const { - context: ctx - } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); - ctx.scale(1.5, 1); - ctx.fillText("I", 0, 10); - const data = ctx.getImageData(0, 0, 10, 10).data; - let enabled = false; - - for (let i = 3; i < data.length; i += 4) { - if (data[i] > 0 && data[i] < 255) { - enabled = true; + ctx.closePath(); + break; + case _util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case _util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case _util.OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + case _util.OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case _util.OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + case _util.OPS.closePath: + ctx.closePath(); break; - } } - - return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); } - - showText(glyphs) { - const current = this.current; - const font = current.font; - - if (font.isType3Font) { - return this.showType3Text(glyphs); - } - - const fontSize = current.fontSize; - - if (fontSize === 0) { - return undefined; - } - - const ctx = this.ctx; - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const glyphsLength = glyphs.length; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; - ctx.save(); - let patternTransform; - - if (current.patternFill) { + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + current.setCurrentPoint(x, y); + } + closePath() { + this.ctx.closePath(); + } + stroke() { + let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { ctx.save(); - const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse); - patternTransform = ctx.mozCurrentTransform; + ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.STROKE); + this.rescaleAndStroke(false); ctx.restore(); - ctx.fillStyle = pattern; - } - - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y + current.textRise); - - if (fontDirection > 0) { - ctx.scale(textHScale, -1); } else { - ctx.scale(textHScale, 1); + this.rescaleAndStroke(true); } - - let lineWidth = current.lineWidth; - let resetLineWidthToOne = false; - const scale = current.textMatrixScale; - - if (scale === 0 || lineWidth === 0) { - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - this._cachedGetSinglePixelWidth = null; - lineWidth = this.getSinglePixelWidth(); - resetLineWidthToOne = lineWidth < 0; - } + } + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke() { + this.closePath(); + this.stroke(); + } + fill() { + let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; } else { - lineWidth /= scale; + ctx.fill(); } - - if (fontSizeScale !== 1.0) { - ctx.scale(fontSizeScale, fontSizeScale); - lineWidth /= fontSizeScale; - } - - ctx.lineWidth = lineWidth; - let x = 0, - i; - - for (i = 0; i < glyphsLength; ++i) { - const glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - - let restoreNeeded = false; - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - const accent = glyph.accent; - let scaledX, scaledY; - let width = glyph.width; - - if (vertical) { - const vmetric = glyph.vmetric || defaultVMetrics; - const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (font.remeasure && width > 0) { - const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; - - if (width < measuredWidth && this.isFontSubpixelAAEnabled) { - const characterScaleX = width / measuredWidth; - restoreNeeded = true; - ctx.save(); - ctx.scale(characterScaleX, 1); - scaledX /= characterScaleX; - } else if (width !== measuredWidth) { - scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; - } - } - - if (this.contentVisible && (glyph.isInFont || font.missingFile)) { - if (simpleFillText && !accent) { - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne); - - if (accent) { - const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; - const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne); - } - } - } - - let charWidth; - - if (vertical) { - charWidth = width * widthAdvanceScale - spacing * fontDirection; - } else { - charWidth = width * widthAdvanceScale + spacing * fontDirection; - } - - x += charWidth; - - if (restoreNeeded) { - ctx.restore(); - } - } - - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - + } + if (needRestore) { ctx.restore(); + } + if (consumePath) { + this.consumePath(intersect); + } + } + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + endPath() { + this.consumePath(); + } + clip() { + this.pendingClip = NORMAL_CLIP; + } + eoClip() { + this.pendingClip = EO_CLIP; + } + beginText() { + this.current.textMatrix = _util.IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (paths === undefined) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (const path of paths) { + ctx.setTransform(...path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setLeading(leading) { + this.current.leading = -leading; + } + setFont(fontRefName, size) { + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + (0, _util.warn)("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + setTextRise(rise) { + this.current.textRise = rise; + } + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + nextLine() { + this.moveText(0, this.current.leading); + } + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (patternTransform) { + ctx.setTransform(...patternTransform); + } + if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths ||= []; + paths.push({ + transform: (0, _display_utils.getCurrentTransform)(ctx), + x, + y, + fontSize, + addToPath + }); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + const fontSize = current.fontSize; + if (fontSize === 0) { return undefined; } - - showType3Text(glyphs) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - const fontDirection = current.fontDirection; - const spacingDir = font.vertical ? 1 : -1; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const textHScale = current.textHScale * fontDirection; - const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const glyphsLength = glyphs.length; - const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; - let i, glyph, width, spacingLength; - - if (isTextInvisible || fontSize === 0) { - return; - } - - this._cachedGetSinglePixelWidth = null; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y); - ctx.scale(textHScale, fontDirection); - - for (i = 0; i < glyphsLength; ++i) { - glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - spacingLength = spacingDir * glyph * fontSize / 1000; - this.ctx.translate(spacingLength, 0); - current.x += spacingLength * textHScale; - continue; - } - - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const operatorList = font.charProcOperatorList[glyph.operatorListId]; - - if (!operatorList) { - (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); - continue; - } - - if (this.contentVisible) { - this.processingType3 = glyph; - this.save(); - ctx.scale(fontSize, fontSize); - ctx.transform.apply(ctx, fontMatrix); - this.executeOperatorList(operatorList); - this.restore(); - } - - const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); - - width = transformed[0] * fontSize + spacing; - ctx.translate(width, 0); - current.x += width * textHScale; - } - - ctx.restore(); - this.processingType3 = null; + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); } - - setCharWidth(xWidth, yWidth) {} - - setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - this.ctx.rect(llx, lly, urx - llx, ury - lly); + let patternTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); + patternTransform = (0, _display_utils.getCurrentTransform)(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + ctx.fillText(chars.join(""), 0, 0); + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return undefined; + } + let x = 0, + i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + return undefined; + } + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + } + setCharWidth(xWidth, yWidth) {} + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + getColorN_Pattern(IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: ctx => { + return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }); + } + }; + pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + setStrokeRGBColor(r, g, b) { + const color = _util.Util.makeHexColor(r, g, b); + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + } + setFillRGBColor(r, g, b) { + const color = _util.Util.makeHexColor(r, g, b); + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + } + _getPattern(objId) { + let matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(); + const pattern = this._getPattern(objId); + ctx.fillStyle = pattern.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.SHADING); + const inv = (0, _display_utils.getCurrentTransformInverse)(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + beginInlineImage() { + (0, _util.unreachable)("Should not call beginInlineImage"); + } + beginImageData() { + (0, _util.unreachable)("Should not call beginImageData"); + } + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (Array.isArray(matrix) && matrix.length === 6) { + this.transform(...matrix); + } + this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(this.ctx), bbox); this.clip(); this.endPath(); } - - getColorN_Pattern(IR) { - let pattern; - - if (IR[0] === "TilingPattern") { - const color = IR[1]; - const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); - const canvasGraphicsFactory = { - createCanvasGraphics: ctx => { - return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory); - } - }; - pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); - } else { - pattern = this._getPattern(IR[1]); - } - - return pattern; + } + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; } - - setStrokeColorN() { - this.current.strokeColor = this.getColorN_Pattern(arguments); + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(group) { + if (!this.contentVisible) { + return; } - - setFillColorN() { - this.current.fillColor = this.getColorN_Pattern(arguments); - this.current.patternFill = true; - } - - setStrokeRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - - this.ctx.strokeStyle = color; - this.current.strokeColor = color; - } - - setFillRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - - this.ctx.fillStyle = color; - this.current.fillColor = color; - this.current.patternFill = false; - } - - _getPattern(objId) { - if (this.cachedPatterns.has(objId)) { - return this.cachedPatterns.get(objId); - } - - const pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId)); - this.cachedPatterns.set(objId, pattern); - return pattern; - } - - shadingFill(objId) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - this.save(); - - const pattern = this._getPattern(objId); - - ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, true); - const inv = ctx.mozCurrentTransformInverse; - - if (inv) { - const canvas = ctx.canvas; - const width = canvas.width; - const height = canvas.height; - - const bl = _util.Util.applyTransform([0, 0], inv); - - const br = _util.Util.applyTransform([0, height], inv); - - const ul = _util.Util.applyTransform([width, 0], inv); - - const ur = _util.Util.applyTransform([width, height], inv); - - const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); - } else { - this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); - } - - this.restore(); - } - - beginInlineImage() { - (0, _util.unreachable)("Should not call beginInlineImage"); - } - - beginImageData() { - (0, _util.unreachable)("Should not call beginImageData"); - } - - paintFormXObjectBegin(matrix, bbox) { - if (!this.contentVisible) { - return; - } - - this.save(); - this.baseTransformStack.push(this.baseTransform); - - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform.apply(this, matrix); - } - - this.baseTransform = this.ctx.mozCurrentTransform; - - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - this.ctx.rect(bbox[0], bbox[1], width, height); - this.clip(); - this.endPath(); - } - } - - paintFormXObjectEnd() { - if (!this.contentVisible) { - return; - } - - this.restore(); - this.baseTransform = this.baseTransformStack.pop(); - } - - beginGroup(group) { - if (!this.contentVisible) { - return; - } - - this.save(); - const currentCtx = this.ctx; - - if (!group.isolated) { - (0, _util.info)("TODO: Support non-isolated groups."); - } - - if (group.knockout) { - (0, _util.warn)("Knockout groups not supported."); - } - - const currentTransform = currentCtx.mozCurrentTransform; - - if (group.matrix) { - currentCtx.transform.apply(currentCtx, group.matrix); - } - - if (!group.bbox) { - throw new Error("Bounding box is required."); - } - - let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); - - const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; - bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; - const offsetX = Math.floor(bounds[0]); - const offsetY = Math.floor(bounds[1]); - let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); - let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); - let scaleX = 1, - scaleY = 1; - - if (drawnWidth > MAX_GROUP_SIZE) { - scaleX = drawnWidth / MAX_GROUP_SIZE; - drawnWidth = MAX_GROUP_SIZE; - } - - if (drawnHeight > MAX_GROUP_SIZE) { - scaleY = drawnHeight / MAX_GROUP_SIZE; - drawnHeight = MAX_GROUP_SIZE; - } - - let cacheId = "groupAt" + this.groupLevel; - - if (group.smask) { - cacheId += "_smask_" + this.smaskCounter++ % 2; - } - - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - const groupCtx = scratchCanvas.context; - groupCtx.scale(1 / scaleX, 1 / scaleY); - groupCtx.translate(-offsetX, -offsetY); - groupCtx.transform.apply(groupCtx, currentTransform); - - if (group.smask) { - this.smaskStack.push({ - canvas: scratchCanvas.canvas, - context: groupCtx, - offsetX, - offsetY, - scaleX, - scaleY, - subtype: group.smask.subtype, - backdrop: group.smask.backdrop, - transferMap: group.smask.transferMap || null, - startTransformInverse: null - }); - } else { - currentCtx.setTransform(1, 0, 0, 1, 0, 0); - currentCtx.translate(offsetX, offsetY); - currentCtx.scale(scaleX, scaleY); - } - - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; + this.save(); + if (this.inSMaskMode) { + this.endSMaskMode(); this.current.activeSMask = null; } - - endGroup(group) { - if (!this.contentVisible) { - return; - } - - this.groupLevel--; - const groupCtx = this.ctx; - this.ctx = this.groupStack.pop(); - - if (this.ctx.imageSmoothingEnabled !== undefined) { - this.ctx.imageSmoothingEnabled = false; - } else { - this.ctx.mozImageSmoothingEnabled = false; - } - - if (group.smask) { - this.tempSMask = this.smaskStack.pop(); - } else { - this.ctx.drawImage(groupCtx.canvas, 0, 0); - } - + const currentCtx = this.ctx; + if (!group.isolated) { + (0, _util.info)("TODO: Support non-isolated groups."); + } + if (group.knockout) { + (0, _util.warn)("Knockout groups not supported."); + } + const currentTransform = (0, _display_utils.getCurrentTransform)(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, (0, _display_utils.getCurrentTransform)(currentCtx)); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + let scaleX = 1, + scaleY = 1; + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + scaleX, + scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); this.restore(); - } - - beginAnnotations() { - this.save(); - - if (this.baseTransform) { - this.ctx.setTransform.apply(this.ctx, this.baseTransform); - } - } - - endAnnotations() { + } else { + this.ctx.restore(); + const currentMtx = (0, _display_utils.getCurrentTransform)(this.ctx); this.restore(); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); } - - beginAnnotation(id, rect, transform, matrix) { - this.save(); - resetCtxToDefault(this.ctx); - this.current = new CanvasExtraState(); - - if (Array.isArray(rect) && rect.length === 4) { - const width = rect[2] - rect[0]; - const height = rect[3] - rect[1]; + } + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (Array.isArray(rect) && rect.length === 4) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(this.ctx)); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); this.ctx.rect(rect[0], rect[1], width, height); - this.clip(); + this.ctx.clip(); this.endPath(); } - - this.transform.apply(this, transform); - this.transform.apply(this, matrix); } - - endAnnotation() { - this.restore(); + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(...transform); + this.transform(...matrix); + } + endAnnotation() { + if (this.annotationCanvas) { + this.ctx.restore(); + this.#drawFilter(); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; } - - paintImageMaskXObject(img) { - if (!this.contentVisible) { - return; + } + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + if (glyph) { + if (glyph.compiled === undefined) { + glyph.compiled = compileType3Glyph(img); } - - const ctx = this.ctx; - const width = img.width, - height = img.height; - const glyph = this.processingType3; - - if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) { - if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { - glyph.compiled = compileType3Glyph({ - data: img.data, - width, - height - }); - } else { - glyph.compiled = null; - } - } - - if (glyph?.compiled) { + if (glyph.compiled) { glyph.compiled(ctx); return; } - - const mask = this._createMaskCanvas(img); - - const maskCanvas = mask.canvas; + } + const mask = this._createMaskCanvas(img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(img, scaleX) { + let skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + let skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + let scaleY = arguments.length > 4 ? arguments[4] : undefined; + let positions = arguments.length > 5 ? arguments[5] : undefined; + if (!this.contentVisible) { + return; + } + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + const [x, y] = _util.Util.applyTransform([0, 0], trans); + ctx.drawImage(mask.canvas, x, y); + } + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); ctx.save(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } - - paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, scaleY, positions) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - ctx.save(); - const currentTransform = ctx.mozCurrentTransform; - ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); - - const mask = this._createMaskCanvas(imgData); - - ctx.setTransform(1, 0, 0, 1, 0, 0); - - for (let i = 0, ii = positions.length; i < ii; i += 2) { - const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); - - const [x, y] = _util.Util.applyTransform([0, 0], trans); - - ctx.drawImage(mask.canvas, x, y); - } - - ctx.restore(); + this.compose(); + } + paintImageXObject(objId) { + if (!this.contentVisible) { + return; } - - paintImageMaskXObjectGroup(images) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - - for (let i = 0, ii = images.length; i < ii; i++) { - const image = images[i]; - const width = image.width, - height = image.height; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - const maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, image); - maskCtx.globalCompositeOperation = "source-in"; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, false) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - ctx.save(); - ctx.transform.apply(ctx, image.transform); - ctx.scale(1, -1); - ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); + const imgData = this.getObject(objId); + if (!imgData) { + (0, _util.warn)("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(imgData); + } + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + (0, _util.warn)("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + if (!_util.isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; } } - - paintImageXObject(objId) { - if (!this.contentVisible) { - return; - } - - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - - this.paintInlineImageXObject(imgData); + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } - - paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { - if (!this.contentVisible) { - return; - } - - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - - const width = imgData.width; - const height = imgData.height; - const map = []; - - for (let i = 0, ii = positions.length; i < ii; i += 2) { - map.push({ - transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], - x: 0, - y: 0, - w: width, - h: height - }); - } - - this.paintInlineImageXObjectGroup(imgData, map); + const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(); + } + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; } - - paintInlineImageXObject(imgData) { - if (!this.contentVisible) { - return; - } - - const width = imgData.width; - const height = imgData.height; - const ctx = this.ctx; - this.save(); - ctx.scale(1 / width, -1 / height); - let imgToPaint; - - if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { - imgToPaint = imgData; - } else { - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); - imgToPaint = tmpCanvas.canvas; - } - - const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse); - - ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); - - if (this.imageLayer) { - const position = this.getCanvasPosition(0, -height); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: width / ctx.mozCurrentTransformInverse[0], - height: height / ctx.mozCurrentTransformInverse[3] - }); - } - - this.restore(); - } - - paintInlineImageXObjectGroup(imgData, map) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { const w = imgData.width; const h = imgData.height; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); - - for (let i = 0, ii = map.length; i < ii; i++) { - const entry = map[i]; - ctx.save(); - ctx.transform.apply(ctx, entry.transform); - ctx.scale(1, -1); - ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); - - if (this.imageLayer) { - const position = this.getCanvasPosition(entry.x, entry.y); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: w, - height: h - }); - } - - ctx.restore(); - } + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } - - paintSolidColorImageMask() { - if (!this.contentVisible) { - return; - } - - this.ctx.fillRect(0, 0, 1, 1); + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + ctx.restore(); } - - markPoint(tag) {} - - markPointProps(tag, properties) {} - - beginMarkedContent(tag) { + this.compose(); + } + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(tag) {} + markPointProps(tag, properties) {} + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { this.markedContentStack.push({ visible: true }); } - - beginMarkedContentProps(tag, properties) { - if (tag === "OC") { - this.markedContentStack.push({ - visible: this.optionalContentConfig.isVisible(properties) - }); - } else { - this.markedContentStack.push({ - visible: true - }); - } - - this.contentVisible = this.isContentVisible(); + this.contentVisible = this.isContentVisible(); + } + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat() {} + endCompat() {} + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); } - - endMarkedContent() { - this.markedContentStack.pop(); - this.contentVisible = this.isContentVisible(); + if (!this.pendingClip) { + this.compose(clipBox); } - - beginCompat() {} - - endCompat() {} - - consumePath() { - const ctx = this.ctx; - - if (this.pendingClip) { + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } - - this.pendingClip = null; } - - ctx.beginPath(); + this.pendingClip = null; } - - getSinglePixelWidth() { - if (this._cachedGetSinglePixelWidth === null) { - const m = this.ctx.mozCurrentTransform; - const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); - const sqNorm1 = m[0] ** 2 + m[2] ** 2; - const sqNorm2 = m[1] ** 2 + m[3] ** 2; - const pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet; - - if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) { - this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight); - } else if (absDet > Number.EPSILON) { - this._cachedGetSinglePixelWidth = pixelHeight; - } else { - this._cachedGetSinglePixelWidth = 1; - } - } - - return this._cachedGetSinglePixelWidth; - } - - getCanvasPosition(x, y) { - const transform = this.ctx.mozCurrentTransform; - return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; - } - - isContentVisible() { - for (let i = this.markedContentStack.length - 1; i >= 0; i--) { - if (!this.markedContentStack[i].visible) { - return false; - } - } - - return true; - } - + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); } - - for (const op in _util.OPS) { + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = (0, _display_utils.getCurrentTransform)(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map(x => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.stroke(); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +} +exports.CanvasGraphics = CanvasGraphics; +for (const op in _util.OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; } - - return CanvasGraphics; -}(); - -exports.CanvasGraphics = CanvasGraphics; +} /***/ }), -/* 11 */ +/* 173 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TilingPattern = exports.PathType = void 0; exports.getShadingPattern = getShadingPattern; -exports.TilingPattern = void 0; - -var _util = __w_pdfjs_require__(2); - +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +const PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +exports.PathType = PathType; function applyBoundingBox(ctx, bbox) { - if (!bbox || typeof Path2D === "undefined") { + if (!bbox) { return; } - const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } - class BaseShadingPattern { constructor() { if (this.constructor === BaseShadingPattern) { (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); } } - getPattern() { (0, _util.unreachable)("Abstract method `getPattern` called."); } - } - class RadialAxialShadingPattern extends BaseShadingPattern { constructor(IR) { super(); @@ -6978,78 +12516,56 @@ class RadialAxialShadingPattern extends BaseShadingPattern { this._p1 = IR[5]; this._r0 = IR[6]; this._r1 = IR[7]; - this._matrix = IR[8]; - this._patternCache = null; + this.matrix = null; } - _createGradient(ctx) { let grad; - if (this._type === "axial") { grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); } else if (this._type === "radial") { grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); } - for (const colorStop of this._colorStops) { grad.addColorStop(colorStop[0], colorStop[1]); } - return grad; } - - getPattern(ctx, owner, inverse, shadingFill = false) { + getPattern(ctx, owner, inverse, pathType) { let pattern; - - if (this._patternCache) { - pattern = this._patternCache; - } else { - if (!shadingFill) { - const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", owner.ctx.canvas.width, owner.ctx.canvas.height, true); - const tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.beginPath(); - tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.setTransform.apply(tmpCtx, owner.baseTransform); - - if (this._matrix) { - tmpCtx.transform.apply(tmpCtx, this._matrix); - } - - applyBoundingBox(tmpCtx, this._bbox); - tmpCtx.fillStyle = this._createGradient(tmpCtx); - tmpCtx.fill(); - pattern = ctx.createPattern(tmpCanvas.canvas, "repeat"); - } else { - applyBoundingBox(ctx, this._bbox); - pattern = this._createGradient(ctx); + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0, _display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform(...owner.baseTransform); + if (this.matrix) { + tmpCtx.transform(...this.matrix); } - - this._patternCache = pattern; - } - - if (!shadingFill) { + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); const domMatrix = new DOMMatrix(inverse); - - try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`); - } + pattern.setTransform(domMatrix); + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); } - return pattern; } - } - function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { const coords = context.coords, - colors = context.colors; + colors = context.colors; const bytes = data.data, - rowSize = data.width * 4; + rowSize = data.width * 4; let tmp; - if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; @@ -7058,7 +12574,6 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { c1 = c2; c2 = tmp; } - if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; @@ -7067,7 +12582,6 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { c2 = c3; c3 = tmp; } - if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; @@ -7076,49 +12590,37 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { c1 = c2; c2 = tmp; } - const x1 = (coords[p1] + context.offsetX) * context.scaleX; const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; const x2 = (coords[p2] + context.offsetX) * context.scaleX; const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; const x3 = (coords[p3] + context.offsetX) * context.scaleX; const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; - if (y1 >= y3) { return; } - const c1r = colors[c1], - c1g = colors[c1 + 1], - c1b = colors[c1 + 2]; + c1g = colors[c1 + 1], + c1b = colors[c1 + 2]; const c2r = colors[c2], - c2g = colors[c2 + 1], - c2b = colors[c2 + 2]; + c2g = colors[c2 + 1], + c2b = colors[c2 + 2]; const c3r = colors[c3], - c3g = colors[c3 + 1], - c3b = colors[c3 + 2]; + c3g = colors[c3 + 1], + c3b = colors[c3 + 2]; const minY = Math.round(y1), - maxY = Math.round(y3); + maxY = Math.round(y3); let xa, car, cag, cab; let xb, cbr, cbg, cbb; - for (let y = minY; y <= maxY; y++) { if (y < y2) { - let k; - - if (y < y1) { - k = 0; - } else { - k = (y1 - y) / (y1 - y2); - } - + const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); xa = x1 - (x1 - x2) * k; car = c1r - (c1r - c2r) * k; cag = c1g - (c1g - c2g) * k; cab = c1b - (c1b - c2b) * k; } else { let k; - if (y > y3) { k = 1; } else if (y2 === y3) { @@ -7126,15 +12628,12 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { } else { k = (y2 - y) / (y2 - y3); } - xa = x2 - (x2 - x3) * k; car = c2r - (c2r - c3r) * k; cag = c2g - (c2g - c3g) * k; cab = c2b - (c2b - c3b) * k; } - let k; - if (y < y1) { k = 0; } else if (y > y3) { @@ -7142,7 +12641,6 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { } else { k = (y1 - y) / (y1 - y3); } - xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; @@ -7150,16 +12648,13 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { const x1_ = Math.round(Math.min(xa, xb)); const x2_ = Math.round(Math.max(xa, xb)); let j = rowSize * y + x1_ * 4; - for (let x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); - if (k < 0) { k = 0; } else if (k > 1) { k = 1; } - bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; @@ -7167,41 +12662,32 @@ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { } } } - function drawFigure(data, figure, context) { const ps = figure.coords; const cs = figure.colors; let i, ii; - switch (figure.type) { case "lattice": const verticesPerRow = figure.verticesPerRow; const rows = Math.floor(ps.length / verticesPerRow) - 1; const cols = verticesPerRow - 1; - for (i = 0; i < rows; i++) { let q = i * verticesPerRow; - for (let j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } - break; - case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } - break; - default: throw new Error("illegal figure"); } } - class MeshShadingPattern extends BaseShadingPattern { constructor(IR) { super(); @@ -7209,11 +12695,10 @@ class MeshShadingPattern extends BaseShadingPattern { this._colors = IR[3]; this._figures = IR[4]; this._bounds = IR[5]; - this._matrix = IR[6]; this._bbox = IR[7]; this._background = IR[8]; + this.matrix = null; } - _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { const EXPECTED_SCALE = 1.1; const MAX_PATTERN_SIZE = 3000; @@ -7239,10 +12724,8 @@ class MeshShadingPattern extends BaseShadingPattern { const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); const tmpCtx = tmpCanvas.context; const data = tmpCtx.createImageData(width, height); - if (backgroundColor) { const bytes = data.data; - for (let i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; @@ -7250,11 +12733,9 @@ class MeshShadingPattern extends BaseShadingPattern { bytes[i + 3] = 255; } } - for (const figure of this._figures) { drawFigure(data, figure, context); } - tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); const canvas = tmpCanvas.canvas; return { @@ -7265,72 +12746,52 @@ class MeshShadingPattern extends BaseShadingPattern { scaleY }; } - - getPattern(ctx, owner, inverse, shadingFill = false) { + getPattern(ctx, owner, inverse, pathType) { applyBoundingBox(ctx, this._bbox); let scale; - - if (shadingFill) { - scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); + if (pathType === PathType.SHADING) { + scale = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(ctx)); } else { scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); - - if (this._matrix) { - const matrixScale = _util.Util.singularValueDecompose2dScale(this._matrix); - + if (this.matrix) { + const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } - - const temporaryPatternCanvas = this._createMeshCanvas(scale, shadingFill ? null : this._background, owner.cachedCanvases); - - if (!shadingFill) { - ctx.setTransform.apply(ctx, owner.baseTransform); - - if (this._matrix) { - ctx.transform.apply(ctx, this._matrix); + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + if (pathType !== PathType.SHADING) { + ctx.setTransform(...owner.baseTransform); + if (this.matrix) { + ctx.transform(...this.matrix); } } - ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } - } - class DummyShadingPattern extends BaseShadingPattern { getPattern() { return "hotpink"; } - } - function getShadingPattern(IR) { switch (IR[0]) { case "RadialAxial": return new RadialAxialShadingPattern(IR); - case "Mesh": return new MeshShadingPattern(IR); - case "Dummy": return new DummyShadingPattern(); } - throw new Error(`Unknown IR type: ${IR[0]}`); } - const PaintType = { COLORED: 1, UNCOLORED: 2 }; - class TilingPattern { - static get MAX_PATTERN_SIZE() { - return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000); - } - + static MAX_PATTERN_SIZE = 3000; constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; @@ -7344,7 +12805,6 @@ class TilingPattern { this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; } - createPatternCanvas(owner) { const operatorList = this.operatorList; const bbox = this.bbox; @@ -7356,14 +12816,11 @@ class TilingPattern { const canvasGraphicsFactory = this.canvasGraphicsFactory; (0, _util.info)("TilingType: " + tilingType); const x0 = bbox[0], - y0 = bbox[1], - x1 = bbox[2], - y1 = bbox[3]; - + y0 = bbox[1], + x1 = bbox[2], + y1 = bbox[3]; const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); - const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); - const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); @@ -7376,21 +12833,19 @@ class TilingPattern { let adjustedY0 = y0; let adjustedX1 = x1; let adjustedY1 = y1; - if (x0 < 0) { adjustedX0 = 0; adjustedX1 += Math.abs(x0); } - if (y0 < 0) { adjustedY0 = 0; adjustedY1 += Math.abs(y0); } - tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); - graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice(); + graphics.baseTransform = (0, _display_utils.getCurrentTransform)(graphics.ctx); graphics.executeOperatorList(operatorList); graphics.endDrawing(); return { @@ -7401,36 +12856,31 @@ class TilingPattern { offsetY: adjustedY0 }; } - getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); let size = Math.ceil(step * scale); - if (size >= maxSize) { size = maxSize; } else { scale = size / step; } - return { scale, size }; } - clipBbox(graphics, x0, y0, x1, y1) { const bboxWidth = x1 - x0; const bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); graphics.clip(); graphics.endPath(); } - setFillAndStrokeStyleToContext(graphics, paintType, color) { const context = graphics.ctx, - current = graphics.current; - + current = graphics.current; switch (paintType) { case PaintType.COLORED: const ctx = this.ctx; @@ -7439,55 +12889,171 @@ class TilingPattern { current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; - case PaintType.UNCOLORED: const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); - context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; - default: throw new _util.FormatError(`Unsupported paint type: ${paintType}`); } } - - getPattern(ctx, owner, inverse, shadingFill = false) { + getPattern(ctx, owner, inverse, pathType) { let matrix = inverse; - - if (!shadingFill) { + if (pathType !== PathType.SHADING) { matrix = _util.Util.transform(matrix, owner.baseTransform); - if (this.matrix) { matrix = _util.Util.transform(matrix, this.matrix); } } - const temporaryPatternCanvas = this.createPatternCanvas(owner); let domMatrix = new DOMMatrix(matrix); domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); - - try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`); - } - + pattern.setTransform(domMatrix); return pattern; } - } - exports.TilingPattern = TilingPattern; /***/ }), -/* 12 */ +/* 174 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA; +exports.convertToRGBA = convertToRGBA; +exports.grayToRGBA = grayToRGBA; +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +var _util = __w_pdfjs_require__(1); +function convertToRGBA(params) { + switch (params.kind) { + case _util.ImageKind.GRAYSCALE_1BPP: + return convertBlackAndWhiteToRGBA(params); + case _util.ImageKind.RGB_24BPP: + return convertRGBToRGBA(params); + } + return null; +} +function convertBlackAndWhiteToRGBA(_ref) { + let { + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 0xffffffff, + inverseDecode = false + } = _ref; + const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + let destPos = 0; + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + if (widthRemainder === 0) { + continue; + } + const elem = srcPos < srcLength ? src[srcPos++] : 255; + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + return { + srcPos, + destPos + }; +} +function convertRGBToRGBA(_ref2) { + let { + src, + srcPos = 0, + dest, + destPos = 0, + width, + height + } = _ref2; + let i = 0; + const len32 = src.length >> 2; + const src32 = new Uint32Array(src.buffer, srcPos, len32); + if (_util.FeatureTest.isLittleEndian) { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff000000; + dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; + dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; + dest[destPos + 3] = s3 >>> 8 | 0xff000000; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; + } + } else { + for (; i < len32 - 2; i += 3, destPos += 4) { + const s1 = src32[i]; + const s2 = src32[i + 1]; + const s3 = src32[i + 2]; + dest[destPos] = s1 | 0xff; + dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; + dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; + dest[destPos + 3] = s3 << 8 | 0xff; + } + for (let j = i * 4, jj = src.length; j < jj; j += 3) { + dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; + } + } + return { + srcPos, + destPos + }; +} +function grayToRGBA(src, dest) { + if (_util.FeatureTest.isLittleEndian) { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x10101 | 0xff000000; + } + } else { + for (let i = 0, ii = src.length; i < ii; i++) { + dest[i] = src[i] * 0x1010100 | 0x000000ff; + } + } +} + +/***/ }), +/* 175 */ /***/ ((__unused_webpack_module, exports) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -7496,22 +13062,22 @@ Object.defineProperty(exports, "__esModule", ({ exports.GlobalWorkerOptions = void 0; const GlobalWorkerOptions = Object.create(null); exports.GlobalWorkerOptions = GlobalWorkerOptions; -GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; -GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; +GlobalWorkerOptions.workerPort = null; +GlobalWorkerOptions.workerSrc = ""; /***/ }), -/* 13 */ +/* 176 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MessageHandler = void 0; - -var _util = __w_pdfjs_require__(2); - +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); const CallbackKind = { UNKNOWN: 0, DATA: 1, @@ -7528,30 +13094,25 @@ const StreamKind = { PULL_COMPLETE: 7, START_COMPLETE: 8 }; - function wrapReason(reason) { - if (typeof reason !== "object" || reason === null) { - return reason; + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); } - switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); - case "MissingPDFException": return new _util.MissingPDFException(reason.message); - + case "PasswordException": + return new _util.PasswordException(reason.message, reason.code); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); - case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); - default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } - class MessageHandler { constructor(sourceName, targetName, comObj) { this.sourceName = sourceName; @@ -7559,35 +13120,26 @@ class MessageHandler { this.comObj = comObj; this.callbackId = 1; this.streamId = 1; - this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); - this._onComObjOnMessage = event => { const data = event.data; - if (data.targetName !== this.sourceName) { return; } - if (data.stream) { - this._processStreamMessage(data); - + this.#processStreamMessage(data); return; } - if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; - if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } - delete this.callbackCapabilities[callbackId]; - if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { @@ -7595,16 +13147,12 @@ class MessageHandler { } else { throw new Error("Unexpected callback case"); } - return; } - const action = this.actionHandler[data.action]; - if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } - if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; @@ -7629,45 +13177,35 @@ class MessageHandler { }); return; } - if (data.streamId) { - this._createStreamSink(data); - + this.#createStreamSink(data); return; } - action(data.data); }; - comObj.addEventListener("message", this._onComObjOnMessage); } - on(actionName, handler) { const ah = this.actionHandler; - if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } - ah[actionName] = handler; } - send(actionName, data, transfers) { - this._postMessage({ + this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } - sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; - const capability = (0, _util.createPromiseCapability)(); + const capability = new _util.PromiseCapability(); this.callbackCapabilities[callbackId] = capability; - try { - this._postMessage({ + this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, @@ -7677,18 +13215,16 @@ class MessageHandler { } catch (ex) { capability.reject(ex); } - return capability.promise; } - sendWithStream(actionName, data, queueingStrategy, transfers) { - const streamId = this.streamId++; - const sourceName = this.sourceName; - const targetName = this.targetName; - const comObj = this.comObj; + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; return new ReadableStream({ start: controller => { - const startCapability = (0, _util.createPromiseCapability)(); + const startCapability = new _util.PromiseCapability(); this.streamControllers[streamId] = { controller, startCall: startCapability, @@ -7696,8 +13232,7 @@ class MessageHandler { cancelCall: null, isClosed: false }; - - this._postMessage({ + comObj.postMessage({ sourceName, targetName, action: actionName, @@ -7705,11 +13240,10 @@ class MessageHandler { data, desiredSize: controller.desiredSize }, transfers); - return startCapability.promise; }, pull: controller => { - const pullCapability = (0, _util.createPromiseCapability)(); + const pullCapability = new _util.PromiseCapability(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, @@ -7722,7 +13256,7 @@ class MessageHandler { }, cancel: reason => { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = (0, _util.createPromiseCapability)(); + const cancelCapability = new _util.PromiseCapability(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ @@ -7736,29 +13270,27 @@ class MessageHandler { } }, queueingStrategy); } - - _createStreamSink(data) { - const self = this; - const action = this.actionHandler[data.action]; - const streamId = data.streamId; - const sourceName = this.sourceName; - const targetName = data.sourceName; - const comObj = this.comObj; + #createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; const streamSink = { - enqueue(chunk, size = 1, transfers) { + enqueue(chunk) { + let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + let transfers = arguments.length > 2 ? arguments[2] : undefined; if (this.isCancelled) { return; } - const lastDesiredSize = this.desiredSize; this.desiredSize -= size; - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); + this.sinkCapability = new _util.PromiseCapability(); this.ready = this.sinkCapability.promise; } - - self._postMessage({ + comObj.postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, @@ -7766,12 +13298,10 @@ class MessageHandler { chunk }, transfers); }, - close() { if (this.isCancelled) { return; } - this.isCancelled = true; comObj.postMessage({ sourceName, @@ -7781,14 +13311,11 @@ class MessageHandler { }); delete self.streamSinks[streamId]; }, - error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); - if (this.isCancelled) { return; } - this.isCancelled = true; comObj.postMessage({ sourceName, @@ -7798,8 +13325,7 @@ class MessageHandler { reason: wrapReason(reason) }); }, - - sinkCapability: (0, _util.createPromiseCapability)(), + sinkCapability: new _util.PromiseCapability(), onPull: null, onCancel: null, isCancelled: false, @@ -7829,34 +13355,30 @@ class MessageHandler { }); }); } - - _processStreamMessage(data) { - const streamId = data.streamId; - const sourceName = this.sourceName; - const targetName = data.sourceName; - const comObj = this.comObj; - + #processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { - this.streamControllers[streamId].startCall.resolve(); + streamController.startCall.resolve(); } else { - this.streamControllers[streamId].startCall.reject(wrapReason(data.reason)); + streamController.startCall.reject(wrapReason(data.reason)); } - break; - case StreamKind.PULL_COMPLETE: if (data.success) { - this.streamControllers[streamId].pullCall.resolve(); + streamController.pullCall.resolve(); } else { - this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason)); + streamController.pullCall.reject(wrapReason(data.reason)); } - break; - case StreamKind.PULL: - if (!this.streamSinks[streamId]) { + if (!streamSink) { comObj.postMessage({ sourceName, targetName, @@ -7866,17 +13388,12 @@ class MessageHandler { }); break; } - - if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) { - this.streamSinks[streamId].sinkCapability.resolve(); + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); } - - this.streamSinks[streamId].desiredSize = data.desiredSize; - const { - onPull - } = this.streamSinks[data.streamId]; + streamSink.desiredSize = data.desiredSize; new Promise(function (resolve) { - resolve(onPull && onPull()); + resolve(streamSink.onPull?.()); }).then(function () { comObj.postMessage({ sourceName, @@ -7895,60 +13412,41 @@ class MessageHandler { }); }); break; - case StreamKind.ENQUEUE: - (0, _util.assert)(this.streamControllers[streamId], "enqueue should have stream controller"); - - if (this.streamControllers[streamId].isClosed) { + (0, _util.assert)(streamController, "enqueue should have stream controller"); + if (streamController.isClosed) { break; } - - this.streamControllers[streamId].controller.enqueue(data.chunk); + streamController.controller.enqueue(data.chunk); break; - case StreamKind.CLOSE: - (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller"); - - if (this.streamControllers[streamId].isClosed) { + (0, _util.assert)(streamController, "close should have stream controller"); + if (streamController.isClosed) { break; } - - this.streamControllers[streamId].isClosed = true; - this.streamControllers[streamId].controller.close(); - - this._deleteStreamController(streamId); - + streamController.isClosed = true; + streamController.controller.close(); + this.#deleteStreamController(streamController, streamId); break; - case StreamKind.ERROR: - (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller"); - this.streamControllers[streamId].controller.error(wrapReason(data.reason)); - - this._deleteStreamController(streamId); - + (0, _util.assert)(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + this.#deleteStreamController(streamController, streamId); break; - case StreamKind.CANCEL_COMPLETE: if (data.success) { - this.streamControllers[streamId].cancelCall.resolve(); + streamController.cancelCall.resolve(); } else { - this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason)); + streamController.cancelCall.reject(wrapReason(data.reason)); } - - this._deleteStreamController(streamId); - + this.#deleteStreamController(streamController, streamId); break; - case StreamKind.CANCEL: - if (!this.streamSinks[streamId]) { + if (!streamSink) { break; } - - const { - onCancel - } = this.streamSinks[data.streamId]; new Promise(function (resolve) { - resolve(onCancel && onCancel(wrapReason(data.reason))); + resolve(streamSink.onCancel?.(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName, @@ -7966,360 +13464,343 @@ class MessageHandler { reason: wrapReason(reason) }); }); - this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason)); - this.streamSinks[streamId].isCancelled = true; + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; delete this.streamSinks[streamId]; break; - default: throw new Error("Unexpected stream case"); } } - - async _deleteStreamController(streamId) { - await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) { - return capability && capability.promise; - })); + async #deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); delete this.streamControllers[streamId]; } - - _postMessage(message, transfers) { - if (transfers && this.postMessageTransfers) { - this.comObj.postMessage(message, transfers); - } else { - this.comObj.postMessage(message); - } - } - destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } - } - exports.MessageHandler = MessageHandler; /***/ }), -/* 14 */ +/* 177 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Metadata = void 0; - -var _util = __w_pdfjs_require__(2); - +var _util = __w_pdfjs_require__(1); class Metadata { - constructor({ - parsedData, - rawData - }) { - this._metadataMap = parsedData; - this._data = rawData; + #metadataMap; + #data; + constructor(_ref) { + let { + parsedData, + rawData + } = _ref; + this.#metadataMap = parsedData; + this.#data = rawData; } - getRaw() { - return this._data; + return this.#data; } - get(name) { - return this._metadataMap.get(name) ?? null; + return this.#metadataMap.get(name) ?? null; } - getAll() { - return (0, _util.objectFromMap)(this._metadataMap); + return (0, _util.objectFromMap)(this.#metadataMap); } - has(name) { - return this._metadataMap.has(name); + return this.#metadataMap.has(name); } - } - exports.Metadata = Metadata; /***/ }), -/* 15 */ +/* 178 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OptionalContentConfig = void 0; - -var _util = __w_pdfjs_require__(2); - +var _util = __w_pdfjs_require__(1); +var _murmurhash = __w_pdfjs_require__(169); +const INTERNAL = Symbol("INTERNAL"); class OptionalContentGroup { + #visible = true; constructor(name, intent) { - this.visible = true; this.name = name; this.intent = intent; } - + get visible() { + return this.#visible; + } + _setVisible(internal, visible) { + if (internal !== INTERNAL) { + (0, _util.unreachable)("Internal method `_setVisible` called."); + } + this.#visible = visible; + } } - class OptionalContentConfig { + #cachedGetHash = null; + #groups = new Map(); + #initialHash = null; + #order = null; constructor(data) { this.name = null; this.creator = null; - this._order = null; - this._groups = new Map(); - if (data === null) { return; } - this.name = data.name; this.creator = data.creator; - this._order = data.order; - + this.#order = data.order; for (const group of data.groups) { - this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); + this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); } - if (data.baseState === "OFF") { - for (const group of this._groups) { - group.visible = false; + for (const group of this.#groups.values()) { + group._setVisible(INTERNAL, false); } } - for (const on of data.on) { - this._groups.get(on).visible = true; + this.#groups.get(on)._setVisible(INTERNAL, true); } - for (const off of data.off) { - this._groups.get(off).visible = false; + this.#groups.get(off)._setVisible(INTERNAL, false); } + this.#initialHash = this.getHash(); } - - _evaluateVisibilityExpression(array) { + #evaluateVisibilityExpression(array) { const length = array.length; - if (length < 2) { return true; } - const operator = array[0]; - for (let i = 1; i < length; i++) { const element = array[i]; let state; - if (Array.isArray(element)) { - state = this._evaluateVisibilityExpression(element); - } else if (this._groups.has(element)) { - state = this._groups.get(element).visible; + state = this.#evaluateVisibilityExpression(element); + } else if (this.#groups.has(element)) { + state = this.#groups.get(element).visible; } else { (0, _util.warn)(`Optional content group not found: ${element}`); return true; } - switch (operator) { case "And": if (!state) { return false; } - break; - case "Or": if (state) { return true; } - break; - case "Not": return !state; - default: return true; } } - return operator === "And"; } - isVisible(group) { + if (this.#groups.size === 0) { + return true; + } + if (!group) { + (0, _util.warn)("Optional content group not defined."); + return true; + } if (group.type === "OCG") { - if (!this._groups.has(group.id)) { + if (!this.#groups.has(group.id)) { (0, _util.warn)(`Optional content group not found: ${group.id}`); return true; } - - return this._groups.get(group.id).visible; + return this.#groups.get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { - return this._evaluateVisibilityExpression(group.expression); + return this.#evaluateVisibilityExpression(group.expression); } - if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { - if (!this._groups.has(id)) { + if (!this.#groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } - - if (this._groups.get(id).visible) { + if (this.#groups.get(id).visible) { return true; } } - return false; } else if (group.policy === "AllOn") { for (const id of group.ids) { - if (!this._groups.has(id)) { + if (!this.#groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } - - if (!this._groups.get(id).visible) { + if (!this.#groups.get(id).visible) { return false; } } - return true; } else if (group.policy === "AnyOff") { for (const id of group.ids) { - if (!this._groups.has(id)) { + if (!this.#groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } - - if (!this._groups.get(id).visible) { + if (!this.#groups.get(id).visible) { return true; } } - return false; } else if (group.policy === "AllOff") { for (const id of group.ids) { - if (!this._groups.has(id)) { + if (!this.#groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } - - if (this._groups.get(id).visible) { + if (this.#groups.get(id).visible) { return false; } } - return true; } - (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); return true; } - (0, _util.warn)(`Unknown group type ${group.type}.`); return true; } - - setVisibility(id, visible = true) { - if (!this._groups.has(id)) { + setVisibility(id) { + let visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + if (!this.#groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return; } - - this._groups.get(id).visible = !!visible; + this.#groups.get(id)._setVisible(INTERNAL, !!visible); + this.#cachedGetHash = null; + } + get hasInitialVisibility() { + return this.getHash() === this.#initialHash; } - getOrder() { - if (!this._groups.size) { + if (!this.#groups.size) { return null; } - - if (this._order) { - return this._order.slice(); + if (this.#order) { + return this.#order.slice(); } - - return Array.from(this._groups.keys()); + return [...this.#groups.keys()]; } - getGroups() { - return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null; + return this.#groups.size > 0 ? (0, _util.objectFromMap)(this.#groups) : null; } - getGroup(id) { - return this._groups.get(id) || null; + return this.#groups.get(id) || null; + } + getHash() { + if (this.#cachedGetHash !== null) { + return this.#cachedGetHash; + } + const hash = new _murmurhash.MurmurHash3_64(); + for (const [id, group] of this.#groups) { + hash.update(`${id}:${group.visible}`); + } + return this.#cachedGetHash = hash.hexdigest(); } - } - exports.OptionalContentConfig = OptionalContentConfig; /***/ }), -/* 16 */ +/* 179 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFDataTransportStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(89); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); class PDFDataTransportStream { - constructor(params, pdfDataRangeTransport) { + constructor(_ref, pdfDataRangeTransport) { + let { + length, + initialData, + progressiveDone = false, + contentDispositionFilename = null, + disableRange = false, + disableStream = false + } = _ref; (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); this._queuedChunks = []; - this._progressiveDone = params.progressiveDone || false; - this._contentDispositionFilename = params.contentDispositionFilename || null; - const initialData = params.initialData; - + this._progressiveDone = progressiveDone; + this._contentDispositionFilename = contentDispositionFilename; if (initialData?.length > 0) { - const buffer = new Uint8Array(initialData).buffer; - + const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } - this._pdfDataRangeTransport = pdfDataRangeTransport; - this._isStreamingSupported = !params.disableStream; - this._isRangeSupported = !params.disableRange; - this._contentLength = params.length; + this._isStreamingSupported = !disableStream; + this._isRangeSupported = !disableRange; + this._contentLength = length; this._fullRequestReader = null; this._rangeReaders = []; - this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); - this._pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); - this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { this._onReceiveData({ chunk }); }); - this._pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); - this._pdfDataRangeTransport.transportReady(); } - - _onReceiveData(args) { - const buffer = new Uint8Array(args.chunk).buffer; - - if (args.begin === undefined) { + _onReceiveData(_ref2) { + let { + begin, + chunk + } = _ref2; + const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; + if (begin === undefined) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { @@ -8327,123 +13808,87 @@ class PDFDataTransportStream { } } else { const found = this._rangeReaders.some(function (rangeReader) { - if (rangeReader._begin !== args.begin) { + if (rangeReader._begin !== begin) { return false; } - rangeReader._enqueue(buffer); - return true; }); - (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } - get _progressiveDataLength() { return this._fullRequestReader?._loaded ?? 0; } - _onProgress(evt) { if (evt.total === undefined) { - const firstReader = this._rangeReaders[0]; - - if (firstReader?.onProgress) { - firstReader.onProgress({ - loaded: evt.loaded - }); - } + this._rangeReaders[0]?.onProgress?.({ + loaded: evt.loaded + }); } else { - const fullReader = this._fullRequestReader; - - if (fullReader?.onProgress) { - fullReader.onProgress({ - loaded: evt.loaded, - total: evt.total - }); - } + this._fullRequestReader?.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); } } - _onProgressiveDone() { - if (this._fullRequestReader) { - this._fullRequestReader.progressiveDone(); - } - + this._fullRequestReader?.progressiveDone(); this._progressiveDone = true; } - _removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader); - if (i >= 0) { this._rangeReaders.splice(i, 1); } } - getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); } - getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } - const reader = new PDFDataTransportStreamRangeReader(this, begin, end); - this._pdfDataRangeTransport.requestDataRange(begin, end); - this._rangeReaders.push(reader); - return reader; } - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - + this._fullRequestReader?.cancel(reason); for (const reader of this._rangeReaders.slice(0)) { reader.cancel(reason); } - this._pdfDataRangeTransport.abort(); } - } - exports.PDFDataTransportStream = PDFDataTransportStream; - class PDFDataTransportStreamReader { - constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + constructor(stream, queuedChunks) { + let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; this._stream = stream; this._done = progressiveDone || false; this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; this._queuedChunks = queuedChunks || []; this._loaded = 0; - for (const chunk of this._queuedChunks) { this._loaded += chunk.byteLength; } - this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } - _enqueue(chunk) { if (this._done) { return; } - if (this._requests.length > 0) { const requestCapability = this._requests.shift(); - requestCapability.resolve({ value: chunk, done: false @@ -8451,77 +13896,58 @@ class PDFDataTransportStreamReader { } else { this._queuedChunks.push(chunk); } - this._loaded += chunk.byteLength; } - get headersReady() { return this._headersReady; } - get filename() { return this._filename; } - get isRangeSupported() { return this._stream._isRangeSupported; } - get isStreamingSupported() { return this._stream._isStreamingSupported; } - get contentLength() { return this._stream._contentLength; } - async read() { if (this._queuedChunks.length > 0) { const chunk = this._queuedChunks.shift(); - return { value: chunk, done: false }; } - if (this._done) { return { value: undefined, done: true }; } - - const requestCapability = (0, _util.createPromiseCapability)(); - + const requestCapability = new _util.PromiseCapability(); this._requests.push(requestCapability); - return requestCapability.promise; } - cancel(reason) { this._done = true; - for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } - this._requests.length = 0; } - progressiveDone() { if (this._done) { return; } - this._done = true; } - } - class PDFDataTransportStreamRangeReader { constructor(stream, begin, end) { this._stream = stream; @@ -8532,41 +13958,32 @@ class PDFDataTransportStreamRangeReader { this._done = false; this.onProgress = null; } - _enqueue(chunk) { if (this._done) { return; } - if (this._requests.length === 0) { this._queuedChunk = chunk; } else { const requestsCapability = this._requests.shift(); - requestsCapability.resolve({ value: chunk, done: false }); - for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } - this._requests.length = 0; } - this._done = true; - this._stream._removeRangeReader(this); } - get isStreamingSupported() { return false; } - async read() { if (this._queuedChunk) { const chunk = this._queuedChunk; @@ -8576,385 +13993,4729 @@ class PDFDataTransportStreamRangeReader { done: false }; } - if (this._done) { return { value: undefined, done: true }; } - - const requestCapability = (0, _util.createPromiseCapability)(); - + const requestCapability = new _util.PromiseCapability(); this._requests.push(requestCapability); - return requestCapability.promise; } - cancel(reason) { this._done = true; - for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } - this._requests.length = 0; - this._stream._removeRangeReader(this); } - } /***/ }), -/* 17 */ +/* 180 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AnnotationLayer = void 0; +exports.PDFFetchStream = void 0; +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(89); +var _util = __w_pdfjs_require__(1); +var _network_utils = __w_pdfjs_require__(181); +; +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function createHeaders(httpHeaders) { + const headers = new Headers(); + for (const property in httpHeaders) { + const value = httpHeaders[property]; + if (value === undefined) { + continue; + } + headers.append(property, value); + } + return headers; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + (0, _util.warn)(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +class PDFFetchStream { + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +exports.PDFFetchStream = PDFFetchStream; +class PDFFetchStreamReader { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = new _util.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._headers = createHeaders(this._stream.httpHeaders); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0, _network_utils.validateResponseStatus)(response.status)) { + throw (0, _network_utils.createResponseStatusError)(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const getResponseHeader = name => { + return response.headers.get(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0, _network_utils.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new _util.AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} +class PDFFetchStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = new _util.PromiseCapability(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + this._headers = createHeaders(this._stream.httpHeaders); + this._headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { + if (!(0, _network_utils.validateResponseStatus)(response.status)) { + throw (0, _network_utils.createResponseStatusError)(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + this.onProgress?.({ + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + this._reader?.cancel(reason); + this._abortController.abort(); + } +} -var _display_utils = __w_pdfjs_require__(1); +/***/ }), +/* 181 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { -var _util = __w_pdfjs_require__(2); +"use strict"; -var _annotation_storage = __w_pdfjs_require__(9); -var _scripting_utils = __w_pdfjs_require__(18); +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.createResponseStatusError = createResponseStatusError; +exports.extractFilenameFromHeader = extractFilenameFromHeader; +exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; +exports.validateResponseStatus = validateResponseStatus; +var _util = __w_pdfjs_require__(1); +var _content_disposition = __w_pdfjs_require__(182); +var _display_utils = __w_pdfjs_require__(167); +function validateRangeRequestCapabilities(_ref) { + let { + getResponseHeader, + isHttp, + rangeChunkSize, + disableRange + } = _ref; + const returnValues = { + allowRangeRequests: false, + suggestedLength: undefined + }; + const length = parseInt(getResponseHeader("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (getResponseHeader("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(getResponseHeader) { + const contentDisposition = getResponseHeader("Content-Disposition"); + if (contentDisposition) { + let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch {} + } + if ((0, _display_utils.isPdfFile)(filename)) { + return filename; + } + } + return null; +} +function createResponseStatusError(status, url) { + if (status === 404 || status === 0 && url.startsWith("file:")) { + return new _util.MissingPDFException('Missing PDF "' + url + '".'); + } + return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} +/***/ }), +/* 182 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; +__w_pdfjs_require__(89); +__w_pdfjs_require__(148); +var _util = __w_pdfjs_require__(1); +function getFilenameFromContentDispositionHeader(contentDisposition) { + let needsEncodingFixup = true; + let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = unescape(filename); + filename = rfc5987decode(filename); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + tmp = rfc2231getparam(contentDisposition); + if (tmp) { + const filename = rfc2047decode(tmp); + return fixupEncoding(filename); + } + tmp = toParamRegExp("filename", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + function toParamRegExp(attributePattern, flags) { + return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); + } + function textdecode(encoding, value) { + if (encoding) { + if (!/^[\x00-\xFF]+$/.test(value)) { + return value; + } + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = (0, _util.stringToBytes)(value); + value = decoder.decode(buffer); + needsEncodingFixup = false; + } catch {} + } + return value; + } + function fixupEncoding(value) { + if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { + value = textdecode("utf-8", value); + if (needsEncodingFixup) { + value = textdecode("iso-8859-1", value); + } + } + return value; + } + function rfc2231getparam(contentDispositionStr) { + const matches = []; + let match; + const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); + while ((match = iter.exec(contentDispositionStr)) !== null) { + let [, n, quot, part] = match; + n = parseInt(n, 10); + if (n in matches) { + if (n === 0) { + break; + } + continue; + } + matches[n] = [quot, part]; + } + const parts = []; + for (let n = 0; n < matches.length; ++n) { + if (!(n in matches)) { + break; + } + let [quot, part] = matches[n]; + part = rfc2616unquote(part); + if (quot) { + part = unescape(part); + if (n === 0) { + part = rfc5987decode(part); + } + } + parts.push(part); + } + return parts.join(""); + } + function rfc2616unquote(value) { + if (value.startsWith('"')) { + const parts = value.slice(1).split('\\"'); + for (let i = 0; i < parts.length; ++i) { + const quotindex = parts[i].indexOf('"'); + if (quotindex !== -1) { + parts[i] = parts[i].slice(0, quotindex); + parts.length = i + 1; + } + parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); + } + value = parts.join('"'); + } + return value; + } + function rfc5987decode(extvalue) { + const encodingend = extvalue.indexOf("'"); + if (encodingend === -1) { + return extvalue; + } + const encoding = extvalue.slice(0, encodingend); + const langvalue = extvalue.slice(encodingend + 1); + const value = langvalue.replace(/^[^']*'/, ""); + return textdecode(encoding, value); + } + function rfc2047decode(value) { + if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { + return value; + } + return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { + if (encoding === "q" || encoding === "Q") { + text = text.replaceAll("_", " "); + text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }); + return textdecode(charset, text); + } + try { + text = atob(text); + } catch {} + return textdecode(charset, text); + }); + } + return ""; +} + +/***/ }), +/* 183 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFNetworkStream = void 0; +__w_pdfjs_require__(89); +var _util = __w_pdfjs_require__(1); +var _network_utils = __w_pdfjs_require__(181); +; +const OK_RESPONSE = 200; +const PARTIAL_CONTENT_RESPONSE = 206; +function getArrayBuffer(xhr) { + const data = xhr.response; + if (typeof data !== "string") { + return data; + } + return (0, _util.stringToBytes)(data).buffer; +} +class NetworkManager { + constructor(url) { + let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + this.url = url; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); + this.withCredentials = args.withCredentials || false; + this.currXhrId = 0; + this.pendingRequests = Object.create(null); + } + requestRange(begin, end, listeners) { + const args = { + begin, + end + }; + for (const prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + } + requestFull(listeners) { + return this.request(listeners); + } + request(args) { + const xhr = new XMLHttpRequest(); + const xhrId = this.currXhrId++; + const pendingRequest = this.pendingRequests[xhrId] = { + xhr + }; + xhr.open("GET", this.url); + xhr.withCredentials = this.withCredentials; + for (const property in this.httpHeaders) { + const value = this.httpHeaders[property]; + if (value === undefined) { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && "begin" in args && "end" in args) { + xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); + pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; + } else { + pendingRequest.expectedStatus = OK_RESPONSE; + } + xhr.responseType = "arraybuffer"; + if (args.onError) { + xhr.onerror = function (evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + } + onProgress(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + pendingRequest.onProgress?.(evt); + } + onStateChange(xhrId, evt) { + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + const xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + pendingRequest.onError?.(xhr.status); + return; + } + const xhrStatus = xhr.status || OK_RESPONSE; + const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + pendingRequest.onError?.(xhr.status); + return; + } + const chunk = getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + const rangeHeader = xhr.getResponseHeader("Content-Range"); + const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + pendingRequest.onDone({ + begin: parseInt(matches[1], 10), + chunk + }); + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk + }); + } else { + pendingRequest.onError?.(xhr.status); + } + } + getRequestXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + } + isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + } + abortRequest(xhrId) { + const xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } +} +class PDFNetworkStream { + constructor(source) { + this._source = source; + this._manager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + _onRangeRequestReaderClosed(reader) { + const i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + } + getFullReader() { + (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +exports.PDFNetworkStream = PDFNetworkStream; +class PDFNetworkStreamFullRequestReader { + constructor(manager, source) { + this._manager = manager; + const args = { + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = source.url; + this._fullRequestId = manager.requestFull(args); + this._headersReceivedCapability = new _util.PromiseCapability(); + this._disableRange = source.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = undefined; + this._filename = null; + this.onProgress = null; + } + _onHeadersReceived() { + const fullRequestXhrId = this._fullRequestId; + const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); + const getResponseHeader = name => { + return fullRequestXhr.getResponseHeader(name); + }; + const { + allowRangeRequests, + suggestedLength + } = (0, _network_utils.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: this._manager.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + if (allowRangeRequests) { + this._isRangeSupported = true; + } + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); + if (this._isRangeSupported) { + this._manager.abortRequest(fullRequestXhrId); + } + this._headersReceivedCapability.resolve(); + } + _onDone(data) { + if (data) { + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: data.chunk, + done: false + }); + } else { + this._cachedChunks.push(data.chunk); + } + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + } + _onError(status) { + this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); + this._headersReceivedCapability.reject(this._storedError); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._cachedChunks.length = 0; + } + _onProgress(evt) { + this.onProgress?.({ + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : this._contentLength + }); + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get contentLength() { + return this._contentLength; + } + get headersReady() { + return this._headersReceivedCapability.promise; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._cachedChunks.length > 0) { + const chunk = this._cachedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _util.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + this._headersReceivedCapability.reject(reason); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } +} +class PDFNetworkStreamRangeRequestReader { + constructor(manager, begin, end) { + this._manager = manager; + const args = { + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = manager.url; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this._storedError = undefined; + this.onProgress = null; + this.onClosed = null; + } + _close() { + this.onClosed?.(this); + } + _onDone(data) { + const chunk = data.chunk; + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + this._close(); + } + _onError(status) { + this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._queuedChunk = null; + } + _onProgress(evt) { + if (!this.isStreamingSupported) { + this.onProgress?.({ + loaded: evt.loaded + }); + } + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._queuedChunk !== null) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: undefined, + done: true + }; + } + const requestCapability = new _util.PromiseCapability(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } +} + +/***/ }), +/* 184 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFNodeStream = void 0; +__w_pdfjs_require__(89); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +var _util = __w_pdfjs_require__(1); +var _network_utils = __w_pdfjs_require__(181); +; +const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; +function parseUrl(sourceUrl) { + const url = require("url"); + const parsedUrl = url.parse(sourceUrl); + if (parsedUrl.protocol === "file:" || parsedUrl.host) { + return parsedUrl; + } + if (/^[a-z]:[/\\]/i.test(sourceUrl)) { + return url.parse(`file:///${sourceUrl}`); + } + if (!parsedUrl.host) { + parsedUrl.protocol = "file:"; + } + return parsedUrl; +} +class PDFNodeStream { + constructor(source) { + this.source = source; + this.url = parseUrl(source.url); + this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; + this.isFsUrl = this.url.protocol === "file:"; + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; + } + getFullReader() { + (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); + return this._fullRequestReader; + } + getRangeReader(start, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); + this._rangeRequestReaders.push(rangeReader); + return rangeReader; + } + cancelAllRequests(reason) { + this._fullRequestReader?.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +} +exports.PDFNodeStream = PDFNodeStream; +class BaseFullReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + const source = stream.source; + this._contentLength = source.length; + this._loaded = 0; + this._filename = null; + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._readableStream = null; + this._readCapability = new _util.PromiseCapability(); + this._headersCapability = new _util.PromiseCapability(); + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _util.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded, + total: this._contentLength + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new _util.AbortException("streaming is disabled")); + } + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +class BaseRangeReader { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + this._loaded = 0; + this._readableStream = null; + this._readCapability = new _util.PromiseCapability(); + const source = stream.source; + this._isStreamingSupported = !source.disableStream; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + await this._readCapability.promise; + if (this._done) { + return { + value: undefined, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = new _util.PromiseCapability(); + return this.read(); + } + this._loaded += chunk.length; + this.onProgress?.({ + loaded: this._loaded + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", reason => { + this._error(reason); + }); + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +} +function createRequestOptions(parsedUrl, headers) { + return { + protocol: parsedUrl.protocol, + auth: parsedUrl.auth, + host: parsedUrl.hostname, + port: parsedUrl.port, + path: parsedUrl.path, + method: "GET", + headers + }; +} +class PDFNodeStreamFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._headersCapability.resolve(); + this._setReadableStream(response); + const getResponseHeader = name => { + return this._readableStream.headers[name.toLowerCase()]; + }; + const { + allowRangeRequests, + suggestedLength + } = (0, _network_utils.validateRangeRequestCapabilities)({ + getResponseHeader, + isHttp: stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); + }; + this._request = null; + if (this._url.protocol === "http:") { + const http = require("http"); + this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } else { + const https = require("https"); + this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + this._headersCapability.reject(reason); + }); + this._request.end(); + } +} +class PDFNodeStreamRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + this._httpHeaders = {}; + for (const property in stream.httpHeaders) { + const value = stream.httpHeaders[property]; + if (value === undefined) { + continue; + } + this._httpHeaders[property] = value; + } + this._httpHeaders.Range = `bytes=${start}-${end - 1}`; + const handleResponse = response => { + if (response.statusCode === 404) { + const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + return; + } + this._setReadableStream(response); + }; + this._request = null; + if (this._url.protocol === "http:") { + const http = require("http"); + this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } else { + const https = require("https"); + this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); + } + this._request.on("error", reason => { + this._storedError = reason; + }); + this._request.end(); + } +} +class PDFNodeStreamFsFullReader extends BaseFullReader { + constructor(stream) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + const fs = require("fs"); + fs.lstat(path, (error, stat) => { + if (error) { + if (error.code === "ENOENT") { + error = new _util.MissingPDFException(`Missing PDF "${path}".`); + } + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._contentLength = stat.size; + this._setReadableStream(fs.createReadStream(path)); + this._headersCapability.resolve(); + }); + } +} +class PDFNodeStreamFsRangeReader extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + let path = decodeURIComponent(this._url.path); + if (fileUriRegex.test(this._url.href)) { + path = path.replace(/^\//, ""); + } + const fs = require("fs"); + this._setReadableStream(fs.createReadStream(path, { + start, + end: end - 1 + })); + } +} + +/***/ }), +/* 185 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SVGGraphics = void 0; +__w_pdfjs_require__(84); +__w_pdfjs_require__(86); +__w_pdfjs_require__(87); +__w_pdfjs_require__(93); +__w_pdfjs_require__(101); +__w_pdfjs_require__(102); +__w_pdfjs_require__(105); +__w_pdfjs_require__(107); +__w_pdfjs_require__(109); +__w_pdfjs_require__(113); +__w_pdfjs_require__(116); +__w_pdfjs_require__(123); +__w_pdfjs_require__(2); +__w_pdfjs_require__(89); +__w_pdfjs_require__(186); +var _display_utils = __w_pdfjs_require__(167); +var _util = __w_pdfjs_require__(1); +; +const SVG_DEFAULTS = { + fontStyle: "normal", + fontWeight: "normal", + fillColor: "#000000" +}; +const XML_NS = "http://www.w3.org/XML/1998/namespace"; +const XLINK_NS = "http://www.w3.org/1999/xlink"; +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const createObjectURL = function (data) { + let contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; + let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { + return URL.createObjectURL(new Blob([data], { + type: contentType + })); + } + const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + let buffer = `data:${contentType};base64,`; + for (let i = 0, ii = data.length; i < ii; i += 3) { + const b1 = data[i] & 0xff; + const b2 = data[i + 1] & 0xff; + const b3 = data[i + 2] & 0xff; + const d1 = b1 >> 2, + d2 = (b1 & 3) << 4 | b2 >> 4; + const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; + const d4 = i + 2 < ii ? b3 & 0x3f : 64; + buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; + } + return buffer; +}; +const convertImgDataToPng = function () { + const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); + const CHUNK_WRAPPER_SIZE = 12; + const crcTable = new Int32Array(256); + for (let i = 0; i < 256; i++) { + let c = i; + for (let h = 0; h < 8; h++) { + c = c & 1 ? 0xedb88320 ^ c >> 1 & 0x7fffffff : c >> 1 & 0x7fffffff; + } + crcTable[i] = c; + } + function crc32(data, start, end) { + let crc = -1; + for (let i = start; i < end; i++) { + const a = (crc ^ data[i]) & 0xff; + const b = crcTable[a]; + crc = crc >>> 8 ^ b; + } + return crc ^ -1; + } + function writePngChunk(type, body, data, offset) { + let p = offset; + const len = body.length; + data[p] = len >> 24 & 0xff; + data[p + 1] = len >> 16 & 0xff; + data[p + 2] = len >> 8 & 0xff; + data[p + 3] = len & 0xff; + p += 4; + data[p] = type.charCodeAt(0) & 0xff; + data[p + 1] = type.charCodeAt(1) & 0xff; + data[p + 2] = type.charCodeAt(2) & 0xff; + data[p + 3] = type.charCodeAt(3) & 0xff; + p += 4; + data.set(body, p); + p += body.length; + const crc = crc32(data, offset + 4, p); + data[p] = crc >> 24 & 0xff; + data[p + 1] = crc >> 16 & 0xff; + data[p + 2] = crc >> 8 & 0xff; + data[p + 3] = crc & 0xff; + } + function adler32(data, start, end) { + let a = 1; + let b = 0; + for (let i = start; i < end; ++i) { + a = (a + (data[i] & 0xff)) % 65521; + b = (b + a) % 65521; + } + return b << 16 | a; + } + function deflateSync(literals) { + if (!_util.isNodeJS) { + return deflateSyncUncompressed(literals); + } + try { + const input = parseInt(process.versions.node) >= 8 ? literals : Buffer.from(literals); + const output = require("zlib").deflateSync(input, { + level: 9 + }); + return output instanceof Uint8Array ? output : new Uint8Array(output); + } catch (e) { + (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); + } + return deflateSyncUncompressed(literals); + } + function deflateSyncUncompressed(literals) { + let len = literals.length; + const maxBlockLength = 0xffff; + const deflateBlocks = Math.ceil(len / maxBlockLength); + const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); + let pi = 0; + idat[pi++] = 0x78; + idat[pi++] = 0x9c; + let pos = 0; + while (len > maxBlockLength) { + idat[pi++] = 0x00; + idat[pi++] = 0xff; + idat[pi++] = 0xff; + idat[pi++] = 0x00; + idat[pi++] = 0x00; + idat.set(literals.subarray(pos, pos + maxBlockLength), pi); + pi += maxBlockLength; + pos += maxBlockLength; + len -= maxBlockLength; + } + idat[pi++] = 0x01; + idat[pi++] = len & 0xff; + idat[pi++] = len >> 8 & 0xff; + idat[pi++] = ~len & 0xffff & 0xff; + idat[pi++] = (~len & 0xffff) >> 8 & 0xff; + idat.set(literals.subarray(pos), pi); + pi += literals.length - pos; + const adler = adler32(literals, 0, literals.length); + idat[pi++] = adler >> 24 & 0xff; + idat[pi++] = adler >> 16 & 0xff; + idat[pi++] = adler >> 8 & 0xff; + idat[pi++] = adler & 0xff; + return idat; + } + function encode(imgData, kind, forceDataSchema, isMask) { + const width = imgData.width; + const height = imgData.height; + let bitDepth, colorType, lineSize; + const bytes = imgData.data; + switch (kind) { + case _util.ImageKind.GRAYSCALE_1BPP: + colorType = 0; + bitDepth = 1; + lineSize = width + 7 >> 3; + break; + case _util.ImageKind.RGB_24BPP: + colorType = 2; + bitDepth = 8; + lineSize = width * 3; + break; + case _util.ImageKind.RGBA_32BPP: + colorType = 6; + bitDepth = 8; + lineSize = width * 4; + break; + default: + throw new Error("invalid format"); + } + const literals = new Uint8Array((1 + lineSize) * height); + let offsetLiterals = 0, + offsetBytes = 0; + for (let y = 0; y < height; ++y) { + literals[offsetLiterals++] = 0; + literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); + offsetBytes += lineSize; + offsetLiterals += lineSize; + } + if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { + offsetLiterals = 0; + for (let y = 0; y < height; y++) { + offsetLiterals++; + for (let i = 0; i < lineSize; i++) { + literals[offsetLiterals++] ^= 0xff; + } + } + } + const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); + const idat = deflateSync(literals); + const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; + const data = new Uint8Array(pngLength); + let offset = 0; + data.set(PNG_HEADER, offset); + offset += PNG_HEADER.length; + writePngChunk("IHDR", ihdr, data, offset); + offset += CHUNK_WRAPPER_SIZE + ihdr.length; + writePngChunk("IDATA", idat, data, offset); + offset += CHUNK_WRAPPER_SIZE + idat.length; + writePngChunk("IEND", new Uint8Array(0), data, offset); + return createObjectURL(data, "image/png", forceDataSchema); + } + return function convertImgDataToPng(imgData, forceDataSchema, isMask) { + const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; + return encode(imgData, kind, forceDataSchema, isMask); + }; +}(); +class SVGExtraState { + constructor() { + this.fontSizeScale = 1; + this.fontWeight = SVG_DEFAULTS.fontWeight; + this.fontSize = 0; + this.textMatrix = _util.IDENTITY_MATRIX; + this.fontMatrix = _util.FONT_IDENTITY_MATRIX; + this.leading = 0; + this.textRenderingMode = _util.TextRenderingMode.FILL; + this.textMatrixScale = 1; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRise = 0; + this.fillColor = SVG_DEFAULTS.fillColor; + this.strokeColor = "#000000"; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.lineJoin = ""; + this.lineCap = ""; + this.miterLimit = 0; + this.dashArray = []; + this.dashPhase = 0; + this.dependencies = []; + this.activeClipUrl = null; + this.clipGroup = null; + this.maskId = ""; + } + clone() { + return Object.create(this); + } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } +} +function opListToTree(opList) { + let opTree = []; + const tmp = []; + for (const opListElement of opList) { + if (opListElement.fn === "save") { + opTree.push({ + fnId: 92, + fn: "group", + items: [] + }); + tmp.push(opTree); + opTree = opTree.at(-1).items; + continue; + } + if (opListElement.fn === "restore") { + opTree = tmp.pop(); + } else { + opTree.push(opListElement); + } + } + return opTree; +} +function pf(value) { + if (Number.isInteger(value)) { + return value.toString(); + } + const s = value.toFixed(10); + let i = s.length - 1; + if (s[i] !== "0") { + return s; + } + do { + i--; + } while (s[i] === "0"); + return s.substring(0, s[i] === "." ? i : i + 1); +} +function pm(m) { + if (m[4] === 0 && m[5] === 0) { + if (m[1] === 0 && m[2] === 0) { + if (m[0] === 1 && m[3] === 1) { + return ""; + } + return `scale(${pf(m[0])} ${pf(m[3])})`; + } + if (m[0] === m[3] && m[1] === -m[2]) { + const a = Math.acos(m[0]) * 180 / Math.PI; + return `rotate(${pf(a)})`; + } + } else if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { + return `translate(${pf(m[4])} ${pf(m[5])})`; + } + return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; +} +let clipCount = 0; +let maskCount = 0; +let shadingCount = 0; +class SVGGraphics { + constructor(commonObjs, objs) { + let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + (0, _display_utils.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."); + this.svgFactory = new _display_utils.DOMSVGFactory(); + this.current = new SVGExtraState(); + this.transformMatrix = _util.IDENTITY_MATRIX; + this.transformStack = []; + this.extraStack = []; + this.commonObjs = commonObjs; + this.objs = objs; + this.pendingClip = null; + this.pendingEOFill = false; + this.embedFonts = false; + this.embeddedFonts = Object.create(null); + this.cssStyle = null; + this.forceDataSchema = !!forceDataSchema; + this._operatorIdMapping = []; + for (const op in _util.OPS) { + this._operatorIdMapping[_util.OPS[op]] = op; + } + } + getObject(data) { + let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + save() { + this.transformStack.push(this.transformMatrix); + const old = this.current; + this.extraStack.push(old); + this.current = old.clone(); + } + restore() { + this.transformMatrix = this.transformStack.pop(); + this.current = this.extraStack.pop(); + this.pendingClip = null; + this.tgrp = null; + } + group(items) { + this.save(); + this.executeOpTree(items); + this.restore(); + } + loadDependencies(operatorList) { + const fnArray = operatorList.fnArray; + const argsArray = operatorList.argsArray; + for (let i = 0, ii = fnArray.length; i < ii; i++) { + if (fnArray[i] !== _util.OPS.dependency) { + continue; + } + for (const obj of argsArray[i]) { + const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; + const promise = new Promise(resolve => { + objsPool.get(obj, resolve); + }); + this.current.dependencies.push(promise); + } + } + return Promise.all(this.current.dependencies); + } + transform(a, b, c, d, e, f) { + const transformMatrix = [a, b, c, d, e, f]; + this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); + this.tgrp = null; + } + getSVG(operatorList, viewport) { + this.viewport = viewport; + const svgElement = this._initialize(viewport); + return this.loadDependencies(operatorList).then(() => { + this.transformMatrix = _util.IDENTITY_MATRIX; + this.executeOpTree(this.convertOpList(operatorList)); + return svgElement; + }); + } + convertOpList(operatorList) { + const operatorIdMapping = this._operatorIdMapping; + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + const opList = []; + for (let i = 0, ii = fnArray.length; i < ii; i++) { + const fnId = fnArray[i]; + opList.push({ + fnId, + fn: operatorIdMapping[fnId], + args: argsArray[i] + }); + } + return opListToTree(opList); + } + executeOpTree(opTree) { + for (const opTreeElement of opTree) { + const fn = opTreeElement.fn; + const fnId = opTreeElement.fnId; + const args = opTreeElement.args; + switch (fnId | 0) { + case _util.OPS.beginText: + this.beginText(); + break; + case _util.OPS.dependency: + break; + case _util.OPS.setLeading: + this.setLeading(args); + break; + case _util.OPS.setLeadingMoveText: + this.setLeadingMoveText(args[0], args[1]); + break; + case _util.OPS.setFont: + this.setFont(args); + break; + case _util.OPS.showText: + this.showText(args[0]); + break; + case _util.OPS.showSpacedText: + this.showText(args[0]); + break; + case _util.OPS.endText: + this.endText(); + break; + case _util.OPS.moveText: + this.moveText(args[0], args[1]); + break; + case _util.OPS.setCharSpacing: + this.setCharSpacing(args[0]); + break; + case _util.OPS.setWordSpacing: + this.setWordSpacing(args[0]); + break; + case _util.OPS.setHScale: + this.setHScale(args[0]); + break; + case _util.OPS.setTextMatrix: + this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case _util.OPS.setTextRise: + this.setTextRise(args[0]); + break; + case _util.OPS.setTextRenderingMode: + this.setTextRenderingMode(args[0]); + break; + case _util.OPS.setLineWidth: + this.setLineWidth(args[0]); + break; + case _util.OPS.setLineJoin: + this.setLineJoin(args[0]); + break; + case _util.OPS.setLineCap: + this.setLineCap(args[0]); + break; + case _util.OPS.setMiterLimit: + this.setMiterLimit(args[0]); + break; + case _util.OPS.setFillRGBColor: + this.setFillRGBColor(args[0], args[1], args[2]); + break; + case _util.OPS.setStrokeRGBColor: + this.setStrokeRGBColor(args[0], args[1], args[2]); + break; + case _util.OPS.setStrokeColorN: + this.setStrokeColorN(args); + break; + case _util.OPS.setFillColorN: + this.setFillColorN(args); + break; + case _util.OPS.shadingFill: + this.shadingFill(args[0]); + break; + case _util.OPS.setDash: + this.setDash(args[0], args[1]); + break; + case _util.OPS.setRenderingIntent: + this.setRenderingIntent(args[0]); + break; + case _util.OPS.setFlatness: + this.setFlatness(args[0]); + break; + case _util.OPS.setGState: + this.setGState(args[0]); + break; + case _util.OPS.fill: + this.fill(); + break; + case _util.OPS.eoFill: + this.eoFill(); + break; + case _util.OPS.stroke: + this.stroke(); + break; + case _util.OPS.fillStroke: + this.fillStroke(); + break; + case _util.OPS.eoFillStroke: + this.eoFillStroke(); + break; + case _util.OPS.clip: + this.clip("nonzero"); + break; + case _util.OPS.eoClip: + this.clip("evenodd"); + break; + case _util.OPS.paintSolidColorImageMask: + this.paintSolidColorImageMask(); + break; + case _util.OPS.paintImageXObject: + this.paintImageXObject(args[0]); + break; + case _util.OPS.paintInlineImageXObject: + this.paintInlineImageXObject(args[0]); + break; + case _util.OPS.paintImageMaskXObject: + this.paintImageMaskXObject(args[0]); + break; + case _util.OPS.paintFormXObjectBegin: + this.paintFormXObjectBegin(args[0], args[1]); + break; + case _util.OPS.paintFormXObjectEnd: + this.paintFormXObjectEnd(); + break; + case _util.OPS.closePath: + this.closePath(); + break; + case _util.OPS.closeStroke: + this.closeStroke(); + break; + case _util.OPS.closeFillStroke: + this.closeFillStroke(); + break; + case _util.OPS.closeEOFillStroke: + this.closeEOFillStroke(); + break; + case _util.OPS.nextLine: + this.nextLine(); + break; + case _util.OPS.transform: + this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); + break; + case _util.OPS.constructPath: + this.constructPath(args[0], args[1]); + break; + case _util.OPS.endPath: + this.endPath(); + break; + case 92: + this.group(opTreeElement.items); + break; + default: + (0, _util.warn)(`Unimplemented operator ${fn}`); + break; + } + } + } + setWordSpacing(wordSpacing) { + this.current.wordSpacing = wordSpacing; + } + setCharSpacing(charSpacing) { + this.current.charSpacing = charSpacing; + } + nextLine() { + this.moveText(0, this.current.leading); + } + setTextMatrix(a, b, c, d, e, f) { + const current = this.current; + current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; + current.textMatrixScale = Math.hypot(a, b); + current.x = current.lineX = 0; + current.y = current.lineY = 0; + current.xcoords = []; + current.ycoords = []; + current.tspan = this.svgFactory.createElement("svg:tspan"); + current.tspan.setAttributeNS(null, "font-family", current.fontFamily); + current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); + current.tspan.setAttributeNS(null, "y", pf(-current.y)); + current.txtElement = this.svgFactory.createElement("svg:text"); + current.txtElement.append(current.tspan); + } + beginText() { + const current = this.current; + current.x = current.lineX = 0; + current.y = current.lineY = 0; + current.textMatrix = _util.IDENTITY_MATRIX; + current.lineMatrix = _util.IDENTITY_MATRIX; + current.textMatrixScale = 1; + current.tspan = this.svgFactory.createElement("svg:tspan"); + current.txtElement = this.svgFactory.createElement("svg:text"); + current.txtgrp = this.svgFactory.createElement("svg:g"); + current.xcoords = []; + current.ycoords = []; + } + moveText(x, y) { + const current = this.current; + current.x = current.lineX += x; + current.y = current.lineY += y; + current.xcoords = []; + current.ycoords = []; + current.tspan = this.svgFactory.createElement("svg:tspan"); + current.tspan.setAttributeNS(null, "font-family", current.fontFamily); + current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); + current.tspan.setAttributeNS(null, "y", pf(-current.y)); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + if (fontSize === 0) { + return; + } + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + let x = 0; + for (const glyph of glyphs) { + if (glyph === null) { + x += fontDirection * wordSpacing; + continue; + } else if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + let vx; + const vmetric = glyph.vmetric || defaultVMetrics; + vx = glyph.vmetric ? vmetric[1] : width * 0.5; + vx = -vx * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (glyph.isInFont || font.missingFile) { + current.xcoords.push(current.x + scaledX); + if (vertical) { + current.ycoords.push(-current.y + scaledY); + } + current.tspan.textContent += character; + } else {} + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + } + current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); + if (vertical) { + current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); + } else { + current.tspan.setAttributeNS(null, "y", pf(-current.y)); + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + current.tspan.setAttributeNS(null, "font-family", current.fontFamily); + current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); + if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { + current.tspan.setAttributeNS(null, "font-style", current.fontStyle); + } + if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { + current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); + } + const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + if (current.fillColor !== SVG_DEFAULTS.fillColor) { + current.tspan.setAttributeNS(null, "fill", current.fillColor); + } + if (current.fillAlpha < 1) { + current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); + } + } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { + current.tspan.setAttributeNS(null, "fill", "transparent"); + } else { + current.tspan.setAttributeNS(null, "fill", "none"); + } + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + const lineWidthScale = 1 / (current.textMatrixScale || 1); + this._setStrokeAttributes(current.tspan, lineWidthScale); + } + let textMatrix = current.textMatrix; + if (current.textRise !== 0) { + textMatrix = textMatrix.slice(); + textMatrix[5] += current.textRise; + } + current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); + current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); + current.txtElement.append(current.tspan); + current.txtgrp.append(current.txtElement); + this._ensureTransformGroup().append(current.txtElement); + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + addFontStyle(fontObj) { + if (!fontObj.data) { + throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); + } + if (!this.cssStyle) { + this.cssStyle = this.svgFactory.createElement("svg:style"); + this.cssStyle.setAttributeNS(null, "type", "text/css"); + this.defs.append(this.cssStyle); + } + const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema); + this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; + } + setFont(details) { + const current = this.current; + const fontObj = this.commonObjs.get(details[0]); + let size = details[1]; + current.font = fontObj; + if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { + this.addFontStyle(fontObj); + this.embeddedFonts[fontObj.loadedName] = fontObj; + } + current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + current.fontSize = size; + current.fontFamily = fontObj.loadedName; + current.fontWeight = bold; + current.fontStyle = italic; + current.tspan = this.svgFactory.createElement("svg:tspan"); + current.tspan.setAttributeNS(null, "y", pf(-current.y)); + current.xcoords = []; + current.ycoords = []; + } + endText() { + const current = this.current; + if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { + current.element = current.txtElement; + this.clip("nonzero"); + this.endPath(); + } + } + setLineWidth(width) { + if (width > 0) { + this.current.lineWidth = width; + } + } + setLineCap(style) { + this.current.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.current.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.current.miterLimit = limit; + } + setStrokeAlpha(strokeAlpha) { + this.current.strokeAlpha = strokeAlpha; + } + setStrokeRGBColor(r, g, b) { + this.current.strokeColor = _util.Util.makeHexColor(r, g, b); + } + setFillAlpha(fillAlpha) { + this.current.fillAlpha = fillAlpha; + } + setFillRGBColor(r, g, b) { + this.current.fillColor = _util.Util.makeHexColor(r, g, b); + this.current.tspan = this.svgFactory.createElement("svg:tspan"); + this.current.xcoords = []; + this.current.ycoords = []; + } + setStrokeColorN(args) { + this.current.strokeColor = this._makeColorN_Pattern(args); + } + setFillColorN(args) { + this.current.fillColor = this._makeColorN_Pattern(args); + } + shadingFill(args) { + const { + width, + height + } = this.viewport; + const inv = _util.Util.inverseTransform(this.transformMatrix); + const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + const rect = this.svgFactory.createElement("svg:rect"); + rect.setAttributeNS(null, "x", x0); + rect.setAttributeNS(null, "y", y0); + rect.setAttributeNS(null, "width", x1 - x0); + rect.setAttributeNS(null, "height", y1 - y0); + rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); + if (this.current.fillAlpha < 1) { + rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); + } + this._ensureTransformGroup().append(rect); + } + _makeColorN_Pattern(args) { + if (args[0] === "TilingPattern") { + return this._makeTilingPattern(args); + } + return this._makeShadingPattern(args); + } + _makeTilingPattern(args) { + const color = args[1]; + const operatorList = args[2]; + const matrix = args[3] || _util.IDENTITY_MATRIX; + const [x0, y0, x1, y1] = args[4]; + const xstep = args[5]; + const ystep = args[6]; + const paintType = args[7]; + const tilingId = `shading${shadingCount++}`; + const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); + const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); + const txstep = xstep * xscale; + const tystep = ystep * yscale; + const tiling = this.svgFactory.createElement("svg:pattern"); + tiling.setAttributeNS(null, "id", tilingId); + tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); + tiling.setAttributeNS(null, "width", txstep); + tiling.setAttributeNS(null, "height", tystep); + tiling.setAttributeNS(null, "x", `${tx0}`); + tiling.setAttributeNS(null, "y", `${ty0}`); + const svg = this.svg; + const transformMatrix = this.transformMatrix; + const fillColor = this.current.fillColor; + const strokeColor = this.current.strokeColor; + const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); + this.svg = bbox; + this.transformMatrix = matrix; + if (paintType === 2) { + const cssColor = _util.Util.makeHexColor(...color); + this.current.fillColor = cssColor; + this.current.strokeColor = cssColor; + } + this.executeOpTree(this.convertOpList(operatorList)); + this.svg = svg; + this.transformMatrix = transformMatrix; + this.current.fillColor = fillColor; + this.current.strokeColor = strokeColor; + tiling.append(bbox.childNodes[0]); + this.defs.append(tiling); + return `url(#${tilingId})`; + } + _makeShadingPattern(args) { + if (typeof args === "string") { + args = this.objs.get(args); + } + switch (args[0]) { + case "RadialAxial": + const shadingId = `shading${shadingCount++}`; + const colorStops = args[3]; + let gradient; + switch (args[1]) { + case "axial": + const point0 = args[4]; + const point1 = args[5]; + gradient = this.svgFactory.createElement("svg:linearGradient"); + gradient.setAttributeNS(null, "id", shadingId); + gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); + gradient.setAttributeNS(null, "x1", point0[0]); + gradient.setAttributeNS(null, "y1", point0[1]); + gradient.setAttributeNS(null, "x2", point1[0]); + gradient.setAttributeNS(null, "y2", point1[1]); + break; + case "radial": + const focalPoint = args[4]; + const circlePoint = args[5]; + const focalRadius = args[6]; + const circleRadius = args[7]; + gradient = this.svgFactory.createElement("svg:radialGradient"); + gradient.setAttributeNS(null, "id", shadingId); + gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); + gradient.setAttributeNS(null, "cx", circlePoint[0]); + gradient.setAttributeNS(null, "cy", circlePoint[1]); + gradient.setAttributeNS(null, "r", circleRadius); + gradient.setAttributeNS(null, "fx", focalPoint[0]); + gradient.setAttributeNS(null, "fy", focalPoint[1]); + gradient.setAttributeNS(null, "fr", focalRadius); + break; + default: + throw new Error(`Unknown RadialAxial type: ${args[1]}`); + } + for (const colorStop of colorStops) { + const stop = this.svgFactory.createElement("svg:stop"); + stop.setAttributeNS(null, "offset", colorStop[0]); + stop.setAttributeNS(null, "stop-color", colorStop[1]); + gradient.append(stop); + } + this.defs.append(gradient); + return `url(#${shadingId})`; + case "Mesh": + (0, _util.warn)("Unimplemented pattern Mesh"); + return null; + case "Dummy": + return "hotpink"; + default: + throw new Error(`Unknown IR type: ${args[0]}`); + } + } + setDash(dashArray, dashPhase) { + this.current.dashArray = dashArray; + this.current.dashPhase = dashPhase; + } + constructPath(ops, args) { + const current = this.current; + let x = current.x, + y = current.y; + let d = []; + let j = 0; + for (const op of ops) { + switch (op | 0) { + case _util.OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); + break; + case _util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + d.push("M", pf(x), pf(y)); + break; + case _util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + d.push("L", pf(x), pf(y)); + break; + case _util.OPS.curveTo: + x = args[j + 4]; + y = args[j + 5]; + d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); + j += 6; + break; + case _util.OPS.curveTo2: + d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case _util.OPS.curveTo3: + x = args[j + 2]; + y = args[j + 3]; + d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); + j += 4; + break; + case _util.OPS.closePath: + d.push("Z"); + break; + } + } + d = d.join(" "); + if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { + d = current.path.getAttributeNS(null, "d") + d; + } else { + current.path = this.svgFactory.createElement("svg:path"); + this._ensureTransformGroup().append(current.path); + } + current.path.setAttributeNS(null, "d", d); + current.path.setAttributeNS(null, "fill", "none"); + current.element = current.path; + current.setCurrentPoint(x, y); + } + endPath() { + const current = this.current; + current.path = null; + if (!this.pendingClip) { + return; + } + if (!current.element) { + this.pendingClip = null; + return; + } + const clipId = `clippath${clipCount++}`; + const clipPath = this.svgFactory.createElement("svg:clipPath"); + clipPath.setAttributeNS(null, "id", clipId); + clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); + const clipElement = current.element.cloneNode(true); + if (this.pendingClip === "evenodd") { + clipElement.setAttributeNS(null, "clip-rule", "evenodd"); + } else { + clipElement.setAttributeNS(null, "clip-rule", "nonzero"); + } + this.pendingClip = null; + clipPath.append(clipElement); + this.defs.append(clipPath); + if (current.activeClipUrl) { + current.clipGroup = null; + for (const prev of this.extraStack) { + prev.clipGroup = null; + } + clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); + } + current.activeClipUrl = `url(#${clipId})`; + this.tgrp = null; + } + clip(type) { + this.pendingClip = type; + } + closePath() { + const current = this.current; + if (current.path) { + const d = `${current.path.getAttributeNS(null, "d")}Z`; + current.path.setAttributeNS(null, "d", d); + } + } + setLeading(leading) { + this.current.leading = -leading; + } + setTextRise(textRise) { + this.current.textRise = textRise; + } + setTextRenderingMode(textRenderingMode) { + this.current.textRenderingMode = textRenderingMode; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setRenderingIntent(intent) {} + setFlatness(flatness) {} + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value); + break; + case "CA": + this.setStrokeAlpha(value); + break; + case "ca": + this.setFillAlpha(value); + break; + default: + (0, _util.warn)(`Unimplemented graphic state operator ${key}`); + break; + } + } + } + fill() { + const current = this.current; + if (current.element) { + current.element.setAttributeNS(null, "fill", current.fillColor); + current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); + this.endPath(); + } + } + stroke() { + const current = this.current; + if (current.element) { + this._setStrokeAttributes(current.element); + current.element.setAttributeNS(null, "fill", "none"); + this.endPath(); + } + } + _setStrokeAttributes(element) { + let lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + const current = this.current; + let dashArray = current.dashArray; + if (lineWidthScale !== 1 && dashArray.length > 0) { + dashArray = dashArray.map(function (value) { + return lineWidthScale * value; + }); + } + element.setAttributeNS(null, "stroke", current.strokeColor); + element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); + element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); + element.setAttributeNS(null, "stroke-linecap", current.lineCap); + element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); + element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); + element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); + element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); + } + eoFill() { + this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); + this.fill(); + } + fillStroke() { + this.stroke(); + this.fill(); + } + eoFillStroke() { + this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); + this.fillStroke(); + } + closeStroke() { + this.closePath(); + this.stroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.closePath(); + this.eoFillStroke(); + } + paintSolidColorImageMask() { + const rect = this.svgFactory.createElement("svg:rect"); + rect.setAttributeNS(null, "x", "0"); + rect.setAttributeNS(null, "y", "0"); + rect.setAttributeNS(null, "width", "1px"); + rect.setAttributeNS(null, "height", "1px"); + rect.setAttributeNS(null, "fill", this.current.fillColor); + this._ensureTransformGroup().append(rect); + } + paintImageXObject(objId) { + const imgData = this.getObject(objId); + if (!imgData) { + (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); + return; + } + this.paintInlineImageXObject(imgData); + } + paintInlineImageXObject(imgData, mask) { + const width = imgData.width; + const height = imgData.height; + const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); + const cliprect = this.svgFactory.createElement("svg:rect"); + cliprect.setAttributeNS(null, "x", "0"); + cliprect.setAttributeNS(null, "y", "0"); + cliprect.setAttributeNS(null, "width", pf(width)); + cliprect.setAttributeNS(null, "height", pf(height)); + this.current.element = cliprect; + this.clip("nonzero"); + const imgEl = this.svgFactory.createElement("svg:image"); + imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); + imgEl.setAttributeNS(null, "x", "0"); + imgEl.setAttributeNS(null, "y", pf(-height)); + imgEl.setAttributeNS(null, "width", pf(width) + "px"); + imgEl.setAttributeNS(null, "height", pf(height) + "px"); + imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); + if (mask) { + mask.append(imgEl); + } else { + this._ensureTransformGroup().append(imgEl); + } + } + paintImageMaskXObject(img) { + const imgData = this.getObject(img.data, img); + if (imgData.bitmap) { + (0, _util.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, " + "ensure that the `isOffscreenCanvasSupported` API parameter is disabled."); + return; + } + const current = this.current; + const width = imgData.width; + const height = imgData.height; + const fillColor = current.fillColor; + current.maskId = `mask${maskCount++}`; + const mask = this.svgFactory.createElement("svg:mask"); + mask.setAttributeNS(null, "id", current.maskId); + const rect = this.svgFactory.createElement("svg:rect"); + rect.setAttributeNS(null, "x", "0"); + rect.setAttributeNS(null, "y", "0"); + rect.setAttributeNS(null, "width", pf(width)); + rect.setAttributeNS(null, "height", pf(height)); + rect.setAttributeNS(null, "fill", fillColor); + rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); + this.defs.append(mask); + this._ensureTransformGroup().append(rect); + this.paintInlineImageXObject(imgData, mask); + } + paintFormXObjectBegin(matrix, bbox) { + if (Array.isArray(matrix) && matrix.length === 6) { + this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); + } + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const cliprect = this.svgFactory.createElement("svg:rect"); + cliprect.setAttributeNS(null, "x", bbox[0]); + cliprect.setAttributeNS(null, "y", bbox[1]); + cliprect.setAttributeNS(null, "width", pf(width)); + cliprect.setAttributeNS(null, "height", pf(height)); + this.current.element = cliprect; + this.clip("nonzero"); + this.endPath(); + } + } + paintFormXObjectEnd() {} + _initialize(viewport) { + const svg = this.svgFactory.create(viewport.width, viewport.height); + const definitions = this.svgFactory.createElement("svg:defs"); + svg.append(definitions); + this.defs = definitions; + const rootGroup = this.svgFactory.createElement("svg:g"); + rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); + svg.append(rootGroup); + this.svg = rootGroup; + return svg; + } + _ensureClipGroup() { + if (!this.current.clipGroup) { + const clipGroup = this.svgFactory.createElement("svg:g"); + clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); + this.svg.append(clipGroup); + this.current.clipGroup = clipGroup; + } + return this.current.clipGroup; + } + _ensureTransformGroup() { + if (!this.tgrp) { + this.tgrp = this.svgFactory.createElement("svg:g"); + this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); + if (this.current.activeClipUrl) { + this._ensureClipGroup().append(this.tgrp); + } else { + this.svg.append(this.tgrp); + } + } + return this.tgrp; + } +} +exports.SVGGraphics = SVGGraphics; + +/***/ }), +/* 186 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + +"use strict"; + +var $ = __w_pdfjs_require__(3); +var $group = __w_pdfjs_require__(187); +var addToUnscopables = __w_pdfjs_require__(192); +$({ + target: 'Array', + proto: true +}, { + group: function group(callbackfn) { + var thisArg = arguments.length > 1 ? arguments[1] : undefined; + return $group(this, callbackfn, thisArg); + } +}); +addToUnscopables('group'); + +/***/ }), +/* 187 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var bind = __w_pdfjs_require__(99); +var uncurryThis = __w_pdfjs_require__(14); +var IndexedObject = __w_pdfjs_require__(13); +var toObject = __w_pdfjs_require__(40); +var toPropertyKey = __w_pdfjs_require__(18); +var lengthOfArrayLike = __w_pdfjs_require__(64); +var objectCreate = __w_pdfjs_require__(188); +var arrayFromConstructorAndList = __w_pdfjs_require__(108); +var $Array = Array; +var push = uncurryThis([].push); +module.exports = function ($this, callbackfn, that, specificConstructor) { + var O = toObject($this); + var self = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var target = objectCreate(null); + var length = lengthOfArrayLike(self); + var index = 0; + var Constructor, key, value; + for (; length > index; index++) { + value = self[index]; + key = toPropertyKey(boundFunction(value, index, O)); + if (key in target) + push(target[key], value); + else + target[key] = [value]; + } + if (specificConstructor) { + Constructor = specificConstructor(O); + if (Constructor !== $Array) { + for (key in target) + target[key] = arrayFromConstructorAndList(Constructor, target[key]); + } + } + return target; +}; + +/***/ }), +/* 188 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var anObject = __w_pdfjs_require__(47); +var definePropertiesModule = __w_pdfjs_require__(189); +var enumBugKeys = __w_pdfjs_require__(66); +var hiddenKeys = __w_pdfjs_require__(55); +var html = __w_pdfjs_require__(191); +var documentCreateElement = __w_pdfjs_require__(43); +var sharedKey = __w_pdfjs_require__(54); +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); +var EmptyConstructor = function () { +}; +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; + return temp; +}; +var NullProtoObjectViaIFrame = function () { + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { + } + NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; +hiddenKeys[IE_PROTO] = true; +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + +/***/ }), +/* 189 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +var DESCRIPTORS = __w_pdfjs_require__(6); +var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46); +var definePropertyModule = __w_pdfjs_require__(45); +var anObject = __w_pdfjs_require__(47); +var toIndexedObject = __w_pdfjs_require__(12); +var objectKeys = __w_pdfjs_require__(190); +exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + +/***/ }), +/* 190 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var internalObjectKeys = __w_pdfjs_require__(59); +var enumBugKeys = __w_pdfjs_require__(66); +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + +/***/ }), +/* 191 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var getBuiltIn = __w_pdfjs_require__(24); +module.exports = getBuiltIn('document', 'documentElement'); + +/***/ }), +/* 192 */ +/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { + +var wellKnownSymbol = __w_pdfjs_require__(34); +var create = __w_pdfjs_require__(188); +var defineProperty = (__w_pdfjs_require__(45).f); +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype = Array.prototype; +if (ArrayPrototype[UNSCOPABLES] == undefined) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); +} +module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; +}; + +/***/ }), +/* 193 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XfaText = void 0; +__w_pdfjs_require__(89); +class XfaText { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: Object.create(null) + }; + function walk(node) { + if (!node) { + return; + } + let str = null; + const name = node.name; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if (node?.attributes?.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + } + if (str !== null) { + items.push({ + str + }); + } + if (!node.children) { + return; + } + for (const child of node.children) { + walk(child); + } + } + walk(xfa); + return output; + } + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + } +} +exports.XfaText = XfaText; + +/***/ }), +/* 194 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TextLayerRenderTask = void 0; +exports.renderTextLayer = renderTextLayer; +exports.updateTextLayer = updateTextLayer; +__w_pdfjs_require__(89); +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +const MAX_TEXT_DIVS_TO_RENDER = 100000; +const DEFAULT_FONT_SIZE = 30; +const DEFAULT_FONT_ASCENT = 0.8; +const ascentCache = new Map(); +function getCtx(size, isOffscreenCanvasSupported) { + let ctx; + if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) { + ctx = new OffscreenCanvas(size, size).getContext("2d", { + alpha: false + }); + } else { + const canvas = document.createElement("canvas"); + canvas.width = canvas.height = size; + ctx = canvas.getContext("2d", { + alpha: false + }); + } + return ctx; +} +function getAscent(fontFamily, isOffscreenCanvasSupported) { + const cachedAscent = ascentCache.get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported); + ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; + const metrics = ctx.measureText(""); + let ascent = metrics.fontBoundingBoxAscent; + let descent = Math.abs(metrics.fontBoundingBoxDescent); + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + ctx.canvas.width = ctx.canvas.height = 0; + return ratio; + } + ctx.strokeStyle = "red"; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("g", 0, 0); + let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + descent = 0; + for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { + if (pixels[i] > 0) { + descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); + pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + ascent = 0; + for (let i = 0, ii = pixels.length; i < ii; i += 4) { + if (pixels[i] > 0) { + ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.canvas.width = ctx.canvas.height = 0; + if (ascent) { + const ratio = ascent / (ascent + descent); + ascentCache.set(fontFamily, ratio); + return ratio; + } + ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); + return DEFAULT_FONT_ASCENT; +} +function appendText(task, geom, styles) { + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + task._textDivs.push(textDiv); + const tx = _util.Util.transform(task._transform, geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = styles[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * getAscent(style.fontFamily, task._isOffscreenCanvasSupported); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--scale-factor)*"; + const divStyle = textDiv.style; + if (task._container === task._rootContainer) { + divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`; + divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; + divStyle.fontFamily = style.fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (task._fontInspectorEnabled) { + textDiv.dataset.fontName = geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), + absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; + } + } + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; + } + task._textDivProperties.set(textDiv, textDivProperties); + if (task._isReadableStream) { + task._layoutText(textDiv); + } +} +function layout(params) { + const { + div, + scale, + properties, + ctx, + prevFontSize, + prevFontFamily + } = params; + const { + style + } = div; + let transform = ""; + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { + ctx.font = `${fontSize * scale}px ${fontFamily}`; + params.prevFontSize = fontSize; + params.prevFontFamily = fontFamily; + } + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * scale / width})`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } +} +function render(task) { + if (task._canceled) { + return; + } + const textDivs = task._textDivs; + const capability = task._capability; + const textDivsLength = textDivs.length; + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + capability.resolve(); + return; + } + if (!task._isReadableStream) { + for (const textDiv of textDivs) { + task._layoutText(textDiv); + } + } + capability.resolve(); +} +class TextLayerRenderTask { + constructor(_ref) { + let { + textContentSource, + container, + viewport, + textDivs, + textDivProperties, + textContentItemsStr, + isOffscreenCanvasSupported + } = _ref; + this._textContentSource = textContentSource; + this._isReadableStream = textContentSource instanceof ReadableStream; + this._container = this._rootContainer = container; + this._textDivs = textDivs || []; + this._textContentItemsStr = textContentItemsStr || []; + this._isOffscreenCanvasSupported = isOffscreenCanvasSupported; + this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; + this._reader = null; + this._textDivProperties = textDivProperties || new WeakMap(); + this._canceled = false; + this._capability = new _util.PromiseCapability(); + this._layoutTextParams = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale: viewport.scale * (globalThis.devicePixelRatio || 1), + properties: null, + ctx: getCtx(0, isOffscreenCanvasSupported) + }; + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; + this._pageWidth = pageWidth; + this._pageHeight = pageHeight; + (0, _display_utils.setLayerDimensions)(container, viewport); + this._capability.promise.finally(() => { + this._layoutTextParams = null; + }).catch(() => {}); + } + get promise() { + return this._capability.promise; + } + cancel() { + this._canceled = true; + if (this._reader) { + this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {}); + this._reader = null; + } + this._capability.reject(new _util.AbortException("TextLayer task cancelled.")); + } + _processItems(items, styleCache) { + for (const item of items) { + if (item.str === undefined) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = this._container; + this._container = document.createElement("span"); + this._container.classList.add("markedContent"); + if (item.id !== null) { + this._container.setAttribute("id", `${item.id}`); + } + parent.append(this._container); + } else if (item.type === "endMarkedContent") { + this._container = this._container.parentNode; + } + continue; + } + this._textContentItemsStr.push(item.str); + appendText(this, item, styleCache); + } + } + _layoutText(textDiv) { + const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv); + this._layoutTextParams.div = textDiv; + layout(this._layoutTextParams); + if (textDivProperties.hasText) { + this._container.append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + this._container.append(br); + } + } + _render() { + const capability = new _util.PromiseCapability(); + let styleCache = Object.create(null); + if (this._isReadableStream) { + const pump = () => { + this._reader.read().then(_ref2 => { + let { + value, + done + } = _ref2; + if (done) { + capability.resolve(); + return; + } + Object.assign(styleCache, value.styles); + this._processItems(value.items, styleCache); + pump(); + }, capability.reject); + }; + this._reader = this._textContentSource.getReader(); + pump(); + } else if (this._textContentSource) { + const { + items, + styles + } = this._textContentSource; + this._processItems(items, styles); + capability.resolve(); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + capability.promise.then(() => { + styleCache = null; + render(this); + }, this._capability.reject); + } +} +exports.TextLayerRenderTask = TextLayerRenderTask; +function renderTextLayer(params) { + if (!params.textContentSource && (params.textContent || params.textContentStream)) { + (0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead."); + params.textContentSource = params.textContent || params.textContentStream; + } + const { + container, + viewport + } = params; + const style = getComputedStyle(container); + const visibility = style.getPropertyValue("visibility"); + const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor")); + if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-5)) { + console.error("The `--scale-factor` CSS-variable must be set, " + "to the same value as `viewport.scale`, " + "either on the `container`-element itself or higher up in the DOM."); + } + const task = new TextLayerRenderTask(params); + task._render(); + return task; +} +function updateTextLayer(_ref3) { + let { + container, + viewport, + textDivs, + textDivProperties, + isOffscreenCanvasSupported, + mustRotate = true, + mustRescale = true + } = _ref3; + if (mustRotate) { + (0, _display_utils.setLayerDimensions)(container, { + rotation: viewport.rotation + }); + } + if (mustRescale) { + const ctx = getCtx(0, isOffscreenCanvasSupported); + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const params = { + prevFontSize: null, + prevFontFamily: null, + div: null, + scale, + properties: null, + ctx + }; + for (const div of textDivs) { + params.properties = textDivProperties.get(div); + params.div = div; + layout(params); + } + } +} + +/***/ }), +/* 195 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditorLayer = void 0; +__w_pdfjs_require__(125); +__w_pdfjs_require__(135); +__w_pdfjs_require__(137); +__w_pdfjs_require__(140); +__w_pdfjs_require__(142); +__w_pdfjs_require__(144); +__w_pdfjs_require__(146); +var _util = __w_pdfjs_require__(1); +var _editor = __w_pdfjs_require__(163); +var _tools = __w_pdfjs_require__(164); +var _freetext = __w_pdfjs_require__(196); +var _ink = __w_pdfjs_require__(201); +var _display_utils = __w_pdfjs_require__(167); +var _stamp = __w_pdfjs_require__(202); +class AnnotationEditorLayer { + #accessibilityManager; + #allowClick = false; + #annotationLayer = null; + #boundPointerup = this.pointerup.bind(this); + #boundPointerdown = this.pointerdown.bind(this); + #editors = new Map(); + #hadPointerDown = false; + #isCleaningUp = false; + #isDisabling = false; + #uiManager; + static _initialized = false; + constructor(_ref) { + let { + uiManager, + pageIndex, + div, + accessibilityManager, + annotationLayer, + viewport, + l10n + } = _ref; + const editorTypes = [_freetext.FreeTextEditor, _ink.InkEditor, _stamp.StampEditor]; + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n); + } + } + uiManager.registerEditorTypes(editorTypes); + this.#uiManager = uiManager; + this.pageIndex = pageIndex; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationLayer = annotationLayer; + this.viewport = viewport; + this.#uiManager.addLayer(this); + } + get isEmpty() { + return this.#editors.size === 0; + } + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + } + updateMode() { + let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.#uiManager.getMode(); + this.#cleanup(); + if (mode === _util.AnnotationEditorType.INK) { + this.addInkEditorIfNeeded(false); + this.disableClick(); + } else { + this.enableClick(); + } + this.#uiManager.unselectAll(); + if (mode !== _util.AnnotationEditorType.NONE) { + this.div.classList.toggle("freeTextEditing", mode === _util.AnnotationEditorType.FREETEXT); + this.div.classList.toggle("inkEditing", mode === _util.AnnotationEditorType.INK); + this.div.classList.toggle("stampEditing", mode === _util.AnnotationEditorType.STAMP); + this.div.hidden = false; + } + } + addInkEditorIfNeeded(isCommitting) { + if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) { + return; + } + if (!isCommitting) { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.setInBackground(); + return; + } + } + } + const editor = this.#createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }); + editor.setInBackground(); + } + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + } + addCommands(params) { + this.#uiManager.addCommands(params); + } + enable() { + this.div.style.pointerEvents = "auto"; + const annotationElementIds = new Set(); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + if (editor.annotationElementId) { + annotationElementIds.add(editor.annotationElementId); + } + } + if (!this.#annotationLayer) { + return; + } + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + disable() { + this.#isDisabling = true; + this.div.style.pointerEvents = "none"; + const hiddenAnnotationIds = new Set(); + for (const editor of this.#editors.values()) { + editor.disableEditing(); + if (!editor.annotationElementId || editor.serialize() !== null) { + hiddenAnnotationIds.add(editor.annotationElementId); + continue; + } + this.getEditableAnnotation(editor.annotationElementId)?.show(); + editor.remove(); + } + if (this.#annotationLayer) { + const editables = this.#annotationLayer.getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) { + continue; + } + editable.show(); + } + } + this.#cleanup(); + if (this.isEmpty) { + this.div.hidden = true; + } + this.#isDisabling = false; + } + getEditableAnnotation(id) { + return this.#annotationLayer?.getEditableAnnotation(id) || null; + } + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive(); + if (currentActive === editor) { + return; + } + this.#uiManager.setActiveEditor(editor); + } + enableClick() { + this.div.addEventListener("pointerdown", this.#boundPointerdown); + this.div.addEventListener("pointerup", this.#boundPointerup); + } + disableClick() { + this.div.removeEventListener("pointerdown", this.#boundPointerdown); + this.div.removeEventListener("pointerup", this.#boundPointerup); + } + attach(editor) { + this.#editors.set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { + this.#uiManager.removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + this.#editors.delete(editor.id); + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + if (!this.#isDisabling && editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + this.#uiManager.removeEditor(editor); + editor.div.style.display = "none"; + setTimeout(() => { + editor.div.style.display = ""; + editor.div.remove(); + editor.isAttachedToDOM = false; + if (document.activeElement === document.body) { + this.#uiManager.focusMainContainer(); + } + }, 0); + if (!this.#isCleaningUp) { + this.addInkEditorIfNeeded(false); + } + } + #changeParent(editor) { + if (editor.parent === this) { + return; + } + if (editor.annotationElementId) { + this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); + _editor.AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + editor.parent?.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + this.#changeParent(editor); + this.#uiManager.addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + this.moveEditorInDOM(editor); + editor.onceAdded(); + this.#uiManager.addToAnnotationStorage(editor); + } + moveEditorInDOM(editor) { + this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.rebuild(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => { + this.addOrRebuild(editor); + }; + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getNextId() { + return this.#uiManager.getId(); + } + #createNewEditor(params) { + switch (this.#uiManager.getMode()) { + case _util.AnnotationEditorType.FREETEXT: + return new _freetext.FreeTextEditor(params); + case _util.AnnotationEditorType.INK: + return new _ink.InkEditor(params); + case _util.AnnotationEditorType.STAMP: + return new _stamp.StampEditor(params); + } + return null; + } + deserialize(data) { + switch (data.annotationType ?? data.annotationEditorType) { + case _util.AnnotationEditorType.FREETEXT: + return _freetext.FreeTextEditor.deserialize(data, this, this.#uiManager); + case _util.AnnotationEditorType.INK: + return _ink.InkEditor.deserialize(data, this, this.#uiManager); + case _util.AnnotationEditorType.STAMP: + return _stamp.StampEditor.deserialize(data, this, this.#uiManager); + } + return null; + } + #createAndAddNewEditor(event) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: this.#uiManager + }); + if (editor) { + this.add(editor); + } + return editor; + } + setSelected(editor) { + this.#uiManager.setSelected(editor); + } + toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + } + isSelected(editor) { + return this.#uiManager.isSelected(editor); + } + unselect(editor) { + this.#uiManager.unselect(editor); + } + pointerup(event) { + const { + isMac + } = _util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!this.#hadPointerDown) { + return; + } + this.#hadPointerDown = false; + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + this.#createAndAddNewEditor(event); + } + pointerdown(event) { + if (this.#hadPointerDown) { + this.#hadPointerDown = false; + return; + } + const { + isMac + } = _util.FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + this.#hadPointerDown = true; + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + } + drop(event) { + const id = event.dataTransfer.getData("text/plain"); + const editor = this.#uiManager.getEditor(id); + if (!editor) { + return; + } + event.preventDefault(); + event.dataTransfer.dropEffect = "move"; + this.#changeParent(editor); + const rect = this.div.getBoundingClientRect(); + const endX = event.clientX - rect.x; + const endY = event.clientY - rect.y; + editor.translate(endX - editor.startX, endY - editor.startY); + this.moveEditorInDOM(editor); + editor.div.focus(); + } + dragover(event) { + event.preventDefault(); + } + destroy() { + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.setActiveEditor(null); + } + for (const editor of this.#editors.values()) { + this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + this.#editors.clear(); + this.#uiManager.removeLayer(this); + } + #cleanup() { + this.#isCleaningUp = true; + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + this.#isCleaningUp = false; + } + render(_ref2) { + let { + viewport + } = _ref2; + this.viewport = viewport; + (0, _display_utils.setLayerDimensions)(this.div, viewport); + (0, _tools.bindEvents)(this, this.div, ["dragover", "drop"]); + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + } + this.updateMode(); + } + update(_ref3) { + let { + viewport + } = _ref3; + this.#uiManager.commitOrRemove(); + this.viewport = viewport; + (0, _display_utils.setLayerDimensions)(this.div, { + rotation: viewport.rotation + }); + this.updateMode(); + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } +} +exports.AnnotationEditorLayer = AnnotationEditorLayer; + +/***/ }), +/* 196 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FreeTextEditor = void 0; +__w_pdfjs_require__(89); +var _util = __w_pdfjs_require__(1); +var _tools = __w_pdfjs_require__(164); +var _editor = __w_pdfjs_require__(163); +var _annotation_layer = __w_pdfjs_require__(197); +class FreeTextEditor extends _editor.AnnotationEditor { + #boundEditorDivBlur = this.editorDivBlur.bind(this); + #boundEditorDivFocus = this.editorDivFocus.bind(this); + #boundEditorDivInput = this.editorDivInput.bind(this); + #boundEditorDivKeydown = this.editorDivKeydown.bind(this); + #color; + #content = ""; + #editorDivId = `${this.id}-editor`; + #fontSize; + #initialData = null; + static _freeTextDefaultContent = ""; + static _l10nPromise; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static get _keyboardManager() { + const proto = FreeTextEditor.prototype; + const arrowChecker = self => self.isEmpty(); + const small = _tools.AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = _tools.AnnotationEditorUIManager.TRANSLATE_BIG; + return (0, _util.shadow)(this, "_keyboardManager", new _tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); + } + static _type = "freetext"; + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; + } + static initialize(l10n) { + this._l10nPromise = new Map(["free_text2_default_content", "editor_free_text2_aria_label"].map(str => [str, l10n.get(str)])); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; + break; + case _util.AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; + break; + } + } + updateParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + case _util.AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parentScale); + this.#fontSize = size; + this.#setEditorDimensions(); + }; + const savedFontsize = this.#fontSize; + this.addCommands({ + cmd: () => { + setFontsize(fontSize); + }, + undo: () => { + setFontsize(savedFontsize); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); + } + #updateColor(color) { + const savedColor = this.#color; + this.addCommands({ + cmd: () => { + this.#color = this.editorDiv.style.color = color; + }, + undo: () => { + this.#color = this.editorDiv.style.color = savedColor; + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; + } + rebuild() { + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this.div.draggable = false; + this.div.removeAttribute("aria-activedescendant"); + this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.addEventListener("input", this.#boundEditorDivInput); + } + disableEditMode() { + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", this.#editorDivId); + this.div.draggable = true; + this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); + this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freeTextEditing"); + } + focusin(event) { + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded() { + if (this.width) { + this.#cheatInitialRect(); + return; + } + this.enableEditMode(); + this.editorDiv.focus(); + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freeTextEditing"); + } + super.remove(); + } + #extractText() { + const divs = this.editorDiv.getElementsByTagName("div"); + if (divs.length === 0) { + return this.editorDiv.innerText; + } + const buffer = []; + for (const div of divs) { + buffer.push(div.innerText.replace(/\r\n?|\n/, "")); + } + return buffer.join("\n"); + } + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { + const { + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = this.#content; + const newText = this.#content = this.#extractText().trimEnd(); + if (savedText === newText) { + return; + } + const setText = text => { + this.#content = text; + if (!text) { + this.remove(); + return; + } + this.#setContent(); + this.rebuild(); + this.#setEditorDimensions(); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + this.#setEditorDimensions(); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + } + } + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freeTextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", this.#editorDivId); + this.enableEditing(); + FreeTextEditor._l10nPromise.get("editor_free_text2_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg)); + FreeTextEditor._l10nPromise.get("free_text2_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = this.#initialData; + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; + } + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + this.#setContent(); + this.div.draggable = true; + this.editorDiv.contentEditable = false; + } else { + this.div.draggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + #setContent() { + this.editorDiv.replaceChildren(); + if (!this.#content) { + return; + } + for (const line of this.#content.split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } + } + get contentDiv() { + return this.editorDiv; + } + static deserialize(data, parent, uiManager) { + let initialData = null; + if (data instanceof _annotation_layer.FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: _util.AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect, + rotation, + id, + deleted: false + }; + } + const editor = super.deserialize(data, parent, uiManager); + editor.#fontSize = data.fontSize; + editor.#color = _util.Util.makeHexColor(...data.color); + editor.#content = data.value; + editor.annotationElementId = data.id || null; + editor.#initialData = initialData; + return editor; + } + serialize() { + let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return { + pageIndex: this.pageIndex, + id: this.annotationElementId, + deleted: true + }; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + const rect = this.getRect(padding, padding); + const color = _editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); + const serialized = { + annotationType: _util.AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#content, + pageIndex: this.pageIndex, + rect, + rotation: this.rotation + }; + if (isForCopying) { + return serialized; + } + if (this.annotationElementId && !this.#hasElementChanged(serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + #hasElementChanged(serialized) { + const { + value, + fontSize, + color, + rect, + pageIndex + } = this.#initialData; + return serialized.value !== value || serialized.fontSize !== fontSize || serialized.rect.some((x, i) => Math.abs(x - rect[i]) >= 1) || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; + } + #cheatInitialRect() { + let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + if (!this.annotationElementId) { + return; + } + this.#setEditorDimensions(); + if (!delayed && (this.width === 0 || this.height === 0)) { + setTimeout(() => this.#cheatInitialRect(true), 0); + return; + } + const padding = FreeTextEditor._internalPadding * this.parentScale; + this.#initialData.rect = this.getRect(padding, padding); + } +} +exports.FreeTextEditor = FreeTextEditor; + +/***/ }), +/* 197 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StampAnnotationElement = exports.InkAnnotationElement = exports.FreeTextAnnotationElement = exports.AnnotationLayer = void 0; +__w_pdfjs_require__(89); +__w_pdfjs_require__(125); +__w_pdfjs_require__(135); +__w_pdfjs_require__(137); +__w_pdfjs_require__(140); +__w_pdfjs_require__(142); +__w_pdfjs_require__(144); +__w_pdfjs_require__(146); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +var _annotation_storage = __w_pdfjs_require__(162); +var _scripting_utils = __w_pdfjs_require__(198); +var _displayL10n_utils = __w_pdfjs_require__(199); +var _xfa_layer = __w_pdfjs_require__(200); +const DEFAULT_TAB_INDEX = 1000; +const DEFAULT_FONT_SIZE = 9; +const GetElementsByNameSet = new WeakSet(); +function getRectDims(rect) { + return { + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; +} class AnnotationElementFactory { static create(parameters) { const subtype = parameters.data.annotationType; - switch (subtype) { case _util.AnnotationType.LINK: return new LinkAnnotationElement(parameters); - case _util.AnnotationType.TEXT: return new TextAnnotationElement(parameters); - case _util.AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; - switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); - case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } - return new PushButtonWidgetAnnotationElement(parameters); - case "Ch": return new ChoiceWidgetAnnotationElement(parameters); + case "Sig": + return new SignatureWidgetAnnotationElement(parameters); } - return new WidgetAnnotationElement(parameters); - case _util.AnnotationType.POPUP: return new PopupAnnotationElement(parameters); - case _util.AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); - case _util.AnnotationType.LINE: return new LineAnnotationElement(parameters); - case _util.AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); - case _util.AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); - case _util.AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); - case _util.AnnotationType.CARET: return new CaretAnnotationElement(parameters); - case _util.AnnotationType.INK: return new InkAnnotationElement(parameters); - case _util.AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); - case _util.AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); - case _util.AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); - case _util.AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); - case _util.AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); - case _util.AnnotationType.STAMP: return new StampAnnotationElement(parameters); - case _util.AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); - default: return new AnnotationElement(parameters); } } - } - class AnnotationElement { - constructor(parameters, { - isRenderable = false, - ignoreBorder = false, - createQuadrilaterals = false - } = {}) { + #hasBorder = false; + constructor(parameters) { + let { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; - this.page = parameters.page; - this.viewport = parameters.viewport; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; - this.renderInteractiveForms = parameters.renderInteractiveForms; + this.renderForms = parameters.renderForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; this.enableScripting = parameters.enableScripting; this.hasJSActions = parameters.hasJSActions; - this._mouseState = parameters.mouseState; - + this._fieldObjects = parameters.fieldObjects; + this.parent = parameters.parent; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } - if (createQuadrilaterals) { - this.quadrilaterals = this._createQuadrilaterals(ignoreBorder); + this._createQuadrilaterals(); } } - - _createContainer(ignoreBorder = false) { - const data = this.data, - page = this.page, - viewport = this.viewport; + _createContainer(ignoreBorder) { + const { + data, + parent: { + page, + viewport + } + } = this; const container = document.createElement("section"); - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; container.setAttribute("data-annotation-id", data.id); - + container.style.zIndex = this.parent.zIndex++; + if (this.data.popupRef) { + container.setAttribute("aria-haspopup", "dialog"); + } + if (data.noRotate) { + container.classList.add("norotate"); + } + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + if (!data.rect || this instanceof PopupAnnotationElement) { + const { + rotation + } = data; + if (!data.hasOwnCanvas && rotation !== 0) { + this.setRotation(rotation, container); + } + return container; + } + const { + width, + height + } = getRectDims(data.rect); const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - - container.style.transform = `matrix(${viewport.transform.join(",")})`; - container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`; - if (!ignoreBorder && data.borderStyle.width > 0) { container.style.borderWidth = `${data.borderStyle.width}px`; - - if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { - width -= 2 * data.borderStyle.width; - height -= 2 * data.borderStyle.width; - } - const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; - if (horizontalRadius > 0 || verticalRadius > 0) { - const radius = `${horizontalRadius}px / ${verticalRadius}px`; + const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; + container.style.borderRadius = radius; + } else if (this instanceof RadioButtonWidgetAnnotationElement) { + const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; container.style.borderRadius = radius; } - switch (data.borderStyle.style) { case _util.AnnotationBorderStyleType.SOLID: container.style.borderStyle = "solid"; break; - case _util.AnnotationBorderStyleType.DASHED: container.style.borderStyle = "dashed"; break; - case _util.AnnotationBorderStyleType.BEVELED: (0, _util.warn)("Unimplemented border style: beveled"); break; - case _util.AnnotationBorderStyleType.INSET: (0, _util.warn)("Unimplemented border style: inset"); break; - case _util.AnnotationBorderStyleType.UNDERLINE: container.style.borderBottomStyle = "solid"; break; - default: break; } - - if (data.color) { - container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); + const borderColor = data.borderColor || null; + if (borderColor) { + this.#hasBorder = true; + container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); } else { container.style.borderWidth = 0; } } - - container.style.left = `${rect[0]}px`; - container.style.top = `${rect[1]}px`; - container.style.width = `${width}px`; - container.style.height = `${height}px`; + container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const { + rotation + } = data; + if (data.hasOwnCanvas || rotation === 0) { + container.style.width = `${100 * width / pageWidth}%`; + container.style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation, container); + } return container; } - - _createQuadrilaterals(ignoreBorder = false) { - if (!this.data.quadPoints) { - return null; + setRotation(angle) { + let container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.container; + if (!this.data.rect) { + return; } - - const quadrilaterals = []; - const savedRect = this.data.rect; - - for (const quadPoint of this.data.quadPoints) { - this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y]; - quadrilaterals.push(this._createContainer(ignoreBorder)); + const { + pageWidth, + pageHeight + } = this.parent.viewport.rawDims; + const { + width, + height + } = getRectDims(this.data.rect); + let elementWidth, elementHeight; + if (angle % 180 === 0) { + elementWidth = 100 * width / pageWidth; + elementHeight = 100 * height / pageHeight; + } else { + elementWidth = 100 * height / pageWidth; + elementHeight = 100 * width / pageHeight; } - - this.data.rect = savedRect; - return quadrilaterals; + container.style.width = `${elementWidth}%`; + container.style.height = `${elementHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); } - - _createPopup(trigger, data) { - let container = this.container; - - if (this.quadrilaterals) { - trigger = trigger || this.quadrilaterals; - container = this.quadrilaterals[0]; - } - - if (!trigger) { - trigger = document.createElement("div"); - trigger.style.height = container.style.height; - trigger.style.width = container.style.width; - container.appendChild(trigger); - } - - const popupElement = new PopupElement({ - container, - trigger, - color: data.color, - title: data.title, - modificationDate: data.modificationDate, - contents: data.contents, - hideWrapper: true + get _commonActions() { + const setColor = (jsName, styleName, event) => { + const color = event.detail[jsName]; + event.target.style[styleName] = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1)); + }; + return (0, _util.shadow)(this, "_commonActions", { + display: event => { + const hidden = event.detail.display % 2 === 1; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + hidden, + print: event.detail.display === 0 || event.detail.display === 3 + }); + }, + print: event => { + this.annotationStorage.setValue(this.data.id, { + print: event.detail.print + }); + }, + hidden: event => { + this.container.style.visibility = event.detail.hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + hidden: event.detail.hidden + }); + }, + focus: event => { + setTimeout(() => event.target.focus({ + preventScroll: false + }), 0); + }, + userName: event => { + event.target.title = event.detail.userName; + }, + readonly: event => { + if (event.detail.readonly) { + event.target.setAttribute("readonly", ""); + } else { + event.target.removeAttribute("readonly"); + } + }, + required: event => { + this._setRequired(event.target, event.detail.required); + }, + bgColor: event => { + setColor("bgColor", "backgroundColor", event); + }, + fillColor: event => { + setColor("fillColor", "backgroundColor", event); + }, + fgColor: event => { + setColor("fgColor", "color", event); + }, + textColor: event => { + setColor("textColor", "color", event); + }, + borderColor: event => { + setColor("borderColor", "borderColor", event); + }, + strokeColor: event => { + setColor("strokeColor", "borderColor", event); + }, + rotation: event => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); + } }); - const popup = popupElement.render(); - popup.style.left = container.style.width; - container.appendChild(popup); } - - _renderQuadrilaterals(className) { - for (const quadrilateral of this.quadrilaterals) { - quadrilateral.className = className; + _dispatchEventFromSandbox(actions, jsEvent) { + const commonActions = this._commonActions; + for (const name of Object.keys(jsEvent.detail)) { + const action = actions[name] || commonActions[name]; + action?.(jsEvent); } - - return this.quadrilaterals; } - + _setDefaultPropertiesFromJS(element) { + if (!this.enableScripting) { + return; + } + const storedData = this.annotationStorage.getRawValue(this.data.id); + if (!storedData) { + return; + } + const commonActions = this._commonActions; + for (const [actionName, detail] of Object.entries(storedData)) { + const action = commonActions[actionName]; + if (action) { + const eventProxy = { + detail: { + [actionName]: detail + }, + target: element + }; + action(eventProxy); + delete storedData[actionName]; + } + } + } + _createQuadrilaterals() { + if (!this.container) { + return; + } + const { + quadPoints + } = this.data; + if (!quadPoints) { + return; + } + const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect; + if (quadPoints.length === 1) { + const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] = quadPoints[0]; + if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { + return; + } + } + const { + style + } = this.container; + let svgBuffer; + if (this.#hasBorder) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + this.container.classList.add("hasBorder"); + } + const width = rectTrX - rectBlX; + const height = rectTrY - rectBlY; + const { + svgFactory + } = this; + const svg = svgFactory.createElement("svg"); + svg.classList.add("quadrilateralsContainer"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const clipPath = svgFactory.createElement("clipPath"); + const id = `clippath_${this.data.id}`; + clipPath.setAttribute("id", id); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + defs.append(clipPath); + for (const [, { + x: trX, + y: trY + }, { + x: blX, + y: blY + }] of quadPoints) { + const rect = svgFactory.createElement("rect"); + const x = (blX - rectBlX) / width; + const y = (rectTrY - trY) / height; + const rectWidth = (trX - blX) / width; + const rectHeight = (trY - blY) / height; + rect.setAttribute("x", x); + rect.setAttribute("y", y); + rect.setAttribute("width", rectWidth); + rect.setAttribute("height", rectHeight); + clipPath.append(rect); + svgBuffer?.push(``); + } + if (this.#hasBorder) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup() { + const { + container, + data + } = this; + container.setAttribute("aria-haspopup", "dialog"); + const popup = new PopupAnnotationElement({ + data: { + color: data.color, + titleObj: data.titleObj, + modificationDate: data.modificationDate, + contentsObj: data.contentsObj, + richText: data.richText, + parentRect: data.rect, + borderStyle: 0, + id: `popup_${data.id}`, + rotation: data.rotation + }, + parent: this.parent, + elements: [this] + }); + this.parent.div.append(popup.render()); + } render() { (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); } - -} - -class LinkAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); - super(parameters, { - isRenderable, - createQuadrilaterals: true + _getElementsByName(name) { + let skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + const fields = []; + if (this._fieldObjects) { + const fieldObj = this._fieldObjects[name]; + if (fieldObj) { + for (const { + page, + id, + exportValues + } of fieldObj) { + if (page === -1) { + continue; + } + if (id === skipId) { + continue; + } + const exportValue = typeof exportValues === "string" ? exportValues : null; + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (domElement && !GetElementsByNameSet.has(domElement)) { + (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + } + return fields; + } + for (const domElement of document.getElementsByName(name)) { + const { + exportValue + } = domElement; + const id = domElement.getAttribute("data-element-id"); + if (id === skipId) { + continue; + } + if (!GetElementsByNameSet.has(domElement)) { + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + return fields; + } + show() { + if (this.container) { + this.container.hidden = false; + } + this.popup?.maybeShow(); + } + hide() { + if (this.container) { + this.container.hidden = true; + } + this.popup?.forceHide(); + } + getElementsToTriggerPopup() { + return this.container; + } + addHighlightArea() { + const triggers = this.getElementsToTriggerPopup(); + if (Array.isArray(triggers)) { + for (const element of triggers) { + element.classList.add("highlightArea"); + } + } else { + triggers.classList.add("highlightArea"); + } + } + _editOnDoubleClick() { + const { + annotationEditorType: mode, + data: { + id: editId + } + } = this; + this.container.addEventListener("dblclick", () => { + this.linkService.eventBus?.dispatch("switchannotationeditormode", { + source: this, + mode, + editId + }); }); } - +} +class LinkAnnotationElement extends AnnotationElement { + constructor(parameters) { + let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + super(parameters, { + isRenderable: true, + ignoreBorder: !!options?.ignoreBorder, + createQuadrilaterals: true + }); + this.isTooltipOnly = parameters.data.isTooltipOnly; + } render() { const { data, linkService } = this; const link = document.createElement("a"); - + link.setAttribute("data-element-id", data.id); + let isBound = false; if (data.url) { - (0, _display_utils.addLinkAttributes)(link, { - url: data.url, - target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget, - rel: linkService.externalLinkRel, - enabled: linkService.externalLinkEnabled - }); + linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; } else if (data.action) { this._bindNamedAction(link, data.action); + isBound = true; + } else if (data.attachment) { + this._bindAttachment(link, data.attachment); + isBound = true; + } else if (data.setOCGState) { + this.#bindSetOCGState(link, data.setOCGState); + isBound = true; } else if (data.dest) { this._bindLink(link, data.dest); - } else if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { - this._bindJSAction(link, data); + isBound = true; } else { - this._bindLink(link, ""); + if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + isBound = true; + } + if (data.resetForm) { + this._bindResetFormAction(link, data.resetForm); + isBound = true; + } else if (this.isTooltipOnly && !isBound) { + this._bindLink(link, ""); + isBound = true; + } } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => { - const linkElement = index === 0 ? link : link.cloneNode(); - quadrilateral.appendChild(linkElement); - return quadrilateral; - }); + this.container.classList.add("linkAnnotation"); + if (isBound) { + this.container.append(link); } - - this.container.className = "linkAnnotation"; - this.container.appendChild(link); return this.container; } - + #setInternalLink() { + this.container.setAttribute("data-internal-link", ""); + } _bindLink(link, destination) { link.href = this.linkService.getDestinationHash(destination); - link.onclick = () => { if (destination) { this.linkService.goToDestination(destination); } - return false; }; - if (destination || destination === "") { - link.className = "internalLink"; + this.#setInternalLink(); } } - _bindNamedAction(link, action) { link.href = this.linkService.getAnchorUrl(""); - link.onclick = () => { this.linkService.executeNamedAction(action); return false; }; - - link.className = "internalLink"; + this.#setInternalLink(); + } + _bindAttachment(link, attachment) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.downloadManager?.openOrDownloadData(this.container, attachment.content, attachment.filename); + return false; + }; + this.#setInternalLink(); + } + #bindSetOCGState(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + this.#setInternalLink(); } - _bindJSAction(link, data) { link.href = this.linkService.getAnchorUrl(""); const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); - for (const name of Object.keys(data.actions)) { const jsName = map.get(name); - if (!jsName) { continue; } - link[jsName] = () => { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, @@ -8966,55 +18727,159 @@ class LinkAnnotationElement extends AnnotationElement { return false; }; } - - link.className = "internalLink"; + if (!link.onclick) { + link.onclick = () => false; + } + this.#setInternalLink(); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + this.#setInternalLink(); + if (!this._fieldObjects) { + (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); + if (!otherClickAction) { + link.onclick = () => false; + } + return; + } + link.onclick = () => { + otherClickAction?.(); + const { + fields: resetFormFields, + refs: resetFormRefs, + include + } = resetForm; + const allFields = []; + if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { + const fieldIds = new Set(resetFormRefs); + for (const fieldName of resetFormFields) { + const fields = this._fieldObjects[fieldName] || []; + for (const { + id + } of fields) { + fieldIds.add(id); + } + } + for (const fields of Object.values(this._fieldObjects)) { + for (const field of fields) { + if (fieldIds.has(field.id) === include) { + allFields.push(field); + } + } + } + } else { + for (const fields of Object.values(this._fieldObjects)) { + allFields.push(...fields); + } + } + const storage = this.annotationStorage; + const allIds = []; + for (const field of allFields) { + const { + id + } = field; + allIds.push(id); + switch (field.type) { + case "text": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + case "checkbox": + case "radiobutton": + { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": + { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + default: + continue; + } + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`); + continue; + } + domElement.dispatchEvent(new Event("resetform")); + } + if (this.enableScripting) { + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: "app", + ids: allIds, + name: "ResetForm" + } + }); + } + return false; + }; } - } - class TextAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable }); } - render() { - this.container.className = "textAnnotation"; + this.container.classList.add("textAnnotation"); const image = document.createElement("img"); - image.style.height = this.container.style.height; - image.style.width = this.container.style.width; image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.alt = "[{{type}} Annotation]"; image.dataset.l10nId = "text_annotation_type"; image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); - - if (!this.data.hasPopup) { - this._createPopup(image, this.data); + if (!this.data.popupRef) { + this._createPopup(); } - - this.container.appendChild(image); + this.container.append(image); return this.container; } - } - class WidgetAnnotationElement extends AnnotationElement { render() { if (this.data.alternativeText) { this.container.title = this.data.alternativeText; } - return this.container; } - - _getKeyModifier(event) { - return navigator.platform.includes("Win") && event.ctrlKey || navigator.platform.includes("Mac") && event.metaKey; + showElementAndHideCanvas(element) { + if (this.data.hasOwnCanvas) { + if (element.previousSibling?.nodeName === "CANVAS") { + element.previousSibling.hidden = true; + } + element.hidden = false; + } + } + _getKeyModifier(event) { + const { + isWin, + isMac + } = _util.FeatureTest.platform; + return isWin && event.ctrlKey || isMac && event.metaKey; } - _setEventListener(element, baseName, eventName, valueGetter) { if (baseName.includes("mouse")) { element.addEventListener(baseName, event => { @@ -9036,13 +18901,12 @@ class WidgetAnnotationElement extends AnnotationElement { detail: { id: this.data.id, name: eventName, - value: event.target.checked + value: valueGetter(event) } }); }); } } - _setEventListeners(element, names, getter) { for (const [baseName, eventName] of names) { if (eventName === "Action" || this.data.actions?.[eventName]) { @@ -9050,219 +18914,235 @@ class WidgetAnnotationElement extends AnnotationElement { } } } - - _dispatchEventFromSandbox(actions, jsEvent) { - const setColor = (jsName, styleName, event) => { - const color = event.detail[jsName]; - event.target.style[styleName] = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1)); - }; - - const commonActions = { - display: event => { - const hidden = event.detail.display % 2 === 1; - event.target.style.visibility = hidden ? "hidden" : "visible"; - this.annotationStorage.setValue(this.data.id, { - hidden, - print: event.detail.display === 0 || event.detail.display === 3 - }); - }, - print: event => { - this.annotationStorage.setValue(this.data.id, { - print: event.detail.print - }); - }, - hidden: event => { - event.target.style.visibility = event.detail.hidden ? "hidden" : "visible"; - this.annotationStorage.setValue(this.data.id, { - hidden: event.detail.hidden - }); - }, - focus: event => { - setTimeout(() => event.target.focus({ - preventScroll: false - }), 0); - }, - userName: event => { - event.target.title = event.detail.userName; - }, - readonly: event => { - if (event.detail.readonly) { - event.target.setAttribute("readonly", ""); - } else { - event.target.removeAttribute("readonly"); - } - }, - required: event => { - if (event.detail.required) { - event.target.setAttribute("required", ""); - } else { - event.target.removeAttribute("required"); - } - }, - bgColor: event => { - setColor("bgColor", "backgroundColor", event); - }, - fillColor: event => { - setColor("fillColor", "backgroundColor", event); - }, - fgColor: event => { - setColor("fgColor", "color", event); - }, - textColor: event => { - setColor("textColor", "color", event); - }, - borderColor: event => { - setColor("borderColor", "borderColor", event); - }, - strokeColor: event => { - setColor("strokeColor", "borderColor", event); - } - }; - - for (const name of Object.keys(jsEvent.detail)) { - const action = actions[name] || commonActions[name]; - - if (action) { - action(jsEvent); - } + _setBackgroundColor(element) { + const color = this.data.backgroundColor || null; + element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); + } + _setTextStyle(element) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; + const style = element.style; + let computedFontSize; + const BORDER_SIZE = 2; + const roundToOneDecimal = x => Math.round(10 * x) / 10; + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / _util.LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / _util.LINE_FACTOR)); + } + style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; + style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } } - + _setRequired(element, isRequired) { + if (isRequired) { + element.setAttribute("required", true); + } else { + element.removeAttribute("required"); + } + element.setAttribute("aria-required", isRequired); + } } - class TextWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { - const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, { isRenderable }); } - setPropertyOnSiblings(base, key, value, keyInStorage) { const storage = this.annotationStorage; - - for (const element of document.getElementsByName(base.name)) { - if (element !== base) { - element[key] = value; - const data = Object.create(null); - data[keyInStorage] = value; - storage.setValue(element.getAttribute("id"), data); + for (const element of this._getElementsByName(base.name, base.id)) { + if (element.domElement) { + element.domElement[key] = value; } + storage.setValue(element.id, { + [keyInStorage]: value + }); } } - render() { const storage = this.annotationStorage; const id = this.data.id; - this.container.className = "textWidgetAnnotation"; + this.container.classList.add("textWidgetAnnotation"); let element = null; - - if (this.renderInteractiveForms) { + if (this.renderForms) { const storedData = storage.getValue(id, { - value: this.data.fieldValue, - valueAsString: this.data.fieldValue + value: this.data.fieldValue }); - const textContent = storedData.valueAsString || storedData.value || ""; + let textContent = storedData.value || ""; + const maxLen = storage.getValue(id, { + charLimit: this.data.maxLen + }).charLimit; + if (maxLen && textContent.length > maxLen) { + textContent = textContent.slice(0, maxLen); + } + let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; + if (fieldFormattedValues && this.data.comb) { + fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); + } const elementData = { - userValue: null, - formattedValue: null, - beforeInputSelectionRange: null, - beforeInputValue: null + userValue: textContent, + formattedValue: fieldFormattedValues, + lastCommittedValue: null, + commitKey: 1 }; - if (this.data.multiLine) { element = document.createElement("textarea"); - element.textContent = textContent; + element.textContent = fieldFormattedValues ?? textContent; + if (this.data.doNotScroll) { + element.style.overflowY = "hidden"; + } } else { element = document.createElement("input"); element.type = "text"; - element.setAttribute("value", textContent); + element.setAttribute("value", fieldFormattedValues ?? textContent); + if (this.data.doNotScroll) { + element.style.overflowX = "hidden"; + } + } + if (this.data.hasOwnCanvas) { + element.hidden = true; + } + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); + element.disabled = this.data.readOnly; + element.name = this.data.baseFieldName || this.data.fieldName; + element.tabIndex = DEFAULT_TAB_INDEX; + this._setRequired(element, this.data.required); + if (maxLen) { + element.maxLength = maxLen; } - - elementData.userValue = textContent; - element.setAttribute("id", id); element.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); this.setPropertyOnSiblings(element, "value", event.target.value, "value"); + elementData.formattedValue = null; + }); + element.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue ?? ""; + element.value = elementData.userValue = defaultValue; + elementData.formattedValue = null; }); - let blurListener = event => { - if (elementData.formattedValue) { - event.target.value = elementData.formattedValue; + const { + formattedValue + } = elementData; + if (formattedValue !== null && formattedValue !== undefined) { + event.target.value = formattedValue; } - event.target.scrollLeft = 0; - elementData.beforeInputSelectionRange = null; }; - if (this.enableScripting && this.hasJSActions) { element.addEventListener("focus", event => { + const { + target + } = event; if (elementData.userValue) { - event.target.value = elementData.userValue; + target.value = elementData.userValue; } + elementData.lastCommittedValue = target.value; + elementData.commitKey = 1; }); element.addEventListener("updatefromsandbox", jsEvent => { + this.showElementAndHideCanvas(jsEvent.target); const actions = { value(event) { - elementData.userValue = event.detail.value || ""; + elementData.userValue = event.detail.value ?? ""; storage.setValue(id, { value: elementData.userValue.toString() }); - - if (!elementData.formattedValue) { - event.target.value = elementData.userValue; - } + event.target.value = elementData.userValue; }, - - valueAsString(event) { - elementData.formattedValue = event.detail.valueAsString || ""; - - if (event.target !== document.activeElement) { - event.target.value = elementData.formattedValue; + formattedValue(event) { + const { + formattedValue + } = event.detail; + elementData.formattedValue = formattedValue; + if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { + event.target.value = formattedValue; } - storage.setValue(id, { - formattedValue: elementData.formattedValue + formattedValue }); }, - selRange(event) { - const [selStart, selEnd] = event.detail.selRange; - - if (selStart >= 0 && selEnd < event.target.value.length) { - event.target.setSelectionRange(selStart, selEnd); + event.target.setSelectionRange(...event.detail.selRange); + }, + charLimit: event => { + const { + charLimit + } = event.detail; + const { + target + } = event; + if (charLimit === 0) { + target.removeAttribute("maxLength"); + return; } + target.setAttribute("maxLength", charLimit); + let value = elementData.userValue; + if (!value || value.length <= charLimit) { + return; + } + value = value.slice(0, charLimit); + target.value = elementData.userValue = value; + storage.setValue(id, { + value + }); + this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: 1, + selStart: target.selectionStart, + selEnd: target.selectionEnd + } + }); } - }; - this._dispatchEventFromSandbox(actions, jsEvent); }); element.addEventListener("keydown", event => { - elementData.beforeInputValue = event.target.value; + elementData.commitKey = 1; let commitKey = -1; - if (event.key === "Escape") { commitKey = 0; - } else if (event.key === "Enter") { + } else if (event.key === "Enter" && !this.data.multiLine) { commitKey = 2; } else if (event.key === "Tab") { - commitKey = 3; + elementData.commitKey = 3; } - if (commitKey === -1) { return; } - - elementData.userValue = event.target.value; + const { + value + } = event.target; + if (elementData.lastCommittedValue === value) { + return; + } + elementData.lastCommittedValue = value; + elementData.userValue = value; this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", - value: event.target.value, + value, willCommit: true, commitKey, selStart: event.target.selectionStart, @@ -9273,53 +19153,79 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { const _blurListener = blurListener; blurListener = null; element.addEventListener("blur", event => { - if (this._mouseState.isDown) { - elementData.userValue = event.target.value; + if (!event.relatedTarget) { + return; + } + const { + value + } = event.target; + elementData.userValue = value; + if (elementData.lastCommittedValue !== value) { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", - value: event.target.value, + value, willCommit: true, - commitKey: 1, + commitKey: elementData.commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); } - _blurListener(event); }); - element.addEventListener("mousedown", event => { - elementData.beforeInputValue = event.target.value; - elementData.beforeInputSelectionRange = null; - }); - element.addEventListener("keyup", event => { - if (event.target.selectionStart === event.target.selectionEnd) { - elementData.beforeInputSelectionRange = null; - } - }); - element.addEventListener("select", event => { - elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd]; - }); - if (this.data.actions?.Keystroke) { - element.addEventListener("input", event => { - let selStart = -1; - let selEnd = -1; - - if (elementData.beforeInputSelectionRange) { - [selStart, selEnd] = elementData.beforeInputSelectionRange; + element.addEventListener("beforeinput", event => { + elementData.lastCommittedValue = null; + const { + data, + target + } = event; + const { + value, + selectionStart, + selectionEnd + } = target; + let selStart = selectionStart, + selEnd = selectionEnd; + switch (event.inputType) { + case "deleteWordBackward": + { + const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); + if (match) { + selStart -= match[0].length; + } + break; + } + case "deleteWordForward": + { + const match = value.substring(selectionStart).match(/^[^\w]*\w*/); + if (match) { + selEnd += match[0].length; + } + break; + } + case "deleteContentBackward": + if (selectionStart === selectionEnd) { + selStart -= 1; + } + break; + case "deleteContentForward": + if (selectionStart === selectionEnd) { + selEnd += 1; + } + break; } - + event.preventDefault(); this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", - value: elementData.beforeInputValue, - change: event.data, + value, + change: data || "", willCommit: false, selStart, selEnd @@ -9327,26 +19233,16 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { }); }); } - this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); } - if (blurListener) { element.addEventListener("blur", blurListener); } - - element.disabled = this.data.readOnly; - element.name = this.data.fieldName; - - if (this.data.maxLen !== null) { - element.maxLength = this.data.maxLen; - } - if (this.data.comb) { const fieldWidth = this.data.rect[2] - this.data.rect[0]; - const combWidth = fieldWidth / this.data.maxLen; + const combWidth = fieldWidth / maxLen; element.classList.add("comb"); - element.style.letterSpacing = `calc(${combWidth}px - 1ch)`; + element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; } } else { element = document.createElement("div"); @@ -9354,84 +19250,74 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { element.style.verticalAlign = "middle"; element.style.display = "table-cell"; } - this._setTextStyle(element); - - this.container.appendChild(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); return this.container; } - - _setTextStyle(element) { - const TEXT_ALIGNMENT = ["left", "center", "right"]; - const { - fontSize, - fontColor - } = this.data.defaultAppearanceData; - const style = element.style; - - if (fontSize) { - style.fontSize = `${fontSize}px`; - } - - style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); - - if (this.data.textAlignment !== null) { - style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; - } - } - } - +class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: !!parameters.data.hasOwnCanvas + }); + } +} class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { - isRenderable: parameters.renderInteractiveForms + isRenderable: parameters.renderForms }); } - render() { const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { - value: data.fieldValue && (data.exportValue && data.exportValue === data.fieldValue || !data.exportValue && data.fieldValue !== "Off") + value: data.exportValue === data.fieldValue }).value; - if (typeof value === "string") { value = value !== "Off"; storage.setValue(id, { value }); } - - this.container.className = "buttonWidgetAnnotation checkBox"; + this.container.classList.add("buttonWidgetAnnotation", "checkBox"); const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); element.disabled = data.readOnly; + this._setRequired(element, this.data.required); element.type = "checkbox"; - element.name = this.data.fieldName; - + element.name = data.baseFieldName || data.fieldName; if (value) { element.setAttribute("checked", true); } - - element.setAttribute("id", id); - element.addEventListener("change", function (event) { - const name = event.target.name; - - for (const checkbox of document.getElementsByName(name)) { - if (checkbox !== event.target) { - checkbox.checked = false; - storage.setValue(checkbox.parentNode.getAttribute("data-annotation-id"), { - value: false - }); + element.setAttribute("exportValue", data.exportValue); + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { + const { + name, + checked + } = event.target; + for (const checkbox of this._getElementsByName(name, id)) { + const curChecked = checked && checkbox.exportValue === data.exportValue; + if (checkbox.domElement) { + checkbox.domElement.checked = curChecked; } + storage.setValue(checkbox.id, { + value: curChecked + }); } - storage.setValue(id, { - value: event.target.checked + value: checked }); }); - + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", jsEvent => { const actions = { @@ -9441,166 +19327,184 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { value: event.target.checked }); } - }; - this._dispatchEventFromSandbox(actions, jsEvent); }); - this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); } - - this.container.appendChild(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); return this.container; } - } - class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { - isRenderable: parameters.renderInteractiveForms + isRenderable: parameters.renderForms }); } - render() { - this.container.className = "buttonWidgetAnnotation radioButton"; + this.container.classList.add("buttonWidgetAnnotation", "radioButton"); const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.fieldValue === data.buttonValue }).value; - if (typeof value === "string") { value = value !== data.buttonValue; storage.setValue(id, { value }); } - const element = document.createElement("input"); + GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); element.disabled = data.readOnly; + this._setRequired(element, this.data.required); element.type = "radio"; - element.name = data.fieldName; - + element.name = data.baseFieldName || data.fieldName; if (value) { element.setAttribute("checked", true); } - - element.setAttribute("id", id); - element.addEventListener("change", function (event) { + element.tabIndex = DEFAULT_TAB_INDEX; + element.addEventListener("change", event => { const { - target - } = event; - - for (const radio of document.getElementsByName(target.name)) { - if (radio !== target) { - storage.setValue(radio.getAttribute("id"), { - value: false - }); - } + name, + checked + } = event.target; + for (const radio of this._getElementsByName(name, id)) { + storage.setValue(radio.id, { + value: false + }); } - storage.setValue(id, { - value: target.checked + value: checked }); }); - + element.addEventListener("resetform", event => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; + }); if (this.enableScripting && this.hasJSActions) { const pdfButtonValue = data.buttonValue; element.addEventListener("updatefromsandbox", jsEvent => { const actions = { - value(event) { + value: event => { const checked = pdfButtonValue === event.detail.value; - - for (const radio of document.getElementsByName(event.target.name)) { - const radioId = radio.getAttribute("id"); - radio.checked = radioId === id && checked; - storage.setValue(radioId, { - value: radio.checked + for (const radio of this._getElementsByName(event.target.name)) { + const curChecked = checked && radio.id === id; + if (radio.domElement) { + radio.domElement.checked = curChecked; + } + storage.setValue(radio.id, { + value: curChecked }); } } - }; - this._dispatchEventFromSandbox(actions, jsEvent); }); - this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); } - - this.container.appendChild(element); + this._setBackgroundColor(element); + this._setDefaultPropertiesFromJS(element); + this.container.append(element); return this.container; } - } - class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { + constructor(parameters) { + super(parameters, { + ignoreBorder: parameters.data.hasAppearance + }); + } render() { const container = super.render(); - container.className = "buttonWidgetAnnotation pushButton"; - + container.classList.add("buttonWidgetAnnotation", "pushButton"); if (this.data.alternativeText) { container.title = this.data.alternativeText; } - + const linkElement = container.lastChild; + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + linkElement.addEventListener("updatefromsandbox", jsEvent => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + } return container; } - } - class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { - isRenderable: parameters.renderInteractiveForms + isRenderable: parameters.renderForms }); } - render() { - this.container.className = "choiceWidgetAnnotation"; + this.container.classList.add("choiceWidgetAnnotation"); const storage = this.annotationStorage; const id = this.data.id; - storage.getValue(id, { - value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined + const storedData = storage.getValue(id, { + value: this.data.fieldValue }); const selectElement = document.createElement("select"); + GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); selectElement.disabled = this.data.readOnly; - selectElement.name = this.data.fieldName; - selectElement.setAttribute("id", id); - + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.baseFieldName || this.data.fieldName; + selectElement.tabIndex = DEFAULT_TAB_INDEX; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; if (!this.data.combo) { selectElement.size = this.data.options.length; - if (this.data.multiSelect) { selectElement.multiple = true; } } - + selectElement.addEventListener("resetform", event => { + const defaultValue = this.data.defaultFieldValue; + for (const option of selectElement.options) { + option.selected = option.value === defaultValue; + } + }); for (const option of this.data.options) { const optionElement = document.createElement("option"); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; - - if (this.data.fieldValue.includes(option.exportValue)) { + if (storedData.value.includes(option.exportValue)) { optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; } - - selectElement.appendChild(optionElement); + selectElement.append(optionElement); } - - const getValue = (event, isExport) => { + let removeEmptyEntry = null; + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + selectElement.addEventListener("input", removeEmptyEntry); + } + const getValue = isExport => { const name = isExport ? "value" : "textContent"; - const options = event.target.options; - - if (!event.target.multiple) { + const { + options, + multiple + } = selectElement; + if (!multiple) { return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; } - return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); }; - + let selectedValues = getValue(false); const getItems = event => { const options = event.target.options; return Array.prototype.map.call(options, option => { @@ -9610,82 +19514,79 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { }; }); }; - if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", jsEvent => { const actions = { value(event) { - const options = selectElement.options; + removeEmptyEntry?.(); const value = event.detail.value; const values = new Set(Array.isArray(value) ? value : [value]); - Array.prototype.forEach.call(options, option => { + for (const option of selectElement.options) { option.selected = values.has(option.value); - }); + } storage.setValue(id, { - value: getValue(event, true) + value: getValue(true) }); + selectedValues = getValue(false); }, - multipleSelection(event) { selectElement.multiple = true; }, - remove(event) { const options = selectElement.options; const index = event.detail.remove; options[index].selected = false; selectElement.remove(index); - if (options.length > 0) { const i = Array.prototype.findIndex.call(options, option => option.selected); - if (i === -1) { options[0].selected = true; } } - storage.setValue(id, { - value: getValue(event, true), + value: getValue(true), items: getItems(event) }); + selectedValues = getValue(false); }, - clear(event) { while (selectElement.length !== 0) { selectElement.remove(0); } - storage.setValue(id, { value: null, items: [] }); + selectedValues = getValue(false); }, - insert(event) { const { index, displayValue, exportValue } = event.detail.insert; + const selectChild = selectElement.children[index]; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; - selectElement.insertBefore(optionElement, selectElement.children[index]); + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } storage.setValue(id, { - value: getValue(event, true), + value: getValue(true), items: getItems(event) }); + selectedValues = getValue(false); }, - items(event) { const { items } = event.detail; - while (selectElement.length !== 0) { selectElement.remove(0); } - for (const item of items) { const { displayValue, @@ -9694,356 +19595,463 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; - selectElement.appendChild(optionElement); + selectElement.append(optionElement); } - if (selectElement.options.length > 0) { selectElement.options[0].selected = true; } - storage.setValue(id, { - value: getValue(event, true), + value: getValue(true), items: getItems(event) }); + selectedValues = getValue(false); }, - indices(event) { const indices = new Set(event.detail.indices); - const options = event.target.options; - Array.prototype.forEach.call(options, (option, i) => { - option.selected = indices.has(i); - }); + for (const option of event.target.options) { + option.selected = indices.has(option.index); + } storage.setValue(id, { - value: getValue(event, true) + value: getValue(true) }); + selectedValues = getValue(false); }, - editable(event) { event.target.disabled = !event.detail.editable; } - }; - this._dispatchEventFromSandbox(actions, jsEvent); }); selectElement.addEventListener("input", event => { - const exportValue = getValue(event, true); - const value = getValue(event, false); + const exportValue = getValue(true); storage.setValue(id, { value: exportValue }); + event.preventDefault(); this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", - value, + value: selectedValues, changeEx: exportValue, - willCommit: true, + willCommit: false, commitKey: 1, keyDown: false } }); }); - - this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], event => event.target.checked); + this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); } else { selectElement.addEventListener("input", function (event) { storage.setValue(id, { - value: getValue(event) + value: getValue(true) }); }); } - - this.container.appendChild(selectElement); + if (this.data.combo) { + this._setTextStyle(selectElement); + } else {} + this._setBackgroundColor(selectElement); + this._setDefaultPropertiesFromJS(selectElement); + this.container.append(selectElement); return this.container; } - } - class PopupAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.title || parameters.data.contents); + const { + data, + elements + } = parameters; + const isRenderable = !!(data.titleObj?.str || data.contentsObj?.str || data.richText?.str); super(parameters, { isRenderable }); + this.elements = elements; } - render() { - const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"]; - this.container.className = "popupAnnotation"; - - if (IGNORE_TYPES.includes(this.data.parentType)) { - return this.container; - } - - const selector = `[data-annotation-id="${this.data.parentId}"]`; - const parentElements = this.layer.querySelectorAll(selector); - - if (parentElements.length === 0) { - return this.container; - } - + this.container.classList.add("popupAnnotation"); const popup = new PopupElement({ container: this.container, - trigger: Array.from(parentElements), color: this.data.color, - title: this.data.title, + titleObj: this.data.titleObj, modificationDate: this.data.modificationDate, - contents: this.data.contents + contentsObj: this.data.contentsObj, + richText: this.data.richText, + rect: this.data.rect, + parentRect: this.data.parentRect || null, + parent: this.parent, + elements: this.elements, + open: this.data.open }); - const page = this.page; - - const rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]); - - const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0]; - const popupTop = rect[1]; - this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`; - this.container.style.left = `${popupLeft}px`; - this.container.style.top = `${popupTop}px`; - this.container.appendChild(popup.render()); + const elementIds = []; + for (const element of this.elements) { + element.popup = popup; + elementIds.push(element.data.id); + element.addHighlightArea(); + } + this.container.setAttribute("aria-controls", elementIds.join(",")); return this.container; } - } - class PopupElement { - constructor(parameters) { - this.container = parameters.container; - this.trigger = parameters.trigger; - this.color = parameters.color; - this.title = parameters.title; - this.modificationDate = parameters.modificationDate; - this.contents = parameters.contents; - this.hideWrapper = parameters.hideWrapper || false; - this.pinned = false; - } - - render() { - const BACKGROUND_ENLIGHT = 0.7; - const wrapper = document.createElement("div"); - wrapper.className = "popupWrapper"; - this.hideElement = this.hideWrapper ? wrapper : this.container; - this.hideElement.hidden = true; - const popup = document.createElement("div"); - popup.className = "popup"; - const color = this.color; - - if (color) { - const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; - const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; - const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; - popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0); - } - - const title = document.createElement("h1"); - title.textContent = this.title; - popup.appendChild(title); - - const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); - + #dateTimePromise = null; + #boundHide = this.#hide.bind(this); + #boundShow = this.#show.bind(this); + #boundToggle = this.#toggle.bind(this); + #color = null; + #container = null; + #contentsObj = null; + #elements = null; + #parent = null; + #parentRect = null; + #pinned = false; + #popup = null; + #rect = null; + #richText = null; + #titleObj = null; + #wasVisible = false; + constructor(_ref) { + let { + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open + } = _ref; + this.#container = container; + this.#titleObj = titleObj; + this.#contentsObj = contentsObj; + this.#richText = richText; + this.#parent = parent; + this.#color = color; + this.#rect = rect; + this.#parentRect = parentRect; + this.#elements = elements; + const dateObject = _display_utils.PDFDateString.toDateObject(modificationDate); if (dateObject) { - const modificationDate = document.createElement("span"); - modificationDate.textContent = "{{date}}, {{time}}"; - modificationDate.dataset.l10nId = "annotation_date_string"; - modificationDate.dataset.l10nArgs = JSON.stringify({ + this.#dateTimePromise = parent.l10n.get("annotation_date_string", { date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }); - popup.appendChild(modificationDate); } - - const contents = this._formatContents(this.contents); - - popup.appendChild(contents); - - if (!Array.isArray(this.trigger)) { - this.trigger = [this.trigger]; - } - + this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); for (const element of this.trigger) { - element.addEventListener("click", this._toggle.bind(this)); - element.addEventListener("mouseover", this._show.bind(this, false)); - element.addEventListener("mouseout", this._hide.bind(this, false)); + element.addEventListener("click", this.#boundToggle); + element.addEventListener("mouseenter", this.#boundShow); + element.addEventListener("mouseleave", this.#boundHide); + } + this.#container.hidden = true; + if (open) { + this.#toggle(); } - - popup.addEventListener("click", this._hide.bind(this, true)); - wrapper.appendChild(popup); - return wrapper; } - - _formatContents(contents) { - const p = document.createElement("p"); - const lines = contents.split(/(?:\r\n?|\n)/); - - for (let i = 0, ii = lines.length; i < ii; ++i) { - const line = lines[i]; - p.appendChild(document.createTextNode(line)); - - if (i < ii - 1) { - p.appendChild(document.createElement("br")); + render() { + if (this.#popup) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = this.#parent; + const popup = this.#popup = document.createElement("div"); + popup.className = "popup"; + if (this.#color) { + const baseColor = popup.style.outlineColor = _util.Util.makeHexColor(...this.#color); + if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { + popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; + } else { + const BACKGROUND_ENLIGHT = 0.7; + popup.style.backgroundColor = _util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); + } + } + const header = document.createElement("span"); + header.className = "header"; + const title = document.createElement("h1"); + header.append(title); + ({ + dir: title.dir, + str: title.textContent + } = this.#titleObj); + popup.append(header); + if (this.#dateTimePromise) { + const modificationDate = document.createElement("span"); + modificationDate.classList.add("popupDate"); + this.#dateTimePromise.then(localized => { + modificationDate.textContent = localized; + }); + header.append(modificationDate); + } + const contentsObj = this.#contentsObj; + const richText = this.#richText; + if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { + _xfa_layer.XfaLayer.render({ + xfaHtml: richText.html, + intent: "richText", + div: popup + }); + popup.lastChild.classList.add("richText", "popupContent"); + } else { + const contents = this._formatContents(contentsObj); + popup.append(contents); + } + let useParentRect = !!this.#parentRect; + let rect = useParentRect ? this.#parentRect : this.#rect; + for (const element of this.#elements) { + if (!rect || _util.Util.intersect(element.data.rect, rect) !== null) { + rect = element.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = _util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + const { + style + } = this.#container; + style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; + style.top = `${100 * (popupTop - pageY) / pageHeight}%`; + this.#container.append(popup); + } + _formatContents(_ref2) { + let { + str, + dir + } = _ref2; + const p = document.createElement("p"); + p.classList.add("popupContent"); + p.dir = dir; + const lines = str.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + const line = lines[i]; + p.append(document.createTextNode(line)); + if (i < ii - 1) { + p.append(document.createElement("br")); } } - return p; } - - _toggle() { - if (this.pinned) { - this._hide(true); + #toggle() { + this.#pinned = !this.#pinned; + if (this.#pinned) { + this.#show(); + this.#container.addEventListener("click", this.#boundToggle); } else { - this._show(true); + this.#hide(); + this.#container.removeEventListener("click", this.#boundToggle); } } - - _show(pin = false) { - if (pin) { - this.pinned = true; + #show() { + if (!this.#popup) { + this.render(); } - - if (this.hideElement.hidden) { - this.hideElement.hidden = false; - this.container.style.zIndex += 1; + if (!this.isVisible) { + this.#container.hidden = false; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; + } else if (this.#pinned) { + this.#container.classList.add("focused"); } } - - _hide(unpin = true) { - if (unpin) { - this.pinned = false; - } - - if (!this.hideElement.hidden && !this.pinned) { - this.hideElement.hidden = true; - this.container.style.zIndex -= 1; + #hide() { + this.#container.classList.remove("focused"); + if (this.#pinned || !this.isVisible) { + return; } + this.#container.hidden = true; + this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; + } + forceHide() { + this.#wasVisible = this.isVisible; + if (!this.#wasVisible) { + return; + } + this.#container.hidden = true; + } + maybeShow() { + if (!this.#wasVisible) { + return; + } + this.#wasVisible = false; + this.#container.hidden = false; + } + get isVisible() { + return this.#container.hidden === false; } - } - class FreeTextAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); + this.textContent = parameters.data.textContent; + this.textPosition = parameters.data.textPosition; + this.annotationEditorType = _util.AnnotationEditorType.FREETEXT; } - render() { - this.container.className = "freeTextAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + this.container.classList.add("freeTextAnnotation"); + if (this.textContent) { + const content = document.createElement("div"); + content.classList.add("annotationTextContent"); + content.setAttribute("role", "comment"); + for (const line of this.textContent) { + const lineSpan = document.createElement("span"); + lineSpan.textContent = line; + content.append(lineSpan); + } + this.container.append(content); } - + if (!this.data.popupRef) { + this._createPopup(); + } + this._editOnDoubleClick(); return this.container; } - } - +exports.FreeTextAnnotationElement = FreeTextAnnotationElement; class LineAnnotationElement extends AnnotationElement { + #line = null; constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } - render() { - this.container.className = "lineAnnotation"; + this.container.classList.add("lineAnnotation"); const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - const line = this.svgFactory.createElement("svg:line"); + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const line = this.#line = this.svgFactory.createElement("svg:line"); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); - svg.appendChild(line); + line.setAttribute("fill", "transparent"); + svg.append(line); this.container.append(svg); - - this._createPopup(line, data); - + if (!data.popupRef) { + this._createPopup(); + } return this.container; } - + getElementsToTriggerPopup() { + return this.#line; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } } - class SquareAnnotationElement extends AnnotationElement { + #square = null; constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } - render() { - this.container.className = "squareAnnotation"; + this.container.classList.add("squareAnnotation"); const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; - const square = this.svgFactory.createElement("svg:rect"); + const square = this.#square = this.svgFactory.createElement("svg:rect"); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); - square.setAttribute("fill", "none"); - svg.appendChild(square); + square.setAttribute("fill", "transparent"); + svg.append(square); this.container.append(svg); - - this._createPopup(square, data); - + if (!data.popupRef) { + this._createPopup(); + } return this.container; } - + getElementsToTriggerPopup() { + return this.#square; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } } - class CircleAnnotationElement extends AnnotationElement { + #circle = null; constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } - render() { - this.container.className = "circleAnnotation"; + this.container.classList.add("circleAnnotation"); const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; - const circle = this.svgFactory.createElement("svg:ellipse"); + const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); - circle.setAttribute("fill", "none"); - svg.appendChild(circle); + circle.setAttribute("fill", "transparent"); + svg.append(circle); this.container.append(svg); - - this._createPopup(circle, data); - + if (!data.popupRef) { + this._createPopup(); + } return this.container; } - + getElementsToTriggerPopup() { + return this.#circle; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } } - class PolylineAnnotationElement extends AnnotationElement { + #polyline = null; constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true @@ -10051,234 +20059,200 @@ class PolylineAnnotationElement extends AnnotationElement { this.containerClassName = "polylineAnnotation"; this.svgElementName = "svg:polyline"; } - render() { - this.container.className = this.containerClassName; + this.container.classList.add(this.containerClassName); const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); let points = []; - for (const coordinate of data.vertices) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(x + "," + y); } - points = points.join(" "); - const polyline = this.svgFactory.createElement(this.svgElementName); + const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); - polyline.setAttribute("fill", "none"); - svg.appendChild(polyline); + polyline.setAttribute("fill", "transparent"); + svg.append(polyline); this.container.append(svg); - - this._createPopup(polyline, data); - + if (!data.popupRef) { + this._createPopup(polyline, data); + } return this.container; } - + getElementsToTriggerPopup() { + return this.#polyline; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } } - class PolygonAnnotationElement extends PolylineAnnotationElement { constructor(parameters) { super(parameters); this.containerClassName = "polygonAnnotation"; this.svgElementName = "svg:polygon"; } - } - class CaretAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } - render() { - this.container.className = "caretAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + this.container.classList.add("caretAnnotation"); + if (!this.data.popupRef) { + this._createPopup(); } - return this.container; } - } - class InkAnnotationElement extends AnnotationElement { + #polylines = []; constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; + this.annotationEditorType = _util.AnnotationEditorType.INK; } - render() { - this.container.className = this.containerClassName; + this.container.classList.add(this.containerClassName); const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); for (const inkList of data.inkLists) { let points = []; - for (const coordinate of inkList) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(`${x},${y}`); } - points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); + this.#polylines.push(polyline); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); - polyline.setAttribute("fill", "none"); - - this._createPopup(polyline, data); - - svg.appendChild(polyline); + polyline.setAttribute("fill", "transparent"); + if (!data.popupRef) { + this._createPopup(polyline, data); + } + svg.append(polyline); } - this.container.append(svg); return this.container; } - + getElementsToTriggerPopup() { + return this.#polylines; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } } - +exports.InkAnnotationElement = InkAnnotationElement; class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + if (!this.data.popupRef) { + this._createPopup(); } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("highlightAnnotation"); - } - - this.container.className = "highlightAnnotation"; + this.container.classList.add("highlightAnnotation"); return this.container; } - } - class UnderlineAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + if (!this.data.popupRef) { + this._createPopup(); } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("underlineAnnotation"); - } - - this.container.className = "underlineAnnotation"; + this.container.classList.add("underlineAnnotation"); return this.container; } - } - class SquigglyAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + if (!this.data.popupRef) { + this._createPopup(); } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("squigglyAnnotation"); - } - - this.container.className = "squigglyAnnotation"; + this.container.classList.add("squigglyAnnotation"); return this.container; } - } - class StrikeOutAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + if (!this.data.popupRef) { + this._createPopup(); } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("strikeoutAnnotation"); - } - - this.container.className = "strikeoutAnnotation"; + this.container.classList.add("strikeoutAnnotation"); return this.container; } - } - class StampAnnotationElement extends AnnotationElement { constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); + const isRenderable = !!(parameters.data.popupRef || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } - render() { - this.container.className = "stampAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); + this.container.classList.add("stampAnnotation"); + if (!this.data.popupRef) { + this._createPopup(); } - return this.container; } - } - +exports.StampAnnotationElement = StampAnnotationElement; class FileAttachmentAnnotationElement extends AnnotationElement { + #trigger = null; constructor(parameters) { super(parameters, { isRenderable: true @@ -10287,2559 +20261,416 @@ class FileAttachmentAnnotationElement extends AnnotationElement { filename, content } = this.data.file; - this.filename = (0, _display_utils.getFilenameFromUrl)(filename); + this.filename = (0, _display_utils.getFilenameFromUrl)(filename, true); this.content = content; this.linkService.eventBus?.dispatch("fileattachmentannotation", { source: this, - id: (0, _util.stringToPDFString)(filename), filename, content }); } - render() { - this.container.className = "fileAttachmentAnnotation"; - const trigger = document.createElement("div"); - trigger.style.height = this.container.style.height; - trigger.style.width = this.container.style.width; - trigger.addEventListener("dblclick", this._download.bind(this)); - - if (!this.data.hasPopup && (this.data.title || this.data.contents)) { - this._createPopup(trigger, this.data); + this.container.classList.add("fileAttachmentAnnotation"); + let trigger; + if (this.data.hasAppearance) { + trigger = document.createElement("div"); + } else { + trigger = document.createElement("img"); + trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(this.data.name) ? "paperclip" : "pushpin"}.svg`; } - - this.container.appendChild(trigger); + trigger.classList.add("popupTriggerArea"); + trigger.addEventListener("dblclick", this._download.bind(this)); + this.#trigger = trigger; + if (!this.data.popupRef && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) { + this._createPopup(); + } + this.container.append(trigger); return this.container; } - + getElementsToTriggerPopup() { + return this.#trigger; + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } _download() { this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename); } - } - class AnnotationLayer { - static render(parameters) { - const sortedAnnotations = [], - popupAnnotations = []; - - for (const data of parameters.annotations) { - if (!data) { + #accessibilityManager = null; + #annotationCanvasMap = null; + #editableAnnotations = new Map(); + constructor(_ref3) { + let { + div, + accessibilityManager, + annotationCanvasMap, + l10n, + page, + viewport + } = _ref3; + this.div = div; + this.#accessibilityManager = accessibilityManager; + this.#annotationCanvasMap = annotationCanvasMap; + this.l10n = l10n; + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + this.l10n ||= _displayL10n_utils.NullL10n; + } + #appendElement(element, id) { + const contentElement = element.firstChild || element; + contentElement.id = `${_display_utils.AnnotationPrefix}${id}`; + this.div.append(element); + this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); + } + async render(params) { + const { + annotations + } = params; + const layer = this.div; + (0, _display_utils.setLayerDimensions)(layer, this.viewport); + const popupToElements = new Map(); + const elementParams = { + data: null, + layer, + linkService: params.linkService, + downloadManager: params.downloadManager, + imageResourcesPath: params.imageResourcesPath || "", + renderForms: params.renderForms !== false, + svgFactory: new _display_utils.DOMSVGFactory(), + annotationStorage: params.annotationStorage || new _annotation_storage.AnnotationStorage(), + enableScripting: params.enableScripting === true, + hasJSActions: params.hasJSActions, + fieldObjects: params.fieldObjects, + parent: this, + elements: null + }; + for (const data of annotations) { + if (data.noHTML) { continue; } - - if (data.annotationType === _util.AnnotationType.POPUP) { - popupAnnotations.push(data); + const isPopupAnnotation = data.annotationType === _util.AnnotationType.POPUP; + if (!isPopupAnnotation) { + const { + width, + height + } = getRectDims(data.rect); + if (width <= 0 || height <= 0) { + continue; + } + } else { + const elements = popupToElements.get(data.id); + if (!elements) { + continue; + } + elementParams.elements = elements; + } + elementParams.data = data; + const element = AnnotationElementFactory.create(elementParams); + if (!element.isRenderable) { continue; } - - sortedAnnotations.push(data); - } - - if (popupAnnotations.length) { - sortedAnnotations.push(...popupAnnotations); - } - - for (const data of sortedAnnotations) { - const element = AnnotationElementFactory.create({ - data, - layer: parameters.div, - page: parameters.page, - viewport: parameters.viewport, - linkService: parameters.linkService, - downloadManager: parameters.downloadManager, - imageResourcesPath: parameters.imageResourcesPath || "", - renderInteractiveForms: parameters.renderInteractiveForms !== false, - svgFactory: new _display_utils.DOMSVGFactory(), - annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(), - enableScripting: parameters.enableScripting, - hasJSActions: parameters.hasJSActions, - mouseState: parameters.mouseState || { - isDown: false - } - }); - - if (element.isRenderable) { - const rendered = element.render(); - - if (data.hidden) { - rendered.style.visibility = "hidden"; - } - - if (Array.isArray(rendered)) { - for (const renderedElement of rendered) { - parameters.div.appendChild(renderedElement); - } + if (!isPopupAnnotation && data.popupRef) { + const elements = popupToElements.get(data.popupRef); + if (!elements) { + popupToElements.set(data.popupRef, [element]); } else { - if (element instanceof PopupAnnotationElement) { - parameters.div.prepend(rendered); - } else { - parameters.div.appendChild(rendered); - } + elements.push(element); } } + if (element.annotationEditorType > 0) { + this.#editableAnnotations.set(element.data.id, element); + } + const rendered = element.render(); + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + this.#appendElement(rendered, data.id); } + this.#setAnnotationCanvasMap(); + await this.l10n.translate(layer); } - - static update(parameters) { - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - - for (const data of parameters.annotations) { - const elements = parameters.div.querySelectorAll(`[data-annotation-id="${data.id}"]`); - - if (elements) { - for (const element of elements) { - element.style.transform = transform; - } + update(_ref4) { + let { + viewport + } = _ref4; + const layer = this.div; + this.viewport = viewport; + (0, _display_utils.setLayerDimensions)(layer, { + rotation: viewport.rotation + }); + this.#setAnnotationCanvasMap(); + layer.hidden = false; + } + #setAnnotationCanvasMap() { + if (!this.#annotationCanvasMap) { + return; + } + const layer = this.div; + for (const [id, canvas] of this.#annotationCanvasMap) { + const element = layer.querySelector(`[data-annotation-id="${id}"]`); + if (!element) { + continue; + } + const { + firstChild + } = element; + if (!firstChild) { + element.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); + } else { + firstChild.before(canvas); } } - - parameters.div.hidden = false; + this.#annotationCanvasMap.clear(); + } + getEditableAnnotations() { + return Array.from(this.#editableAnnotations.values()); + } + getEditableAnnotation(id) { + return this.#editableAnnotations.get(id); } - } - exports.AnnotationLayer = AnnotationLayer; /***/ }), -/* 18 */ +/* 198 */ /***/ ((__unused_webpack_module, exports) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ColorConverters = void 0; - function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } - class ColorConverters { - static CMYK_G([c, y, m, k]) { + static CMYK_G(_ref) { + let [c, y, m, k] = _ref; return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } - - static G_CMYK([g]) { + static G_CMYK(_ref2) { + let [g] = _ref2; return ["CMYK", 0, 0, 0, 1 - g]; } - - static G_RGB([g]) { + static G_RGB(_ref3) { + let [g] = _ref3; return ["RGB", g, g, g]; } - - static G_HTML([g]) { + static G_HTML(_ref4) { + let [g] = _ref4; const G = makeColorComp(g); return `#${G}${G}${G}`; } - - static RGB_G([r, g, b]) { + static RGB_G(_ref5) { + let [r, g, b] = _ref5; return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } - - static RGB_HTML([r, g, b]) { + static RGB_HTML(_ref6) { + let [r, g, b] = _ref6; const R = makeColorComp(r); const G = makeColorComp(g); const B = makeColorComp(b); return `#${R}${G}${B}`; } - static T_HTML() { return "#00000000"; } - - static CMYK_RGB([c, y, m, k]) { + static CMYK_RGB(_ref7) { + let [c, y, m, k] = _ref7; return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } - static CMYK_HTML(components) { - return this.RGB_HTML(this.CMYK_RGB(components)); + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); } - - static RGB_CMYK([r, g, b]) { + static RGB_CMYK(_ref8) { + let [r, g, b] = _ref8; const c = 1 - r; const m = 1 - g; const y = 1 - b; const k = Math.min(c, m, y); return ["CMYK", c, m, y, k]; } - } - exports.ColorConverters = ColorConverters; /***/ }), -/* 19 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.renderTextLayer = renderTextLayer; - -var _util = __w_pdfjs_require__(2); - -const MAX_TEXT_DIVS_TO_RENDER = 100000; -const DEFAULT_FONT_SIZE = 30; -const DEFAULT_FONT_ASCENT = 0.8; -const ascentCache = new Map(); -const AllWhitespaceRegexp = /^\s+$/g; - -function getAscent(fontFamily, ctx) { - const cachedAscent = ascentCache.get(fontFamily); - - if (cachedAscent) { - return cachedAscent; - } - - ctx.save(); - ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; - const metrics = ctx.measureText(""); - let ascent = metrics.fontBoundingBoxAscent; - let descent = Math.abs(metrics.fontBoundingBoxDescent); - - if (ascent) { - ctx.restore(); - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - return ratio; - } - - ctx.strokeStyle = "red"; - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("g", 0, 0); - let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - descent = 0; - - for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { - if (pixels[i] > 0) { - descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); - pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - ascent = 0; - - for (let i = 0, ii = pixels.length; i < ii; i += 4) { - if (pixels[i] > 0) { - ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - - ctx.restore(); - - if (ascent) { - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - return ratio; - } - - ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); - return DEFAULT_FONT_ASCENT; -} - -function appendText(task, geom, styles, ctx) { - const textDiv = document.createElement("span"); - const textDivProperties = { - angle: 0, - canvasWidth: 0, - hasText: geom.str !== "", - hasEOL: geom.hasEOL, - originalTransform: null, - paddingBottom: 0, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - scale: 1 - }; - - task._textDivs.push(textDiv); - - const tx = _util.Util.transform(task._viewport.transform, geom.transform); - - let angle = Math.atan2(tx[1], tx[0]); - const style = styles[geom.fontName]; - - if (style.vertical) { - angle += Math.PI / 2; - } - - const fontHeight = Math.hypot(tx[2], tx[3]); - const fontAscent = fontHeight * getAscent(style.fontFamily, ctx); - let left, top; - - if (angle === 0) { - left = tx[4]; - top = tx[5] - fontAscent; - } else { - left = tx[4] + fontAscent * Math.sin(angle); - top = tx[5] - fontAscent * Math.cos(angle); - } - - textDiv.style.left = `${left}px`; - textDiv.style.top = `${top}px`; - textDiv.style.fontSize = `${fontHeight}px`; - textDiv.style.fontFamily = style.fontFamily; - textDiv.setAttribute("role", "presentation"); - textDiv.textContent = geom.str; - textDiv.dir = geom.dir; - - if (task._fontInspectorEnabled) { - textDiv.dataset.fontName = geom.fontName; - } - - if (angle !== 0) { - textDivProperties.angle = angle * (180 / Math.PI); - } - - let shouldScaleText = false; - - if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) { - shouldScaleText = true; - } else if (geom.transform[0] !== geom.transform[3]) { - const absScaleX = Math.abs(geom.transform[0]), - absScaleY = Math.abs(geom.transform[3]); - - if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { - shouldScaleText = true; - } - } - - if (shouldScaleText) { - if (style.vertical) { - textDivProperties.canvasWidth = geom.height * task._viewport.scale; - } else { - textDivProperties.canvasWidth = geom.width * task._viewport.scale; - } - } - - task._textDivProperties.set(textDiv, textDivProperties); - - if (task._textContentStream) { - task._layoutText(textDiv); - } - - if (task._enhanceTextSelection && textDivProperties.hasText) { - let angleCos = 1, - angleSin = 0; - - if (angle !== 0) { - angleCos = Math.cos(angle); - angleSin = Math.sin(angle); - } - - const divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; - const divHeight = fontHeight; - let m, b; - - if (angle !== 0) { - m = [angleCos, angleSin, -angleSin, angleCos, left, top]; - b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); - } else { - b = [left, top, left + divWidth, top + divHeight]; - } - - task._bounds.push({ - left: b[0], - top: b[1], - right: b[2], - bottom: b[3], - div: textDiv, - size: [divWidth, divHeight], - m - }); - } -} - -function render(task) { - if (task._canceled) { - return; - } - - const textDivs = task._textDivs; - const capability = task._capability; - const textDivsLength = textDivs.length; - - if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { - task._renderingDone = true; - capability.resolve(); - return; - } - - if (!task._textContentStream) { - for (let i = 0; i < textDivsLength; i++) { - task._layoutText(textDivs[i]); - } - } - - task._renderingDone = true; - capability.resolve(); -} - -function findPositiveMin(ts, offset, count) { - let result = 0; - - for (let i = 0; i < count; i++) { - const t = ts[offset++]; - - if (t > 0) { - result = result ? Math.min(t, result) : t; - } - } - - return result; -} - -function expand(task) { - const bounds = task._bounds; - const viewport = task._viewport; - const expanded = expandBounds(viewport.width, viewport.height, bounds); - - for (let i = 0; i < expanded.length; i++) { - const div = bounds[i].div; - - const divProperties = task._textDivProperties.get(div); - - if (divProperties.angle === 0) { - divProperties.paddingLeft = bounds[i].left - expanded[i].left; - divProperties.paddingTop = bounds[i].top - expanded[i].top; - divProperties.paddingRight = expanded[i].right - bounds[i].right; - divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; - - task._textDivProperties.set(div, divProperties); - - continue; - } - - const e = expanded[i], - b = bounds[i]; - const m = b.m, - c = m[0], - s = m[1]; - const points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; - const ts = new Float64Array(64); - - for (let j = 0, jj = points.length; j < jj; j++) { - const t = _util.Util.applyTransform(points[j], m); - - ts[j + 0] = c && (e.left - t[0]) / c; - ts[j + 4] = s && (e.top - t[1]) / s; - ts[j + 8] = c && (e.right - t[0]) / c; - ts[j + 12] = s && (e.bottom - t[1]) / s; - ts[j + 16] = s && (e.left - t[0]) / -s; - ts[j + 20] = c && (e.top - t[1]) / c; - ts[j + 24] = s && (e.right - t[0]) / -s; - ts[j + 28] = c && (e.bottom - t[1]) / c; - ts[j + 32] = c && (e.left - t[0]) / -c; - ts[j + 36] = s && (e.top - t[1]) / -s; - ts[j + 40] = c && (e.right - t[0]) / -c; - ts[j + 44] = s && (e.bottom - t[1]) / -s; - ts[j + 48] = s && (e.left - t[0]) / s; - ts[j + 52] = c && (e.top - t[1]) / -c; - ts[j + 56] = s && (e.right - t[0]) / s; - ts[j + 60] = c && (e.bottom - t[1]) / -c; - } - - const boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); - divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; - divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; - divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; - divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; - - task._textDivProperties.set(div, divProperties); - } -} - -function expandBounds(width, height, boxes) { - const bounds = boxes.map(function (box, i) { - return { - x1: box.left, - y1: box.top, - x2: box.right, - y2: box.bottom, - index: i, - x1New: undefined, - x2New: undefined - }; - }); - expandBoundsLTR(width, bounds); - const expanded = new Array(boxes.length); - - for (const b of bounds) { - const i = b.index; - expanded[i] = { - left: b.x1New, - top: 0, - right: b.x2New, - bottom: 0 - }; - } - - boxes.map(function (box, i) { - const e = expanded[i], - b = bounds[i]; - b.x1 = box.top; - b.y1 = width - e.right; - b.x2 = box.bottom; - b.y2 = width - e.left; - b.index = i; - b.x1New = undefined; - b.x2New = undefined; - }); - expandBoundsLTR(height, bounds); - - for (const b of bounds) { - const i = b.index; - expanded[i].top = b.x1New; - expanded[i].bottom = b.x2New; - } - - return expanded; -} - -function expandBoundsLTR(width, bounds) { - bounds.sort(function (a, b) { - return a.x1 - b.x1 || a.index - b.index; - }); - const fakeBoundary = { - x1: -Infinity, - y1: -Infinity, - x2: 0, - y2: Infinity, - index: -1, - x1New: 0, - x2New: 0 - }; - const horizon = [{ - start: -Infinity, - end: Infinity, - boundary: fakeBoundary - }]; - - for (const boundary of bounds) { - let i = 0; - - while (i < horizon.length && horizon[i].end <= boundary.y1) { - i++; - } - - let j = horizon.length - 1; - - while (j >= 0 && horizon[j].start >= boundary.y2) { - j--; - } - - let horizonPart, affectedBoundary; - let q, - k, - maxXNew = -Infinity; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - let xNew; - - if (affectedBoundary.x2 > boundary.x1) { - xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; - } else if (affectedBoundary.x2New === undefined) { - xNew = (affectedBoundary.x2 + boundary.x1) / 2; - } else { - xNew = affectedBoundary.x2New; - } - - if (xNew > maxXNew) { - maxXNew = xNew; - } - } - - boundary.x1New = maxXNew; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - if (affectedBoundary.x2 > boundary.x1) { - if (affectedBoundary.index > boundary.index) { - affectedBoundary.x2New = affectedBoundary.x2; - } - } else { - affectedBoundary.x2New = maxXNew; - } - } else if (affectedBoundary.x2New > maxXNew) { - affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); - } - } - - const changedHorizon = []; - let lastBoundary = null; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; - - if (lastBoundary === useBoundary) { - changedHorizon[changedHorizon.length - 1].end = horizonPart.end; - } else { - changedHorizon.push({ - start: horizonPart.start, - end: horizonPart.end, - boundary: useBoundary - }); - lastBoundary = useBoundary; - } - } - - if (horizon[i].start < boundary.y1) { - changedHorizon[0].start = boundary.y1; - changedHorizon.unshift({ - start: horizon[i].start, - end: boundary.y1, - boundary: horizon[i].boundary - }); - } - - if (boundary.y2 < horizon[j].end) { - changedHorizon[changedHorizon.length - 1].end = boundary.y2; - changedHorizon.push({ - start: boundary.y2, - end: horizon[j].end, - boundary: horizon[j].boundary - }); - } - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New !== undefined) { - continue; - } - - let used = false; - - for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = 0; !used && k < changedHorizon.length; k++) { - used = changedHorizon[k].boundary === affectedBoundary; - } - - if (!used) { - affectedBoundary.x2New = maxXNew; - } - } - - Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); - } - - for (const horizonPart of horizon) { - const affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); - } - } -} - -class TextLayerRenderTask { - constructor({ - textContent, - textContentStream, - container, - viewport, - textDivs, - textContentItemsStr, - enhanceTextSelection - }) { - this._textContent = textContent; - this._textContentStream = textContentStream; - this._container = container; - this._document = container.ownerDocument; - this._viewport = viewport; - this._textDivs = textDivs || []; - this._textContentItemsStr = textContentItemsStr || []; - this._enhanceTextSelection = !!enhanceTextSelection; - this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; - this._reader = null; - this._layoutTextLastFontSize = null; - this._layoutTextLastFontFamily = null; - this._layoutTextCtx = null; - this._textDivProperties = new WeakMap(); - this._renderingDone = false; - this._canceled = false; - this._capability = (0, _util.createPromiseCapability)(); - this._renderTimer = null; - this._bounds = []; - - this._capability.promise.finally(() => { - if (this._layoutTextCtx) { - this._layoutTextCtx.canvas.width = 0; - this._layoutTextCtx.canvas.height = 0; - this._layoutTextCtx = null; - } - }).catch(() => {}); - } - - get promise() { - return this._capability.promise; - } - - cancel() { - this._canceled = true; - - if (this._reader) { - this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")); - - this._reader = null; - } - - if (this._renderTimer !== null) { - clearTimeout(this._renderTimer); - this._renderTimer = null; - } - - this._capability.reject(new Error("TextLayer task cancelled.")); - } - - _processItems(items, styleCache) { - for (let i = 0, len = items.length; i < len; i++) { - if (items[i].str === undefined) { - if (items[i].type === "beginMarkedContentProps" || items[i].type === "beginMarkedContent") { - const parent = this._container; - this._container = document.createElement("span"); - - this._container.classList.add("markedContent"); - - if (items[i].id !== null) { - this._container.setAttribute("id", `${items[i].id}`); - } - - parent.appendChild(this._container); - } else if (items[i].type === "endMarkedContent") { - this._container = this._container.parentNode; - } - - continue; - } - - this._textContentItemsStr.push(items[i].str); - - appendText(this, items[i], styleCache, this._layoutTextCtx); - } - } - - _layoutText(textDiv) { - const textDivProperties = this._textDivProperties.get(textDiv); - - let transform = ""; - - if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) { - const { - fontSize, - fontFamily - } = textDiv.style; - - if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { - this._layoutTextCtx.font = `${fontSize} ${fontFamily}`; - this._layoutTextLastFontSize = fontSize; - this._layoutTextLastFontFamily = fontFamily; - } - - const { - width - } = this._layoutTextCtx.measureText(textDiv.textContent); - - if (width > 0) { - textDivProperties.scale = textDivProperties.canvasWidth / width; - transform = `scaleX(${textDivProperties.scale})`; - } - } - - if (textDivProperties.angle !== 0) { - transform = `rotate(${textDivProperties.angle}deg) ${transform}`; - } - - if (transform.length > 0) { - if (this._enhanceTextSelection) { - textDivProperties.originalTransform = transform; - } - - textDiv.style.transform = transform; - } - - if (textDivProperties.hasText) { - this._container.appendChild(textDiv); - } - - if (textDivProperties.hasEOL) { - const br = document.createElement("br"); - br.setAttribute("role", "presentation"); - - this._container.appendChild(br); - } - } - - _render(timeout = 0) { - const capability = (0, _util.createPromiseCapability)(); - let styleCache = Object.create(null); - - const canvas = this._document.createElement("canvas"); - - canvas.height = canvas.width = DEFAULT_FONT_SIZE; - canvas.mozOpaque = true; - this._layoutTextCtx = canvas.getContext("2d", { - alpha: false - }); - - if (this._textContent) { - const textItems = this._textContent.items; - const textStyles = this._textContent.styles; - - this._processItems(textItems, textStyles); - - capability.resolve(); - } else if (this._textContentStream) { - const pump = () => { - this._reader.read().then(({ - value, - done - }) => { - if (done) { - capability.resolve(); - return; - } - - Object.assign(styleCache, value.styles); - - this._processItems(value.items, styleCache); - - pump(); - }, capability.reject); - }; - - this._reader = this._textContentStream.getReader(); - pump(); - } else { - throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified."); - } - - capability.promise.then(() => { - styleCache = null; - - if (!timeout) { - render(this); - } else { - this._renderTimer = setTimeout(() => { - render(this); - this._renderTimer = null; - }, timeout); - } - }, this._capability.reject); - } - - expandTextDivs(expandDivs = false) { - if (!this._enhanceTextSelection || !this._renderingDone) { - return; - } - - if (this._bounds !== null) { - expand(this); - this._bounds = null; - } - - const transformBuf = [], - paddingBuf = []; - - for (let i = 0, ii = this._textDivs.length; i < ii; i++) { - const div = this._textDivs[i]; - - const divProps = this._textDivProperties.get(div); - - if (!divProps.hasText) { - continue; - } - - if (expandDivs) { - transformBuf.length = 0; - paddingBuf.length = 0; - - if (divProps.originalTransform) { - transformBuf.push(divProps.originalTransform); - } - - if (divProps.paddingTop > 0) { - paddingBuf.push(`${divProps.paddingTop}px`); - transformBuf.push(`translateY(${-divProps.paddingTop}px)`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingRight > 0) { - paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingBottom > 0) { - paddingBuf.push(`${divProps.paddingBottom}px`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingLeft > 0) { - paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`); - transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`); - } else { - paddingBuf.push(0); - } - - div.style.padding = paddingBuf.join(" "); - - if (transformBuf.length) { - div.style.transform = transformBuf.join(" "); - } - } else { - div.style.padding = null; - div.style.transform = divProps.originalTransform; - } - } - } - -} - -function renderTextLayer(renderParameters) { - const task = new TextLayerRenderTask({ - textContent: renderParameters.textContent, - textContentStream: renderParameters.textContentStream, - container: renderParameters.container, - viewport: renderParameters.viewport, - textDivs: renderParameters.textDivs, - textContentItemsStr: renderParameters.textContentItemsStr, - enhanceTextSelection: renderParameters.enhanceTextSelection - }); - - task._render(renderParameters.timeout); - - return task; -} - -/***/ }), -/* 20 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SVGGraphics = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -var _is_node = __w_pdfjs_require__(4); - -let SVGGraphics = class { - constructor() { - (0, _util.unreachable)("Not implemented: SVGGraphics"); - } - -}; -exports.SVGGraphics = SVGGraphics; -{ - const SVG_DEFAULTS = { - fontStyle: "normal", - fontWeight: "normal", - fillColor: "#000000" - }; - const XML_NS = "http://www.w3.org/XML/1998/namespace"; - const XLINK_NS = "http://www.w3.org/1999/xlink"; - const LINE_CAP_STYLES = ["butt", "round", "square"]; - const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; - - const convertImgDataToPng = function () { - const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const CHUNK_WRAPPER_SIZE = 12; - const crcTable = new Int32Array(256); - - for (let i = 0; i < 256; i++) { - let c = i; - - for (let h = 0; h < 8; h++) { - if (c & 1) { - c = 0xedb88320 ^ c >> 1 & 0x7fffffff; - } else { - c = c >> 1 & 0x7fffffff; - } - } - - crcTable[i] = c; - } - - function crc32(data, start, end) { - let crc = -1; - - for (let i = start; i < end; i++) { - const a = (crc ^ data[i]) & 0xff; - const b = crcTable[a]; - crc = crc >>> 8 ^ b; - } - - return crc ^ -1; - } - - function writePngChunk(type, body, data, offset) { - let p = offset; - const len = body.length; - data[p] = len >> 24 & 0xff; - data[p + 1] = len >> 16 & 0xff; - data[p + 2] = len >> 8 & 0xff; - data[p + 3] = len & 0xff; - p += 4; - data[p] = type.charCodeAt(0) & 0xff; - data[p + 1] = type.charCodeAt(1) & 0xff; - data[p + 2] = type.charCodeAt(2) & 0xff; - data[p + 3] = type.charCodeAt(3) & 0xff; - p += 4; - data.set(body, p); - p += body.length; - const crc = crc32(data, offset + 4, p); - data[p] = crc >> 24 & 0xff; - data[p + 1] = crc >> 16 & 0xff; - data[p + 2] = crc >> 8 & 0xff; - data[p + 3] = crc & 0xff; - } - - function adler32(data, start, end) { - let a = 1; - let b = 0; - - for (let i = start; i < end; ++i) { - a = (a + (data[i] & 0xff)) % 65521; - b = (b + a) % 65521; - } - - return b << 16 | a; - } - - function deflateSync(literals) { - if (!_is_node.isNodeJS) { - return deflateSyncUncompressed(literals); - } - - try { - let input; - - if (parseInt(process.versions.node) >= 8) { - input = literals; - } else { - input = Buffer.from(literals); - } - - const output = require("zlib").deflateSync(input, { - level: 9 - }); - - return output instanceof Uint8Array ? output : new Uint8Array(output); - } catch (e) { - (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); - } - - return deflateSyncUncompressed(literals); - } - - function deflateSyncUncompressed(literals) { - let len = literals.length; - const maxBlockLength = 0xffff; - const deflateBlocks = Math.ceil(len / maxBlockLength); - const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); - let pi = 0; - idat[pi++] = 0x78; - idat[pi++] = 0x9c; - let pos = 0; - - while (len > maxBlockLength) { - idat[pi++] = 0x00; - idat[pi++] = 0xff; - idat[pi++] = 0xff; - idat[pi++] = 0x00; - idat[pi++] = 0x00; - idat.set(literals.subarray(pos, pos + maxBlockLength), pi); - pi += maxBlockLength; - pos += maxBlockLength; - len -= maxBlockLength; - } - - idat[pi++] = 0x01; - idat[pi++] = len & 0xff; - idat[pi++] = len >> 8 & 0xff; - idat[pi++] = ~len & 0xffff & 0xff; - idat[pi++] = (~len & 0xffff) >> 8 & 0xff; - idat.set(literals.subarray(pos), pi); - pi += literals.length - pos; - const adler = adler32(literals, 0, literals.length); - idat[pi++] = adler >> 24 & 0xff; - idat[pi++] = adler >> 16 & 0xff; - idat[pi++] = adler >> 8 & 0xff; - idat[pi++] = adler & 0xff; - return idat; - } - - function encode(imgData, kind, forceDataSchema, isMask) { - const width = imgData.width; - const height = imgData.height; - let bitDepth, colorType, lineSize; - const bytes = imgData.data; - - switch (kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - colorType = 0; - bitDepth = 1; - lineSize = width + 7 >> 3; - break; - - case _util.ImageKind.RGB_24BPP: - colorType = 2; - bitDepth = 8; - lineSize = width * 3; - break; - - case _util.ImageKind.RGBA_32BPP: - colorType = 6; - bitDepth = 8; - lineSize = width * 4; - break; - - default: - throw new Error("invalid format"); - } - - const literals = new Uint8Array((1 + lineSize) * height); - let offsetLiterals = 0, - offsetBytes = 0; - - for (let y = 0; y < height; ++y) { - literals[offsetLiterals++] = 0; - literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); - offsetBytes += lineSize; - offsetLiterals += lineSize; - } - - if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { - offsetLiterals = 0; - - for (let y = 0; y < height; y++) { - offsetLiterals++; - - for (let i = 0; i < lineSize; i++) { - literals[offsetLiterals++] ^= 0xff; - } - } - } - - const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); - const idat = deflateSync(literals); - const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; - const data = new Uint8Array(pngLength); - let offset = 0; - data.set(PNG_HEADER, offset); - offset += PNG_HEADER.length; - writePngChunk("IHDR", ihdr, data, offset); - offset += CHUNK_WRAPPER_SIZE + ihdr.length; - writePngChunk("IDATA", idat, data, offset); - offset += CHUNK_WRAPPER_SIZE + idat.length; - writePngChunk("IEND", new Uint8Array(0), data, offset); - return (0, _util.createObjectURL)(data, "image/png", forceDataSchema); - } - - return function convertImgDataToPng(imgData, forceDataSchema, isMask) { - const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; - return encode(imgData, kind, forceDataSchema, isMask); - }; - }(); - - class SVGExtraState { - constructor() { - this.fontSizeScale = 1; - this.fontWeight = SVG_DEFAULTS.fontWeight; - this.fontSize = 0; - this.textMatrix = _util.IDENTITY_MATRIX; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textMatrixScale = 1; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRise = 0; - this.fillColor = SVG_DEFAULTS.fillColor; - this.strokeColor = "#000000"; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.lineJoin = ""; - this.lineCap = ""; - this.miterLimit = 0; - this.dashArray = []; - this.dashPhase = 0; - this.dependencies = []; - this.activeClipUrl = null; - this.clipGroup = null; - this.maskId = ""; - } - - clone() { - return Object.create(this); - } - - setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - - } - - function opListToTree(opList) { - let opTree = []; - const tmp = []; - - for (const opListElement of opList) { - if (opListElement.fn === "save") { - opTree.push({ - fnId: 92, - fn: "group", - items: [] - }); - tmp.push(opTree); - opTree = opTree[opTree.length - 1].items; - continue; - } - - if (opListElement.fn === "restore") { - opTree = tmp.pop(); - } else { - opTree.push(opListElement); - } - } - - return opTree; - } - - function pf(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - - const s = value.toFixed(10); - let i = s.length - 1; - - if (s[i] !== "0") { - return s; - } - - do { - i--; - } while (s[i] === "0"); - - return s.substring(0, s[i] === "." ? i : i + 1); - } - - function pm(m) { - if (m[4] === 0 && m[5] === 0) { - if (m[1] === 0 && m[2] === 0) { - if (m[0] === 1 && m[3] === 1) { - return ""; - } - - return `scale(${pf(m[0])} ${pf(m[3])})`; - } - - if (m[0] === m[3] && m[1] === -m[2]) { - const a = Math.acos(m[0]) * 180 / Math.PI; - return `rotate(${pf(a)})`; - } - } else { - if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { - return `translate(${pf(m[4])} ${pf(m[5])})`; - } - } - - return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; - } - - let clipCount = 0; - let maskCount = 0; - let shadingCount = 0; - exports.SVGGraphics = SVGGraphics = class { - constructor(commonObjs, objs, forceDataSchema = false) { - this.svgFactory = new _display_utils.DOMSVGFactory(); - this.current = new SVGExtraState(); - this.transformMatrix = _util.IDENTITY_MATRIX; - this.transformStack = []; - this.extraStack = []; - this.commonObjs = commonObjs; - this.objs = objs; - this.pendingClip = null; - this.pendingEOFill = false; - this.embedFonts = false; - this.embeddedFonts = Object.create(null); - this.cssStyle = null; - this.forceDataSchema = !!forceDataSchema; - this._operatorIdMapping = []; - - for (const op in _util.OPS) { - this._operatorIdMapping[_util.OPS[op]] = op; - } - } - - save() { - this.transformStack.push(this.transformMatrix); - const old = this.current; - this.extraStack.push(old); - this.current = old.clone(); - } - - restore() { - this.transformMatrix = this.transformStack.pop(); - this.current = this.extraStack.pop(); - this.pendingClip = null; - this.tgrp = null; - } - - group(items) { - this.save(); - this.executeOpTree(items); - this.restore(); - } - - loadDependencies(operatorList) { - const fnArray = operatorList.fnArray; - const argsArray = operatorList.argsArray; - - for (let i = 0, ii = fnArray.length; i < ii; i++) { - if (fnArray[i] !== _util.OPS.dependency) { - continue; - } - - for (const obj of argsArray[i]) { - const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; - const promise = new Promise(resolve => { - objsPool.get(obj, resolve); - }); - this.current.dependencies.push(promise); - } - } - - return Promise.all(this.current.dependencies); - } - - transform(a, b, c, d, e, f) { - const transformMatrix = [a, b, c, d, e, f]; - this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); - this.tgrp = null; - } - - getSVG(operatorList, viewport) { - this.viewport = viewport; - - const svgElement = this._initialize(viewport); - - return this.loadDependencies(operatorList).then(() => { - this.transformMatrix = _util.IDENTITY_MATRIX; - this.executeOpTree(this.convertOpList(operatorList)); - return svgElement; - }); - } - - convertOpList(operatorList) { - const operatorIdMapping = this._operatorIdMapping; - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - const opList = []; - - for (let i = 0, ii = fnArray.length; i < ii; i++) { - const fnId = fnArray[i]; - opList.push({ - fnId, - fn: operatorIdMapping[fnId], - args: argsArray[i] - }); - } - - return opListToTree(opList); - } - - executeOpTree(opTree) { - for (const opTreeElement of opTree) { - const fn = opTreeElement.fn; - const fnId = opTreeElement.fnId; - const args = opTreeElement.args; - - switch (fnId | 0) { - case _util.OPS.beginText: - this.beginText(); - break; - - case _util.OPS.dependency: - break; - - case _util.OPS.setLeading: - this.setLeading(args); - break; - - case _util.OPS.setLeadingMoveText: - this.setLeadingMoveText(args[0], args[1]); - break; - - case _util.OPS.setFont: - this.setFont(args); - break; - - case _util.OPS.showText: - this.showText(args[0]); - break; - - case _util.OPS.showSpacedText: - this.showText(args[0]); - break; - - case _util.OPS.endText: - this.endText(); - break; - - case _util.OPS.moveText: - this.moveText(args[0], args[1]); - break; - - case _util.OPS.setCharSpacing: - this.setCharSpacing(args[0]); - break; - - case _util.OPS.setWordSpacing: - this.setWordSpacing(args[0]); - break; - - case _util.OPS.setHScale: - this.setHScale(args[0]); - break; - - case _util.OPS.setTextMatrix: - this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.setTextRise: - this.setTextRise(args[0]); - break; - - case _util.OPS.setTextRenderingMode: - this.setTextRenderingMode(args[0]); - break; - - case _util.OPS.setLineWidth: - this.setLineWidth(args[0]); - break; - - case _util.OPS.setLineJoin: - this.setLineJoin(args[0]); - break; - - case _util.OPS.setLineCap: - this.setLineCap(args[0]); - break; - - case _util.OPS.setMiterLimit: - this.setMiterLimit(args[0]); - break; - - case _util.OPS.setFillRGBColor: - this.setFillRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setStrokeRGBColor: - this.setStrokeRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setStrokeColorN: - this.setStrokeColorN(args); - break; - - case _util.OPS.setFillColorN: - this.setFillColorN(args); - break; - - case _util.OPS.shadingFill: - this.shadingFill(args[0]); - break; - - case _util.OPS.setDash: - this.setDash(args[0], args[1]); - break; - - case _util.OPS.setRenderingIntent: - this.setRenderingIntent(args[0]); - break; - - case _util.OPS.setFlatness: - this.setFlatness(args[0]); - break; - - case _util.OPS.setGState: - this.setGState(args[0]); - break; - - case _util.OPS.fill: - this.fill(); - break; - - case _util.OPS.eoFill: - this.eoFill(); - break; - - case _util.OPS.stroke: - this.stroke(); - break; - - case _util.OPS.fillStroke: - this.fillStroke(); - break; - - case _util.OPS.eoFillStroke: - this.eoFillStroke(); - break; - - case _util.OPS.clip: - this.clip("nonzero"); - break; - - case _util.OPS.eoClip: - this.clip("evenodd"); - break; - - case _util.OPS.paintSolidColorImageMask: - this.paintSolidColorImageMask(); - break; - - case _util.OPS.paintImageXObject: - this.paintImageXObject(args[0]); - break; - - case _util.OPS.paintInlineImageXObject: - this.paintInlineImageXObject(args[0]); - break; - - case _util.OPS.paintImageMaskXObject: - this.paintImageMaskXObject(args[0]); - break; - - case _util.OPS.paintFormXObjectBegin: - this.paintFormXObjectBegin(args[0], args[1]); - break; - - case _util.OPS.paintFormXObjectEnd: - this.paintFormXObjectEnd(); - break; - - case _util.OPS.closePath: - this.closePath(); - break; - - case _util.OPS.closeStroke: - this.closeStroke(); - break; - - case _util.OPS.closeFillStroke: - this.closeFillStroke(); - break; - - case _util.OPS.closeEOFillStroke: - this.closeEOFillStroke(); - break; - - case _util.OPS.nextLine: - this.nextLine(); - break; - - case _util.OPS.transform: - this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.constructPath: - this.constructPath(args[0], args[1]); - break; - - case _util.OPS.endPath: - this.endPath(); - break; - - case 92: - this.group(opTreeElement.items); - break; - - default: - (0, _util.warn)(`Unimplemented operator ${fn}`); - break; - } - } - } - - setWordSpacing(wordSpacing) { - this.current.wordSpacing = wordSpacing; - } - - setCharSpacing(charSpacing) { - this.current.charSpacing = charSpacing; - } - - nextLine() { - this.moveText(0, this.current.leading); - } - - setTextMatrix(a, b, c, d, e, f) { - const current = this.current; - current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; - current.textMatrixScale = Math.hypot(a, b); - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtElement.appendChild(current.tspan); - } - - beginText() { - const current = this.current; - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.textMatrix = _util.IDENTITY_MATRIX; - current.lineMatrix = _util.IDENTITY_MATRIX; - current.textMatrixScale = 1; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtgrp = this.svgFactory.createElement("svg:g"); - current.xcoords = []; - current.ycoords = []; - } - - moveText(x, y) { - const current = this.current; - current.x = current.lineX += x; - current.y = current.lineY += y; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - - showText(glyphs) { - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - - if (fontSize === 0) { - return; - } - - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - let x = 0; - - for (const glyph of glyphs) { - if (glyph === null) { - x += fontDirection * wordSpacing; - continue; - } else if ((0, _util.isNum)(glyph)) { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - let scaledX, scaledY; - let width = glyph.width; - - if (vertical) { - let vx; - const vmetric = glyph.vmetric || defaultVMetrics; - vx = glyph.vmetric ? vmetric[1] : width * 0.5; - vx = -vx * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (glyph.isInFont || font.missingFile) { - current.xcoords.push(current.x + scaledX); - - if (vertical) { - current.ycoords.push(-current.y + scaledY); - } - - current.tspan.textContent += character; - } else {} - - let charWidth; - - if (vertical) { - charWidth = width * widthAdvanceScale - spacing * fontDirection; - } else { - charWidth = width * widthAdvanceScale + spacing * fontDirection; - } - - x += charWidth; - } - - current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); - - if (vertical) { - current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); - } else { - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - - if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { - current.tspan.setAttributeNS(null, "font-style", current.fontStyle); - } - - if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { - current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); - } - - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (current.fillColor !== SVG_DEFAULTS.fillColor) { - current.tspan.setAttributeNS(null, "fill", current.fillColor); - } - - if (current.fillAlpha < 1) { - current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); - } - } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { - current.tspan.setAttributeNS(null, "fill", "transparent"); - } else { - current.tspan.setAttributeNS(null, "fill", "none"); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - const lineWidthScale = 1 / (current.textMatrixScale || 1); - - this._setStrokeAttributes(current.tspan, lineWidthScale); - } - - let textMatrix = current.textMatrix; - - if (current.textRise !== 0) { - textMatrix = textMatrix.slice(); - textMatrix[5] += current.textRise; - } - - current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); - current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); - current.txtElement.appendChild(current.tspan); - current.txtgrp.appendChild(current.txtElement); - - this._ensureTransformGroup().appendChild(current.txtElement); - } - - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - - addFontStyle(fontObj) { - if (!fontObj.data) { - throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); - } - - if (!this.cssStyle) { - this.cssStyle = this.svgFactory.createElement("svg:style"); - this.cssStyle.setAttributeNS(null, "type", "text/css"); - this.defs.appendChild(this.cssStyle); - } - - const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); - this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; - } - - setFont(details) { - const current = this.current; - const fontObj = this.commonObjs.get(details[0]); - let size = details[1]; - current.font = fontObj; - - if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { - this.addFontStyle(fontObj); - this.embeddedFonts[fontObj.loadedName] = fontObj; - } - - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - let bold = "normal"; - - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - - const italic = fontObj.italic ? "italic" : "normal"; - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - current.fontSize = size; - current.fontFamily = fontObj.loadedName; - current.fontWeight = bold; - current.fontStyle = italic; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.xcoords = []; - current.ycoords = []; - } - - endText() { - const current = this.current; - - if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { - current.element = current.txtElement; - this.clip("nonzero"); - this.endPath(); - } - } - - setLineWidth(width) { - if (width > 0) { - this.current.lineWidth = width; - } - } - - setLineCap(style) { - this.current.lineCap = LINE_CAP_STYLES[style]; - } - - setLineJoin(style) { - this.current.lineJoin = LINE_JOIN_STYLES[style]; - } - - setMiterLimit(limit) { - this.current.miterLimit = limit; - } - - setStrokeAlpha(strokeAlpha) { - this.current.strokeAlpha = strokeAlpha; - } - - setStrokeRGBColor(r, g, b) { - this.current.strokeColor = _util.Util.makeHexColor(r, g, b); - } - - setFillAlpha(fillAlpha) { - this.current.fillAlpha = fillAlpha; - } - - setFillRGBColor(r, g, b) { - this.current.fillColor = _util.Util.makeHexColor(r, g, b); - this.current.tspan = this.svgFactory.createElement("svg:tspan"); - this.current.xcoords = []; - this.current.ycoords = []; - } - - setStrokeColorN(args) { - this.current.strokeColor = this._makeColorN_Pattern(args); - } - - setFillColorN(args) { - this.current.fillColor = this._makeColorN_Pattern(args); - } - - shadingFill(args) { - const width = this.viewport.width; - const height = this.viewport.height; - - const inv = _util.Util.inverseTransform(this.transformMatrix); - - const bl = _util.Util.applyTransform([0, 0], inv); - - const br = _util.Util.applyTransform([0, height], inv); - - const ul = _util.Util.applyTransform([width, 0], inv); - - const ur = _util.Util.applyTransform([width, height], inv); - - const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", x0); - rect.setAttributeNS(null, "y", y0); - rect.setAttributeNS(null, "width", x1 - x0); - rect.setAttributeNS(null, "height", y1 - y0); - rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); - - if (this.current.fillAlpha < 1) { - rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); - } - - this._ensureTransformGroup().appendChild(rect); - } - - _makeColorN_Pattern(args) { - if (args[0] === "TilingPattern") { - return this._makeTilingPattern(args); - } - - return this._makeShadingPattern(args); - } - - _makeTilingPattern(args) { - const color = args[1]; - const operatorList = args[2]; - const matrix = args[3] || _util.IDENTITY_MATRIX; - const [x0, y0, x1, y1] = args[4]; - const xstep = args[5]; - const ystep = args[6]; - const paintType = args[7]; - const tilingId = `shading${shadingCount++}`; - - const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); - - const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); - - const txstep = xstep * xscale; - const tystep = ystep * yscale; - const tiling = this.svgFactory.createElement("svg:pattern"); - tiling.setAttributeNS(null, "id", tilingId); - tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); - tiling.setAttributeNS(null, "width", txstep); - tiling.setAttributeNS(null, "height", tystep); - tiling.setAttributeNS(null, "x", `${tx0}`); - tiling.setAttributeNS(null, "y", `${ty0}`); - const svg = this.svg; - const transformMatrix = this.transformMatrix; - const fillColor = this.current.fillColor; - const strokeColor = this.current.strokeColor; - const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); - this.svg = bbox; - this.transformMatrix = matrix; - - if (paintType === 2) { - const cssColor = _util.Util.makeHexColor(...color); - - this.current.fillColor = cssColor; - this.current.strokeColor = cssColor; - } - - this.executeOpTree(this.convertOpList(operatorList)); - this.svg = svg; - this.transformMatrix = transformMatrix; - this.current.fillColor = fillColor; - this.current.strokeColor = strokeColor; - tiling.appendChild(bbox.childNodes[0]); - this.defs.appendChild(tiling); - return `url(#${tilingId})`; - } - - _makeShadingPattern(args) { - switch (args[0]) { - case "RadialAxial": - const shadingId = `shading${shadingCount++}`; - const colorStops = args[3]; - let gradient; - - switch (args[1]) { - case "axial": - const point0 = args[4]; - const point1 = args[5]; - gradient = this.svgFactory.createElement("svg:linearGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "x1", point0[0]); - gradient.setAttributeNS(null, "y1", point0[1]); - gradient.setAttributeNS(null, "x2", point1[0]); - gradient.setAttributeNS(null, "y2", point1[1]); - break; - - case "radial": - const focalPoint = args[4]; - const circlePoint = args[5]; - const focalRadius = args[6]; - const circleRadius = args[7]; - gradient = this.svgFactory.createElement("svg:radialGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "cx", circlePoint[0]); - gradient.setAttributeNS(null, "cy", circlePoint[1]); - gradient.setAttributeNS(null, "r", circleRadius); - gradient.setAttributeNS(null, "fx", focalPoint[0]); - gradient.setAttributeNS(null, "fy", focalPoint[1]); - gradient.setAttributeNS(null, "fr", focalRadius); - break; - - default: - throw new Error(`Unknown RadialAxial type: ${args[1]}`); - } - - for (const colorStop of colorStops) { - const stop = this.svgFactory.createElement("svg:stop"); - stop.setAttributeNS(null, "offset", colorStop[0]); - stop.setAttributeNS(null, "stop-color", colorStop[1]); - gradient.appendChild(stop); - } - - this.defs.appendChild(gradient); - return `url(#${shadingId})`; - - case "Mesh": - (0, _util.warn)("Unimplemented pattern Mesh"); - return null; - - case "Dummy": - return "hotpink"; - - default: - throw new Error(`Unknown IR type: ${args[0]}`); - } - } - - setDash(dashArray, dashPhase) { - this.current.dashArray = dashArray; - this.current.dashPhase = dashPhase; - } - - constructPath(ops, args) { - const current = this.current; - let x = current.x, - y = current.y; - let d = []; - let j = 0; - - for (const op of ops) { - switch (op | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - d.push("M", pf(x), pf(y)); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - d.push("L", pf(x), pf(y)); - break; - - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); - j += 6; - break; - - case _util.OPS.curveTo2: - d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); - j += 4; - break; - - case _util.OPS.closePath: - d.push("Z"); - break; - } - } - - d = d.join(" "); - - if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { - d = current.path.getAttributeNS(null, "d") + d; - } else { - current.path = this.svgFactory.createElement("svg:path"); - - this._ensureTransformGroup().appendChild(current.path); - } - - current.path.setAttributeNS(null, "d", d); - current.path.setAttributeNS(null, "fill", "none"); - current.element = current.path; - current.setCurrentPoint(x, y); - } - - endPath() { - const current = this.current; - current.path = null; - - if (!this.pendingClip) { - return; - } - - if (!current.element) { - this.pendingClip = null; - return; - } - - const clipId = `clippath${clipCount++}`; - const clipPath = this.svgFactory.createElement("svg:clipPath"); - clipPath.setAttributeNS(null, "id", clipId); - clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); - const clipElement = current.element.cloneNode(true); - - if (this.pendingClip === "evenodd") { - clipElement.setAttributeNS(null, "clip-rule", "evenodd"); - } else { - clipElement.setAttributeNS(null, "clip-rule", "nonzero"); - } - - this.pendingClip = null; - clipPath.appendChild(clipElement); - this.defs.appendChild(clipPath); - - if (current.activeClipUrl) { - current.clipGroup = null; - - for (const prev of this.extraStack) { - prev.clipGroup = null; - } - - clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); - } - - current.activeClipUrl = `url(#${clipId})`; - this.tgrp = null; - } - - clip(type) { - this.pendingClip = type; - } - - closePath() { - const current = this.current; - - if (current.path) { - const d = `${current.path.getAttributeNS(null, "d")}Z`; - current.path.setAttributeNS(null, "d", d); - } - } - - setLeading(leading) { - this.current.leading = -leading; - } - - setTextRise(textRise) { - this.current.textRise = textRise; - } - - setTextRenderingMode(textRenderingMode) { - this.current.textRenderingMode = textRenderingMode; - } - - setHScale(scale) { - this.current.textHScale = scale / 100; - } - - setRenderingIntent(intent) {} - - setFlatness(flatness) {} - - setGState(states) { - for (const [key, value] of states) { - switch (key) { - case "LW": - this.setLineWidth(value); - break; - - case "LC": - this.setLineCap(value); - break; - - case "LJ": - this.setLineJoin(value); - break; - - case "ML": - this.setMiterLimit(value); - break; - - case "D": - this.setDash(value[0], value[1]); - break; - - case "RI": - this.setRenderingIntent(value); - break; - - case "FL": - this.setFlatness(value); - break; - - case "Font": - this.setFont(value); - break; - - case "CA": - this.setStrokeAlpha(value); - break; - - case "ca": - this.setFillAlpha(value); - break; - - default: - (0, _util.warn)(`Unimplemented graphic state operator ${key}`); - break; - } - } - } - - fill() { - const current = this.current; - - if (current.element) { - current.element.setAttributeNS(null, "fill", current.fillColor); - current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); - this.endPath(); - } - } - - stroke() { - const current = this.current; - - if (current.element) { - this._setStrokeAttributes(current.element); - - current.element.setAttributeNS(null, "fill", "none"); - this.endPath(); - } - } - - _setStrokeAttributes(element, lineWidthScale = 1) { - const current = this.current; - let dashArray = current.dashArray; - - if (lineWidthScale !== 1 && dashArray.length > 0) { - dashArray = dashArray.map(function (value) { - return lineWidthScale * value; - }); - } - - element.setAttributeNS(null, "stroke", current.strokeColor); - element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); - element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); - element.setAttributeNS(null, "stroke-linecap", current.lineCap); - element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); - element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); - element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); - element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); - } - - eoFill() { - if (this.current.element) { - this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); - } - - this.fill(); - } - - fillStroke() { - this.stroke(); - this.fill(); - } - - eoFillStroke() { - if (this.current.element) { - this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); - } - - this.fillStroke(); - } - - closeStroke() { - this.closePath(); - this.stroke(); - } - - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - - closeEOFillStroke() { - this.closePath(); - this.eoFillStroke(); - } - - paintSolidColorImageMask() { - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", "1px"); - rect.setAttributeNS(null, "height", "1px"); - rect.setAttributeNS(null, "fill", this.current.fillColor); - - this._ensureTransformGroup().appendChild(rect); - } - - paintImageXObject(objId) { - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); - return; - } - - this.paintInlineImageXObject(imgData); - } - - paintInlineImageXObject(imgData, mask) { - const width = imgData.width; - const height = imgData.height; - const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", "0"); - cliprect.setAttributeNS(null, "y", "0"); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - const imgEl = this.svgFactory.createElement("svg:image"); - imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); - imgEl.setAttributeNS(null, "x", "0"); - imgEl.setAttributeNS(null, "y", pf(-height)); - imgEl.setAttributeNS(null, "width", pf(width) + "px"); - imgEl.setAttributeNS(null, "height", pf(height) + "px"); - imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); - - if (mask) { - mask.appendChild(imgEl); - } else { - this._ensureTransformGroup().appendChild(imgEl); - } - } - - paintImageMaskXObject(imgData) { - const current = this.current; - const width = imgData.width; - const height = imgData.height; - const fillColor = current.fillColor; - current.maskId = `mask${maskCount++}`; - const mask = this.svgFactory.createElement("svg:mask"); - mask.setAttributeNS(null, "id", current.maskId); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", pf(width)); - rect.setAttributeNS(null, "height", pf(height)); - rect.setAttributeNS(null, "fill", fillColor); - rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); - this.defs.appendChild(mask); - - this._ensureTransformGroup().appendChild(rect); - - this.paintInlineImageXObject(imgData, mask); - } - - paintFormXObjectBegin(matrix, bbox) { - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); - } - - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", bbox[0]); - cliprect.setAttributeNS(null, "y", bbox[1]); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - this.endPath(); - } - } - - paintFormXObjectEnd() {} - - _initialize(viewport) { - const svg = this.svgFactory.create(viewport.width, viewport.height); - const definitions = this.svgFactory.createElement("svg:defs"); - svg.appendChild(definitions); - this.defs = definitions; - const rootGroup = this.svgFactory.createElement("svg:g"); - rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); - svg.appendChild(rootGroup); - this.svg = rootGroup; - return svg; - } - - _ensureClipGroup() { - if (!this.current.clipGroup) { - const clipGroup = this.svgFactory.createElement("svg:g"); - clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); - this.svg.appendChild(clipGroup); - this.current.clipGroup = clipGroup; - } - - return this.current.clipGroup; - } - - _ensureTransformGroup() { - if (!this.tgrp) { - this.tgrp = this.svgFactory.createElement("svg:g"); - this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); - - if (this.current.activeClipUrl) { - this._ensureClipGroup().appendChild(this.tgrp); - } else { - this.svg.appendChild(this.tgrp); - } - } - - return this.tgrp; - } - - }; -} - -/***/ }), -/* 21 */ +/* 199 */ /***/ ((__unused_webpack_module, exports) => { +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NullL10n = void 0; +exports.getL10nFallback = getL10nFallback; +const DEFAULT_L10N_STRINGS = { + of_pages: "of {{pagesCount}}", + page_of_pages: "({{pageNumber}} of {{pagesCount}})", + document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)", + document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)", + document_properties_date_string: "{{date}}, {{time}}", + document_properties_page_size_unit_inches: "in", + document_properties_page_size_unit_millimeters: "mm", + document_properties_page_size_orientation_portrait: "portrait", + document_properties_page_size_orientation_landscape: "landscape", + document_properties_page_size_name_a3: "A3", + document_properties_page_size_name_a4: "A4", + document_properties_page_size_name_letter: "Letter", + document_properties_page_size_name_legal: "Legal", + document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})", + document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})", + document_properties_linearized_yes: "Yes", + document_properties_linearized_no: "No", + additional_layers: "Additional Layers", + page_landmark: "Page {{page}}", + thumb_page_title: "Page {{page}}", + thumb_page_canvas: "Thumbnail of Page {{page}}", + find_reached_top: "Reached top of document, continued from bottom", + find_reached_bottom: "Reached end of document, continued from top", + "find_match_count[one]": "{{current}} of {{total}} match", + "find_match_count[other]": "{{current}} of {{total}} matches", + "find_match_count_limit[one]": "More than {{limit}} match", + "find_match_count_limit[other]": "More than {{limit}} matches", + find_not_found: "Phrase not found", + page_scale_width: "Page Width", + page_scale_fit: "Page Fit", + page_scale_auto: "Automatic Zoom", + page_scale_actual: "Actual Size", + page_scale_percent: "{{scale}}%", + loading_error: "An error occurred while loading the PDF.", + invalid_file_error: "Invalid or corrupted PDF file.", + missing_file_error: "Missing PDF file.", + unexpected_response_error: "Unexpected server response.", + rendering_error: "An error occurred while rendering the page.", + annotation_date_string: "{{date}}, {{time}}", + printing_not_supported: "Warning: Printing is not fully supported by this browser.", + printing_not_ready: "Warning: The PDF is not fully loaded for printing.", + web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.", + free_text2_default_content: "Start typing…", + editor_free_text2_aria_label: "Text Editor", + editor_ink2_aria_label: "Draw Editor", + editor_ink_canvas_aria_label: "User-created image" +}; +{ + DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%"; +} +function getL10nFallback(key, args) { + switch (key) { + case "find_match_count": + key = `find_match_count[${args.total === 1 ? "one" : "other"}]`; + break; + case "find_match_count_limit": + key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`; + break; + } + return DEFAULT_L10N_STRINGS[key] || ""; +} +function formatL10nValue(text, args) { + if (!args) { + return text; + } + return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => { + return name in args ? args[name] : "{{" + name + "}}"; + }); +} +const NullL10n = { + async getLanguage() { + return "en-us"; + }, + async getDirection() { + return "ltr"; + }, + async get(key) { + let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getL10nFallback(key, args); + return formatL10nValue(fallback, args); + }, + async translate(element) {} +}; +exports.NullL10n = NullL10n; + +/***/ }), +/* 200 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XfaLayer = void 0; - +__w_pdfjs_require__(89); +var _xfa_text = __w_pdfjs_require__(193); class XfaLayer { static setupStorage(html, id, element, storage, intent) { const storedData = storage.getValue(id, { value: null }); - switch (element.name) { case "textarea": if (storedData.value !== null) { html.textContent = storedData.value; } - if (intent === "print") { break; } - html.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); }); break; - case "input": if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { if (storedData.value === element.attributes.xfaOn) { html.setAttribute("checked", true); + } else if (storedData.value === element.attributes.xfaOff) { + html.removeAttribute("checked"); } - if (intent === "print") { break; } - html.addEventListener("change", event => { storage.setValue(id, { - value: event.target.getAttribute("xfaOn") + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") }); }); } else { if (storedData.value !== null) { html.setAttribute("value", storedData.value); } - if (intent === "print") { break; } - html.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); }); } - break; - case "select": if (storedData.value !== null) { + html.setAttribute("value", storedData.value); for (const option of element.children) { if (option.attributes.value === storedData.value) { option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; } } } - html.addEventListener("input", event => { const options = event.target.options; const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; @@ -12850,1691 +20681,1254 @@ class XfaLayer { break; } } - - static setAttributes(html, element, storage, intent) { + static setAttributes(_ref) { + let { + html, + element, + storage = null, + intent, + linkService + } = _ref; const { attributes } = element; - + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; if (attributes.type === "radio") { attributes.name = `${attributes.name}-${intent}`; } - for (const [key, value] of Object.entries(attributes)) { - if (value === null || value === undefined || key === "dataId") { + if (value === null || value === undefined) { continue; } - - if (key !== "style") { - if (key === "textContent") { + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": html.textContent = value; - } else if (key === "class") { - html.setAttribute(key, value.join(" ")); - } else { - html.setAttribute(key, value); - } - } else { - Object.assign(html.style, value); + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } } } - + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } if (storage && attributes.dataId) { this.setupStorage(html, attributes.dataId, element, storage); } } - static render(parameters) { const storage = parameters.annotationStorage; - const root = parameters.xfa; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; const intent = parameters.intent || "display"; const rootHtml = document.createElement(root.name); - if (root.attributes) { - this.setAttributes(rootHtml, root); + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); } - const stack = [[root, -1, rootHtml]]; const rootDiv = parameters.div; - rootDiv.appendChild(rootHtml); - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - rootDiv.style.transform = transform; - rootDiv.setAttribute("class", "xfaLayer xfaFont"); - + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (intent !== "richText") { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; while (stack.length > 0) { - const [parent, i, html] = stack[stack.length - 1]; - + const [parent, i, html] = stack.at(-1); if (i + 1 === parent.children.length) { stack.pop(); continue; } - - const child = parent.children[++stack[stack.length - 1][1]]; - + const child = parent.children[++stack.at(-1)[1]]; if (child === null) { continue; } - const { name } = child; - if (name === "#text") { - html.appendChild(document.createTextNode(child.value)); + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); continue; } - - let childHtml; - - if (child?.attributes?.xmlns) { - childHtml = document.createElementNS(child.attributes.xmlns, name); - } else { - childHtml = document.createElement(name); - } - - html.appendChild(childHtml); - + const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); if (child.attributes) { - this.setAttributes(childHtml, child, storage, intent); + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); } - if (child.children && child.children.length > 0) { stack.push([child, -1, childHtml]); } else if (child.value) { - childHtml.appendChild(document.createTextNode(child.value)); + const node = document.createTextNode(child.value); + if (_xfa_text.XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); } } - for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { el.setAttribute("readOnly", true); } + return { + textDivs + }; } - static update(parameters) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; parameters.div.style.transform = transform; parameters.div.hidden = false; } - } - exports.XfaLayer = XfaLayer; /***/ }), -/* 22 */ +/* 201 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PDFNodeStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(23); - -; - -const fs = require("fs"); - -const http = require("http"); - -const https = require("https"); - -const url = require("url"); - -const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; - -function parseUrl(sourceUrl) { - const parsedUrl = url.parse(sourceUrl); - - if (parsedUrl.protocol === "file:" || parsedUrl.host) { - return parsedUrl; - } - - if (/^[a-z]:[/\\]/i.test(sourceUrl)) { - return url.parse(`file:///${sourceUrl}`); - } - - if (!parsedUrl.host) { - parsedUrl.protocol = "file:"; - } - - return parsedUrl; -} - -class PDFNodeStream { - constructor(source) { - this.source = source; - this.url = parseUrl(source.url); - this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; - this.isFsUrl = this.url.protocol === "file:"; - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); - this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); - return this._fullRequestReader; - } - - getRangeReader(start, end) { - if (end <= this._progressiveDataLength) { - return null; - } - - const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); - - this._rangeRequestReaders.push(rangeReader); - - return rangeReader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFNodeStream = PDFNodeStream; - -class BaseFullReader { - constructor(stream) { - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - const source = stream.source; - this._contentLength = source.length; - this._loaded = 0; - this._filename = null; - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - this._headersCapability = (0, _util.createPromiseCapability)(); - } - - get headersReady() { - return this._headersCapability.promise; - } - - get filename() { - return this._filename; - } - - get contentLength() { - return this._contentLength; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - if (this._storedError) { - throw this._storedError; - } - - const chunk = this._readableStream.read(); - - if (chunk === null) { - this._readCapability = (0, _util.createPromiseCapability)(); - return this.read(); - } - - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); - } - - const buffer = new Uint8Array(chunk).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - - _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - - _setReadableStream(readableStream) { - this._readableStream = readableStream; - readableStream.on("readable", () => { - this._readCapability.resolve(); +exports.InkEditor = void 0; +__w_pdfjs_require__(89); +__w_pdfjs_require__(2); +var _util = __w_pdfjs_require__(1); +var _editor = __w_pdfjs_require__(163); +var _annotation_layer = __w_pdfjs_require__(197); +var _tools = __w_pdfjs_require__(164); +class InkEditor extends _editor.AnnotationEditor { + #baseHeight = 0; + #baseWidth = 0; + #boundCanvasContextMenu = this.canvasContextMenu.bind(this); + #boundCanvasPointermove = this.canvasPointermove.bind(this); + #boundCanvasPointerleave = this.canvasPointerleave.bind(this); + #boundCanvasPointerup = this.canvasPointerup.bind(this); + #boundCanvasPointerdown = this.canvasPointerdown.bind(this); + #currentPath2D = new Path2D(); + #disableEditing = false; + #hasSomethingToDraw = false; + #isCanvasInitialized = false; + #observer = null; + #realWidth = 0; + #realHeight = 0; + #requestFrameCallback = null; + static _defaultColor = null; + static _defaultOpacity = 1; + static _defaultThickness = 1; + static _l10nPromise; + static _type = "ink"; + constructor(params) { + super({ + ...params, + name: "inkEditor" }); - readableStream.on("end", () => { - readableStream.destroy(); - this._done = true; - - this._readCapability.resolve(); - }); - readableStream.on("error", reason => { - this._error(reason); - }); - - if (!this._isStreamingSupported && this._isRangeSupported) { - this._error(new _util.AbortException("streaming is disabled")); - } - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } + this.color = params.color || null; + this.thickness = params.thickness || null; + this.opacity = params.opacity || null; + this.paths = []; + this.bezierPath2D = []; + this.allRawPaths = []; + this.currentPath = []; + this.scaleFactor = 1; + this.translationX = this.translationY = 0; + this.x = 0; + this.y = 0; + this._willKeepAspectRatio = true; } - -} - -class BaseRangeReader { - constructor(stream) { - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - this._loaded = 0; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - const source = stream.source; - this._isStreamingSupported = !source.disableStream; + static initialize(l10n) { + this._l10nPromise = new Map(["editor_ink_canvas_aria_label", "editor_ink2_aria_label"].map(str => [str, l10n.get(str)])); } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - if (this._storedError) { - throw this._storedError; - } - - const chunk = this._readableStream.read(); - - if (chunk === null) { - this._readCapability = (0, _util.createPromiseCapability)(); - return this.read(); - } - - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded - }); - } - - const buffer = new Uint8Array(chunk).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - - _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - - _setReadableStream(readableStream) { - this._readableStream = readableStream; - readableStream.on("readable", () => { - this._readCapability.resolve(); - }); - readableStream.on("end", () => { - readableStream.destroy(); - this._done = true; - - this._readCapability.resolve(); - }); - readableStream.on("error", reason => { - this._error(reason); - }); - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } - } - -} - -function createRequestOptions(parsedUrl, headers) { - return { - protocol: parsedUrl.protocol, - auth: parsedUrl.auth, - host: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.path, - method: "GET", - headers - }; -} - -class PDFNodeStreamFullReader extends BaseFullReader { - constructor(stream) { - super(stream); - - const handleResponse = response => { - if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); - this._storedError = error; - - this._headersCapability.reject(error); - - return; - } - - this._headersCapability.resolve(); - - this._setReadableStream(response); - - const getResponseHeader = name => { - return this._readableStream.headers[name.toLowerCase()]; - }; - - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: stream.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - this._isRangeSupported = allowRangeRequests; - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - }; - - this._request = null; - - if (this._url.protocol === "http:") { - this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); - } else { - this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); - } - - this._request.on("error", reason => { - this._storedError = reason; - - this._headersCapability.reject(reason); - }); - - this._request.end(); - } - -} - -class PDFNodeStreamRangeReader extends BaseRangeReader { - constructor(stream, start, end) { - super(stream); - this._httpHeaders = {}; - - for (const property in stream.httpHeaders) { - const value = stream.httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - this._httpHeaders[property] = value; - } - - this._httpHeaders.Range = `bytes=${start}-${end - 1}`; - - const handleResponse = response => { - if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); - this._storedError = error; - return; - } - - this._setReadableStream(response); - }; - - this._request = null; - - if (this._url.protocol === "http:") { - this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); - } else { - this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); - } - - this._request.on("error", reason => { - this._storedError = reason; - }); - - this._request.end(); - } - -} - -class PDFNodeStreamFsFullReader extends BaseFullReader { - constructor(stream) { - super(stream); - let path = decodeURIComponent(this._url.path); - - if (fileUriRegex.test(this._url.href)) { - path = path.replace(/^\//, ""); - } - - fs.lstat(path, (error, stat) => { - if (error) { - if (error.code === "ENOENT") { - error = new _util.MissingPDFException(`Missing PDF "${path}".`); - } - - this._storedError = error; - - this._headersCapability.reject(error); - - return; - } - - this._contentLength = stat.size; - - this._setReadableStream(fs.createReadStream(path)); - - this._headersCapability.resolve(); - }); - } - -} - -class PDFNodeStreamFsRangeReader extends BaseRangeReader { - constructor(stream, start, end) { - super(stream); - let path = decodeURIComponent(this._url.path); - - if (fileUriRegex.test(this._url.href)) { - path = path.replace(/^\//, ""); - } - - this._setReadableStream(fs.createReadStream(path, { - start, - end: end - 1 - })); - } - -} - -/***/ }), -/* 23 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createResponseStatusError = createResponseStatusError; -exports.extractFilenameFromHeader = extractFilenameFromHeader; -exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; -exports.validateResponseStatus = validateResponseStatus; - -var _util = __w_pdfjs_require__(2); - -var _content_disposition = __w_pdfjs_require__(24); - -var _display_utils = __w_pdfjs_require__(1); - -function validateRangeRequestCapabilities({ - getResponseHeader, - isHttp, - rangeChunkSize, - disableRange -}) { - (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); - const returnValues = { - allowRangeRequests: false, - suggestedLength: undefined - }; - const length = parseInt(getResponseHeader("Content-Length"), 10); - - if (!Number.isInteger(length)) { - return returnValues; - } - - returnValues.suggestedLength = length; - - if (length <= 2 * rangeChunkSize) { - return returnValues; - } - - if (disableRange || !isHttp) { - return returnValues; - } - - if (getResponseHeader("Accept-Ranges") !== "bytes") { - return returnValues; - } - - const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; - - if (contentEncoding !== "identity") { - return returnValues; - } - - returnValues.allowRangeRequests = true; - return returnValues; -} - -function extractFilenameFromHeader(getResponseHeader) { - const contentDisposition = getResponseHeader("Content-Disposition"); - - if (contentDisposition) { - let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); - - if (filename.includes("%")) { - try { - filename = decodeURIComponent(filename); - } catch (ex) {} - } - - if ((0, _display_utils.isPdfFile)(filename)) { - return filename; - } - } - - return null; -} - -function createResponseStatusError(status, url) { - if (status === 404 || status === 0 && url.startsWith("file:")) { - return new _util.MissingPDFException('Missing PDF "' + url + '".'); - } - - return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); -} - -function validateResponseStatus(status) { - return status === 200 || status === 206; -} - -/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; - -var _util = __w_pdfjs_require__(2); - -function getFilenameFromContentDispositionHeader(contentDisposition) { - let needsEncodingFixup = true; - let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - let filename = rfc2616unquote(tmp); - filename = unescape(filename); - filename = rfc5987decode(filename); - filename = rfc2047decode(filename); - return fixupEncoding(filename); - } - - tmp = rfc2231getparam(contentDisposition); - - if (tmp) { - const filename = rfc2047decode(tmp); - return fixupEncoding(filename); - } - - tmp = toParamRegExp("filename", "i").exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - let filename = rfc2616unquote(tmp); - filename = rfc2047decode(filename); - return fixupEncoding(filename); - } - - function toParamRegExp(attributePattern, flags) { - return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); - } - - function textdecode(encoding, value) { - if (encoding) { - if (!/^[\x00-\xFF]+$/.test(value)) { - return value; - } - - try { - const decoder = new TextDecoder(encoding, { - fatal: true - }); - const buffer = (0, _util.stringToBytes)(value); - value = decoder.decode(buffer); - needsEncodingFixup = false; - } catch (e) { - if (/^utf-?8$/i.test(encoding)) { - try { - value = decodeURIComponent(escape(value)); - needsEncodingFixup = false; - } catch (err) {} - } - } - } - - return value; - } - - function fixupEncoding(value) { - if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { - value = textdecode("utf-8", value); - - if (needsEncodingFixup) { - value = textdecode("iso-8859-1", value); - } - } - - return value; - } - - function rfc2231getparam(contentDispositionStr) { - const matches = []; - let match; - const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); - - while ((match = iter.exec(contentDispositionStr)) !== null) { - let [, n, quot, part] = match; - n = parseInt(n, 10); - - if (n in matches) { - if (n === 0) { - break; - } - - continue; - } - - matches[n] = [quot, part]; - } - - const parts = []; - - for (let n = 0; n < matches.length; ++n) { - if (!(n in matches)) { + static updateDefaultParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.INK_THICKNESS: + InkEditor._defaultThickness = value; + break; + case _util.AnnotationEditorParamsType.INK_COLOR: + InkEditor._defaultColor = value; + break; + case _util.AnnotationEditorParamsType.INK_OPACITY: + InkEditor._defaultOpacity = value / 100; break; - } - - let [quot, part] = matches[n]; - part = rfc2616unquote(part); - - if (quot) { - part = unescape(part); - - if (n === 0) { - part = rfc5987decode(part); - } - } - - parts.push(part); } - - return parts.join(""); } - - function rfc2616unquote(value) { - if (value.startsWith('"')) { - const parts = value.slice(1).split('\\"'); - - for (let i = 0; i < parts.length; ++i) { - const quotindex = parts[i].indexOf('"'); - - if (quotindex !== -1) { - parts[i] = parts[i].slice(0, quotindex); - parts.length = i + 1; - } - - parts[i] = parts[i].replace(/\\(.)/g, "$1"); - } - - value = parts.join('"'); + updateParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.INK_THICKNESS: + this.#updateThickness(value); + break; + case _util.AnnotationEditorParamsType.INK_COLOR: + this.#updateColor(value); + break; + case _util.AnnotationEditorParamsType.INK_OPACITY: + this.#updateOpacity(value); + break; } - - return value; } - - function rfc5987decode(extvalue) { - const encodingend = extvalue.indexOf("'"); - - if (encodingend === -1) { - return extvalue; - } - - const encoding = extvalue.slice(0, encodingend); - const langvalue = extvalue.slice(encodingend + 1); - const value = langvalue.replace(/^[^']*'/, ""); - return textdecode(encoding, value); + static get defaultPropertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(InkEditor._defaultOpacity * 100)]]; } - - function rfc2047decode(value) { - if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { - return value; - } - - return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { - if (encoding === "q" || encoding === "Q") { - text = text.replace(/_/g, " "); - text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) { - return String.fromCharCode(parseInt(hex, 16)); - }); - return textdecode(charset, text); - } - - try { - text = atob(text); - } catch (e) {} - - return textdecode(charset, text); + get propertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor], [_util.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * (this.opacity ?? InkEditor._defaultOpacity))]]; + } + #updateThickness(thickness) { + const savedThickness = this.thickness; + this.addCommands({ + cmd: () => { + this.thickness = thickness; + this.#fitToContent(); + }, + undo: () => { + this.thickness = savedThickness; + this.#fitToContent(); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true }); } - - return ""; -} - -/***/ }), -/* 25 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFNetworkStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(23); - -; -const OK_RESPONSE = 200; -const PARTIAL_CONTENT_RESPONSE = 206; - -function getArrayBuffer(xhr) { - const data = xhr.response; - - if (typeof data !== "string") { - return data; - } - - const array = (0, _util.stringToBytes)(data); - return array.buffer; -} - -class NetworkManager { - constructor(url, args) { - this.url = url; - args = args || {}; - this.isHttp = /^https?:/i.test(url); - this.httpHeaders = this.isHttp && args.httpHeaders || {}; - this.withCredentials = args.withCredentials || false; - - this.getXhr = args.getXhr || function NetworkManager_getXhr() { - return new XMLHttpRequest(); - }; - - this.currXhrId = 0; - this.pendingRequests = Object.create(null); - } - - requestRange(begin, end, listeners) { - const args = { - begin, - end - }; - - for (const prop in listeners) { - args[prop] = listeners[prop]; - } - - return this.request(args); - } - - requestFull(listeners) { - return this.request(listeners); - } - - request(args) { - const xhr = this.getXhr(); - const xhrId = this.currXhrId++; - const pendingRequest = this.pendingRequests[xhrId] = { - xhr - }; - xhr.open("GET", this.url); - xhr.withCredentials = this.withCredentials; - - for (const property in this.httpHeaders) { - const value = this.httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - xhr.setRequestHeader(property, value); - } - - if (this.isHttp && "begin" in args && "end" in args) { - xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); - pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; - } else { - pendingRequest.expectedStatus = OK_RESPONSE; - } - - xhr.responseType = "arraybuffer"; - - if (args.onError) { - xhr.onerror = function (evt) { - args.onError(xhr.status); - }; - } - - xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); - xhr.onprogress = this.onProgress.bind(this, xhrId); - pendingRequest.onHeadersReceived = args.onHeadersReceived; - pendingRequest.onDone = args.onDone; - pendingRequest.onError = args.onError; - pendingRequest.onProgress = args.onProgress; - xhr.send(null); - return xhrId; - } - - onProgress(xhrId, evt) { - const pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - if (pendingRequest.onProgress) { - pendingRequest.onProgress(evt); - } - } - - onStateChange(xhrId, evt) { - const pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - const xhr = pendingRequest.xhr; - - if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { - pendingRequest.onHeadersReceived(); - delete pendingRequest.onHeadersReceived; - } - - if (xhr.readyState !== 4) { - return; - } - - if (!(xhrId in this.pendingRequests)) { - return; - } - - delete this.pendingRequests[xhrId]; - - if (xhr.status === 0 && this.isHttp) { - if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - - return; - } - - const xhrStatus = xhr.status || OK_RESPONSE; - const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; - - if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { - if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - - return; - } - - const chunk = getArrayBuffer(xhr); - - if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { - const rangeHeader = xhr.getResponseHeader("Content-Range"); - const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); - pendingRequest.onDone({ - begin: parseInt(matches[1], 10), - chunk - }); - } else if (chunk) { - pendingRequest.onDone({ - begin: 0, - chunk - }); - } else if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - } - - getRequestXhr(xhrId) { - return this.pendingRequests[xhrId].xhr; - } - - isPendingRequest(xhrId) { - return xhrId in this.pendingRequests; - } - - abortRequest(xhrId) { - const xhr = this.pendingRequests[xhrId].xhr; - delete this.pendingRequests[xhrId]; - xhr.abort(); - } - -} - -class PDFNetworkStream { - constructor(source) { - this._source = source; - this._manager = new NetworkManager(source.url, { - httpHeaders: source.httpHeaders, - withCredentials: source.withCredentials + #updateColor(color) { + const savedColor = this.color; + this.addCommands({ + cmd: () => { + this.color = color; + this.#redraw(); + }, + undo: () => { + this.color = savedColor; + this.#redraw(); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.INK_COLOR, + overwriteIfSameType: true, + keepUndo: true }); - this._rangeChunkSize = source.rangeChunkSize; - this._fullRequestReader = null; - this._rangeRequestReaders = []; } - - _onRangeRequestReaderClosed(reader) { - const i = this._rangeRequestReaders.indexOf(reader); - - if (i >= 0) { - this._rangeRequestReaders.splice(i, 1); + #updateOpacity(opacity) { + opacity /= 100; + const savedOpacity = this.opacity; + this.addCommands({ + cmd: () => { + this.opacity = opacity; + this.#redraw(); + }, + undo: () => { + this.opacity = savedOpacity; + this.#redraw(); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.INK_OPACITY, + overwriteIfSameType: true, + keepUndo: true + }); + } + rebuild() { + super.rebuild(); + if (this.div === null) { + return; } - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); - return this._fullRequestReader; - } - - getRangeReader(begin, end) { - const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); - reader.onClosed = this._onRangeRequestReaderClosed.bind(this); - - this._rangeRequestReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); + if (!this.isAttachedToDOM) { + this.parent.add(this); + this.#setCanvasDims(); } + this.#fitToContent(); } - -} - -exports.PDFNetworkStream = PDFNetworkStream; - -class PDFNetworkStreamFullRequestReader { - constructor(manager, source) { - this._manager = manager; - const args = { - onHeadersReceived: this._onHeadersReceived.bind(this), - onDone: this._onDone.bind(this), - onError: this._onError.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._url = source.url; - this._fullRequestId = manager.requestFull(args); - this._headersReceivedCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._contentLength = source.length; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; + remove() { + if (this.canvas === null) { + return; } - - this._isStreamingSupported = false; - this._isRangeSupported = false; - this._cachedChunks = []; - this._requests = []; - this._done = false; - this._storedError = undefined; - this._filename = null; - this.onProgress = null; + if (!this.isEmpty()) { + this.commit(); + } + this.canvas.width = this.canvas.height = 0; + this.canvas.remove(); + this.canvas = null; + this.#observer.disconnect(); + this.#observer = null; + super.remove(); } - - _onHeadersReceived() { - const fullRequestXhrId = this._fullRequestId; - - const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); - - const getResponseHeader = name => { - return fullRequestXhr.getResponseHeader(name); - }; - + setParent(parent) { + if (!this.parent && parent) { + this._uiManager.removeShouldRescale(this); + } else if (this.parent && parent === null) { + this._uiManager.addShouldRescale(this); + } + super.setParent(parent); + } + onScaleChanging() { + const [parentWidth, parentHeight] = this.parentDimensions; + const width = this.width * parentWidth; + const height = this.height * parentHeight; + this.setDimensions(width, height); + } + enableEditMode() { + if (this.#disableEditing || this.canvas === null) { + return; + } + super.enableEditMode(); + this.div.draggable = false; + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + } + disableEditMode() { + if (!this.isInEditMode() || this.canvas === null) { + return; + } + super.disableEditMode(); + this.div.draggable = !this.isEmpty(); + this.div.classList.remove("editing"); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + } + onceAdded() { + this.div.draggable = !this.isEmpty(); + } + isEmpty() { + return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; + } + #getInitialBBox() { const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: this._manager.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - - if (allowRangeRequests) { - this._isRangeSupported = true; + parentRotation, + parentDimensions: [width, height] + } = this; + switch (parentRotation) { + case 90: + return [0, height, height, width]; + case 180: + return [width, height, width, height]; + case 270: + return [width, 0, height, width]; + default: + return [0, 0, width, height]; } - - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - - if (this._isRangeSupported) { - this._manager.abortRequest(fullRequestXhrId); - } - - this._headersReceivedCapability.resolve(); } - - _onDone(args) { - if (args) { - if (this._requests.length > 0) { - const requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: args.chunk, - done: false - }); - } else { - this._cachedChunks.push(args.chunk); - } + #setStroke() { + const { + ctx, + color, + opacity, + thickness, + parentScale, + scaleFactor + } = this; + ctx.lineWidth = thickness * parentScale / scaleFactor; + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.miterLimit = 10; + ctx.strokeStyle = `${color}${(0, _tools.opacityToHex)(opacity)}`; + } + #startDrawing(x, y) { + this.canvas.addEventListener("contextmenu", this.#boundCanvasContextMenu); + this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + this.isEditing = true; + if (!this.#isCanvasInitialized) { + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.thickness ||= InkEditor._defaultThickness; + this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; + this.opacity ??= InkEditor._defaultOpacity; } - - this._done = true; - - if (this._cachedChunks.length > 0) { + this.currentPath.push([x, y]); + this.#hasSomethingToDraw = false; + this.#setStroke(); + this.#requestFrameCallback = () => { + this.#drawPoints(); + if (this.#requestFrameCallback) { + window.requestAnimationFrame(this.#requestFrameCallback); + } + }; + window.requestAnimationFrame(this.#requestFrameCallback); + } + #draw(x, y) { + const [lastX, lastY] = this.currentPath.at(-1); + if (this.currentPath.length > 1 && x === lastX && y === lastY) { return; } - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); + const currentPath = this.currentPath; + let path2D = this.#currentPath2D; + currentPath.push([x, y]); + this.#hasSomethingToDraw = true; + if (currentPath.length <= 2) { + path2D.moveTo(...currentPath[0]); + path2D.lineTo(x, y); + return; } - - this._requests.length = 0; - } - - _onError(status) { - const url = this._url; - const exception = (0, _network_utils.createResponseStatusError)(status, url); - this._storedError = exception; - - this._headersReceivedCapability.reject(exception); - - for (const requestCapability of this._requests) { - requestCapability.reject(exception); + if (currentPath.length === 3) { + this.#currentPath2D = path2D = new Path2D(); + path2D.moveTo(...currentPath[0]); } - - this._requests.length = 0; - this._cachedChunks.length = 0; + this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); } - - _onProgress(data) { - if (this.onProgress) { - this.onProgress({ - loaded: data.loaded, - total: data.lengthComputable ? data.total : this._contentLength - }); + #endPath() { + if (this.currentPath.length === 0) { + return; } + const lastPoint = this.currentPath.at(-1); + this.#currentPath2D.lineTo(...lastPoint); } - - get filename() { - return this._filename; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - get contentLength() { - return this._contentLength; - } - - get headersReady() { - return this._headersReceivedCapability.promise; - } - - async read() { - if (this._storedError) { - throw this._storedError; - } - - if (this._cachedChunks.length > 0) { - const chunk = this._cachedChunks.shift(); - - return { - value: chunk, - done: false - }; - } - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; - } - - cancel(reason) { - this._done = true; - - this._headersReceivedCapability.reject(reason); - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - if (this._manager.isPendingRequest(this._fullRequestId)) { - this._manager.abortRequest(this._fullRequestId); - } - - this._fullRequestReader = null; - } - -} - -class PDFNetworkStreamRangeRequestReader { - constructor(manager, begin, end) { - this._manager = manager; - const args = { - onDone: this._onDone.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._requestId = manager.requestRange(begin, end, args); - this._requests = []; - this._queuedChunk = null; - this._done = false; - this.onProgress = null; - this.onClosed = null; - } - - _close() { - if (this.onClosed) { - this.onClosed(this); - } - } - - _onDone(data) { - const chunk = data.chunk; - - if (this._requests.length > 0) { - const requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); + #stopDrawing(x, y) { + this.#requestFrameCallback = null; + x = Math.min(Math.max(x, 0), this.canvas.width); + y = Math.min(Math.max(y, 0), this.canvas.height); + this.#draw(x, y); + this.#endPath(); + let bezier; + if (this.currentPath.length !== 1) { + bezier = this.#generateBezierPoints(); } else { - this._queuedChunk = chunk; + const xy = [x, y]; + bezier = [[xy, xy.slice(), xy.slice(), xy]]; } - - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true + const path2D = this.#currentPath2D; + const currentPath = this.currentPath; + this.currentPath = []; + this.#currentPath2D = new Path2D(); + const cmd = () => { + this.allRawPaths.push(currentPath); + this.paths.push(bezier); + this.bezierPath2D.push(path2D); + this.rebuild(); + }; + const undo = () => { + this.allRawPaths.pop(); + this.paths.pop(); + this.bezierPath2D.pop(); + if (this.paths.length === 0) { + this.remove(); + } else { + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + this.#fitToContent(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + #drawPoints() { + if (!this.#hasSomethingToDraw) { + return; + } + this.#hasSomethingToDraw = false; + const thickness = Math.ceil(this.thickness * this.parentScale); + const lastPoints = this.currentPath.slice(-3); + const x = lastPoints.map(xy => xy[0]); + const y = lastPoints.map(xy => xy[1]); + const xMin = Math.min(...x) - thickness; + const xMax = Math.max(...x) + thickness; + const yMin = Math.min(...y) - thickness; + const yMax = Math.max(...y) + thickness; + const { + ctx + } = this; + ctx.save(); + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + ctx.stroke(this.#currentPath2D); + ctx.restore(); + } + #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) { + const prevX = (x0 + x1) / 2; + const prevY = (y0 + y1) / 2; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); + } + #generateBezierPoints() { + const path = this.currentPath; + if (path.length <= 2) { + return [[path[0], path[0], path.at(-1), path.at(-1)]]; + } + const bezierPoints = []; + let i; + let [x0, y0] = path[0]; + for (i = 1; i < path.length - 2; i++) { + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]); + [x0, y0] = [x3, y3]; + } + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); + return bezierPoints; + } + #redraw() { + if (this.isEmpty()) { + this.#updateTransform(); + return; + } + this.#setStroke(); + const { + canvas, + ctx + } = this; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, canvas.width, canvas.height); + this.#updateTransform(); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + } + commit() { + if (this.#disableEditing) { + return; + } + super.commit(); + this.isEditing = false; + this.disableEditMode(); + this.setInForeground(); + this.#disableEditing = true; + this.div.classList.add("disabled"); + this.#fitToContent(true); + this.makeResizable(); + this.parent.addInkEditorIfNeeded(true); + this.parent.moveEditorInDOM(this); + this.div.focus({ + preventScroll: true + }); + } + focusin(event) { + super.focusin(event); + this.enableEditMode(); + } + canvasPointerdown(event) { + if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { + return; + } + this.setInForeground(); + event.preventDefault(); + if (event.type !== "mouse") { + this.div.focus(); + } + this.#startDrawing(event.offsetX, event.offsetY); + } + canvasContextMenu(event) { + event.preventDefault(); + } + canvasPointermove(event) { + event.preventDefault(); + this.#draw(event.offsetX, event.offsetY); + } + canvasPointerup(event) { + event.preventDefault(); + this.#endDrawing(event); + } + canvasPointerleave(event) { + this.#endDrawing(event); + } + #endDrawing(event) { + this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); + this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + setTimeout(() => { + this.canvas.removeEventListener("contextmenu", this.#boundCanvasContextMenu); + }, 10); + this.#stopDrawing(event.offsetX, event.offsetY); + this.addToAnnotationStorage(); + this.setInBackground(); + } + #createCanvas() { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.canvas.height = 0; + this.canvas.className = "inkEditorCanvas"; + InkEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg)); + this.div.append(this.canvas); + this.ctx = this.canvas.getContext("2d"); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + get isResizable() { + return !this.isEmpty() && this.#disableEditing; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + InkEditor._l10nPromise.get("editor_ink2_aria_label").then(msg => this.div?.setAttribute("aria-label", msg)); + const [x, y, w, h] = this.#getInitialBBox(); + this.setAt(x, y, 0, 0); + this.setDims(w, h); + this.#createCanvas(); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.setDims(this.width * parentWidth, this.height * parentHeight); + this.#redraw(); + this.div.classList.add("disabled"); + } else { + this.div.classList.add("editing"); + this.enableEditMode(); + } + this.#createObserver(); + return this.div; + } + #setCanvasDims() { + if (!this.#isCanvasInitialized) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.canvas.width = Math.ceil(this.width * parentWidth); + this.canvas.height = Math.ceil(this.height * parentHeight); + this.#updateTransform(); + } + setDimensions(width, height) { + const roundedWidth = Math.round(width); + const roundedHeight = Math.round(height); + if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { + return; + } + this.#realWidth = roundedWidth; + this.#realHeight = roundedHeight; + this.canvas.style.visibility = "hidden"; + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.fixAndSetPosition(); + if (this.#disableEditing) { + this.#setScaleFactor(width, height); + } + this.#setCanvasDims(); + this.#redraw(); + this.canvas.style.visibility = "visible"; + this.fixDims(); + } + #setScaleFactor(width, height) { + const padding = this.#getPadding(); + const scaleFactorW = (width - padding) / this.#baseWidth; + const scaleFactorH = (height - padding) / this.#baseHeight; + this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); + } + #updateTransform() { + const padding = this.#getPadding() / 2; + this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); + } + static #buildPath2D(bezier) { + const path2D = new Path2D(); + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i]; + if (i === 0) { + path2D.moveTo(...first); + } + path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); + } + return path2D; + } + static #toPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] += blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] + blX; + points[i + 1] = x + blY; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] += blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trX - points[i + 1]; + points[i + 1] = trY - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + static #fromPDFCoordinates(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] -= blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] - blY; + points[i + 1] = x - blX; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] -= blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trY - points[i + 1]; + points[i + 1] = trX - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; + } + #serializePaths(s, tx, ty, rect) { + const paths = []; + const padding = this.thickness / 2; + const shiftX = s * tx + padding; + const shiftY = s * ty + padding; + for (const bezier of this.paths) { + const buffer = []; + const points = []; + for (let j = 0, jj = bezier.length; j < jj; j++) { + const [first, control1, control2, second] = bezier[j]; + const p10 = s * first[0] + shiftX; + const p11 = s * first[1] + shiftY; + const p20 = s * control1[0] + shiftX; + const p21 = s * control1[1] + shiftY; + const p30 = s * control2[0] + shiftX; + const p31 = s * control2[1] + shiftY; + const p40 = s * second[0] + shiftX; + const p41 = s * second[1] + shiftY; + if (j === 0) { + buffer.push(p10, p11); + points.push(p10, p11); + } + buffer.push(p20, p21, p30, p31, p40, p41); + points.push(p20, p21); + if (j === jj - 1) { + points.push(p40, p41); + } + } + paths.push({ + bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation), + points: InkEditor.#toPDFCoordinates(points, rect, this.rotation) }); } - - this._requests.length = 0; - - this._close(); + return paths; } - - _onProgress(evt) { - if (!this.isStreamingSupported && this.onProgress) { - this.onProgress({ - loaded: evt.loaded - }); + #getBbox() { + let xMin = Infinity; + let xMax = -Infinity; + let yMin = Infinity; + let yMax = -Infinity; + for (const path of this.paths) { + for (const [first, control1, control2, second] of path) { + const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); + xMin = Math.min(xMin, bbox[0]); + yMin = Math.min(yMin, bbox[1]); + xMax = Math.max(xMax, bbox[2]); + yMax = Math.max(yMax, bbox[3]); + } } + return [xMin, yMin, xMax, yMax]; } - - get isStreamingSupported() { - return false; + #getPadding() { + return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0; } - - async read() { - if (this._queuedChunk !== null) { - const chunk = this._queuedChunk; - this._queuedChunk = null; - return { - value: chunk, - done: false - }; + #fitToContent() { + let firstTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + if (this.isEmpty()) { + return; } - - if (this._done) { - return { - value: undefined, - done: true - }; + if (!this.#disableEditing) { + this.#redraw(); + return; } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; + const bbox = this.#getBbox(); + const padding = this.#getPadding(); + this.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + this.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); + const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setAspectRatio(width, height); + const prevTranslationX = this.translationX; + const prevTranslationY = this.translationY; + this.translationX = -bbox[0]; + this.translationY = -bbox[1]; + this.#setCanvasDims(); + this.#redraw(); + this.#realWidth = width; + this.#realHeight = height; + this.setDims(width, height); + const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; + this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); } - - cancel(reason) { - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - if (this._manager.isPendingRequest(this._requestId)) { - this._manager.abortRequest(this._requestId); - } - - this._close(); - } - -} - -/***/ }), -/* 26 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFFetchStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(23); - -; - -function createFetchOptions(headers, withCredentials, abortController) { - return { - method: "GET", - headers, - signal: abortController?.signal, - mode: "cors", - credentials: withCredentials ? "include" : "same-origin", - redirect: "follow" - }; -} - -function createHeaders(httpHeaders) { - const headers = new Headers(); - - for (const property in httpHeaders) { - const value = httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - headers.append(property, value); - } - - return headers; -} - -class PDFFetchStream { - constructor(source) { - this.source = source; - this.isHttp = /^https?:/i.test(source.url); - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFFetchStreamReader(this); - return this._fullRequestReader; - } - - getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { + static deserialize(data, parent, uiManager) { + if (data instanceof _annotation_layer.InkAnnotationElement) { return null; } - - const reader = new PDFFetchStreamRangeReader(this, begin, end); - - this._rangeRequestReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFFetchStream = PDFFetchStream; - -class PDFFetchStreamReader { - constructor(stream) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - this._filename = null; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._contentLength = source.length; - this._headersCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - if (typeof AbortController !== "undefined") { - this._abortController = new AbortController(); - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._headers = createHeaders(this._stream.httpHeaders); - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - this._reader = response.body.getReader(); - - this._headersCapability.resolve(); - - const getResponseHeader = name => { - return response.headers.get(name); - }; - - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: this._stream.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - this._isRangeSupported = allowRangeRequests; - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - - if (!this._isStreamingSupported && this._isRangeSupported) { - this.cancel(new _util.AbortException("Streaming is disabled.")); - } - }).catch(this._headersCapability.reject); - this.onProgress = null; - } - - get headersReady() { - return this._headersCapability.promise; - } - - get filename() { - return this._filename; - } - - get contentLength() { - return this._contentLength; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._headersCapability.promise; + const editor = super.deserialize(data, parent, uiManager); + editor.thickness = data.thickness; + editor.color = _util.Util.makeHexColor(...data.color); + editor.opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + const width = editor.width * pageWidth; + const height = editor.height * pageHeight; + const scaleFactor = editor.parentScale; + const padding = data.thickness / 2; + editor.#disableEditing = true; + editor.#realWidth = Math.round(width); + editor.#realHeight = Math.round(height); const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value, - done - }; + paths, + rect, + rotation + } = data; + for (let { + bezier + } of paths) { + bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation); + const path = []; + editor.paths.push(path); + let p0 = scaleFactor * (bezier[0] - padding); + let p1 = scaleFactor * (bezier[1] - padding); + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const p10 = scaleFactor * (bezier[i] - padding); + const p11 = scaleFactor * (bezier[i + 1] - padding); + const p20 = scaleFactor * (bezier[i + 2] - padding); + const p21 = scaleFactor * (bezier[i + 3] - padding); + const p30 = scaleFactor * (bezier[i + 4] - padding); + const p31 = scaleFactor * (bezier[i + 5] - padding); + path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); + p0 = p30; + p1 = p31; + } + const path2D = this.#buildPath2D(path); + editor.bezierPath2D.push(path2D); } - - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); + const bbox = editor.#getBbox(); + editor.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); + editor.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); + editor.#setScaleFactor(width, height); + return editor; + } + serialize() { + if (this.isEmpty()) { + return null; } - - const buffer = new Uint8Array(value).buffer; + const rect = this.getRect(0, 0); + const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); return { - value: buffer, - done: false + annotationType: _util.AnnotationEditorType.INK, + color, + thickness: this.thickness, + opacity: this.opacity, + paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation }; } - - cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); - } - - if (this._abortController) { - this._abortController.abort(); - } - } - } +exports.InkEditor = InkEditor; -class PDFFetchStreamRangeReader { - constructor(stream, begin, end) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._readCapability = (0, _util.createPromiseCapability)(); - this._isStreamingSupported = !source.disableStream; +/***/ }), +/* 202 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - if (typeof AbortController !== "undefined") { - this._abortController = new AbortController(); - } +"use strict"; - this._headers = createHeaders(this._stream.httpHeaders); - this._headers.append("Range", `bytes=${begin}-${end - 1}`); - - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - this._readCapability.resolve(); - - this._reader = response.body.getReader(); - }).catch(reason => { - if (reason?.name === "AbortError") { - return; - } - - throw reason; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StampEditor = void 0; +__w_pdfjs_require__(148); +__w_pdfjs_require__(151); +var _editor = __w_pdfjs_require__(163); +var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(167); +var _annotation_layer = __w_pdfjs_require__(197); +class StampEditor extends _editor.AnnotationEditor { + #bitmap = null; + #bitmapId = null; + #bitmapPromise = null; + #bitmapUrl = null; + #canvas = null; + #observer = null; + #resizeTimeoutId = null; + #isSvg = false; + static _type = "stamp"; + constructor(params) { + super({ + ...params, + name: "stampEditor" }); - this.onProgress = null; + this.#bitmapUrl = params.bitmapUrl; } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value, - done - }; - } - - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded + #getBitmap() { + if (this.#bitmapId) { + this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => { + if (!data) { + this.remove(); + return; + } + this.#bitmap = data.bitmap; + this.#createCanvas(); }); + return; } - - const buffer = new Uint8Array(value).buffer; - return { - value: buffer, - done: false + if (this.#bitmapUrl) { + const url = this.#bitmapUrl; + this.#bitmapUrl = null; + this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => { + this.#bitmapPromise = null; + if (!data) { + this.remove(); + return; + } + ({ + bitmap: this.#bitmap, + id: this.#bitmapId, + isSvg: this.#isSvg + } = data); + this.#createCanvas(); + }); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = "image/*"; + this.#bitmapPromise = new Promise(resolve => { + input.addEventListener("change", async () => { + this.#bitmapPromise = null; + if (!input.files || input.files.length === 0) { + this.remove(); + } else { + const data = await this._uiManager.imageManager.getFromFile(input.files[0]); + if (!data) { + this.remove(); + return; + } + ({ + bitmap: this.#bitmap, + id: this.#bitmapId, + isSvg: this.#isSvg + } = data); + this.#createCanvas(); + } + resolve(); + }); + input.addEventListener("cancel", () => { + this.#bitmapPromise = null; + this.remove(); + resolve(); + }); + }); + input.click(); + } + remove() { + if (this.#bitmapId) { + this.#bitmap = null; + this._uiManager.imageManager.deleteId(this.#bitmapId); + this.#canvas?.remove(); + this.#canvas = null; + this.#observer?.disconnect(); + this.#observer = null; + } + super.remove(); + } + rebuild() { + super.rebuild(); + if (this.div === null) { + return; + } + if (this.#bitmapId) { + this.#getBitmap(); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded() { + this.div.draggable = true; + this.parent.addUndoableEditor(this); + this.div.focus(); + } + isEmpty() { + return this.#bitmapPromise === null && this.#bitmap === null && this.#bitmapUrl === null; + } + get isResizable() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + if (this.#bitmap) { + this.#createCanvas(); + } else { + this.div.classList.add("loading"); + this.#getBitmap(); + } + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + return this.div; + } + #createCanvas() { + const { + div + } = this; + let { + width, + height + } = this.#bitmap; + const [pageWidth, pageHeight] = this.pageDimensions; + const MAX_RATIO = 0.75; + if (this.width) { + width = this.width * pageWidth; + height = this.height * pageHeight; + } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { + const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); + width *= factor; + height *= factor; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); + const canvas = this.#canvas = document.createElement("canvas"); + div.append(canvas); + this.#drawBitmap(width, height); + this.#createObserver(); + div.classList.remove("loading"); + } + #setDimensions(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setDims(width, height); + this.fixAndSetPosition(); + if (this.#resizeTimeoutId !== null) { + clearTimeout(this.#resizeTimeoutId); + } + const TIME_TO_WAIT = 200; + this.#resizeTimeoutId = setTimeout(() => { + this.#resizeTimeoutId = null; + this.#drawBitmap(width, height); + }, TIME_TO_WAIT); + } + #scaleBitmap(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = this.#bitmap; + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = this.#bitmap; + while (newWidth > 2 * width || newHeight > 2 * height) { + const prevWidth = newWidth; + const prevHeight = newHeight; + if (newWidth > 2 * width) { + newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); + } + if (newHeight > 2 * height) { + newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + bitmap = offscreen.transferToImageBitmap(); + } + return bitmap; + } + #drawBitmap(width, height) { + const canvas = this.#canvas; + if (!canvas || canvas.width === width && canvas.height === height) { + return; + } + canvas.width = width; + canvas.height = height; + const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + } + #serializeBitmap(toUrl) { + if (toUrl) { + if (this.#isSvg) { + const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = this.#bitmap); + const ctx = canvas.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0); + return canvas.toDataURL(); + } + if (this.#isSvg) { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = Math.round(this.width * pageWidth * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(this.#bitmap); + } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.#setDimensions(rect.width, rect.height); + } + }); + this.#observer.observe(this.div); + } + static deserialize(data, parent, uiManager) { + if (data instanceof _annotation_layer.StampAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + const { + rect, + bitmapUrl, + bitmapId, + isSvg + } = data; + if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + editor.#bitmapId = bitmapId; + } else { + editor.#bitmapUrl = bitmapUrl; + } + editor.#isSvg = isSvg; + const [parentWidth, parentHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / parentWidth; + editor.height = (rect[3] - rect[1]) / parentHeight; + return editor; + } + serialize() { + let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + if (this.isEmpty()) { + return null; + } + const serialized = { + annotationType: _util.AnnotationEditorType.STAMP, + bitmapId: this.#bitmapId, + pageIndex: this.pageIndex, + rect: this.getRect(0, 0), + rotation: this.rotation, + isSvg: this.#isSvg }; - } - - cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); + if (isForCopying) { + serialized.bitmapUrl = this.#serializeBitmap(true); + return serialized; } - - if (this._abortController) { - this._abortController.abort(); + if (context === null) { + return serialized; } + context.stamps ||= new Map(); + const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(this.#bitmapId)) { + context.stamps.set(this.#bitmapId, { + area, + serialized + }); + serialized.bitmap = this.#serializeBitmap(false); + } else if (this.#isSvg) { + const prevData = context.stamps.get(this.#bitmapId); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = this.#serializeBitmap(false); + } + } + return serialized; } - } +exports.StampEditor = StampEditor; /***/ }) /******/ ]); @@ -14557,7 +21951,7 @@ class PDFFetchStreamRangeReader { /******/ }; /******/ /******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; @@ -14565,102 +21959,55 @@ class PDFFetchStreamRangeReader { /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +// This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { +"use strict"; var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); -Object.defineProperty(exports, "addLinkAttributes", ({ +Object.defineProperty(exports, "AbortException", ({ enumerable: true, get: function () { - return _display_utils.addLinkAttributes; + return _util.AbortException; } })); -Object.defineProperty(exports, "getFilenameFromUrl", ({ +Object.defineProperty(exports, "AnnotationEditorLayer", ({ enumerable: true, get: function () { - return _display_utils.getFilenameFromUrl; + return _annotation_editor_layer.AnnotationEditorLayer; } })); -Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ +Object.defineProperty(exports, "AnnotationEditorParamsType", ({ enumerable: true, get: function () { - return _display_utils.getPdfFilenameFromUrl; + return _util.AnnotationEditorParamsType; } })); -Object.defineProperty(exports, "getXfaPageViewport", ({ +Object.defineProperty(exports, "AnnotationEditorType", ({ enumerable: true, get: function () { - return _display_utils.getXfaPageViewport; + return _util.AnnotationEditorType; } })); -Object.defineProperty(exports, "isPdfFile", ({ +Object.defineProperty(exports, "AnnotationEditorUIManager", ({ enumerable: true, get: function () { - return _display_utils.isPdfFile; + return _tools.AnnotationEditorUIManager; } })); -Object.defineProperty(exports, "LinkTarget", ({ +Object.defineProperty(exports, "AnnotationLayer", ({ enumerable: true, get: function () { - return _display_utils.LinkTarget; + return _annotation_layer.AnnotationLayer; } })); -Object.defineProperty(exports, "loadScript", ({ +Object.defineProperty(exports, "AnnotationMode", ({ enumerable: true, get: function () { - return _display_utils.loadScript; - } -})); -Object.defineProperty(exports, "PDFDateString", ({ - enumerable: true, - get: function () { - return _display_utils.PDFDateString; - } -})); -Object.defineProperty(exports, "RenderingCancelledException", ({ - enumerable: true, - get: function () { - return _display_utils.RenderingCancelledException; - } -})); -Object.defineProperty(exports, "build", ({ - enumerable: true, - get: function () { - return _api.build; - } -})); -Object.defineProperty(exports, "getDocument", ({ - enumerable: true, - get: function () { - return _api.getDocument; - } -})); -Object.defineProperty(exports, "LoopbackPort", ({ - enumerable: true, - get: function () { - return _api.LoopbackPort; - } -})); -Object.defineProperty(exports, "PDFDataRangeTransport", ({ - enumerable: true, - get: function () { - return _api.PDFDataRangeTransport; - } -})); -Object.defineProperty(exports, "PDFWorker", ({ - enumerable: true, - get: function () { - return _api.PDFWorker; - } -})); -Object.defineProperty(exports, "version", ({ - enumerable: true, - get: function () { - return _api.version; + return _util.AnnotationMode; } })); Object.defineProperty(exports, "CMapCompressionType", ({ @@ -14669,22 +22016,22 @@ Object.defineProperty(exports, "CMapCompressionType", ({ return _util.CMapCompressionType; } })); -Object.defineProperty(exports, "createObjectURL", ({ +Object.defineProperty(exports, "FeatureTest", ({ enumerable: true, get: function () { - return _util.createObjectURL; + return _util.FeatureTest; } })); -Object.defineProperty(exports, "createPromiseCapability", ({ +Object.defineProperty(exports, "GlobalWorkerOptions", ({ enumerable: true, get: function () { - return _util.createPromiseCapability; + return _worker_options.GlobalWorkerOptions; } })); -Object.defineProperty(exports, "createValidAbsoluteUrl", ({ +Object.defineProperty(exports, "ImageKind", ({ enumerable: true, get: function () { - return _util.createValidAbsoluteUrl; + return _util.ImageKind; } })); Object.defineProperty(exports, "InvalidPDFException", ({ @@ -14705,6 +22052,24 @@ Object.defineProperty(exports, "OPS", ({ return _util.OPS; } })); +Object.defineProperty(exports, "PDFDataRangeTransport", ({ + enumerable: true, + get: function () { + return _api.PDFDataRangeTransport; + } +})); +Object.defineProperty(exports, "PDFDateString", ({ + enumerable: true, + get: function () { + return _display_utils.PDFDateString; + } +})); +Object.defineProperty(exports, "PDFWorker", ({ + enumerable: true, + get: function () { + return _api.PDFWorker; + } +})); Object.defineProperty(exports, "PasswordResponses", ({ enumerable: true, get: function () { @@ -14717,16 +22082,28 @@ Object.defineProperty(exports, "PermissionFlag", ({ return _util.PermissionFlag; } })); -Object.defineProperty(exports, "removeNullCharacters", ({ +Object.defineProperty(exports, "PixelsPerInch", ({ enumerable: true, get: function () { - return _util.removeNullCharacters; + return _display_utils.PixelsPerInch; } })); -Object.defineProperty(exports, "shadow", ({ +Object.defineProperty(exports, "PromiseCapability", ({ enumerable: true, get: function () { - return _util.shadow; + return _util.PromiseCapability; + } +})); +Object.defineProperty(exports, "RenderingCancelledException", ({ + enumerable: true, + get: function () { + return _display_utils.RenderingCancelledException; + } +})); +Object.defineProperty(exports, "SVGGraphics", ({ + enumerable: true, + get: function () { + return _api.SVGGraphics; } })); Object.defineProperty(exports, "UnexpectedResponseException", ({ @@ -14735,12 +22112,6 @@ Object.defineProperty(exports, "UnexpectedResponseException", ({ return _util.UnexpectedResponseException; } })); -Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({ - enumerable: true, - get: function () { - return _util.UNSUPPORTED_FEATURES; - } -})); Object.defineProperty(exports, "Util", ({ enumerable: true, get: function () { @@ -14753,16 +22124,70 @@ Object.defineProperty(exports, "VerbosityLevel", ({ return _util.VerbosityLevel; } })); -Object.defineProperty(exports, "AnnotationLayer", ({ +Object.defineProperty(exports, "XfaLayer", ({ enumerable: true, get: function () { - return _annotation_layer.AnnotationLayer; + return _xfa_layer.XfaLayer; } })); -Object.defineProperty(exports, "GlobalWorkerOptions", ({ +Object.defineProperty(exports, "build", ({ enumerable: true, get: function () { - return _worker_options.GlobalWorkerOptions; + return _api.build; + } +})); +Object.defineProperty(exports, "createValidAbsoluteUrl", ({ + enumerable: true, + get: function () { + return _util.createValidAbsoluteUrl; + } +})); +Object.defineProperty(exports, "getDocument", ({ + enumerable: true, + get: function () { + return _api.getDocument; + } +})); +Object.defineProperty(exports, "getFilenameFromUrl", ({ + enumerable: true, + get: function () { + return _display_utils.getFilenameFromUrl; + } +})); +Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ + enumerable: true, + get: function () { + return _display_utils.getPdfFilenameFromUrl; + } +})); +Object.defineProperty(exports, "getXfaPageViewport", ({ + enumerable: true, + get: function () { + return _display_utils.getXfaPageViewport; + } +})); +Object.defineProperty(exports, "isDataScheme", ({ + enumerable: true, + get: function () { + return _display_utils.isDataScheme; + } +})); +Object.defineProperty(exports, "isPdfFile", ({ + enumerable: true, + get: function () { + return _display_utils.isPdfFile; + } +})); +Object.defineProperty(exports, "loadScript", ({ + enumerable: true, + get: function () { + return _display_utils.loadScript; + } +})); +Object.defineProperty(exports, "normalizeUnicode", ({ + enumerable: true, + get: function () { + return _util.normalizeUnicode; } })); Object.defineProperty(exports, "renderTextLayer", ({ @@ -14771,66 +22196,41 @@ Object.defineProperty(exports, "renderTextLayer", ({ return _text_layer.renderTextLayer; } })); -Object.defineProperty(exports, "SVGGraphics", ({ +Object.defineProperty(exports, "setLayerDimensions", ({ enumerable: true, get: function () { - return _svg.SVGGraphics; + return _display_utils.setLayerDimensions; } })); -Object.defineProperty(exports, "XfaLayer", ({ +Object.defineProperty(exports, "shadow", ({ enumerable: true, get: function () { - return _xfa_layer.XfaLayer; + return _util.shadow; } })); - -var _display_utils = __w_pdfjs_require__(1); - -var _api = __w_pdfjs_require__(6); - -var _util = __w_pdfjs_require__(2); - -var _annotation_layer = __w_pdfjs_require__(17); - -var _worker_options = __w_pdfjs_require__(12); - -var _is_node = __w_pdfjs_require__(4); - -var _text_layer = __w_pdfjs_require__(19); - -var _svg = __w_pdfjs_require__(20); - -var _xfa_layer = __w_pdfjs_require__(21); - -const pdfjsVersion = '2.10.377'; -const pdfjsBuild = '156762c48'; -{ - if (_is_node.isNodeJS) { - const { - PDFNodeStream - } = __w_pdfjs_require__(22); - - (0, _api.setPDFNetworkStreamFactory)(params => { - return new PDFNodeStream(params); - }); - } else { - const { - PDFNetworkStream - } = __w_pdfjs_require__(25); - - const { - PDFFetchStream - } = __w_pdfjs_require__(26); - - (0, _api.setPDFNetworkStreamFactory)(params => { - if ((0, _display_utils.isValidFetchUrl)(params.url)) { - return new PDFFetchStream(params); - } - - return new PDFNetworkStream(params); - }); +Object.defineProperty(exports, "updateTextLayer", ({ + enumerable: true, + get: function () { + return _text_layer.updateTextLayer; } -} +})); +Object.defineProperty(exports, "version", ({ + enumerable: true, + get: function () { + return _api.version; + } +})); +var _util = __w_pdfjs_require__(1); +var _api = __w_pdfjs_require__(124); +var _display_utils = __w_pdfjs_require__(167); +var _text_layer = __w_pdfjs_require__(194); +var _annotation_editor_layer = __w_pdfjs_require__(195); +var _tools = __w_pdfjs_require__(164); +var _annotation_layer = __w_pdfjs_require__(197); +var _worker_options = __w_pdfjs_require__(175); +var _xfa_layer = __w_pdfjs_require__(200); +const pdfjsVersion = '3.9.179'; +const pdfjsBuild = '1ef6fbc52'; })(); /******/ return __webpack_exports__; diff --git a/server/src/main/resources/static/pdfjs/build/pdf.js.map b/server/src/main/resources/static/pdfjs/build/pdf.js.map index 4a3224bb..84d2a530 100644 --- a/server/src/main/resources/static/pdfjs/build/pdf.js.map +++ b/server/src/main/resources/static/pdfjs/build/pdf.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://pdfjs-dist/build/pdf/webpack/universalModuleDefinition","webpack://pdfjs-dist/build/pdf/src/display/display_utils.js","webpack://pdfjs-dist/build/pdf/src/shared/util.js","webpack://pdfjs-dist/build/pdf/src/shared/compatibility.js","webpack://pdfjs-dist/build/pdf/src/shared/is_node.js","webpack://pdfjs-dist/build/pdf/src/display/base_factory.js","webpack://pdfjs-dist/build/pdf/src/display/api.js","webpack://pdfjs-dist/build/pdf/src/display/font_loader.js","webpack://pdfjs-dist/build/pdf/src/display/node_utils.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_storage.js","webpack://pdfjs-dist/build/pdf/src/display/canvas.js","webpack://pdfjs-dist/build/pdf/src/display/pattern_helper.js","webpack://pdfjs-dist/build/pdf/src/display/worker_options.js","webpack://pdfjs-dist/build/pdf/src/shared/message_handler.js","webpack://pdfjs-dist/build/pdf/src/display/metadata.js","webpack://pdfjs-dist/build/pdf/src/display/optional_content_config.js","webpack://pdfjs-dist/build/pdf/src/display/transport_stream.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_layer.js","webpack://pdfjs-dist/build/pdf/src/shared/scripting_utils.js","webpack://pdfjs-dist/build/pdf/src/display/text_layer.js","webpack://pdfjs-dist/build/pdf/src/display/svg.js","webpack://pdfjs-dist/build/pdf/src/display/xfa_layer.js","webpack://pdfjs-dist/build/pdf/src/display/node_stream.js","webpack://pdfjs-dist/build/pdf/src/display/network_utils.js","webpack://pdfjs-dist/build/pdf/src/display/content_disposition.js","webpack://pdfjs-dist/build/pdf/src/display/network.js","webpack://pdfjs-dist/build/pdf/src/display/fetch_stream.js","webpack://pdfjs-dist/build/pdf/webpack/bootstrap","webpack://pdfjs-dist/build/pdf/src/pdf.js"],"names":["DEFAULT_LINK_REL","SVG_NS","constructor","ownerDocument","globalThis","_createCanvas","canvas","asTypedArray","isValidFetchUrl","document","response","fetch","stringToBytes","request","XMLHttpRequest","data","resolve","reject","_fetchData","cMapData","fetchData","_createSVG","offsetX","offsetY","dontFlip","centerX","viewBox","centerY","rotation","rotateA","rotateB","rotateC","rotateD","offsetCanvasX","Math","offsetCanvasY","width","height","clone","scale","convertToViewportPoint","convertToViewportRectangle","topLeft","rect","bottomRight","convertToPdfPoint","LinkTarget","NONE","SELF","BLANK","PARENT","TOP","enabled","assert","url","urlNullRemoved","removeNullCharacters","link","targetStr","ii","i","anchor","query","end","defaultFilename","isDataScheme","warn","reURI","reFilename","splitURI","suggestedFilename","decodeURIComponent","Object","time","name","Date","timeEnd","start","toString","outBuf","longest","duration","baseUrl","protocol","removeScriptElement","script","console","toDateObject","isString","pdfDateStringRegex","matches","year","parseInt","month","day","hour","minute","second","universalTimeRelation","offsetHour","offsetMinute","xfaPage","IDENTITY_MATRIX","FONT_IDENTITY_MATRIX","PermissionFlag","PRINT","MODIFY_CONTENTS","COPY","MODIFY_ANNOTATIONS","FILL_INTERACTIVE_FORMS","COPY_FOR_ACCESSIBILITY","ASSEMBLE","PRINT_HIGH_QUALITY","TextRenderingMode","FILL","STROKE","FILL_STROKE","INVISIBLE","FILL_ADD_TO_PATH","STROKE_ADD_TO_PATH","FILL_STROKE_ADD_TO_PATH","ADD_TO_PATH","FILL_STROKE_MASK","ADD_TO_PATH_FLAG","ImageKind","GRAYSCALE_1BPP","RGB_24BPP","RGBA_32BPP","AnnotationType","TEXT","LINK","FREETEXT","LINE","SQUARE","CIRCLE","POLYGON","POLYLINE","HIGHLIGHT","UNDERLINE","SQUIGGLY","STRIKEOUT","STAMP","CARET","INK","POPUP","FILEATTACHMENT","SOUND","MOVIE","WIDGET","SCREEN","PRINTERMARK","TRAPNET","WATERMARK","THREED","REDACT","AnnotationStateModelType","MARKED","REVIEW","AnnotationMarkedState","UNMARKED","AnnotationReviewState","ACCEPTED","REJECTED","CANCELLED","COMPLETED","AnnotationReplyType","GROUP","REPLY","AnnotationFlag","HIDDEN","NOZOOM","NOROTATE","NOVIEW","READONLY","LOCKED","TOGGLENOVIEW","LOCKEDCONTENTS","AnnotationFieldFlag","REQUIRED","NOEXPORT","MULTILINE","PASSWORD","NOTOGGLETOOFF","RADIO","PUSHBUTTON","COMBO","EDIT","SORT","FILESELECT","MULTISELECT","DONOTSPELLCHECK","DONOTSCROLL","COMB","RICHTEXT","RADIOSINUNISON","COMMITONSELCHANGE","AnnotationBorderStyleType","SOLID","DASHED","BEVELED","INSET","AnnotationActionEventType","E","X","D","U","Fo","Bl","PO","PC","PV","PI","K","F","V","C","DocumentActionEventType","WC","WS","DS","WP","DP","PageActionEventType","O","StreamType","UNKNOWN","FLATE","LZW","DCT","JPX","JBIG","A85","AHX","CCF","RLX","FontType","TYPE1","TYPE1STANDARD","TYPE1C","CIDFONTTYPE0","CIDFONTTYPE0C","TRUETYPE","CIDFONTTYPE2","TYPE3","OPENTYPE","TYPE0","MMTYPE1","VerbosityLevel","ERRORS","WARNINGS","INFOS","CMapCompressionType","BINARY","STREAM","OPS","dependency","setLineWidth","setLineCap","setLineJoin","setMiterLimit","setDash","setRenderingIntent","setFlatness","setGState","save","restore","transform","moveTo","lineTo","curveTo","curveTo2","curveTo3","closePath","rectangle","stroke","closeStroke","fill","eoFill","fillStroke","eoFillStroke","closeFillStroke","closeEOFillStroke","endPath","clip","eoClip","beginText","endText","setCharSpacing","setWordSpacing","setHScale","setLeading","setFont","setTextRenderingMode","setTextRise","moveText","setLeadingMoveText","setTextMatrix","nextLine","showText","showSpacedText","nextLineShowText","nextLineSetSpacingShowText","setCharWidth","setCharWidthAndBounds","setStrokeColorSpace","setFillColorSpace","setStrokeColor","setStrokeColorN","setFillColor","setFillColorN","setStrokeGray","setFillGray","setStrokeRGBColor","setFillRGBColor","setStrokeCMYKColor","setFillCMYKColor","shadingFill","beginInlineImage","beginImageData","endInlineImage","paintXObject","markPoint","markPointProps","beginMarkedContent","beginMarkedContentProps","endMarkedContent","beginCompat","endCompat","paintFormXObjectBegin","paintFormXObjectEnd","beginGroup","endGroup","beginAnnotations","endAnnotations","beginAnnotation","endAnnotation","paintJpegXObject","paintImageMaskXObject","paintImageMaskXObjectGroup","paintImageXObject","paintInlineImageXObject","paintInlineImageXObjectGroup","paintImageXObjectRepeat","paintImageMaskXObjectRepeat","paintSolidColorImageMask","constructPath","UNSUPPORTED_FEATURES","unknown","forms","javaScript","signatures","smask","shadingPattern","font","errorTilingPattern","errorExtGState","errorXObject","errorFontLoadType3","errorFontState","errorFontMissing","errorFontTranslate","errorColorSpace","errorOperatorList","errorFontToUnicode","errorFontLoadNative","errorFontBuildPath","errorFontGetPath","errorMarkedContent","PasswordResponses","NEED_PASSWORD","INCORRECT_PASSWORD","verbosity","Number","unreachable","base","other","absoluteUrl","_isValidProtocol","enumerable","configurable","writable","BaseException","NullCharactersRegExp","str","bytes","length","MAX_ARGUMENT_COUNT","String","strBuf","chunkEnd","chunk","arr","resultLength","arrayByteLength","pos","item","itemLength","value","obj","buffer8","view32","IsLittleEndianCached","shadow","isLittleEndian","IsEvalSupportedCached","isEvalSupported","hexNumbers","Array","n","makeHexColor","m1","m2","applyTransform","xt","p","m","yt","applyInverseTransform","d","getAxialAlignedBoundingBox","p1","Util","p2","r","p3","p4","inverseTransform","apply3dTransform","v","singularValueDecompose2dScale","transpose","a","b","c","first","sx","sy","normalizeRect","intersect","orderedX","rect1","rect2","orderedY","result","PDFStringTranslateTable","code","match","buf","char","escape","unescape","encodeURIComponent","arr1","arr2","date","buffer","capability","isSettled","get","contentType","forceDataSchema","URL","type","digits","b1","b2","b3","d1","d2","d3","d4","isNodeJS","process","create","context","reset","canvasAndContext","destroy","isCompressed","compressionType","reason","svg","createElement","DEFAULT_RANGE_CHUNK_SIZE","RENDERING_CANCELLED_TIMEOUT","DefaultCanvasFactory","DefaultCMapReaderFactory","DefaultStandardFontDataFactory","createPDFNetworkStream","task","src","source","isArrayBuffer","range","params","rangeTransport","worker","window","isNaN","setVerbosityLevel","workerParams","port","GlobalWorkerOptions","PDFWorker","docId","workerIdPromise","_fetchDocument","networkStreamPromise","networkStream","initialData","progressiveDone","contentDispositionFilename","disableRange","disableStream","httpHeaders","withCredentials","rangeChunkSize","messageHandler","transport","Promise","pdfDataRangeTransport","apiVersion","password","disableAutoFetch","maxImageSize","disableFontFace","postMessageTransfers","docBaseUrl","ignoreErrors","fontExtraProperties","enableXfa","useSystemFonts","cMapUrl","standardFontDataUrl","PDFDocumentLoadingTask","nextDocumentId","promise","transportDestroyed","addRangeListener","addProgressListener","addProgressiveReadListener","addProgressiveDoneListener","onDataRange","listener","onDataProgress","onDataProgressiveRead","onDataProgressiveDone","transportReady","requestDataRange","abort","deprecated","annotationStorage","numPages","fingerprints","isPureXfa","allXfaHtml","getPage","getPageIndex","getDestinations","getDestination","getPageLabels","getPageLayout","getPageMode","getViewerPreferences","getOpenAction","getAttachments","getJavaScript","getJSActions","getOutline","getOptionalContentConfig","getPermissions","getMetadata","getMarkInfo","getData","getDownloadInfo","getStats","cleanup","keepLoadedFonts","loadingParams","loadingTask","saveDocument","getFieldObjects","hasJSActions","getCalculationOrderIds","pdfBug","pageNumber","rotate","ref","userUnit","view","getViewport","getAnnotations","intent","renderingIntent","getXfa","render","renderInteractiveForms","imageLayer","canvasFactory","background","includeAnnotationStorage","optionalContentConfigPromise","intentState","clearTimeout","canvasFactoryInstance","fnArray","argsArray","lastChunk","pageIndex","complete","error","internalRenderTask","callback","objs","commonObjs","operatorList","useRequestAnimationFrame","renderTask","getOperatorList","opListTask","streamTextContent","normalizeWhitespace","disableCombineTextItems","includeMarkedContent","TEXT_CONTENT_CHUNK_SIZE","combineTextItems","highWaterMark","size","textContent","getTextContent","readableStream","reader","pump","items","styles","getStructTree","_destroy","waitOn","force","resetStats","_tryCleanup","renderTasks","_startRenderPage","_renderPageChunk","operatorListChunk","_pumpOperatorList","args","_abortOperatorList","curIntentState","stats","postMessage","cloned","transfers","cloneValue","desc","event","addEventListener","removeEventListener","terminate","pdfWorkerPorts","isWorkerDisabled","nextFakeWorkerId","fallbackWorkerSrc","pdfjsFilePath","mainWorkerMessageHandler","fakeWorkerCapability","loader","getMainThreadWorkerMessageHandler","eval","getWorkerSrc","loadScript","wrapper","_initializeFromPort","_initialize","workerSrc","isSameOrigin","createCDNWrapper","terminateEarly","onWorkerError","sendTest","testObj","info","_setupFakeWorker","setupFakeWorkerGlobal","WorkerMessageHandler","id","workerHandler","fromPort","onUnsupportedFeature","styleElement","page","terminated","setupMessageHandler","evt","loaded","total","sink","readyReason","headersCapability","fullReader","isStreamingSupported","isRangeSupported","contentLength","rangeReader","pdfInfo","ex","msg","exception","updatePassword","exportedError","exportedData","fontRegistry","registerFont","pageProxy","MAX_IMAGE_SIZE_TO_STORE","imageData","_onUnsupportedFeature","pageInfo","filename","getDocJSActions","getPageJSActions","results","metadata","startCleanup","cleanupSuccessful","_ensureObj","resolved","has","clear","cancel","InternalRenderTask","canvasInRendering","completed","initializeGraphics","transparency","operatorListChanged","_continue","_scheduleNext","_next","version","build","addNativeFontFace","insertRule","styleSheet","bind","nativeFontFace","featureId","rule","_queueLoadingCallback","isFontLoadingAPISupported","hasFonts","isSyncFontLoadingSupported","_loadTestFont","_prepareFontLoadEvent","FontLoader","requests","nextRequestId","supported","navigator","otherRequest","setTimeout","done","getLoadTestFont","atob","offset","chunk1","s","chunk2","ctx","called","isFontReady","loadTestFontId","COMMENT_OFFSET","spliceString","CFF_CHECKSUM_OFFSET","XXXX_VALUE","checksum","int32","string32","btoa","names","div","span","translatedData","createNativeFontFace","css","weight","createFontFaceRule","bytesToString","getPathGenerator","cmds","jsBuf","current","NodeCanvasFactory","NodeCMapReaderFactory","NodeStandardFontDataFactory","fs","__non_webpack_require__","Canvas","getValue","setValue","modified","getAll","objectFromMap","_setModified","resetModified","serializable","MIN_FONT_SIZE","MAX_FONT_SIZE","MAX_GROUP_SIZE","COMPILE_TYPE3_GLYPHS","MAX_SIZE_TO_COMPILE","FULL_CHUNK_HEIGHT","LINEWIDTH_SCALE_FACTOR","set","ad_bc","bc_ad","old","prev","cosValue","sinValue","getCanvas","canvasEntry","addContextCurrentTransform","POINT_TO_PROCESS_LIMIT","POINT_TYPES","imgData","width1","points","lineSize","data0","elem","mask","count","j","j0","sum","steps","outlines","coords","p0","step","pp","drawOutline","k","kk","o","l","ll","setCurrentPoint","CanvasGraphics","EXECUTION_TIME","EXECUTION_STEPS","transferMaps","partialChunkHeight","fullChunks","totalChunks","chunkImgData","srcPos","dest","transferMapRed","transferMapGreen","transferMapBlue","transferMapGray","srcLength","dest32","dest32DataLength","fullSrcDiff","white","black","thisChunkHeight","destPos","srcDiff","kEnd","kEndUnrolled","srcByte","hasTransferMaps","elemsInThisChunk","properties","property","sourceCtx","destCtx","alpha","alpha_","r0","g0","b0","maskData","transferMap","layerData","y","hasBackdrop","backdrop","subtype","composeFn","PIXELS_TO_PROCESS","chunkSize","row","chunkHeight","maskCtx","layerCtx","composeSMaskBackdrop","genericComposeSMask","LINE_CAP_STYLES","LINE_JOIN_STYLES","NORMAL_CLIP","EO_CLIP","beginDrawing","transparentCanvas","resetCtxToDefault","viewport","executeOperatorList","executionStartIdx","argsArrayLen","chunkOperations","endTime","stepper","fnId","objsPool","depObjId","continueCallback","endDrawing","_scaleImage","img","widthScale","heightScale","paintWidth","paintHeight","tmpCanvasId","newWidth","newHeight","tmpCanvas","tmpCtx","_createMaskCanvas","fillColor","isPatternFill","maskCanvas","putBinaryImageMask","objToCanvas","maskToCanvas","cord1","cord2","drawnWidth","drawnHeight","fillCanvas","fillCtx","scaled","inverse","states","state","key","beginSMaskGroup","activeSMask","cacheId","scratchCanvas","currentCtx","currentTransform","groupCtx","copyCtxState","suspendSMaskGroup","composeSMask","deltaTransform","resumeSMaskGroup","endSMaskGroup","x","ops","xw","yh","consumePath","strokeColor","lineWidth","needRestore","paths","path","fontObj","bold","italic","typeface","browserFontSize","paintChar","textRenderingMode","fontSize","fillStrokeMode","isAddToPathSet","patternFill","addToPath","isFontSubpixelAAEnabled","fontSizeScale","charSpacing","wordSpacing","fontDirection","textHScale","glyphsLength","glyphs","vertical","spacingDir","defaultVMetrics","widthAdvanceScale","simpleFillText","pattern","patternTransform","resetLineWidthToOne","glyph","isNum","restoreNeeded","spacing","character","accent","vmetric","vx","vy","scaledX","scaledY","measuredWidth","characterScaleX","scaledAccentX","scaledAccentY","charWidth","showType3Text","fontMatrix","isTextInvisible","spacingLength","transformed","urx","ury","getColorN_Pattern","IR","color","baseTransform","canvasGraphicsFactory","createCanvasGraphics","_getPattern","getShadingPattern","inv","bl","br","ul","ur","x0","y0","x1","y1","matrix","bbox","group","bounds","canvasBounds","scaleX","scaleY","startTransformInverse","skewX","skewY","positions","trans","images","image","objId","map","w","h","imgToPaint","putBinaryImageData","position","left","top","entry","visible","tag","getSinglePixelWidth","absDet","sqNorm1","sqNorm2","pixelHeight","getCanvasPosition","isContentVisible","region","getPattern","_createGradient","grad","colorStop","owner","applyBoundingBox","domMatrix","colors","rowSize","tmp","c1","c2","c3","x2","y2","x3","y3","c1r","c1g","c1b","c2r","c2g","c2b","c3r","c3g","c3b","minY","maxY","xa","car","cag","cab","xb","cbr","cbg","cbb","x1_","x2_","ps","figure","cs","verticesPerRow","rows","cols","q","drawTriangle","_createMeshCanvas","EXPECTED_SCALE","MAX_PATTERN_SIZE","BORDER_SIZE","boundsWidth","boundsHeight","combinedScale","paddedWidth","paddedHeight","cachedCanvases","backgroundColor","drawFigure","matrixScale","temporaryPatternCanvas","PaintType","COLORED","UNCOLORED","createPatternCanvas","xstep","ystep","paintType","tilingType","curMatrixScale","dimx","dimy","graphics","adjustedX0","adjustedY0","adjustedX1","adjustedY1","getSizeAndScale","maxSize","TilingPattern","clipBbox","bboxWidth","bboxHeight","setFillAndStrokeStyleToContext","cssColor","CallbackKind","DATA","ERROR","StreamKind","CANCEL","CANCEL_COMPLETE","CLOSE","ENQUEUE","PULL","PULL_COMPLETE","START_COMPLETE","callbackId","wrapReason","action","cbSourceName","cbTargetName","comObj","sourceName","targetName","on","ah","send","sendWithPromise","sendWithStream","streamId","controller","startCapability","startCall","pullCall","cancelCall","isClosed","desiredSize","pull","pullCapability","stream","cancelCapability","_createStreamSink","self","streamSink","enqueue","lastDesiredSize","close","sinkCapability","onPull","onCancel","isCancelled","ready","success","_processStreamMessage","_deleteStreamController","_postMessage","getRaw","_evaluateVisibilityExpression","array","operator","element","isVisible","setVisibility","getOrder","getGroups","getGroup","_onReceiveData","found","_progressiveDataLength","_onProgress","firstReader","_onProgressiveDone","_removeRangeReader","getFullReader","queuedChunks","getRangeReader","cancelAllRequests","isPdfFile","_enqueue","requestCapability","headersReady","read","requestsCapability","parameters","fieldType","isRenderable","ignoreBorder","createQuadrilaterals","_createContainer","container","horizontalRadius","verticalRadius","radius","_createQuadrilaterals","quadrilaterals","savedRect","quadPoint","_createPopup","trigger","popupElement","title","modificationDate","contents","hideWrapper","popup","_renderQuadrilaterals","quadrilateral","addLinkAttributes","target","linkService","rel","linkElement","index","_bindLink","destination","_bindNamedAction","_bindJSAction","jsName","detail","JSON","_getKeyModifier","_setEventListener","baseName","valueGetter","shift","modifier","_setEventListeners","eventName","_dispatchEventFromSandbox","setColor","ColorConverters","commonActions","display","hidden","print","focus","preventScroll","userName","readonly","required","bgColor","fgColor","textColor","borderColor","jsEvent","actions","setPropertyOnSiblings","storage","storedData","valueAsString","elementData","userValue","formattedValue","beforeInputSelectionRange","beforeInputValue","blurListener","selRange","selStart","selEnd","commitKey","willCommit","_blurListener","change","fieldWidth","combWidth","_setTextStyle","TEXT_ALIGNMENT","style","fontColor","checkbox","radio","pdfButtonValue","checked","radioId","selectElement","optionElement","option","isExport","options","getItems","displayValue","exportValue","values","multipleSelection","remove","insert","indices","editable","changeEx","keyDown","IGNORE_TYPES","selector","parentElements","popupLeft","popupTop","BACKGROUND_ENLIGHT","g","dateObject","PDFDateString","_formatContents","lines","line","_toggle","_show","pin","_hide","unpin","borderWidth","square","circle","coordinate","polyline","getFilenameFromUrl","stringToPDFString","_download","sortedAnnotations","popupAnnotations","layer","downloadManager","imageResourcesPath","svgFactory","enableScripting","mouseState","isDown","rendered","update","elements","CMYK_G","G_CMYK","G_RGB","G_HTML","G","makeColorComp","RGB_G","RGB_HTML","R","B","T_HTML","CMYK_RGB","CMYK_HTML","RGB_CMYK","MAX_TEXT_DIVS_TO_RENDER","DEFAULT_FONT_SIZE","DEFAULT_FONT_ASCENT","ascentCache","AllWhitespaceRegexp","cachedAscent","metrics","ascent","descent","ratio","pixels","textDiv","textDivProperties","angle","canvasWidth","hasText","geom","hasEOL","originalTransform","paddingBottom","paddingLeft","paddingRight","paddingTop","tx","fontHeight","fontAscent","getAscent","shouldScaleText","absScaleX","absScaleY","angleCos","angleSin","divWidth","divHeight","right","bottom","textDivs","textDivsLength","t","ts","expanded","expandBounds","divProperties","e","jj","boxScale","findPositiveMin","box","x1New","x2New","expandBoundsLTR","boxes","fakeBoundary","horizon","boundary","maxXNew","horizonPart","affectedBoundary","xNew","changedHorizon","lastBoundary","useBoundary","used","textContentItemsStr","_processItems","len","parent","appendText","_layoutText","fontFamily","_render","timeout","styleCache","textItems","textStyles","expandTextDivs","expandDivs","expand","transformBuf","paddingBuf","divProps","renderParameters","textContentStream","enhanceTextSelection","SVGGraphics","SVG_DEFAULTS","fontStyle","fontWeight","XML_NS","XLINK_NS","convertImgDataToPng","PNG_HEADER","CHUNK_WRAPPER_SIZE","crcTable","crc","body","crc32","deflateSyncUncompressed","input","Buffer","output","level","literals","maxBlockLength","deflateBlocks","idat","pi","adler","adler32","colorType","bitDepth","offsetLiterals","offsetBytes","kind","ihdr","deflateSync","pngLength","writePngChunk","createObjectURL","encode","opTree","opListElement","fn","pf","clipCount","maskCount","shadingCount","loadDependencies","transformMatrix","getSVG","svgElement","convertOpList","operatorIdMapping","opList","opListToTree","executeOpTree","opTreeElement","lineWidthScale","textMatrix","pm","addFontStyle","details","setStrokeAlpha","setFillAlpha","_makeColorN_Pattern","_makeTilingPattern","tilingId","txstep","tystep","tiling","tx1","ty1","_makeShadingPattern","shadingId","colorStops","point0","point1","gradient","focalPoint","circlePoint","focalRadius","circleRadius","stop","op","clipId","clipPath","clipElement","_setStrokeAttributes","dashArray","imgSrc","cliprect","imgEl","definitions","rootGroup","_ensureClipGroup","clipGroup","_ensureTransformGroup","setupStorage","html","setAttributes","attributes","root","rootHtml","stack","rootDiv","child","childHtml","el","http","https","fileUriRegex","parsedUrl","parseUrl","_error","_setReadableStream","auth","host","method","handleResponse","getResponseHeader","isHttp","suggestedLength","extractFilenameFromHeader","createRequestOptions","stat","returnValues","allowRangeRequests","contentEncoding","contentDisposition","getFilenameFromContentDispositionHeader","status","needsEncodingFixup","toParamRegExp","rfc2616unquote","rfc5987decode","rfc2047decode","fixupEncoding","rfc2231getparam","decoder","fatal","textdecode","iter","parts","part","quotindex","encodingend","extvalue","encoding","langvalue","text","OK_RESPONSE","PARTIAL_CONTENT_RESPONSE","xhr","requestRange","listeners","requestFull","xhrId","pendingRequest","onProgress","onStateChange","xhrStatus","ok_response_on_range_request","getArrayBuffer","rangeHeader","begin","getRequestXhr","isPendingRequest","abortRequest","_onRangeRequestReaderClosed","onHeadersReceived","onDone","onError","manager","_onHeadersReceived","fullRequestXhrId","fullRequestXhr","_onDone","_onError","createResponseStatusError","_close","signal","abortController","mode","credentials","redirect","headers","createHeaders","createFetchOptions","validateResponseStatus","pdfjsVersion","pdfjsBuild","require","setPDFNetworkStreamFactory"],"mappings":"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","file":"pdf.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf\"] = factory();\n})(this, function() {\nreturn ","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n assert,\n BaseException,\n isString,\n removeNullCharacters,\n stringToBytes,\n Util,\n warn,\n} from \"../shared/util.js\";\nimport {\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n BaseStandardFontDataFactory,\n BaseSVGFactory,\n} from \"./base_factory.js\";\n\nconst DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nclass DOMCanvasFactory extends BaseCanvasFactory {\n constructor({ ownerDocument = globalThis.document } = {}) {\n super();\n this._document = ownerDocument;\n }\n\n _createCanvas(width, height) {\n const canvas = this._document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n}\n\nasync function fetchData(url, asTypedArray = false) {\n if (\n (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) ||\n isValidFetchUrl(url, document.baseURI)\n ) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n return asTypedArray\n ? new Uint8Array(await response.arrayBuffer())\n : stringToBytes(await response.text());\n }\n\n // The Fetch API is not supported.\n return new Promise((resolve, reject) => {\n const request = new XMLHttpRequest();\n request.open(\"GET\", url, /* asTypedArray = */ true);\n\n if (asTypedArray) {\n request.responseType = \"arraybuffer\";\n }\n request.onreadystatechange = () => {\n if (request.readyState !== XMLHttpRequest.DONE) {\n return;\n }\n if (request.status === 200 || request.status === 0) {\n let data;\n if (asTypedArray && request.response) {\n data = new Uint8Array(request.response);\n } else if (!asTypedArray && request.responseText) {\n data = stringToBytes(request.responseText);\n }\n if (data) {\n resolve(data);\n return;\n }\n }\n reject(new Error(request.statusText));\n };\n\n request.send(null);\n });\n}\n\nclass DOMCMapReaderFactory extends BaseCMapReaderFactory {\n _fetchData(url, compressionType) {\n return fetchData(url, /* asTypedArray = */ this.isCompressed).then(data => {\n return { cMapData: data, compressionType };\n });\n }\n}\n\nclass DOMStandardFontDataFactory extends BaseStandardFontDataFactory {\n _fetchData(url) {\n return fetchData(url, /* asTypedArray = */ true);\n }\n}\n\nclass DOMSVGFactory extends BaseSVGFactory {\n _createSVG(type) {\n return document.createElementNS(SVG_NS, type);\n }\n}\n\n/**\n * @typedef {Object} PageViewportParameters\n * @property {Array} viewBox - The xMin, yMin, xMax and\n * yMax coordinates.\n * @property {number} scale - The scale of the viewport.\n * @property {number} rotation - The rotation, in degrees, of the viewport.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset. The\n * default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset. The\n * default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * @typedef {Object} PageViewportCloneParameters\n * @property {number} [scale] - The scale, overriding the one in the cloned\n * viewport. The default value is `this.scale`.\n * @property {number} [rotation] - The rotation, in degrees, overriding the one\n * in the cloned viewport. The default value is `this.rotation`.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `this.offsetX`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `this.offsetY`.\n * @property {boolean} [dontFlip] - If true, the x-axis will not be flipped.\n * The default value is `false`.\n */\n\n/**\n * PDF page viewport created based on scale, rotation and offset.\n */\nclass PageViewport {\n /**\n * @param {PageViewportParameters}\n */\n constructor({\n viewBox,\n scale,\n rotation,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n }) {\n this.viewBox = viewBox;\n this.scale = scale;\n this.rotation = rotation;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n // creating transform to convert pdf coordinate system to the normal\n // canvas like coordinates taking in account scale and rotation\n const centerX = (viewBox[2] + viewBox[0]) / 2;\n const centerY = (viewBox[3] + viewBox[1]) / 2;\n let rotateA, rotateB, rotateC, rotateD;\n // Normalize the rotation, by clamping it to the [0, 360) range.\n rotation %= 360;\n if (rotation < 0) {\n rotation += 360;\n }\n switch (rotation) {\n case 180:\n rotateA = -1;\n rotateB = 0;\n rotateC = 0;\n rotateD = 1;\n break;\n case 90:\n rotateA = 0;\n rotateB = 1;\n rotateC = 1;\n rotateD = 0;\n break;\n case 270:\n rotateA = 0;\n rotateB = -1;\n rotateC = -1;\n rotateD = 0;\n break;\n case 0:\n rotateA = 1;\n rotateB = 0;\n rotateC = 0;\n rotateD = -1;\n break;\n default:\n throw new Error(\n \"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\"\n );\n }\n\n if (dontFlip) {\n rotateC = -rotateC;\n rotateD = -rotateD;\n }\n\n let offsetCanvasX, offsetCanvasY;\n let width, height;\n if (rotateA === 0) {\n offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\n width = Math.abs(viewBox[3] - viewBox[1]) * scale;\n height = Math.abs(viewBox[2] - viewBox[0]) * scale;\n } else {\n offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\n offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\n width = Math.abs(viewBox[2] - viewBox[0]) * scale;\n height = Math.abs(viewBox[3] - viewBox[1]) * scale;\n }\n // creating transform for the following operations:\n // translate(-centerX, -centerY), rotate and flip vertically,\n // scale, and translate(offsetCanvasX, offsetCanvasY)\n this.transform = [\n rotateA * scale,\n rotateB * scale,\n rotateC * scale,\n rotateD * scale,\n offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,\n offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY,\n ];\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * Clones viewport, with optional additional properties.\n * @param {PageViewportCloneParameters} [params]\n * @returns {PageViewport} Cloned viewport.\n */\n clone({\n scale = this.scale,\n rotation = this.rotation,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.viewBox.slice(),\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * Converts PDF point to the viewport coordinates. For examples, useful for\n * converting PDF location into canvas pixel coordinates.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Object} Object containing `x` and `y` properties of the\n * point in the viewport coordinate space.\n * @see {@link convertToPdfPoint}\n * @see {@link convertToViewportRectangle}\n */\n convertToViewportPoint(x, y) {\n return Util.applyTransform([x, y], this.transform);\n }\n\n /**\n * Converts PDF rectangle to the viewport coordinates.\n * @param {Array} rect - The xMin, yMin, xMax and yMax coordinates.\n * @returns {Array} Array containing corresponding coordinates of the\n * rectangle in the viewport coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToViewportRectangle(rect) {\n const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform);\n const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform);\n return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\n }\n\n /**\n * Converts viewport coordinates to the PDF location. For examples, useful\n * for converting canvas pixel location into PDF one.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @returns {Object} Object containing `x` and `y` properties of the\n * point in the PDF coordinate space.\n * @see {@link convertToViewportPoint}\n */\n convertToPdfPoint(x, y) {\n return Util.applyInverseTransform([x, y], this.transform);\n }\n}\n\nclass RenderingCancelledException extends BaseException {\n constructor(msg, type) {\n super(msg);\n this.type = type;\n }\n}\n\nconst LinkTarget = {\n NONE: 0, // Default value.\n SELF: 1,\n BLANK: 2,\n PARENT: 3,\n TOP: 4,\n};\n\n/**\n * @typedef ExternalLinkParameters\n * @typedef {Object} ExternalLinkParameters\n * @property {string} url - An absolute URL.\n * @property {LinkTarget} [target] - The link target. The default value is\n * `LinkTarget.NONE`.\n * @property {string} [rel] - The link relationship. The default value is\n * `DEFAULT_LINK_REL`.\n * @property {boolean} [enabled] - Whether the link should be enabled. The\n * default value is true.\n */\n\n/**\n * Adds various attributes (href, title, target, rel) to hyperlinks.\n * @param {HTMLLinkElement} link - The link element.\n * @param {ExternalLinkParameters} params\n */\nfunction addLinkAttributes(link, { url, target, rel, enabled = true } = {}) {\n assert(\n url && typeof url === \"string\",\n 'addLinkAttributes: A valid \"url\" parameter must provided.'\n );\n\n const urlNullRemoved = removeNullCharacters(url);\n if (enabled) {\n link.href = link.title = urlNullRemoved;\n } else {\n link.href = \"\";\n link.title = `Disabled: ${urlNullRemoved}`;\n link.onclick = () => {\n return false;\n };\n }\n\n let targetStr = \"\"; // LinkTarget.NONE\n switch (target) {\n case LinkTarget.NONE:\n break;\n case LinkTarget.SELF:\n targetStr = \"_self\";\n break;\n case LinkTarget.BLANK:\n targetStr = \"_blank\";\n break;\n case LinkTarget.PARENT:\n targetStr = \"_parent\";\n break;\n case LinkTarget.TOP:\n targetStr = \"_top\";\n break;\n }\n link.target = targetStr;\n\n link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\n}\n\nfunction isDataScheme(url) {\n const ii = url.length;\n let i = 0;\n while (i < ii && url[i].trim() === \"\") {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === \"data:\";\n}\n\nfunction isPdfFile(filename) {\n return typeof filename === \"string\" && /\\.pdf$/i.test(filename);\n}\n\n/**\n * Gets the filename from a given URL.\n * @param {string} url\n * @returns {string}\n */\nfunction getFilenameFromUrl(url) {\n const anchor = url.indexOf(\"#\");\n const query = url.indexOf(\"?\");\n const end = Math.min(\n anchor > 0 ? anchor : url.length,\n query > 0 ? query : url.length\n );\n return url.substring(url.lastIndexOf(\"/\", end) + 1, end);\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPdfFilenameFromUrl(url, defaultFilename = \"document.pdf\") {\n if (typeof url !== \"string\") {\n return defaultFilename;\n }\n if (isDataScheme(url)) {\n warn('getPdfFilenameFromUrl: ignore \"data:\"-URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n const splitURI = reURI.exec(url);\n let suggestedFilename =\n reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes(\"%\")) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename = reFilename.exec(\n decodeURIComponent(suggestedFilename)\n )[0];\n } catch (ex) {\n // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nclass StatTimer {\n constructor() {\n this.started = Object.create(null);\n this.times = [];\n }\n\n time(name) {\n if (name in this.started) {\n warn(`Timer is already running for ${name}`);\n }\n this.started[name] = Date.now();\n }\n\n timeEnd(name) {\n if (!(name in this.started)) {\n warn(`Timer has not been started for ${name}`);\n }\n this.times.push({\n name,\n start: this.started[name],\n end: Date.now(),\n });\n // Remove timer from started so it can be called again.\n delete this.started[name];\n }\n\n toString() {\n // Find the longest name for padding purposes.\n const outBuf = [];\n let longest = 0;\n for (const time of this.times) {\n const name = time.name;\n if (name.length > longest) {\n longest = name.length;\n }\n }\n for (const time of this.times) {\n const duration = time.end - time.start;\n outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\\n`);\n }\n return outBuf.join(\"\");\n }\n}\n\nfunction isValidFetchUrl(url, baseUrl) {\n try {\n const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url);\n // The Fetch API only supports the http/https protocols, and not file/ftp.\n return protocol === \"http:\" || protocol === \"https:\";\n } catch (ex) {\n return false; // `new URL()` will throw on incorrect data.\n }\n}\n\n/**\n * @param {string} src\n * @param {boolean} [removeScriptElement]\n * @returns {Promise}\n */\nfunction loadScript(src, removeScriptElement = false) {\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = src;\n\n script.onload = function (evt) {\n if (removeScriptElement) {\n script.remove();\n }\n resolve(evt);\n };\n script.onerror = function () {\n reject(new Error(`Cannot load script at: ${script.src}`));\n };\n (document.head || document.documentElement).appendChild(script);\n });\n}\n\n// Deprecated API function -- display regardless of the `verbosity` setting.\nfunction deprecated(details) {\n console.log(\"Deprecated API usage: \" + details);\n}\n\nlet pdfDateStringRegex;\n\nclass PDFDateString {\n /**\n * Convert a PDF date string to a JavaScript `Date` object.\n *\n * The PDF date string format is described in section 7.9.4 of the official\n * PDF 32000-1:2008 specification. However, in the PDF 1.7 reference (sixth\n * edition) Adobe describes the same format including a trailing apostrophe.\n * This syntax in incorrect, but Adobe Acrobat creates PDF files that contain\n * them. We ignore all apostrophes as they are not necessary for date parsing.\n *\n * Moreover, Adobe Acrobat doesn't handle changing the date to universal time\n * and doesn't use the user's time zone (effectively ignoring the HH' and mm'\n * parts of the date string).\n *\n * @param {string} input\n * @returns {Date|null}\n */\n static toDateObject(input) {\n if (!input || !isString(input)) {\n return null;\n }\n\n // Lazily initialize the regular expression.\n if (!pdfDateStringRegex) {\n pdfDateStringRegex = new RegExp(\n \"^D:\" + // Prefix (required)\n \"(\\\\d{4})\" + // Year (required)\n \"(\\\\d{2})?\" + // Month (optional)\n \"(\\\\d{2})?\" + // Day (optional)\n \"(\\\\d{2})?\" + // Hour (optional)\n \"(\\\\d{2})?\" + // Minute (optional)\n \"(\\\\d{2})?\" + // Second (optional)\n \"([Z|+|-])?\" + // Universal time relation (optional)\n \"(\\\\d{2})?\" + // Offset hour (optional)\n \"'?\" + // Splitting apostrophe (optional)\n \"(\\\\d{2})?\" + // Offset minute (optional)\n \"'?\" // Trailing apostrophe (optional)\n );\n }\n\n // Optional fields that don't satisfy the requirements from the regular\n // expression (such as incorrect digit counts or numbers that are out of\n // range) will fall back the defaults from the specification.\n const matches = pdfDateStringRegex.exec(input);\n if (!matches) {\n return null;\n }\n\n // JavaScript's `Date` object expects the month to be between 0 and 11\n // instead of 1 and 12, so we have to correct for that.\n const year = parseInt(matches[1], 10);\n let month = parseInt(matches[2], 10);\n month = month >= 1 && month <= 12 ? month - 1 : 0;\n let day = parseInt(matches[3], 10);\n day = day >= 1 && day <= 31 ? day : 1;\n let hour = parseInt(matches[4], 10);\n hour = hour >= 0 && hour <= 23 ? hour : 0;\n let minute = parseInt(matches[5], 10);\n minute = minute >= 0 && minute <= 59 ? minute : 0;\n let second = parseInt(matches[6], 10);\n second = second >= 0 && second <= 59 ? second : 0;\n const universalTimeRelation = matches[7] || \"Z\";\n let offsetHour = parseInt(matches[8], 10);\n offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\n let offsetMinute = parseInt(matches[9], 10) || 0;\n offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\n\n // Universal time relation 'Z' means that the local time is equal to the\n // universal time, whereas the relations '+'/'-' indicate that the local\n // time is later respectively earlier than the universal time. Every date\n // is normalized to universal time.\n if (universalTimeRelation === \"-\") {\n hour += offsetHour;\n minute += offsetMinute;\n } else if (universalTimeRelation === \"+\") {\n hour -= offsetHour;\n minute -= offsetMinute;\n }\n\n return new Date(Date.UTC(year, month, day, hour, minute, second));\n }\n}\n\n/**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n */\nfunction getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) {\n const { width, height } = xfaPage.attributes.style;\n const viewBox = [0, 0, parseInt(width), parseInt(height)];\n\n return new PageViewport({\n viewBox,\n scale,\n rotation,\n });\n}\n\nexport {\n addLinkAttributes,\n DEFAULT_LINK_REL,\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMStandardFontDataFactory,\n DOMSVGFactory,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n getXfaPageViewport,\n isDataScheme,\n isPdfFile,\n isValidFetchUrl,\n LinkTarget,\n loadScript,\n PageViewport,\n PDFDateString,\n RenderingCancelledException,\n StatTimer,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport \"./compatibility.js\";\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationStateModelType = {\n MARKED: \"Marked\",\n REVIEW: \"Review\",\n};\n\nconst AnnotationMarkedState = {\n MARKED: \"Marked\",\n UNMARKED: \"Unmarked\",\n};\n\nconst AnnotationReviewState = {\n ACCEPTED: \"Accepted\",\n REJECTED: \"Rejected\",\n CANCELLED: \"Cancelled\",\n COMPLETED: \"Completed\",\n NONE: \"None\",\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst StreamType = {\n UNKNOWN: \"UNKNOWN\",\n FLATE: \"FLATE\",\n LZW: \"LZW\",\n DCT: \"DCT\",\n JPX: \"JPX\",\n JBIG: \"JBIG\",\n A85: \"A85\",\n AHX: \"AHX\",\n CCF: \"CCF\",\n RLX: \"RLX\", // PDF short name is 'RL', but telemetry requires three chars.\n};\n\nconst FontType = {\n UNKNOWN: \"UNKNOWN\",\n TYPE1: \"TYPE1\",\n TYPE1STANDARD: \"TYPE1STANDARD\",\n TYPE1C: \"TYPE1C\",\n CIDFONTTYPE0: \"CIDFONTTYPE0\",\n CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n TRUETYPE: \"TRUETYPE\",\n CIDFONTTYPE2: \"CIDFONTTYPE2\",\n TYPE3: \"TYPE3\",\n OPENTYPE: \"OPENTYPE\",\n TYPE0: \"TYPE0\",\n MMTYPE1: \"MMTYPE1\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n STREAM: 2,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n};\n\nconst UNSUPPORTED_FEATURES = {\n /** @deprecated unused */\n unknown: \"unknown\",\n forms: \"forms\",\n javaScript: \"javaScript\",\n signatures: \"signatures\",\n smask: \"smask\",\n shadingPattern: \"shadingPattern\",\n /** @deprecated unused */\n font: \"font\",\n errorTilingPattern: \"errorTilingPattern\",\n errorExtGState: \"errorExtGState\",\n errorXObject: \"errorXObject\",\n errorFontLoadType3: \"errorFontLoadType3\",\n errorFontState: \"errorFontState\",\n errorFontMissing: \"errorFontMissing\",\n errorFontTranslate: \"errorFontTranslate\",\n errorColorSpace: \"errorColorSpace\",\n errorOperatorList: \"errorOperatorList\",\n errorFontToUnicode: \"errorFontToUnicode\",\n errorFontLoadNative: \"errorFontLoadNative\",\n errorFontBuildPath: \"errorFontBuildPath\",\n errorFontGetPath: \"errorFontGetPath\",\n errorMarkedContent: \"errorMarkedContent\",\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.\nfunction isSameOrigin(baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch (e) {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n if (!url) {\n return false;\n }\n switch (url.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} baseUrl - An absolute URL.\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl) {\n if (!url) {\n return null;\n }\n try {\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch (ex) {\n /* `new URL()` will throw on incorrect data. */\n }\n return null;\n}\n\nfunction shadow(obj, prop, value) {\n Object.defineProperty(obj, prop, {\n value,\n enumerable: true,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = this.constructor.name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg);\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg);\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {}\n\nclass MissingPDFException extends BaseException {}\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg);\n this.status = status;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {}\n\nconst NullCharactersRegExp = /\\x00/g;\n\n/**\n * @param {string} str\n */\nfunction removeNullCharacters(str) {\n if (typeof str !== \"string\") {\n warn(\"The argument for removeNullCharacters must be a string.\");\n return str;\n }\n return str.replace(NullCharactersRegExp, \"\");\n}\n\nfunction bytesToString(bytes) {\n assert(\n bytes !== null && typeof bytes === \"object\" && bytes.length !== undefined,\n \"Invalid argument for bytesToString\"\n );\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\n/**\n * Gets length of the array (Array, Uint8Array, or string) in bytes.\n * @param {Array|Uint8Array|string} arr\n * @returns {number}\n */\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\n return arr.byteLength;\n}\n\n/**\n * Combines array items (arrays) into single Uint8Array object.\n * @param {Array|Uint8Array|string>} arr - the array of the arrays\n * (Array, Uint8Array, or string).\n * @returns {Uint8Array}\n */\nfunction arraysToBytes(arr) {\n const length = arr.length;\n // Shortcut: if first and only item is Uint8Array, return it.\n if (length === 1 && arr[0] instanceof Uint8Array) {\n return arr[0];\n }\n let resultLength = 0;\n for (let i = 0; i < length; i++) {\n resultLength += arrayByteLength(arr[i]);\n }\n let pos = 0;\n const data = new Uint8Array(resultLength);\n for (let i = 0; i < length; i++) {\n let item = arr[i];\n if (!(item instanceof Uint8Array)) {\n if (typeof item === \"string\") {\n item = stringToBytes(item);\n } else {\n item = new Uint8Array(item);\n }\n }\n const itemLength = item.byteLength;\n data.set(item, pos);\n pos += itemLength;\n }\n return data;\n}\n\nfunction string32(value) {\n if (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || TESTING\")\n ) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Ensure that the returned Object has a `null` prototype; hence why\n// `Object.fromEntries(...)` is not used.\nfunction objectFromMap(map) {\n const obj = Object.create(null);\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\nconst IsLittleEndianCached = {\n get value() {\n return shadow(this, \"value\", isLittleEndian());\n },\n};\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch (e) {\n return false;\n }\n}\nconst IsEvalSupportedCached = {\n get value() {\n return shadow(this, \"value\", isEvalSupported());\n },\n};\n\nconst hexNumbers = [...Array(256).keys()].map(n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = Util.applyTransform(r, m);\n const p2 = Util.applyTransform(r.slice(2, 4), m);\n const p3 = Util.applyTransform([r[0], r[3]], m);\n const p4 = Util.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1]),\n ];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // Apply a generic 3d matrix M on a 3-vector v:\n // | a b c | | X |\n // | d e f | x | Y |\n // | g h i | | Z |\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n // with v as [X,Y,Z]\n static apply3dTransform(m, v) {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'false'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n // Order points along the axes\n const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n const result = [];\n\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n // X: first and second points belong to different rectangles?\n if (\n (orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])\n ) {\n // Intersection must be between second and third points\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return null;\n }\n\n // Y: first and second points belong to different rectangles?\n if (\n (orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])\n ) {\n // Intersection must be between second and third points\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return null;\n }\n\n return result;\n }\n}\n\nconst PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n const length = str.length,\n strBuf = [];\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n // UTF16BE BOM\n for (let i = 2; i < length; i += 2) {\n strBuf.push(\n String.fromCharCode((str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))\n );\n }\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n // UTF16LE BOM\n for (let i = 2; i < length; i += 2) {\n strBuf.push(\n String.fromCharCode((str.charCodeAt(i + 1) << 8) | str.charCodeAt(i))\n );\n }\n } else {\n for (let i = 0; i < length; ++i) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n }\n return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n // replace \"(\", \")\", \"\\n\", \"\\r\" and \"\\\"\n // by \"\\(\", \"\\)\", \"\\\\n\", \"\\\\r\" and \"\\\\\"\n // in order to write it in a PDF file.\n return str.replace(/([()\\\\\\n\\r])/g, match => {\n if (match === \"\\n\") {\n return \"\\\\n\";\n } else if (match === \"\\r\") {\n return \"\\\\r\";\n }\n return `\\\\${match}`;\n });\n}\n\nfunction isAscii(str) {\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\nfunction stringToUTF16BEString(str) {\n const buf = [\"\\xFE\\xFF\"];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const char = str.charCodeAt(i);\n buf.push(\n String.fromCharCode((char >> 8) & 0xff),\n String.fromCharCode(char & 0xff)\n );\n }\n return buf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isBool(v) {\n return typeof v === \"boolean\";\n}\n\nfunction isNum(v) {\n return typeof v === \"number\";\n}\n\nfunction isString(v) {\n return typeof v === \"string\";\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise} promise - A Promise object.\n * @property {boolean} settled - If the Promise has been fulfilled/rejected.\n * @property {function} resolve - Fulfills the Promise.\n * @property {function} reject - Rejects the Promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias createPromiseCapability\n *\n * @returns {PromiseCapability}\n */\nfunction createPromiseCapability() {\n const capability = Object.create(null);\n let isSettled = false;\n\n Object.defineProperty(capability, \"settled\", {\n get() {\n return isSettled;\n },\n });\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = function (data) {\n isSettled = true;\n resolve(data);\n };\n capability.reject = function (reason) {\n isSettled = true;\n reject(reason);\n };\n });\n return capability;\n}\n\nfunction createObjectURL(data, contentType = \"\", forceDataSchema = false) {\n if (URL.createObjectURL && !forceDataSchema) {\n return URL.createObjectURL(new Blob([data], { type: contentType }));\n }\n // Blob/createObjectURL is not available, falling back to data schema.\n const digits =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n let buffer = `data:${contentType};base64,`;\n for (let i = 0, ii = data.length; i < ii; i += 3) {\n const b1 = data[i] & 0xff;\n const b2 = data[i + 1] & 0xff;\n const b3 = data[i + 2] & 0xff;\n const d1 = b1 >> 2,\n d2 = ((b1 & 3) << 4) | (b2 >> 4);\n const d3 = i + 1 < ii ? ((b2 & 0xf) << 2) | (b3 >> 6) : 64;\n const d4 = i + 2 < ii ? b3 & 0x3f : 64;\n buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\n }\n return buffer;\n}\n\nexport {\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMarkedState,\n AnnotationReplyType,\n AnnotationReviewState,\n AnnotationStateModelType,\n AnnotationType,\n arrayByteLength,\n arraysToBytes,\n assert,\n BaseException,\n bytesToString,\n CMapCompressionType,\n createObjectURL,\n createPromiseCapability,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n escapeString,\n FONT_IDENTITY_MATRIX,\n FontType,\n FormatError,\n getModificationDate,\n getVerbosityLevel,\n IDENTITY_MATRIX,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isArrayEqual,\n isAscii,\n isBool,\n IsEvalSupportedCached,\n IsLittleEndianCached,\n isNum,\n isSameOrigin,\n isString,\n MissingPDFException,\n objectFromMap,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n removeNullCharacters,\n setVerbosityLevel,\n shadow,\n StreamType,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF16BEString,\n stringToUTF8String,\n TextRenderingMode,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n UNSUPPORTED_FEATURES,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isNodeJS } from \"./is_node.js\";\n\n// Skip compatibility checks for modern builds and if we already ran the module.\nif (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"SKIP_BABEL\")) &&\n (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked)\n) {\n // Provides support for globalThis in legacy browsers.\n // Support: Firefox<65, Chrome<71, Safari<12.1\n if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\n // eslint-disable-next-line no-global-assign\n globalThis = require(\"core-js/es/global-this\");\n }\n globalThis._pdfjsCompatibilityChecked = true;\n\n // Support: Node.js\n (function checkNodeBtoa() {\n if (globalThis.btoa || !isNodeJS) {\n return;\n }\n globalThis.btoa = function (chars) {\n // eslint-disable-next-line no-undef\n return Buffer.from(chars, \"binary\").toString(\"base64\");\n };\n })();\n\n // Support: Node.js\n (function checkNodeAtob() {\n if (globalThis.atob || !isNodeJS) {\n return;\n }\n globalThis.atob = function (input) {\n // eslint-disable-next-line no-undef\n return Buffer.from(input, \"base64\").toString(\"binary\");\n };\n })();\n\n // Support: Node.js\n (function checkDOMMatrix() {\n if (globalThis.DOMMatrix || !isNodeJS) {\n return;\n }\n globalThis.DOMMatrix = require(\"dommatrix/dist/dommatrix.js\");\n })();\n\n // Provides support for Object.fromEntries in legacy browsers.\n // Support: Firefox<63, Chrome<73, Safari<12.1, Node.js<12.0.0\n (function checkObjectFromEntries() {\n if (Object.fromEntries) {\n return;\n }\n require(\"core-js/es/object/from-entries.js\");\n })();\n\n // Provides support for *recent* additions to the Promise specification,\n // however basic Promise support is assumed to be available natively.\n // Support: Firefox<71, Chrome<76, Safari<13, Node.js<12.9.0\n (function checkPromise() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `Promise` shouldn't\n // need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n if (globalThis.Promise.allSettled) {\n return;\n }\n globalThis.Promise = require(\"core-js/es/promise/index.js\");\n })();\n\n // Support: Node.js\n (function checkReadableStream() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `ReadableStream`\n // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n let isReadableStreamSupported = false;\n\n if (typeof ReadableStream !== \"undefined\") {\n // MS Edge may say it has ReadableStream but they are not up to spec yet.\n try {\n // eslint-disable-next-line no-new\n new ReadableStream({\n start(controller) {\n controller.close();\n },\n });\n isReadableStreamSupported = true;\n } catch (e) {\n // The ReadableStream constructor cannot be used.\n }\n }\n if (isReadableStreamSupported) {\n return;\n }\n globalThis.ReadableStream =\n require(\"web-streams-polyfill/dist/ponyfill.js\").ReadableStream;\n })();\n}\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nexport { isNodeJS };\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CMapCompressionType, unreachable } from \"../shared/util.js\";\n\nclass BaseCanvasFactory {\n constructor() {\n if (this.constructor === BaseCanvasFactory) {\n unreachable(\"Cannot initialize BaseCanvasFactory.\");\n }\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n const canvas = this._createCanvas(width, height);\n return {\n canvas,\n context: canvas.getContext(\"2d\"),\n };\n }\n\n reset(canvasAndContext, width, height) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid canvas size\");\n }\n canvasAndContext.canvas.width = width;\n canvasAndContext.canvas.height = height;\n }\n\n destroy(canvasAndContext) {\n if (!canvasAndContext.canvas) {\n throw new Error(\"Canvas is not specified\");\n }\n // Zeroing the width and height cause Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n canvasAndContext.canvas.width = 0;\n canvasAndContext.canvas.height = 0;\n canvasAndContext.canvas = null;\n canvasAndContext.context = null;\n }\n\n /**\n * @private\n */\n _createCanvas(width, height) {\n unreachable(\"Abstract method `_createCanvas` called.\");\n }\n}\n\nclass BaseCMapReaderFactory {\n constructor({ baseUrl = null, isCompressed = false }) {\n if (this.constructor === BaseCMapReaderFactory) {\n unreachable(\"Cannot initialize BaseCMapReaderFactory.\");\n }\n this.baseUrl = baseUrl;\n this.isCompressed = isCompressed;\n }\n\n async fetch({ name }) {\n if (!this.baseUrl) {\n throw new Error(\n 'The CMap \"baseUrl\" parameter must be specified, ensure that ' +\n 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.'\n );\n }\n if (!name) {\n throw new Error(\"CMap name must be specified.\");\n }\n const url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\n const compressionType = this.isCompressed\n ? CMapCompressionType.BINARY\n : CMapCompressionType.NONE;\n\n return this._fetchData(url, compressionType).catch(reason => {\n throw new Error(\n `Unable to load ${this.isCompressed ? \"binary \" : \"\"}CMap at: ${url}`\n );\n });\n }\n\n /**\n * @private\n */\n _fetchData(url, compressionType) {\n unreachable(\"Abstract method `_fetchData` called.\");\n }\n}\n\nclass BaseStandardFontDataFactory {\n constructor({ baseUrl = null }) {\n if (this.constructor === BaseStandardFontDataFactory) {\n unreachable(\"Cannot initialize BaseStandardFontDataFactory.\");\n }\n this.baseUrl = baseUrl;\n }\n\n async fetch({ filename }) {\n if (!this.baseUrl) {\n throw new Error(\n 'The standard font \"baseUrl\" parameter must be specified, ensure that ' +\n 'the \"standardFontDataUrl\" API parameter is provided.'\n );\n }\n if (!filename) {\n throw new Error(\"Font filename must be specified.\");\n }\n const url = `${this.baseUrl}${filename}`;\n\n return this._fetchData(url).catch(reason => {\n throw new Error(`Unable to load font data at: ${url}`);\n });\n }\n\n /**\n * @private\n */\n _fetchData(url) {\n unreachable(\"Abstract method `_fetchData` called.\");\n }\n}\n\nclass BaseSVGFactory {\n constructor() {\n if (this.constructor === BaseSVGFactory) {\n unreachable(\"Cannot initialize BaseSVGFactory.\");\n }\n }\n\n create(width, height) {\n if (width <= 0 || height <= 0) {\n throw new Error(\"Invalid SVG dimensions\");\n }\n const svg = this._createSVG(\"svg:svg\");\n svg.setAttribute(\"version\", \"1.1\");\n svg.setAttribute(\"width\", `${width}px`);\n svg.setAttribute(\"height\", `${height}px`);\n svg.setAttribute(\"preserveAspectRatio\", \"none\");\n svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n\n return svg;\n }\n\n createElement(type) {\n if (typeof type !== \"string\") {\n throw new Error(\"Invalid SVG element type\");\n }\n return this._createSVG(type);\n }\n\n /**\n * @private\n */\n _createSVG(type) {\n unreachable(\"Abstract method `_createSVG` called.\");\n }\n}\n\nexport {\n BaseCanvasFactory,\n BaseCMapReaderFactory,\n BaseStandardFontDataFactory,\n BaseSVGFactory,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n assert,\n createPromiseCapability,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isSameOrigin,\n MissingPDFException,\n PasswordException,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n loadScript,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeStandardFontDataFactory,\n} from \"./node_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\nconst DefaultCanvasFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultStandardFontDataFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef {function} IPDFStreamFactory\n * @param {DocumentInitParameters} params - The document initialization\n * parameters. The \"url\" key is always present.\n * @returns {Promise} A promise, which is resolved with an instance of\n * {IPDFStream}.\n * @ignore\n */\n\n/**\n * @type IPDFStreamFactory\n * @private\n */\nlet createPDFNetworkStream;\n\n/**\n * Sets the function that instantiates an {IPDFStream} as an alternative PDF\n * data transport.\n *\n * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function\n * that takes document initialization parameters (including a \"url\") and\n * returns a promise which is resolved with an instance of {IPDFStream}.\n * @ignore\n */\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string|URL} [url] - The URL of the PDF.\n * @property {TypedArray|Array|string} [data] - Binary PDF data. Use\n * typed arrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {TypedArray} [initialData] - A typed array with the first portion\n * or all of the pdf data. Used by the extension since some data is already\n * loaded before the switch to range requests.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of font rendering, and\n * when parsing PDF functions. The default value is `true`.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string|URL|TypedArray|PDFDataRangeTransport|DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n const task = new PDFDocumentLoadingTask();\n\n let source;\n if (typeof src === \"string\" || src instanceof URL) {\n source = { url: src };\n } else if (isArrayBuffer(src)) {\n source = { data: src };\n } else if (src instanceof PDFDataRangeTransport) {\n source = { range: src };\n } else {\n if (typeof src !== \"object\") {\n throw new Error(\n \"Invalid parameter in getDocument, \" +\n \"need either string, URL, Uint8Array, or parameter object.\"\n );\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n source = src;\n }\n const params = Object.create(null);\n let rangeTransport = null,\n worker = null;\n\n for (const key in source) {\n const value = source[key];\n\n switch (key) {\n case \"url\":\n if (typeof window !== \"undefined\") {\n try {\n // The full path is required in the 'url' field.\n params[key] = new URL(value, window.location).href;\n continue;\n } catch (ex) {\n warn(`Cannot create valid URL: \"${ex}\".`);\n }\n } else if (typeof value === \"string\" || value instanceof URL) {\n params[key] = value.toString(); // Support Node.js environments.\n continue;\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n case \"range\":\n rangeTransport = value;\n continue;\n case \"worker\":\n worker = value;\n continue;\n case \"data\":\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n value instanceof Buffer // eslint-disable-line no-undef\n ) {\n params[key] = new Uint8Array(value);\n } else if (value instanceof Uint8Array) {\n break; // Use the data as-is when it's already a Uint8Array.\n } else if (typeof value === \"string\") {\n params[key] = stringToBytes(value);\n } else if (\n typeof value === \"object\" &&\n value !== null &&\n !isNaN(value.length)\n ) {\n params[key] = new Uint8Array(value);\n } else if (isArrayBuffer(value)) {\n params[key] = new Uint8Array(value);\n } else {\n throw new Error(\n \"Invalid PDF binary data: either typed array, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n }\n continue;\n }\n params[key] = value;\n }\n\n params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n params.CMapReaderFactory =\n params.CMapReaderFactory || DefaultCMapReaderFactory;\n params.StandardFontDataFactory =\n params.StandardFontDataFactory || DefaultStandardFontDataFactory;\n params.ignoreErrors = params.stopAtErrors !== true;\n params.fontExtraProperties = params.fontExtraProperties === true;\n params.pdfBug = params.pdfBug === true;\n params.enableXfa = params.enableXfa === true;\n\n if (\n typeof params.docBaseUrl !== \"string\" ||\n isDataScheme(params.docBaseUrl)\n ) {\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n params.docBaseUrl = null;\n }\n if (!Number.isInteger(params.maxImageSize)) {\n params.maxImageSize = -1;\n }\n if (typeof params.useWorkerFetch !== \"boolean\") {\n params.useWorkerFetch =\n params.CMapReaderFactory === DOMCMapReaderFactory &&\n params.StandardFontDataFactory === DOMStandardFontDataFactory;\n }\n if (typeof params.isEvalSupported !== \"boolean\") {\n params.isEvalSupported = true;\n }\n if (typeof params.disableFontFace !== \"boolean\") {\n params.disableFontFace =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS;\n }\n if (typeof params.useSystemFonts !== \"boolean\") {\n params.useSystemFonts =\n !(\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n isNodeJS\n ) && !params.disableFontFace;\n }\n if (typeof params.ownerDocument === \"undefined\") {\n params.ownerDocument = globalThis.document;\n }\n\n if (typeof params.disableRange !== \"boolean\") {\n params.disableRange = false;\n }\n if (typeof params.disableStream !== \"boolean\") {\n params.disableStream = false;\n }\n if (typeof params.disableAutoFetch !== \"boolean\") {\n params.disableAutoFetch = false;\n }\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(params.verbosity);\n\n if (!worker) {\n const workerParams = {\n verbosity: params.verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n const docId = task.docId;\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(\n worker,\n params,\n rangeTransport,\n docId\n );\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(\n {\n length: params.length,\n initialData: params.initialData,\n progressiveDone: params.progressiveDone,\n contentDispositionFilename: params.contentDispositionFilename,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n },\n rangeTransport\n );\n } else if (!params.data) {\n networkStream = createPDFNetworkStream({\n url: params.url,\n length: params.length,\n httpHeaders: params.httpHeaders,\n withCredentials: params.withCredentials,\n rangeChunkSize: params.rangeChunkSize,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n });\n }\n resolve(networkStream);\n });\n\n return Promise.all([workerIdPromise, networkStreamPromise]).then(\n function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new MessageHandler(\n docId,\n workerId,\n worker.port\n );\n messageHandler.postMessageTransfers = worker.postMessageTransfers;\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n params\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n }\n );\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @param {PDFDataRangeTransport} pdfDataRangeTransport\n * @param {string} docId - Unique document ID, used in `MessageHandler`.\n * @returns {Promise} A promise that is resolved when the worker ID of the\n * `MessageHandler` is known.\n * @private\n */\nfunction _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\n if (worker.destroyed) {\n return Promise.reject(new Error(\"Worker was destroyed\"));\n }\n\n if (pdfDataRangeTransport) {\n source.length = pdfDataRangeTransport.length;\n source.initialData = pdfDataRangeTransport.initialData;\n source.progressiveDone = pdfDataRangeTransport.progressiveDone;\n source.contentDispositionFilename =\n pdfDataRangeTransport.contentDispositionFilename;\n }\n return worker.messageHandler\n .sendWithPromise(\"GetDocRequest\", {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n // Only send the required properties, and *not* the entire object.\n source: {\n data: source.data,\n url: source.url,\n password: source.password,\n disableAutoFetch: source.disableAutoFetch,\n rangeChunkSize: source.rangeChunkSize,\n length: source.length,\n },\n maxImageSize: source.maxImageSize,\n disableFontFace: source.disableFontFace,\n postMessageTransfers: worker.postMessageTransfers,\n docBaseUrl: source.docBaseUrl,\n ignoreErrors: source.ignoreErrors,\n isEvalSupported: source.isEvalSupported,\n fontExtraProperties: source.fontExtraProperties,\n enableXfa: source.enableXfa,\n useSystemFonts: source.useSystemFonts,\n cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,\n standardFontDataUrl: source.useWorkerFetch\n ? source.standardFontDataUrl\n : null,\n })\n .then(function (workerId) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n });\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n *\n * @typedef {Object} PDFDocumentLoadingTask\n * @property {string} docId - Unique identifier for the document loading task.\n * @property {boolean} destroyed - Whether the loading task is destroyed or not.\n * @property {function} [onPassword] - Callback to request a password if a wrong\n * or no password was provided. The callback receives two parameters: a\n * function that should be called with the new password, and a reason (see\n * {@link PasswordResponses}).\n * @property {function} [onProgress] - Callback to be able to monitor the\n * loading progress of the PDF file (necessary to implement e.g. a loading\n * bar). The callback receives an {@link OnProgressParameters} argument.\n * @property {function} [onUnsupportedFeature] - Callback for when an\n * unsupported feature is used in the PDF document. The callback receives an\n * {@link UNSUPPORTED_FEATURES} argument.\n * @property {Promise} promise - Promise for document loading\n * task completion.\n * @property {function} destroy - Abort all network requests and destroy\n * the worker. Returns a promise that is resolved when destruction is\n * completed.\n */\n\n/**\n * @type {any}\n * @ignore\n */\nconst PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() {\n let nextDocumentId = 0;\n\n /**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\n // eslint-disable-next-line no-shadow\n class PDFDocumentLoadingTask {\n constructor() {\n this._capability = createPromiseCapability();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = \"d\" + nextDocumentId++;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n\n /**\n * Callback for when an unsupported feature is used in the PDF document.\n * The callback receives an {@link UNSUPPORTED_FEATURES} argument.\n * @type {function}\n */\n this.onUnsupportedFeature = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n destroy() {\n this.destroyed = true;\n\n const transportDestroyed = !this._transport\n ? Promise.resolve()\n : this._transport.destroy();\n return transportDestroyed.then(() => {\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n });\n }\n }\n return PDFDocumentLoadingTask;\n})();\n\n/**\n * Abstract class to support range requests file loading.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = createPromiseCapability();\n }\n\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n Object.defineProperty(this, \"fingerprint\", {\n get() {\n deprecated(\n \"`PDFDocumentProxy.fingerprint`, \" +\n \"please use `PDFDocumentProxy.fingerprints` instead.\"\n );\n return this.fingerprints[0];\n },\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return !!this._transport._htmlForXfa;\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise>>} A promise that is resolved\n * with a mapping from named destinations to references.\n *\n * This can be slow for large documents. Use `getDestination` instead.\n */\n getDestinations() {\n return this._transport.getDestinations();\n }\n\n /**\n * @param {string} id - The named destination to get.\n * @returns {Promise | null>} A promise that is resolved with all\n * information of the given named destination, or `null` when the named\n * destination is not present in the PDF file.\n */\n getDestination(id) {\n return this._transport.getDestination(id);\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} containing the page labels that correspond to the page\n * indexes, or `null` when no page labels are present in the PDF file.\n */\n getPageLabels() {\n return this._transport.getPageLabels();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page layout name.\n */\n getPageLayout() {\n return this._transport.getPageLayout();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a {string}\n * containing the page mode name.\n */\n getPageMode() {\n return this._transport.getPageMode();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} containing the viewer preferences, or `null` when no viewer\n * preferences are present in the PDF file.\n */\n getViewerPreferences() {\n return this._transport.getViewerPreferences();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an {Array}\n * containing the destination, or `null` when no open action is present\n * in the PDF.\n */\n getOpenAction() {\n return this._transport.getOpenAction();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a lookup table\n * for mapping named attachments to their content.\n */\n getAttachments() {\n return this._transport.getAttachments();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} of all the JavaScript strings in the name tree, or `null`\n * if no JavaScript exists.\n */\n getJavaScript() {\n return this._transport.getJavaScript();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with the JavaScript actions:\n * - from the name tree (like getJavaScript);\n * - from A or AA entries in the catalog dictionary.\n * , or `null` if no JavaScript exists.\n */\n getJSActions() {\n return this._transport.getDocJSActions();\n }\n\n /**\n * @typedef {Object} OutlineNode\n * @property {string} title\n * @property {boolean} bold\n * @property {boolean} italic\n * @property {Uint8ClampedArray} color - The color in RGB format to use for\n * display purposes.\n * @property {string | Array | null} dest\n * @property {string | null} url\n * @property {string | undefined} unsafeUrl\n * @property {boolean | undefined} newWindow\n * @property {number | undefined} count\n * @property {Array} items\n */\n\n /**\n * @returns {Promise>} A promise that is resolved with an\n * {Array} that is a tree outline (if it has one) of the PDF file.\n */\n getOutline() {\n return this._transport.getOutline();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {@link OptionalContentConfig} that contains all the optional content\n * groups (assuming that the document has any).\n */\n getOptionalContentConfig() {\n return this._transport.getOptionalContentConfig();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with\n * an {Array} that contains the permission flags for the PDF document, or\n * `null` when no permissions are present in the PDF file.\n */\n getPermissions() {\n return this._transport.getPermissions();\n }\n\n /**\n * @returns {Promise<{ info: Object, metadata: Metadata }>} A promise that is\n * resolved with an {Object} that has `info` and `metadata` properties.\n * `info` is an {Object} filled with anything available in the information\n * dictionary and similarly `metadata` is a {Metadata} object with\n * information from the metadata section of the PDF.\n */\n getMetadata() {\n return this._transport.getMetadata();\n }\n\n /**\n * @typedef {Object} MarkInfo\n * Properties correspond to Table 321 of the PDF 32000-1:2008 spec.\n * @property {boolean} Marked\n * @property {boolean} UserProperties\n * @property {boolean} Suspects\n */\n\n /**\n * @returns {Promise} A promise that is resolved with\n * a {MarkInfo} object that contains the MarkInfo flags for the PDF\n * document, or `null` when no MarkInfo values are present in the PDF file.\n */\n getMarkInfo() {\n return this._transport.getMarkInfo();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {TypedArray} that has the raw data from the PDF.\n */\n getData() {\n return this._transport.getData();\n }\n\n /**\n * @returns {Promise<{ length: number }>} A promise that is resolved when the\n * document's data is loaded. It is resolved with an {Object} that contains\n * the `length` property that indicates size of the PDF data in bytes.\n */\n getDownloadInfo() {\n return this._transport.downloadInfoCapability.promise;\n }\n\n /**\n * @typedef {Object} PDFDocumentStats\n * @property {Object} streamTypes - Used stream types in the\n * document (an item is set to true if specific stream ID was used in the\n * document).\n * @property {Object} fontTypes - Used font types in the\n * document (an item is set to true if specific font ID was used in the\n * document).\n */\n\n /**\n * @returns {Promise} A promise this is resolved with\n * current statistics about document structures (see\n * {@link PDFDocumentStats}).\n */\n getStats() {\n return this._transport.getStats();\n }\n\n /**\n * Cleans up resources allocated by the document on both the main and worker\n * threads.\n *\n * NOTE: Do not, under any circumstances, call this method when rendering is\n * currently ongoing since that may lead to rendering errors.\n *\n * @param {boolean} [keepLoadedFonts] - Let fonts remain attached to the DOM.\n * NOTE: This will increase persistent memory usage, hence don't use this\n * option unless absolutely necessary. The default value is `false`.\n * @returns {Promise} A promise that is resolved when clean-up has finished.\n */\n cleanup(keepLoadedFonts = false) {\n return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);\n }\n\n /**\n * Destroys the current document instance and terminates the worker.\n */\n destroy() {\n return this.loadingTask.destroy();\n }\n\n /**\n * @type {DocumentInitParameters} A subset of the current\n * {DocumentInitParameters}, which are needed in the viewer.\n */\n get loadingParams() {\n return this._transport.loadingParams;\n }\n\n /**\n * @type {PDFDocumentLoadingTask} The loadingTask for the current document.\n */\n get loadingTask() {\n return this._transport.loadingTask;\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {Uint8Array} containing the full data of the saved document.\n */\n saveDocument() {\n if (\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n this._transport.annotationStorage.size <= 0\n ) {\n deprecated(\n \"saveDocument called while `annotationStorage` is empty, \" +\n \"please use the getData-method instead.\"\n );\n }\n return this._transport.saveDocument();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing /AcroForm field data for the JS sandbox,\n * or `null` when no field data is present in the PDF file.\n */\n getFieldObjects() {\n return this._transport.getFieldObjects();\n }\n\n /**\n * @returns {Promise} A promise that is resolved with `true`\n * if some /AcroForm fields have JavaScript actions.\n */\n hasJSActions() {\n return this._transport.hasJSActions();\n }\n\n /**\n * @returns {Promise | null>} A promise that is resolved with an\n * {Array} containing IDs of annotations that have a calculation\n * action, or `null` when no such annotations are present in the PDF file.\n */\n getCalculationOrderIds() {\n return this._transport.getCalculationOrderIds();\n }\n}\n\n/**\n * Page getViewport parameters.\n *\n * @typedef {Object} GetViewportParameters\n * @property {number} scale - The desired scale of the viewport.\n * @property {number} [rotation] - The desired rotation, in degrees, of\n * the viewport. If omitted it defaults to the page rotation.\n * @property {number} [offsetX] - The horizontal, i.e. x-axis, offset.\n * The default value is `0`.\n * @property {number} [offsetY] - The vertical, i.e. y-axis, offset.\n * The default value is `0`.\n * @property {boolean} [dontFlip] - If true, the y-axis will not be\n * flipped. The default value is `false`.\n */\n\n/**\n * Page getTextContent parameters.\n *\n * @typedef {Object} getTextContentParameters\n * @property {boolean} normalizeWhitespace - Replaces all occurrences of\n * whitespace with standard spaces (0x20). The default value is `false`.\n * @property {boolean} disableCombineTextItems - Do not attempt to combine\n * same line {@link TextItem}'s. The default value is `false`.\n * @property {boolean} [includeMarkedContent] - When true include marked\n * content items in the items array of TextContent. The default is `false`.\n */\n\n/**\n * Page text content.\n *\n * @typedef {Object} TextContent\n * @property {Array} items - Array of\n * {@link TextItem} and {@link TextMarkedContent} objects. TextMarkedContent\n * items are included when includeMarkedContent is true.\n * @property {Object} styles - {@link TextStyle} objects,\n * indexed by font name.\n */\n\n/**\n * Page text content part.\n *\n * @typedef {Object} TextItem\n * @property {string} str - Text content.\n * @property {string} dir - Text direction: 'ttb', 'ltr' or 'rtl'.\n * @property {Array} transform - Transformation matrix.\n * @property {number} width - Width in device space.\n * @property {number} height - Height in device space.\n * @property {string} fontName - Font name used by PDF.js for converted font.\n * @property {boolean} hasEOL - Indicating if the text content is followed by a\n * line-break.\n */\n\n/**\n * Page text marked content part.\n *\n * @typedef {Object} TextMarkedContent\n * @property {string} type - Either 'beginMarkedContent',\n * 'beginMarkedContentProps', or 'endMarkedContent'.\n * @property {string} id - The marked content identifier. Only used for type\n * 'beginMarkedContentProps'.\n */\n\n/**\n * Text style.\n *\n * @typedef {Object} TextStyle\n * @property {number} ascent - Font ascent.\n * @property {number} descent - Font descent.\n * @property {boolean} vertical - Whether or not the text is in vertical mode.\n * @property {string} fontFamily - The possible font family.\n */\n\n/**\n * Page annotation parameters.\n *\n * @typedef {Object} GetAnnotationsParameters\n * @property {string} [intent] - Determines the annotations that are fetched,\n * can be either 'display' (viewable annotations) or 'print' (printable\n * annotations). If the parameter is omitted, all annotations are fetched.\n */\n\n/**\n * Page render parameters.\n *\n * @typedef {Object} RenderParameters\n * @property {Object} canvasContext - A 2D context of a DOM Canvas object.\n * @property {PageViewport} viewport - Rendering viewport obtained by calling\n * the `PDFPageProxy.getViewport` method.\n * @property {string} [intent] - Rendering intent, can be 'display' or 'print'.\n * The default value is 'display'.\n * @property {boolean} [renderInteractiveForms] - Whether or not interactive\n * form elements are rendered in the display layer. If so, we do not render\n * them on the canvas as well. The default value is `false`.\n * @property {Array} [transform] - Additional transform, applied just\n * before viewport transform.\n * @property {Object} [imageLayer] - An object that has `beginLayout`,\n * `endLayout` and `appendImage` functions.\n * @property {Object} [canvasFactory] - The factory instance that will be used\n * when creating canvases. The default value is {new DOMCanvasFactory()}.\n * @property {Object | string} [background] - Background to use for the canvas.\n * Any valid `canvas.fillStyle` can be used: a `DOMString` parsed as CSS\n * value, a `CanvasGradient` object (a linear or radial gradient) or\n * a `CanvasPattern` object (a repetitive image). The default value is\n * 'rgb(255,255,255)'.\n * @property {boolean} [includeAnnotationStorage] - Render stored interactive\n * form element data, from the {@link AnnotationStorage}-instance, onto the\n * canvas itself; useful e.g. for printing. The default value is `false`.\n * @property {Promise} [optionalContentConfigPromise] -\n * A promise that should resolve with an {@link OptionalContentConfig}\n * created from `PDFDocumentProxy.getOptionalContentConfig`. If `null`,\n * the configuration will be fetched automatically with the default visibility\n * states set.\n */\n\n/**\n * Page getOperatorList parameters.\n *\n * @typedef {Object} GetOperatorListParameters\n * @property {string} [intent] - Rendering intent, can be 'display' or 'print'.\n * The default value is 'display'.\n */\n\n/**\n * Structure tree node. The root node will have a role \"Root\".\n *\n * @typedef {Object} StructTreeNode\n * @property {Array} children - Array of\n * {@link StructTreeNode} and {@link StructTreeContent} objects.\n * @property {string} role - element's role, already mapped if a role map exists\n * in the PDF.\n */\n\n/**\n * Structure tree content.\n *\n * @typedef {Object} StructTreeContent\n * @property {string} type - either \"content\" for page and stream structure\n * elements or \"object\" for object references.\n * @property {string} id - unique id that will map to the text layer.\n */\n\n/**\n * PDF page operator list.\n *\n * @typedef {Object} PDFOperatorList\n * @property {Array} fnArray - Array containing the operator functions.\n * @property {Array} argsArray - Array containing the arguments of the\n * functions.\n */\n\n/**\n * Proxy to a `PDFPage` in the worker thread.\n */\nclass PDFPageProxy {\n constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) {\n this._pageIndex = pageIndex;\n this._pageInfo = pageInfo;\n this._ownerDocument = ownerDocument;\n this._transport = transport;\n this._stats = pdfBug ? new StatTimer() : null;\n this._pdfBug = pdfBug;\n this.commonObjs = transport.commonObjs;\n this.objs = new PDFObjects();\n\n this.cleanupAfterRender = false;\n this.pendingCleanup = false;\n this._intentStates = new Map();\n this.destroyed = false;\n }\n\n /**\n * @type {number} Page number of the page. First page is 1.\n */\n get pageNumber() {\n return this._pageIndex + 1;\n }\n\n /**\n * @type {number} The number of degrees the page is rotated clockwise.\n */\n get rotate() {\n return this._pageInfo.rotate;\n }\n\n /**\n * @type {RefProxy | null} The reference that points to this page.\n */\n get ref() {\n return this._pageInfo.ref;\n }\n\n /**\n * @type {number} The default size of units in 1/72nds of an inch.\n */\n get userUnit() {\n return this._pageInfo.userUnit;\n }\n\n /**\n * @type {Array} An array of the visible portion of the PDF page in\n * user space units [x1, y1, x2, y2].\n */\n get view() {\n return this._pageInfo.view;\n }\n\n /**\n * @param {GetViewportParameters} params - Viewport parameters.\n * @returns {PageViewport} Contains 'width' and 'height' properties\n * along with transforms required for rendering.\n */\n getViewport({\n scale,\n rotation = this.rotate,\n offsetX = 0,\n offsetY = 0,\n dontFlip = false,\n } = {}) {\n return new PageViewport({\n viewBox: this.view,\n scale,\n rotation,\n offsetX,\n offsetY,\n dontFlip,\n });\n }\n\n /**\n * @param {GetAnnotationsParameters} params - Annotation parameters.\n * @returns {Promise>} A promise that is resolved with an\n * {Array} of the annotation objects.\n */\n getAnnotations({ intent = null } = {}) {\n const renderingIntent =\n intent === \"display\" || intent === \"print\" ? intent : null;\n\n if (\n !this._annotationsPromise ||\n this._annotationsIntent !== renderingIntent\n ) {\n this._annotationsPromise = this._transport.getAnnotations(\n this._pageIndex,\n renderingIntent\n );\n this._annotationsIntent = renderingIntent;\n }\n return this._annotationsPromise;\n }\n\n /**\n * @returns {Promise} A promise that is resolved with an\n * {Object} with JS actions.\n */\n getJSActions() {\n return (this._jsActionsPromise ||= this._transport.getPageJSActions(\n this._pageIndex\n ));\n }\n\n /**\n * @returns {Promise} A promise that is resolved with\n * an {Object} with a fake DOM object (a tree structure where elements\n * are {Object} with a name, attributes (class, style, ...), value and\n * children, very similar to a HTML DOM tree), or `null` if no XFA exists.\n */\n async getXfa() {\n return this._transport._htmlForXfa?.children[this._pageIndex] || null;\n }\n\n /**\n * Begins the process of rendering a page to the desired context.\n *\n * @param {RenderParameters} params - Page render parameters.\n * @returns {RenderTask} An object that contains a promise that is\n * resolved when the page finishes rendering.\n */\n render({\n canvasContext,\n viewport,\n intent = \"display\",\n renderInteractiveForms = false,\n transform = null,\n imageLayer = null,\n canvasFactory = null,\n background = null,\n includeAnnotationStorage = false,\n optionalContentConfigPromise = null,\n }) {\n if (this._stats) {\n this._stats.time(\"Overall\");\n }\n\n const renderingIntent = intent === \"print\" ? \"print\" : \"display\";\n // If there was a pending destroy, cancel it so no cleanup happens during\n // this call to render.\n this.pendingCleanup = false;\n\n if (!optionalContentConfigPromise) {\n optionalContentConfigPromise = this._transport.getOptionalContentConfig();\n }\n\n let intentState = this._intentStates.get(renderingIntent);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(renderingIntent, intentState);\n }\n\n // Ensure that a pending `streamReader` cancel timeout is always aborted.\n if (intentState.streamReaderCancelTimeout) {\n clearTimeout(intentState.streamReaderCancelTimeout);\n intentState.streamReaderCancelTimeout = null;\n }\n\n const canvasFactoryInstance =\n canvasFactory ||\n new DefaultCanvasFactory({ ownerDocument: this._ownerDocument });\n const annotationStorage = includeAnnotationStorage\n ? this._transport.annotationStorage.serializable\n : null;\n\n // If there's no displayReadyCapability yet, then the operatorList\n // was never requested before. Make the request and create the promise.\n if (!intentState.displayReadyCapability) {\n intentState.displayReadyCapability = createPromiseCapability();\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n renderInteractiveForms: renderInteractiveForms === true,\n annotationStorage,\n });\n }\n\n const complete = error => {\n intentState.renderTasks.delete(internalRenderTask);\n\n // Attempt to reduce memory usage during *printing*, by always running\n // cleanup once rendering has finished (regardless of cleanupAfterRender).\n if (this.cleanupAfterRender || renderingIntent === \"print\") {\n this.pendingCleanup = true;\n }\n this._tryCleanup();\n\n if (error) {\n internalRenderTask.capability.reject(error);\n\n this._abortOperatorList({\n intentState,\n reason: error,\n });\n } else {\n internalRenderTask.capability.resolve();\n }\n if (this._stats) {\n this._stats.timeEnd(\"Rendering\");\n this._stats.timeEnd(\"Overall\");\n }\n };\n\n const internalRenderTask = new InternalRenderTask({\n callback: complete,\n // Only include the required properties, and *not* the entire object.\n params: {\n canvasContext,\n viewport,\n transform,\n imageLayer,\n background,\n },\n objs: this.objs,\n commonObjs: this.commonObjs,\n operatorList: intentState.operatorList,\n pageIndex: this._pageIndex,\n canvasFactory: canvasFactoryInstance,\n useRequestAnimationFrame: renderingIntent !== \"print\",\n pdfBug: this._pdfBug,\n });\n\n (intentState.renderTasks ||= new Set()).add(internalRenderTask);\n const renderTask = internalRenderTask.task;\n\n Promise.all([\n intentState.displayReadyCapability.promise,\n optionalContentConfigPromise,\n ])\n .then(([transparency, optionalContentConfig]) => {\n if (this.pendingCleanup) {\n complete();\n return;\n }\n if (this._stats) {\n this._stats.time(\"Rendering\");\n }\n internalRenderTask.initializeGraphics({\n transparency,\n optionalContentConfig,\n });\n internalRenderTask.operatorListChanged();\n })\n .catch(complete);\n\n return renderTask;\n }\n\n /**\n * @param {GetOperatorListParameters} params - Page getOperatorList\n * parameters.\n * @returns {Promise} A promise resolved with an\n * {@link PDFOperatorList} object that represents the page's operator list.\n */\n getOperatorList({ intent = \"display\" } = {}) {\n function operatorListChanged() {\n if (intentState.operatorList.lastChunk) {\n intentState.opListReadCapability.resolve(intentState.operatorList);\n\n intentState.renderTasks.delete(opListTask);\n }\n }\n\n const renderingIntent = `oplist-${\n intent === \"print\" ? \"print\" : \"display\"\n }`;\n let intentState = this._intentStates.get(renderingIntent);\n if (!intentState) {\n intentState = Object.create(null);\n this._intentStates.set(renderingIntent, intentState);\n }\n let opListTask;\n\n if (!intentState.opListReadCapability) {\n opListTask = Object.create(null);\n opListTask.operatorListChanged = operatorListChanged;\n intentState.opListReadCapability = createPromiseCapability();\n (intentState.renderTasks ||= new Set()).add(opListTask);\n intentState.operatorList = {\n fnArray: [],\n argsArray: [],\n lastChunk: false,\n };\n\n if (this._stats) {\n this._stats.time(\"Page Request\");\n }\n this._pumpOperatorList({\n pageIndex: this._pageIndex,\n intent: renderingIntent,\n });\n }\n return intentState.opListReadCapability.promise;\n }\n\n /**\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {ReadableStream} Stream for reading text content chunks.\n */\n streamTextContent({\n normalizeWhitespace = false,\n disableCombineTextItems = false,\n includeMarkedContent = false,\n } = {}) {\n const TEXT_CONTENT_CHUNK_SIZE = 100;\n\n return this._transport.messageHandler.sendWithStream(\n \"GetTextContent\",\n {\n pageIndex: this._pageIndex,\n normalizeWhitespace: normalizeWhitespace === true,\n combineTextItems: disableCombineTextItems !== true,\n includeMarkedContent: includeMarkedContent === true,\n },\n {\n highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\n size(textContent) {\n return textContent.items.length;\n },\n }\n );\n }\n\n /**\n * @param {getTextContentParameters} params - getTextContent parameters.\n * @returns {Promise} A promise that is resolved with a\n * {@link TextContent} object that represents the page's text content.\n */\n getTextContent(params = {}) {\n const readableStream = this.streamTextContent(params);\n\n return new Promise(function (resolve, reject) {\n function pump() {\n reader.read().then(function ({ value, done }) {\n if (done) {\n resolve(textContent);\n return;\n }\n Object.assign(textContent.styles, value.styles);\n textContent.items.push(...value.items);\n pump();\n }, reject);\n }\n\n const reader = readableStream.getReader();\n const textContent = {\n items: [],\n styles: Object.create(null),\n };\n pump();\n });\n }\n\n /**\n * @returns {Promise} A promise that is resolved with a\n * {@link StructTreeNode} object that represents the page's structure tree,\n * or `null` when no structure tree is present for the current page.\n */\n getStructTree() {\n return (this._structTreePromise ||= this._transport.getStructTree(\n this._pageIndex\n ));\n }\n\n /**\n * Destroys the page object.\n * @private\n */\n _destroy() {\n this.destroyed = true;\n this._transport.pageCache[this._pageIndex] = null;\n\n const waitOn = [];\n for (const [intent, intentState] of this._intentStates) {\n this._abortOperatorList({\n intentState,\n reason: new Error(\"Page was destroyed.\"),\n force: true,\n });\n\n if (intent.startsWith(\"oplist-\")) {\n // Avoid errors below, since the renderTasks are just stubs.\n continue;\n }\n for (const internalRenderTask of intentState.renderTasks) {\n waitOn.push(internalRenderTask.completed);\n internalRenderTask.cancel();\n }\n }\n this.objs.clear();\n this._annotationsPromise = null;\n this._jsActionsPromise = null;\n this._structTreePromise = null;\n this.pendingCleanup = false;\n return Promise.all(waitOn);\n }\n\n /**\n * Cleans up resources allocated by the page.\n *\n * @param {boolean} [resetStats] - Reset page stats, if enabled.\n * The default value is `false`.\n * @returns {boolean} Indicates if clean-up was successfully run.\n */\n cleanup(resetStats = false) {\n this.pendingCleanup = true;\n return this._tryCleanup(resetStats);\n }\n\n /**\n * Attempts to clean up if rendering is in a state where that's possible.\n * @private\n */\n _tryCleanup(resetStats = false) {\n if (!this.pendingCleanup) {\n return false;\n }\n for (const { renderTasks, operatorList } of this._intentStates.values()) {\n if (renderTasks.size > 0 || !operatorList.lastChunk) {\n return false;\n }\n }\n\n this._intentStates.clear();\n this.objs.clear();\n this._annotationsPromise = null;\n this._jsActionsPromise = null;\n this._structTreePromise = null;\n if (resetStats && this._stats) {\n this._stats = new StatTimer();\n }\n this.pendingCleanup = false;\n return true;\n }\n\n /**\n * @private\n */\n _startRenderPage(transparency, intent) {\n const intentState = this._intentStates.get(intent);\n if (!intentState) {\n return; // Rendering was cancelled.\n }\n if (this._stats) {\n this._stats.timeEnd(\"Page Request\");\n }\n // TODO Refactor RenderPageRequest to separate rendering\n // and operator list logic\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.resolve(transparency);\n }\n }\n\n /**\n * @private\n */\n _renderPageChunk(operatorListChunk, intentState) {\n // Add the new chunk to the current operator list.\n for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {\n intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\n intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\n }\n intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\n\n // Notify all the rendering tasks there are more operators to be consumed.\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n\n if (operatorListChunk.lastChunk) {\n this._tryCleanup();\n }\n }\n\n /**\n * @private\n */\n _pumpOperatorList(args) {\n assert(\n args.intent,\n 'PDFPageProxy._pumpOperatorList: Expected \"intent\" argument.'\n );\n\n const readableStream = this._transport.messageHandler.sendWithStream(\n \"GetOperatorList\",\n args\n );\n const reader = readableStream.getReader();\n\n const intentState = this._intentStates.get(args.intent);\n intentState.streamReader = reader;\n\n const pump = () => {\n reader.read().then(\n ({ value, done }) => {\n if (done) {\n intentState.streamReader = null;\n return;\n }\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n this._renderPageChunk(value, intentState);\n pump();\n },\n reason => {\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n if (intentState.operatorList) {\n // Mark operator list as complete.\n intentState.operatorList.lastChunk = true;\n\n for (const internalRenderTask of intentState.renderTasks) {\n internalRenderTask.operatorListChanged();\n }\n this._tryCleanup();\n }\n\n if (intentState.displayReadyCapability) {\n intentState.displayReadyCapability.reject(reason);\n } else if (intentState.opListReadCapability) {\n intentState.opListReadCapability.reject(reason);\n } else {\n throw reason;\n }\n }\n );\n };\n pump();\n }\n\n /**\n * @private\n */\n _abortOperatorList({ intentState, reason, force = false }) {\n assert(\n reason instanceof Error ||\n (typeof reason === \"object\" && reason !== null),\n 'PDFPageProxy._abortOperatorList: Expected \"reason\" argument.'\n );\n\n if (!intentState.streamReader) {\n return;\n }\n if (!force) {\n // Ensure that an Error occurring in *only* one `InternalRenderTask`, e.g.\n // multiple render() calls on the same canvas, won't break all rendering.\n if (intentState.renderTasks.size > 0) {\n return;\n }\n // Don't immediately abort parsing on the worker-thread when rendering is\n // cancelled, since that will unnecessarily delay re-rendering when (for\n // partially parsed pages) e.g. zooming/rotation occurs in the viewer.\n if (reason instanceof RenderingCancelledException) {\n intentState.streamReaderCancelTimeout = setTimeout(() => {\n this._abortOperatorList({ intentState, reason, force: true });\n intentState.streamReaderCancelTimeout = null;\n }, RENDERING_CANCELLED_TIMEOUT);\n return;\n }\n }\n intentState.streamReader.cancel(new AbortException(reason?.message));\n intentState.streamReader = null;\n\n if (this._transport.destroyed) {\n return; // Ignore any pending requests if the worker was terminated.\n }\n // Remove the current `intentState`, since a cancelled `getOperatorList`\n // call on the worker-thread cannot be re-started...\n for (const [intent, curIntentState] of this._intentStates) {\n if (curIntentState === intentState) {\n this._intentStates.delete(intent);\n break;\n }\n }\n // ... and force clean-up to ensure that any old state is always removed.\n this.cleanup();\n }\n\n /**\n * @type {Object} Returns page stats, if enabled; returns `null` otherwise.\n */\n get stats() {\n return this._stats;\n }\n}\n\nclass LoopbackPort {\n constructor() {\n this._listeners = [];\n this._deferred = Promise.resolve(undefined);\n }\n\n postMessage(obj, transfers) {\n function cloneValue(value) {\n // Trying to perform a structured clone close to the spec, including\n // transfers.\n if (\n typeof value === \"function\" ||\n typeof value === \"symbol\" ||\n value instanceof URL\n ) {\n throw new Error(\n `LoopbackPort.postMessage - cannot clone: ${value?.toString()}`\n );\n }\n\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n if (cloned.has(value)) {\n // already cloned the object\n return cloned.get(value);\n }\n let buffer, result;\n if ((buffer = value.buffer) && isArrayBuffer(buffer)) {\n // We found object with ArrayBuffer (typed array).\n if (transfers?.includes(buffer)) {\n result = new value.constructor(\n buffer,\n value.byteOffset,\n value.byteLength\n );\n } else {\n result = new value.constructor(value);\n }\n cloned.set(value, result);\n return result;\n }\n if (value instanceof Map) {\n result = new Map();\n cloned.set(value, result); // Adding to cache now for cyclic references.\n for (const [key, val] of value) {\n result.set(key, cloneValue(val));\n }\n return result;\n }\n if (value instanceof Set) {\n result = new Set();\n cloned.set(value, result); // Adding to cache now for cyclic references.\n for (const val of value) {\n result.add(cloneValue(val));\n }\n return result;\n }\n result = Array.isArray(value) ? [] : Object.create(null);\n cloned.set(value, result); // Adding to cache now for cyclic references.\n // Cloning all value and object properties, however ignoring properties\n // defined via getter.\n for (const i in value) {\n let desc,\n p = value;\n while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\n p = Object.getPrototypeOf(p);\n }\n if (typeof desc.value === \"undefined\") {\n continue;\n }\n if (typeof desc.value === \"function\" && !value.hasOwnProperty?.(i)) {\n continue;\n }\n result[i] = cloneValue(desc.value);\n }\n return result;\n }\n\n const cloned = new WeakMap();\n const event = { data: cloneValue(obj) };\n\n this._deferred.then(() => {\n for (const listener of this._listeners) {\n listener.call(this, event);\n }\n });\n }\n\n addEventListener(name, listener) {\n this._listeners.push(listener);\n }\n\n removeEventListener(name, listener) {\n const i = this._listeners.indexOf(listener);\n this._listeners.splice(i, 1);\n }\n\n terminate() {\n this._listeners.length = 0;\n }\n}\n\n/**\n * @typedef {Object} PDFWorkerParameters\n * @property {string} [name] - The name of the worker.\n * @property {Object} [port] - The `workerPort` object.\n * @property {number} [verbosity] - Controls the logging level; the\n * constants from {@link VerbosityLevel} should be used.\n */\n\n/** @type {any} */\nconst PDFWorker = (function PDFWorkerClosure() {\n const pdfWorkerPorts = new WeakMap();\n let isWorkerDisabled = false;\n let fallbackWorkerSrc;\n let nextFakeWorkerId = 0;\n let fakeWorkerCapability;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n // eslint-disable-next-line no-undef\n if (isNodeJS && typeof __non_webpack_require__ === \"function\") {\n // Workers aren't supported in Node.js, force-disabling them there.\n isWorkerDisabled = true;\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"LIB\")) {\n fallbackWorkerSrc = \"../pdf.worker.js\";\n } else {\n fallbackWorkerSrc = \"./pdf.worker.js\";\n }\n } else if (typeof document === \"object\" && \"currentScript\" in document) {\n const pdfjsFilePath = document.currentScript?.src;\n if (pdfjsFilePath) {\n fallbackWorkerSrc = pdfjsFilePath.replace(\n /(\\.(?:min\\.)?js)(\\?.*)?$/i,\n \".worker$1$2\"\n );\n }\n }\n }\n\n function getWorkerSrc() {\n if (GlobalWorkerOptions.workerSrc) {\n return GlobalWorkerOptions.workerSrc;\n }\n if (typeof fallbackWorkerSrc !== \"undefined\") {\n if (!isNodeJS) {\n deprecated('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n return fallbackWorkerSrc;\n }\n throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\n }\n\n function getMainThreadWorkerMessageHandler() {\n let mainWorkerMessageHandler;\n try {\n mainWorkerMessageHandler = globalThis.pdfjsWorker?.WorkerMessageHandler;\n } catch (ex) {\n /* Ignore errors. */\n }\n return mainWorkerMessageHandler || null;\n }\n\n // Loads worker code into main thread.\n function setupFakeWorkerGlobal() {\n if (fakeWorkerCapability) {\n return fakeWorkerCapability.promise;\n }\n fakeWorkerCapability = createPromiseCapability();\n\n const loader = async function () {\n const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();\n\n if (mainWorkerMessageHandler) {\n // The worker was already loaded using e.g. a ` + - @@ -46,17 +42,17 @@ See https://github.com/adobe-type-tools/cmap-resources
-
- - - -
@@ -88,13 +84,13 @@ See https://github.com/adobe-type-tools/cmap-resources