/** * @licstart The following is the entire license notice for the * JavaScript code in this page * * 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. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * JavaScript code in this page */ var __webpack_exports__ = {}; ;// CONCATENATED MODULE: ./src/scripting_api/constants.js const Border = Object.freeze({ s: "solid", d: "dashed", b: "beveled", i: "inset", u: "underline" }); const Cursor = Object.freeze({ visible: 0, hidden: 1, delay: 2 }); const Display = Object.freeze({ visible: 0, hidden: 1, noPrint: 2, noView: 3 }); const Font = Object.freeze({ Times: "Times-Roman", TimesB: "Times-Bold", TimesI: "Times-Italic", TimesBI: "Times-BoldItalic", Helv: "Helvetica", HelvB: "Helvetica-Bold", HelvI: "Helvetica-Oblique", HelvBI: "Helvetica-BoldOblique", Cour: "Courier", CourB: "Courier-Bold", CourI: "Courier-Oblique", CourBI: "Courier-BoldOblique", Symbol: "Symbol", ZapfD: "ZapfDingbats", KaGo: "HeiseiKakuGo-W5-UniJIS-UCS2-H", KaMi: "HeiseiMin-W3-UniJIS-UCS2-H" }); const Highlight = Object.freeze({ n: "none", i: "invert", p: "push", o: "outline" }); const Position = Object.freeze({ textOnly: 0, iconOnly: 1, iconTextV: 2, textIconV: 3, iconTextH: 4, textIconH: 5, overlay: 6 }); const ScaleHow = Object.freeze({ proportional: 0, anamorphic: 1 }); const ScaleWhen = Object.freeze({ always: 0, never: 1, tooBig: 2, tooSmall: 3 }); const Style = Object.freeze({ ch: "check", cr: "cross", di: "diamond", ci: "circle", st: "star", sq: "square" }); const Trans = Object.freeze({ blindsH: "BlindsHorizontal", blindsV: "BlindsVertical", boxI: "BoxIn", boxO: "BoxOut", dissolve: "Dissolve", glitterD: "GlitterDown", glitterR: "GlitterRight", glitterRD: "GlitterRightDown", random: "Random", replace: "Replace", splitHI: "SplitHorizontalIn", splitHO: "SplitHorizontalOut", splitVI: "SplitVerticalIn", splitVO: "SplitVerticalOut", wipeD: "WipeDown", wipeL: "WipeLeft", wipeR: "WipeRight", wipeU: "WipeUp" }); const ZoomType = Object.freeze({ none: "NoVary", fitP: "FitPage", fitW: "FitWidth", fitH: "FitHeight", fitV: "FitVisibleWidth", pref: "Preferred", refW: "ReflowWidth" }); const GlobalConstants = Object.freeze({ IDS_GREATER_THAN: "Invalid value: must be greater than or equal to % s.", IDS_GT_AND_LT: "Invalid value: must be greater than or equal to % s " + "and less than or equal to % s.", IDS_LESS_THAN: "Invalid value: must be less than or equal to % s.", IDS_INVALID_MONTH: "** Invalid **", IDS_INVALID_DATE: "Invalid date / time: please ensure that the date / time exists. Field", IDS_INVALID_DATE2: " should match format ", IDS_INVALID_VALUE: "The value entered does not match the format of the field", IDS_AM: "am", IDS_PM: "pm", IDS_MONTH_INFO: "January[1] February[2] March[3] April[4] May[5] " + "June[6] July[7] August[8] September[9] October[10] " + "November[11] December[12] Sept[9] Jan[1] Feb[2] Mar[3] " + "Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov[11] Dec[12]", IDS_STARTUP_CONSOLE_MSG: "** ^ _ ^ **", RE_NUMBER_ENTRY_DOT_SEP: ["[+-]?\\d*\\.?\\d*"], RE_NUMBER_COMMIT_DOT_SEP: ["[+-]?\\d+(\\.\\d+)?", "[+-]?\\.\\d+", "[+-]?\\d+\\."], RE_NUMBER_ENTRY_COMMA_SEP: ["[+-]?\\d*,?\\d*"], RE_NUMBER_COMMIT_COMMA_SEP: ["[+-]?\\d+([.,]\\d+)?", "[+-]?[.,]\\d+", "[+-]?\\d+[.,]"], RE_ZIP_ENTRY: ["\\d{0,5}"], RE_ZIP_COMMIT: ["\\d{5}"], RE_ZIP4_ENTRY: ["\\d{0,5}(\\.|[- ])?\\d{0,4}"], RE_ZIP4_COMMIT: ["\\d{5}(\\.|[- ])?\\d{4}"], RE_PHONE_ENTRY: ["\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", "\\(\\d{0,3}", "\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", "\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", "\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", "011(\\.|[- \\d])*"], RE_PHONE_COMMIT: ["\\d{3}(\\.|[- ])?\\d{4}", "\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", "\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", "011(\\.|[- \\d])*"], RE_SSN_ENTRY: ["\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"], RE_SSN_COMMIT: ["\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"] }); ;// CONCATENATED MODULE: ./src/scripting_api/common.js const FieldType = { none: 0, number: 1, percent: 2, date: 3, time: 4 }; function createActionsMap(actions) { const actionsMap = new Map(); if (actions) { for (const [eventType, actionsForEvent] of Object.entries(actions)) { actionsMap.set(eventType, actionsForEvent); } } return actionsMap; } function getFieldType(actions) { let format = actions.get("Format"); if (!format) { return FieldType.none; } format = format[0]; format = format.trim(); if (format.startsWith("AFNumber_")) { return FieldType.number; } if (format.startsWith("AFPercent_")) { return FieldType.percent; } if (format.startsWith("AFDate_")) { return FieldType.date; } if (format.startsWith("AFTime_")) { return FieldType.time; } return FieldType.none; } ;// CONCATENATED MODULE: ./src/shared/scripting_utils.js function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } function scaleAndClamp(x) { return Math.max(0, Math.min(255, 255 * x)); } class ColorConverters { static CMYK_G([c, y, m, k]) { return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } static G_CMYK([g]) { return ["CMYK", 0, 0, 0, 1 - g]; } static G_RGB([g]) { return ["RGB", g, g, g]; } static G_rgb([g]) { g = scaleAndClamp(g); return [g, g, g]; } static G_HTML([g]) { const G = makeColorComp(g); return `#${G}${G}${G}`; } static RGB_G([r, g, b]) { return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } static RGB_rgb(color) { return color.map(scaleAndClamp); } static RGB_HTML(color) { return `#${color.map(makeColorComp).join("")}`; } static T_HTML() { return "#00000000"; } static T_rgb() { return [null]; } static CMYK_RGB([c, y, m, k]) { return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } static CMYK_rgb([c, y, m, k]) { return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; } static CMYK_HTML(components) { const rgb = this.CMYK_RGB(components).slice(1); return this.RGB_HTML(rgb); } static RGB_CMYK([r, g, b]) { 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]; } } ;// CONCATENATED MODULE: ./src/scripting_api/pdf_object.js class PDFObject { constructor(data) { this._expandos = Object.create(null); this._send = data.send || null; this._id = data.id || null; } } ;// CONCATENATED MODULE: ./src/scripting_api/color.js class Color extends PDFObject { constructor() { super({}); this.transparent = ["T"]; this.black = ["G", 0]; this.white = ["G", 1]; this.red = ["RGB", 1, 0, 0]; this.green = ["RGB", 0, 1, 0]; this.blue = ["RGB", 0, 0, 1]; this.cyan = ["CMYK", 1, 0, 0, 0]; this.magenta = ["CMYK", 0, 1, 0, 0]; this.yellow = ["CMYK", 0, 0, 1, 0]; this.dkGray = ["G", 0.25]; this.gray = ["G", 0.5]; this.ltGray = ["G", 0.75]; } static _isValidSpace(cColorSpace) { return typeof cColorSpace === "string" && (cColorSpace === "T" || cColorSpace === "G" || cColorSpace === "RGB" || cColorSpace === "CMYK"); } static _isValidColor(colorArray) { if (!Array.isArray(colorArray) || colorArray.length === 0) { return false; } const space = colorArray[0]; if (!Color._isValidSpace(space)) { return false; } switch (space) { case "T": if (colorArray.length !== 1) { return false; } break; case "G": if (colorArray.length !== 2) { return false; } break; case "RGB": if (colorArray.length !== 4) { return false; } break; case "CMYK": if (colorArray.length !== 5) { return false; } break; default: return false; } return colorArray.slice(1).every(c => typeof c === "number" && c >= 0 && c <= 1); } static _getCorrectColor(colorArray) { return Color._isValidColor(colorArray) ? colorArray : ["G", 0]; } convert(colorArray, cColorSpace) { if (!Color._isValidSpace(cColorSpace)) { return this.black; } if (cColorSpace === "T") { return ["T"]; } colorArray = Color._getCorrectColor(colorArray); if (colorArray[0] === cColorSpace) { return colorArray; } if (colorArray[0] === "T") { return this.convert(this.black, cColorSpace); } return ColorConverters[`${colorArray[0]}_${cColorSpace}`](colorArray.slice(1)); } equal(colorArray1, colorArray2) { colorArray1 = Color._getCorrectColor(colorArray1); colorArray2 = Color._getCorrectColor(colorArray2); if (colorArray1[0] === "T" || colorArray2[0] === "T") { return colorArray1[0] === "T" && colorArray2[0] === "T"; } if (colorArray1[0] !== colorArray2[0]) { colorArray2 = this.convert(colorArray2, colorArray1[0]); } return colorArray1.slice(1).every((c, i) => c === colorArray2[i + 1]); } } ;// CONCATENATED MODULE: ./src/scripting_api/field.js class Field extends PDFObject { constructor(data) { super(data); this.alignment = data.alignment || "left"; this.borderStyle = data.borderStyle || ""; this.buttonAlignX = data.buttonAlignX || 50; this.buttonAlignY = data.buttonAlignY || 50; this.buttonFitBounds = data.buttonFitBounds; this.buttonPosition = data.buttonPosition; this.buttonScaleHow = data.buttonScaleHow; this.ButtonScaleWhen = data.buttonScaleWhen; this.calcOrderIndex = data.calcOrderIndex; this.comb = data.comb; this.commitOnSelChange = data.commitOnSelChange; this.currentValueIndices = data.currentValueIndices; this.defaultStyle = data.defaultStyle; this.defaultValue = data.defaultValue; this.doNotScroll = data.doNotScroll; this.doNotSpellCheck = data.doNotSpellCheck; this.delay = data.delay; this.display = data.display; this.doc = data.doc.wrapped; this.editable = data.editable; this.exportValues = data.exportValues; this.fileSelect = data.fileSelect; this.hidden = data.hidden; this.highlight = data.highlight; this.lineWidth = data.lineWidth; this.multiline = data.multiline; this.multipleSelection = !!data.multipleSelection; this.name = data.name; this.password = data.password; this.print = data.print; this.radiosInUnison = data.radiosInUnison; this.readonly = data.readonly; this.rect = data.rect; this.required = data.required; this.richText = data.richText; this.richValue = data.richValue; this.style = data.style; this.submitName = data.submitName; this.textFont = data.textFont; this.textSize = data.textSize; this.type = data.type; this.userName = data.userName; this._actions = createActionsMap(data.actions); this._browseForFileToSubmit = data.browseForFileToSubmit || null; this._buttonCaption = null; this._buttonIcon = null; this._charLimit = data.charLimit; this._children = null; this._currentValueIndices = data.currentValueIndices || 0; this._document = data.doc; this._fieldPath = data.fieldPath; this._fillColor = data.fillColor || ["T"]; this._isChoice = Array.isArray(data.items); this._items = data.items || []; this._hasValue = data.hasOwnProperty("value"); this._page = data.page || 0; this._strokeColor = data.strokeColor || ["G", 0]; this._textColor = data.textColor || ["G", 0]; this._value = null; this._kidIds = data.kidIds || null; this._fieldType = getFieldType(this._actions); this._siblings = data.siblings || null; this._rotation = data.rotation || 0; this._globalEval = data.globalEval; this._appObjects = data.appObjects; this.value = data.value || ""; } get currentValueIndices() { if (!this._isChoice) { return 0; } return this._currentValueIndices; } set currentValueIndices(indices) { if (!this._isChoice) { return; } if (!Array.isArray(indices)) { indices = [indices]; } if (!indices.every(i => typeof i === "number" && Number.isInteger(i) && i >= 0 && i < this.numItems)) { return; } indices.sort(); if (this.multipleSelection) { this._currentValueIndices = indices; this._value = []; indices.forEach(i => { this._value.push(this._items[i].displayValue); }); } else if (indices.length > 0) { indices = indices.splice(1, indices.length - 1); this._currentValueIndices = indices[0]; this._value = this._items[this._currentValueIndices]; } this._send({ id: this._id, indices }); } get fillColor() { return this._fillColor; } set fillColor(color) { if (Color._isValidColor(color)) { this._fillColor = color; } } get bgColor() { return this.fillColor; } set bgColor(color) { this.fillColor = color; } get charLimit() { return this._charLimit; } set charLimit(limit) { if (typeof limit !== "number") { throw new Error("Invalid argument value"); } this._charLimit = Math.max(0, Math.floor(limit)); } get numItems() { if (!this._isChoice) { throw new Error("Not a choice widget"); } return this._items.length; } set numItems(_) { throw new Error("field.numItems is read-only"); } get strokeColor() { return this._strokeColor; } set strokeColor(color) { if (Color._isValidColor(color)) { this._strokeColor = color; } } get borderColor() { return this.strokeColor; } set borderColor(color) { this.strokeColor = color; } get page() { return this._page; } set page(_) { throw new Error("field.page is read-only"); } get rotation() { return this._rotation; } set rotation(angle) { angle = Math.floor(angle); if (angle % 90 !== 0) { throw new Error("Invalid rotation: must be a multiple of 90"); } angle %= 360; if (angle < 0) { angle += 360; } this._rotation = angle; } get textColor() { return this._textColor; } set textColor(color) { if (Color._isValidColor(color)) { this._textColor = color; } } get fgColor() { return this.textColor; } set fgColor(color) { this.textColor = color; } get value() { return this._value; } set value(value) { if (this._isChoice) { this._setChoiceValue(value); return; } if (value === "" || typeof value !== "string" || this._fieldType >= FieldType.date) { this._originalValue = undefined; this._value = value; return; } this._originalValue = value; const _value = value.trim().replace(",", "."); this._value = !isNaN(_value) ? parseFloat(_value) : value; } _getValue() { return this._originalValue ?? this.value; } _setChoiceValue(value) { if (this.multipleSelection) { if (!Array.isArray(value)) { value = [value]; } const values = new Set(value); if (Array.isArray(this._currentValueIndices)) { this._currentValueIndices.length = 0; this._value.length = 0; } else { this._currentValueIndices = []; this._value = []; } this._items.forEach((item, i) => { if (values.has(item.exportValue)) { this._currentValueIndices.push(i); this._value.push(item.exportValue); } }); } else { if (Array.isArray(value)) { value = value[0]; } const index = this._items.findIndex(({ exportValue }) => value === exportValue); if (index !== -1) { this._currentValueIndices = index; this._value = this._items[index].exportValue; } } } get valueAsString() { return (this._value ?? "").toString(); } set valueAsString(_) {} browseForFileToSubmit() { if (this._browseForFileToSubmit) { this._browseForFileToSubmit(); } } buttonGetCaption(nFace = 0) { if (this._buttonCaption) { return this._buttonCaption[nFace]; } return ""; } buttonGetIcon(nFace = 0) { if (this._buttonIcon) { return this._buttonIcon[nFace]; } return null; } buttonImportIcon(cPath = null, nPave = 0) {} buttonSetCaption(cCaption, nFace = 0) { if (!this._buttonCaption) { this._buttonCaption = ["", "", ""]; } this._buttonCaption[nFace] = cCaption; } buttonSetIcon(oIcon, nFace = 0) { if (!this._buttonIcon) { this._buttonIcon = [null, null, null]; } this._buttonIcon[nFace] = oIcon; } checkThisBox(nWidget, bCheckIt = true) {} clearItems() { if (!this._isChoice) { throw new Error("Not a choice widget"); } this._items = []; this._send({ id: this._id, clear: null }); } deleteItemAt(nIdx = null) { if (!this._isChoice) { throw new Error("Not a choice widget"); } if (!this.numItems) { return; } if (nIdx === null) { nIdx = Array.isArray(this._currentValueIndices) ? this._currentValueIndices[0] : this._currentValueIndices; nIdx ||= 0; } if (nIdx < 0 || nIdx >= this.numItems) { nIdx = this.numItems - 1; } this._items.splice(nIdx, 1); if (Array.isArray(this._currentValueIndices)) { let index = this._currentValueIndices.findIndex(i => i >= nIdx); if (index !== -1) { if (this._currentValueIndices[index] === nIdx) { this._currentValueIndices.splice(index, 1); } for (const ii = this._currentValueIndices.length; index < ii; index++) { --this._currentValueIndices[index]; } } } else if (this._currentValueIndices === nIdx) { this._currentValueIndices = this.numItems > 0 ? 0 : -1; } else if (this._currentValueIndices > nIdx) { --this._currentValueIndices; } this._send({ id: this._id, remove: nIdx }); } getItemAt(nIdx = -1, bExportValue = false) { if (!this._isChoice) { throw new Error("Not a choice widget"); } if (nIdx < 0 || nIdx >= this.numItems) { nIdx = this.numItems - 1; } const item = this._items[nIdx]; return bExportValue ? item.exportValue : item.displayValue; } getArray() { if (this._kidIds) { const array = []; const fillArrayWithKids = kidIds => { for (const id of kidIds) { const obj = this._appObjects[id]; if (!obj) { continue; } if (obj.obj._hasValue) { array.push(obj.wrapped); } if (obj.obj._kidIds) { fillArrayWithKids(obj.obj._kidIds); } } }; fillArrayWithKids(this._kidIds); return array; } if (this._children === null) { this._children = this._document.obj._getTerminalChildren(this._fieldPath); } return this._children; } getLock() { return undefined; } isBoxChecked(nWidget) { return false; } isDefaultChecked(nWidget) { return false; } insertItemAt(cName, cExport = undefined, nIdx = 0) { if (!this._isChoice) { throw new Error("Not a choice widget"); } if (!cName) { return; } if (nIdx < 0 || nIdx > this.numItems) { nIdx = this.numItems; } if (this._items.some(({ displayValue }) => displayValue === cName)) { return; } if (cExport === undefined) { cExport = cName; } const data = { displayValue: cName, exportValue: cExport }; this._items.splice(nIdx, 0, data); if (Array.isArray(this._currentValueIndices)) { let index = this._currentValueIndices.findIndex(i => i >= nIdx); if (index !== -1) { for (const ii = this._currentValueIndices.length; index < ii; index++) { ++this._currentValueIndices[index]; } } } else if (this._currentValueIndices >= nIdx) { ++this._currentValueIndices; } this._send({ id: this._id, insert: { index: nIdx, ...data } }); } setAction(cTrigger, cScript) { if (typeof cTrigger !== "string" || typeof cScript !== "string") { return; } if (!(cTrigger in this._actions)) { this._actions[cTrigger] = []; } this._actions[cTrigger].push(cScript); } setFocus() { this._send({ id: this._id, focus: true }); } setItems(oArray) { if (!this._isChoice) { throw new Error("Not a choice widget"); } this._items.length = 0; for (const element of oArray) { let displayValue, exportValue; if (Array.isArray(element)) { displayValue = element[0]?.toString() || ""; exportValue = element[1]?.toString() || ""; } else { displayValue = exportValue = element?.toString() || ""; } this._items.push({ displayValue, exportValue }); } this._currentValueIndices = 0; this._send({ id: this._id, items: this._items }); } setLock() {} signatureGetModifications() {} signatureGetSeedValue() {} signatureInfo() {} signatureSetSeedValue() {} signatureSign() {} signatureValidate() {} _isButton() { return false; } _reset() { this.value = this.defaultValue; } _runActions(event) { const eventName = event.name; if (!this._actions.has(eventName)) { return false; } const actions = this._actions.get(eventName); try { for (const action of actions) { this._globalEval(action); } } catch (error) { event.rc = false; throw error; } return true; } } class RadioButtonField extends Field { constructor(otherButtons, data) { super(data); this.exportValues = [this.exportValues]; this._radioIds = [this._id]; this._radioActions = [this._actions]; for (const radioData of otherButtons) { this.exportValues.push(radioData.exportValues); this._radioIds.push(radioData.id); this._radioActions.push(createActionsMap(radioData.actions)); if (this._value === radioData.exportValues) { this._id = radioData.id; } } this._hasBeenInitialized = true; this._value = data.value || ""; } get value() { return this._value; } set value(value) { if (!this._hasBeenInitialized) { return; } if (value === null || value === undefined) { this._value = ""; } const i = this.exportValues.indexOf(value); if (0 <= i && i < this._radioIds.length) { this._id = this._radioIds[i]; this._value = value; } else if (value === "Off" && this._radioIds.length === 2) { const nextI = (1 + this._radioIds.indexOf(this._id)) % 2; this._id = this._radioIds[nextI]; this._value = this.exportValues[nextI]; } } checkThisBox(nWidget, bCheckIt = true) { if (nWidget < 0 || nWidget >= this._radioIds.length || !bCheckIt) { return; } this._id = this._radioIds[nWidget]; this._value = this.exportValues[nWidget]; this._send({ id: this._id, value: this._value }); } isBoxChecked(nWidget) { return nWidget >= 0 && nWidget < this._radioIds.length && this._id === this._radioIds[nWidget]; } isDefaultChecked(nWidget) { return nWidget >= 0 && nWidget < this.exportValues.length && this.defaultValue === this.exportValues[nWidget]; } _getExportValue(state) { const i = this._radioIds.indexOf(this._id); return this.exportValues[i]; } _runActions(event) { const i = this._radioIds.indexOf(this._id); this._actions = this._radioActions[i]; return super._runActions(event); } _isButton() { return true; } } class CheckboxField extends RadioButtonField { get value() { return this._value; } set value(value) { if (!value || value === "Off") { this._value = "Off"; } else { super.value = value; } } _getExportValue(state) { return state ? super._getExportValue(state) : "Off"; } isBoxChecked(nWidget) { if (this._value === "Off") { return false; } return super.isBoxChecked(nWidget); } isDefaultChecked(nWidget) { if (this.defaultValue === "Off") { return this._value === "Off"; } return super.isDefaultChecked(nWidget); } checkThisBox(nWidget, bCheckIt = true) { if (nWidget < 0 || nWidget >= this._radioIds.length) { return; } this._id = this._radioIds[nWidget]; this._value = bCheckIt ? this.exportValues[nWidget] : "Off"; this._send({ id: this._id, value: this._value }); } } ;// CONCATENATED MODULE: ./src/scripting_api/aform.js class AForm { constructor(document, app, util, color) { this._document = document; this._app = app; this._util = util; this._color = color; this._dateFormats = ["m/d", "m/d/yy", "mm/dd/yy", "mm/yy", "d-mmm", "d-mmm-yy", "dd-mmm-yy", "yy-mm-dd", "mmm-yy", "mmmm-yy", "mmm d, yyyy", "mmmm d, yyyy", "m/d/yy h:MM tt", "m/d/yy HH:MM"]; this._timeFormats = ["HH:MM", "h:MM tt", "HH:MM:ss", "h:MM:ss tt"]; this._dateActionsCache = new Map(); this._emailRegex = new RegExp("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+" + "@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?" + "(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"); } _mkTargetName(event) { return event.target ? `[ ${event.target.name} ]` : ""; } _tryToGuessDate(cFormat, cDate) { let actions = this._dateActionsCache.get(cFormat); if (!actions) { actions = []; this._dateActionsCache.set(cFormat, actions); cFormat.replaceAll(/(d+)|(m+)|(y+)|(H+)|(M+)|(s+)/g, function (match, d, m, y, H, M, s) { if (d) { actions.push((n, date) => { if (n >= 1 && n <= 31) { date.setDate(n); return true; } return false; }); } else if (m) { actions.push((n, date) => { if (n >= 1 && n <= 12) { date.setMonth(n - 1); return true; } return false; }); } else if (y) { actions.push((n, date) => { if (n < 50) { n += 2000; } else if (n < 100) { n += 1900; } date.setYear(n); return true; }); } else if (H) { actions.push((n, date) => { if (n >= 0 && n <= 23) { date.setHours(n); return true; } return false; }); } else if (M) { actions.push((n, date) => { if (n >= 0 && n <= 59) { date.setMinutes(n); return true; } return false; }); } else if (s) { actions.push((n, date) => { if (n >= 0 && n <= 59) { date.setSeconds(n); return true; } return false; }); } return ""; }); } const number = /\d+/g; let i = 0; let array; const date = new Date(); while ((array = number.exec(cDate)) !== null) { if (i < actions.length) { if (!actions[i++](parseInt(array[0]), date)) { return null; } } else { break; } } if (i === 0) { return null; } return date; } _parseDate(cFormat, cDate) { let date = null; try { date = this._util.scand(cFormat, cDate); } catch {} if (!date) { date = Date.parse(cDate); date = isNaN(date) ? this._tryToGuessDate(cFormat, cDate) : new Date(date); } return date; } AFMergeChange(event = globalThis.event) { if (event.willCommit) { return event.value.toString(); } return this._app._eventDispatcher.mergeChange(event); } AFParseDateEx(cString, cOrder) { return this._parseDate(cOrder, cString); } AFExtractNums(str) { if (typeof str === "number") { return [str]; } if (!str || typeof str !== "string") { return null; } const first = str.charAt(0); if (first === "." || first === ",") { str = `0${str}`; } const numbers = str.match(/(\d+)/g); if (numbers.length === 0) { return null; } return numbers; } AFMakeNumber(str) { if (typeof str === "number") { return str; } if (typeof str !== "string") { return null; } str = str.trim().replace(",", "."); const number = parseFloat(str); if (isNaN(number) || !isFinite(number)) { return null; } return number; } AFMakeArrayFromList(string) { if (typeof string === "string") { return string.split(/, ?/g); } return string; } AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) { const event = globalThis.event; let value = this.AFMakeNumber(event.value); if (value === null) { event.value = ""; return; } const sign = Math.sign(value); const buf = []; let hasParen = false; if (sign === -1 && bCurrencyPrepend && negStyle === 0) { buf.push("-"); } if ((negStyle === 2 || negStyle === 3) && sign === -1) { buf.push("("); hasParen = true; } if (bCurrencyPrepend) { buf.push(strCurrency); } sepStyle = Math.min(Math.max(0, Math.floor(sepStyle)), 4); buf.push("%,", sepStyle, ".", nDec.toString(), "f"); if (!bCurrencyPrepend) { buf.push(strCurrency); } if (hasParen) { buf.push(")"); } if (negStyle === 1 || negStyle === 3) { event.target.textColor = sign === 1 ? this._color.black : this._color.red; } if ((negStyle !== 0 || bCurrencyPrepend) && sign === -1) { value = -value; } const formatStr = buf.join(""); event.value = this._util.printf(formatStr, value); } AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend) { const event = globalThis.event; let value = this.AFMergeChange(event); if (!value) { return; } value = value.trim(); let pattern; if (sepStyle > 1) { pattern = event.willCommit ? /^[+-]?(\d+(,\d*)?|,\d+)$/ : /^[+-]?\d*,?\d*$/; } else { pattern = event.willCommit ? /^[+-]?(\d+(\.\d*)?|\.\d+)$/ : /^[+-]?\d*\.?\d*$/; } if (!pattern.test(value)) { if (event.willCommit) { const err = `${GlobalConstants.IDS_INVALID_VALUE} ${this._mkTargetName(event)}`; this._app.alert(err); } event.rc = false; } if (event.willCommit && sepStyle > 1) { event.value = parseFloat(value.replace(",", ".")); } } AFPercent_Format(nDec, sepStyle, percentPrepend = false) { if (typeof nDec !== "number") { return; } if (typeof sepStyle !== "number") { return; } if (nDec < 0) { throw new Error("Invalid nDec value in AFPercent_Format"); } const event = globalThis.event; if (nDec > 512) { event.value = "%"; return; } nDec = Math.floor(nDec); sepStyle = Math.min(Math.max(0, Math.floor(sepStyle)), 4); let value = this.AFMakeNumber(event.value); if (value === null) { event.value = "%"; return; } const formatStr = `%,${sepStyle}.${nDec}f`; value = this._util.printf(formatStr, value * 100); event.value = percentPrepend ? `%${value}` : `${value}%`; } AFPercent_Keystroke(nDec, sepStyle) { this.AFNumber_Keystroke(nDec, sepStyle, 0, 0, "", true); } AFDate_FormatEx(cFormat) { const event = globalThis.event; const value = event.value; if (!value) { return; } const date = this._parseDate(cFormat, value); if (date !== null) { event.value = this._util.printd(cFormat, date); } } AFDate_Format(pdf) { if (pdf >= 0 && pdf < this._dateFormats.length) { this.AFDate_FormatEx(this._dateFormats[pdf]); } } AFDate_KeystrokeEx(cFormat) { const event = globalThis.event; if (!event.willCommit) { return; } const value = this.AFMergeChange(event); if (!value) { return; } if (this._parseDate(cFormat, value) === null) { const invalid = GlobalConstants.IDS_INVALID_DATE; const invalid2 = GlobalConstants.IDS_INVALID_DATE2; const err = `${invalid} ${this._mkTargetName(event)}${invalid2}${cFormat}`; this._app.alert(err); event.rc = false; } } AFDate_Keystroke(pdf) { if (pdf >= 0 && pdf < this._dateFormats.length) { this.AFDate_KeystrokeEx(this._dateFormats[pdf]); } } AFRange_Validate(bGreaterThan, nGreaterThan, bLessThan, nLessThan) { const event = globalThis.event; if (!event.value) { return; } const value = this.AFMakeNumber(event.value); if (value === null) { return; } bGreaterThan = !!bGreaterThan; bLessThan = !!bLessThan; if (bGreaterThan) { nGreaterThan = this.AFMakeNumber(nGreaterThan); if (nGreaterThan === null) { return; } } if (bLessThan) { nLessThan = this.AFMakeNumber(nLessThan); if (nLessThan === null) { return; } } let err = ""; if (bGreaterThan && bLessThan) { if (value < nGreaterThan || value > nLessThan) { err = this._util.printf(GlobalConstants.IDS_GT_AND_LT, nGreaterThan, nLessThan); } } else if (bGreaterThan) { if (value < nGreaterThan) { err = this._util.printf(GlobalConstants.IDS_GREATER_THAN, nGreaterThan); } } else if (value > nLessThan) { err = this._util.printf(GlobalConstants.IDS_LESS_THAN, nLessThan); } if (err) { this._app.alert(err); event.rc = false; } } AFSimple(cFunction, nValue1, nValue2) { const value1 = this.AFMakeNumber(nValue1); if (value1 === null) { throw new Error("Invalid nValue1 in AFSimple"); } const value2 = this.AFMakeNumber(nValue2); if (value2 === null) { throw new Error("Invalid nValue2 in AFSimple"); } switch (cFunction) { case "AVG": return (value1 + value2) / 2; case "SUM": return value1 + value2; case "PRD": return value1 * value2; case "MIN": return Math.min(value1, value2); case "MAX": return Math.max(value1, value2); } throw new Error("Invalid cFunction in AFSimple"); } AFSimple_Calculate(cFunction, cFields) { const actions = { AVG: args => args.reduce((acc, value) => acc + value, 0) / args.length, SUM: args => args.reduce((acc, value) => acc + value, 0), PRD: args => args.reduce((acc, value) => acc * value, 1), MIN: args => args.reduce((acc, value) => Math.min(acc, value), Number.MAX_VALUE), MAX: args => args.reduce((acc, value) => Math.max(acc, value), Number.MIN_VALUE) }; if (!(cFunction in actions)) { throw new TypeError("Invalid function in AFSimple_Calculate"); } const event = globalThis.event; const values = []; cFields = this.AFMakeArrayFromList(cFields); for (const cField of cFields) { const field = this._document.getField(cField); if (!field) { continue; } for (const child of field.getArray()) { const number = this.AFMakeNumber(child.value); if (number !== null) { values.push(number); } } } if (values.length === 0) { event.value = cFunction === "PRD" ? 1 : 0; return; } const res = actions[cFunction](values); event.value = Math.round(1e6 * res) / 1e6; } AFSpecial_Format(psf) { const event = globalThis.event; if (!event.value) { return; } psf = this.AFMakeNumber(psf); let formatStr; switch (psf) { case 0: formatStr = "99999"; break; case 1: formatStr = "99999-9999"; break; case 2: formatStr = this._util.printx("9999999999", event.value).length >= 10 ? "(999) 999-9999" : "999-9999"; break; case 3: formatStr = "999-99-9999"; break; default: throw new Error("Invalid psf in AFSpecial_Format"); } event.value = this._util.printx(formatStr, event.value); } AFSpecial_KeystrokeEx(cMask) { if (!cMask) { return; } const event = globalThis.event; const value = this.AFMergeChange(event); if (!value) { return; } const checkers = new Map([["9", char => char >= "0" && char <= "9"], ["A", char => "a" <= char && char <= "z" || "A" <= char && char <= "Z"], ["O", char => "a" <= char && char <= "z" || "A" <= char && char <= "Z" || "0" <= char && char <= "9"], ["X", char => true]]); function _checkValidity(_value, _cMask) { for (let i = 0, ii = _value.length; i < ii; i++) { const mask = _cMask.charAt(i); const char = _value.charAt(i); const checker = checkers.get(mask); if (checker) { if (!checker(char)) { return false; } } else if (mask !== char) { return false; } } return true; } const err = `${GlobalConstants.IDS_INVALID_VALUE} = "${cMask}"`; if (value.length > cMask.length) { this._app.alert(err); event.rc = false; return; } if (event.willCommit) { if (value.length < cMask.length) { this._app.alert(err); event.rc = false; return; } if (!_checkValidity(value, cMask)) { this._app.alert(err); event.rc = false; return; } event.value += cMask.substring(value.length); return; } if (value.length < cMask.length) { cMask = cMask.substring(0, value.length); } if (!_checkValidity(value, cMask)) { this._app.alert(err); event.rc = false; } } AFSpecial_Keystroke(psf) { const event = globalThis.event; psf = this.AFMakeNumber(psf); let formatStr; switch (psf) { case 0: formatStr = "99999"; break; case 1: formatStr = "99999-9999"; break; case 2: const value = this.AFMergeChange(event); formatStr = value.length > 8 || value.startsWith("(") ? "(999) 999-9999" : "999-9999"; break; case 3: formatStr = "999-99-9999"; break; default: throw new Error("Invalid psf in AFSpecial_Keystroke"); } this.AFSpecial_KeystrokeEx(formatStr); } AFTime_FormatEx(cFormat) { this.AFDate_FormatEx(cFormat); } AFTime_Format(pdf) { if (pdf >= 0 && pdf < this._timeFormats.length) { this.AFDate_FormatEx(this._timeFormats[pdf]); } } AFTime_KeystrokeEx(cFormat) { this.AFDate_KeystrokeEx(cFormat); } AFTime_Keystroke(pdf) { if (pdf >= 0 && pdf < this._timeFormats.length) { this.AFDate_KeystrokeEx(this._timeFormats[pdf]); } } eMailValidate(str) { return this._emailRegex.test(str); } AFExactMatch(rePatterns, str) { if (rePatterns instanceof RegExp) { return str.match(rePatterns)?.[0] === str || 0; } return rePatterns.findIndex(re => str.match(re)?.[0] === str) + 1; } } ;// CONCATENATED MODULE: ./src/scripting_api/app_utils.js const VIEWER_TYPE = "PDF.js"; const VIEWER_VARIATION = "Full"; const VIEWER_VERSION = 21.00720099; const FORMS_VERSION = 21.00720099; const USERACTIVATION_CALLBACKID = 0; const USERACTIVATION_MAXTIME_VALIDITY = 5000; function serializeError(error) { const value = `${error.toString()}\n${error.stack}`; return { command: "error", value }; } ;// CONCATENATED MODULE: ./src/scripting_api/event.js class Event { constructor(data) { this.change = data.change || ""; this.changeEx = data.changeEx || null; this.commitKey = data.commitKey || 0; this.fieldFull = data.fieldFull || false; this.keyDown = data.keyDown || false; this.modifier = data.modifier || false; this.name = data.name; this.rc = true; this.richChange = data.richChange || []; this.richChangeEx = data.richChangeEx || []; this.richValue = data.richValue || []; this.selEnd = data.selEnd ?? -1; this.selStart = data.selStart ?? -1; this.shift = data.shift || false; this.source = data.source || null; this.target = data.target || null; this.targetName = ""; this.type = "Field"; this.value = data.value || ""; this.willCommit = data.willCommit || false; } } class EventDispatcher { constructor(document, calculationOrder, objects, externalCall) { this._document = document; this._calculationOrder = calculationOrder; this._objects = objects; this._externalCall = externalCall; this._document.obj._eventDispatcher = this; this._isCalculating = false; } mergeChange(event) { let value = event.value; if (Array.isArray(value)) { return value; } if (typeof value !== "string") { value = value.toString(); } const prefix = event.selStart >= 0 ? value.substring(0, event.selStart) : ""; const postfix = event.selEnd >= 0 && event.selEnd <= value.length ? value.substring(event.selEnd) : ""; return `${prefix}${event.change}${postfix}`; } userActivation() { this._document.obj._userActivation = true; this._externalCall("setTimeout", [USERACTIVATION_CALLBACKID, USERACTIVATION_MAXTIME_VALIDITY]); } dispatch(baseEvent) { const id = baseEvent.id; if (!(id in this._objects)) { let event; if (id === "doc" || id === "page") { event = globalThis.event = new Event(baseEvent); event.source = event.target = this._document.wrapped; event.name = baseEvent.name; } if (id === "doc") { const eventName = event.name; if (eventName === "Open") { this.userActivation(); this._document.obj._initActions(); this.formatAll(); } if (!["DidPrint", "DidSave", "WillPrint", "WillSave"].includes(eventName)) { this.userActivation(); } this._document.obj._dispatchDocEvent(event.name); } else if (id === "page") { this.userActivation(); this._document.obj._dispatchPageEvent(event.name, baseEvent.actions, baseEvent.pageNumber); } else if (id === "app" && baseEvent.name === "ResetForm") { this.userActivation(); for (const fieldId of baseEvent.ids) { const obj = this._objects[fieldId]; obj?.obj._reset(); } } return; } const name = baseEvent.name; const source = this._objects[id]; const event = globalThis.event = new Event(baseEvent); let savedChange; this.userActivation(); if (source.obj._isButton()) { source.obj._id = id; event.value = source.obj._getExportValue(event.value); if (name === "Action") { source.obj._value = event.value; } } switch (name) { case "Keystroke": savedChange = { value: event.value, changeEx: event.changeEx, change: event.change, selStart: event.selStart, selEnd: event.selEnd }; break; case "Blur": case "Focus": Object.defineProperty(event, "value", { configurable: false, writable: false, enumerable: true, value: event.value }); break; case "Validate": this.runValidation(source, event); return; case "Action": this.runActions(source, source, event, name); this.runCalculate(source, event); return; } this.runActions(source, source, event, name); if (name !== "Keystroke") { return; } if (event.rc) { if (event.willCommit) { this.runValidation(source, event); } else { if (source.obj._isChoice) { source.obj.value = savedChange.changeEx; source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value: source.obj.value }); return; } const value = source.obj.value = this.mergeChange(event); let selStart, selEnd; if (event.selStart !== savedChange.selStart || event.selEnd !== savedChange.selEnd) { selStart = event.selStart; selEnd = event.selEnd; } else { selEnd = selStart = savedChange.selStart + event.change.length; } source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value, selRange: [selStart, selEnd] }); } } else if (!event.willCommit) { source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value: savedChange.value, selRange: [savedChange.selStart, savedChange.selEnd] }); } else { source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0] }); } } formatAll() { const event = globalThis.event = new Event({}); for (const source of Object.values(this._objects)) { event.value = source.obj.value; this.runActions(source, source, event, "Format"); } } runValidation(source, event) { const didValidateRun = this.runActions(source, source, event, "Validate"); if (event.rc) { source.obj.value = event.value; this.runCalculate(source, event); const savedValue = source.obj._getValue(); event.value = source.obj.value; let formattedValue = null; if (this.runActions(source, source, event, "Format")) { formattedValue = event.value?.toString?.(); } source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value: savedValue, formattedValue }); event.value = savedValue; } else if (didValidateRun) { source.obj._send({ id: source.obj._id, siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0], focus: true }); } } runActions(source, target, event, eventName) { event.source = source.wrapped; event.target = target.wrapped; event.name = eventName; event.targetName = target.obj.name; event.rc = true; return target.obj._runActions(event); } calculateNow() { if (!this._calculationOrder || this._isCalculating || !this._document.obj.calculate) { return; } this._isCalculating = true; const first = this._calculationOrder[0]; const source = this._objects[first]; globalThis.event = new Event({}); try { this.runCalculate(source, globalThis.event); } catch (error) { this._isCalculating = false; throw error; } this._isCalculating = false; } runCalculate(source, event) { if (!this._calculationOrder || !this._document.obj.calculate) { return; } for (const targetId of this._calculationOrder) { if (!(targetId in this._objects)) { continue; } if (!this._document.obj.calculate) { break; } event.value = null; const target = this._objects[targetId]; let savedValue = target.obj._getValue(); this.runActions(source, target, event, "Calculate"); if (!event.rc) { continue; } if (event.value !== null) { target.obj.value = event.value; } else { event.value = target.obj._getValue(); } this.runActions(target, target, event, "Validate"); if (!event.rc) { if (target.obj._getValue() !== savedValue) { target.wrapped.value = savedValue; } continue; } if (event.value === null) { event.value = target.obj._getValue(); } savedValue = target.obj._getValue(); let formattedValue = null; if (this.runActions(target, target, event, "Format")) { formattedValue = event.value?.toString?.(); } target.obj._send({ id: target.obj._id, siblings: target.obj._siblings, value: savedValue, formattedValue }); } } } ;// CONCATENATED MODULE: ./src/scripting_api/fullscreen.js class FullScreen extends PDFObject { constructor(data) { super(data); this._backgroundColor = []; this._clickAdvances = true; this._cursor = Cursor.hidden; this._defaultTransition = ""; this._escapeExits = true; this._isFullScreen = true; this._loop = false; this._timeDelay = 3600; this._usePageTiming = false; this._useTimer = false; } get backgroundColor() { return this._backgroundColor; } set backgroundColor(_) {} get clickAdvances() { return this._clickAdvances; } set clickAdvances(_) {} get cursor() { return this._cursor; } set cursor(_) {} get defaultTransition() { return this._defaultTransition; } set defaultTransition(_) {} get escapeExits() { return this._escapeExits; } set escapeExits(_) {} get isFullScreen() { return this._isFullScreen; } set isFullScreen(_) {} get loop() { return this._loop; } set loop(_) {} get timeDelay() { return this._timeDelay; } set timeDelay(_) {} get transitions() { return ["Replace", "WipeRight", "WipeLeft", "WipeDown", "WipeUp", "SplitHorizontalIn", "SplitHorizontalOut", "SplitVerticalIn", "SplitVerticalOut", "BlindsHorizontal", "BlindsVertical", "BoxIn", "BoxOut", "GlitterRight", "GlitterDown", "GlitterRightDown", "Dissolve", "Random"]; } set transitions(_) { throw new Error("fullscreen.transitions is read-only"); } get usePageTiming() { return this._usePageTiming; } set usePageTiming(_) {} get useTimer() { return this._useTimer; } set useTimer(_) {} } ;// CONCATENATED MODULE: ./src/scripting_api/thermometer.js class Thermometer extends PDFObject { constructor(data) { super(data); this._cancelled = false; this._duration = 100; this._text = ""; this._value = 0; } get cancelled() { return this._cancelled; } set cancelled(_) { throw new Error("thermometer.cancelled is read-only"); } get duration() { return this._duration; } set duration(val) { this._duration = val; } get text() { return this._text; } set text(val) { this._text = val; } get value() { return this._value; } set value(val) { this._value = val; } begin() {} end() {} } ;// CONCATENATED MODULE: ./src/scripting_api/app.js class App extends PDFObject { constructor(data) { super(data); this._constants = null; this._focusRect = true; this._fs = null; this._language = App._getLanguage(data.language); this._openInPlace = false; this._platform = App._getPlatform(data.platform); this._runtimeHighlight = false; this._runtimeHighlightColor = ["T"]; this._thermometer = null; this._toolbar = false; this._document = data._document; this._proxyHandler = data.proxyHandler; this._objects = Object.create(null); this._eventDispatcher = new EventDispatcher(this._document, data.calculationOrder, this._objects, data.externalCall); this._timeoutIds = new WeakMap(); if (typeof FinalizationRegistry !== "undefined") { this._timeoutIdsRegistry = new FinalizationRegistry(this._cleanTimeout.bind(this)); } else { this._timeoutIdsRegistry = null; } this._timeoutCallbackIds = new Map(); this._timeoutCallbackId = USERACTIVATION_CALLBACKID + 1; this._globalEval = data.globalEval; this._externalCall = data.externalCall; } _dispatchEvent(pdfEvent) { this._eventDispatcher.dispatch(pdfEvent); } _registerTimeoutCallback(cExpr) { const id = this._timeoutCallbackId++; this._timeoutCallbackIds.set(id, cExpr); return id; } _unregisterTimeoutCallback(id) { this._timeoutCallbackIds.delete(id); } _evalCallback({ callbackId, interval }) { if (callbackId === USERACTIVATION_CALLBACKID) { this._document.obj._userActivation = false; return; } const expr = this._timeoutCallbackIds.get(callbackId); if (!interval) { this._unregisterTimeoutCallback(callbackId); } if (expr) { this._globalEval(expr); } } _registerTimeout(callbackId, interval) { const timeout = Object.create(null); const id = { callbackId, interval }; this._timeoutIds.set(timeout, id); this._timeoutIdsRegistry?.register(timeout, id); return timeout; } _unregisterTimeout(timeout) { this._timeoutIdsRegistry?.unregister(timeout); const data = this._timeoutIds.get(timeout); if (!data) { return; } this._timeoutIds.delete(timeout); this._cleanTimeout(data); } _cleanTimeout({ callbackId, interval }) { this._unregisterTimeoutCallback(callbackId); if (interval) { this._externalCall("clearInterval", [callbackId]); } else { this._externalCall("clearTimeout", [callbackId]); } } static _getPlatform(platform) { if (typeof platform === "string") { platform = platform.toLowerCase(); if (platform.includes("win")) { return "WIN"; } else if (platform.includes("mac")) { return "MAC"; } } return "UNIX"; } static _getLanguage(language) { const [main, sub] = language.toLowerCase().split(/[-_]/); switch (main) { case "zh": if (sub === "cn" || sub === "sg") { return "CHS"; } return "CHT"; case "da": return "DAN"; case "de": return "DEU"; case "es": return "ESP"; case "fr": return "FRA"; case "it": return "ITA"; case "ko": return "KOR"; case "ja": return "JPN"; case "nl": return "NLD"; case "no": return "NOR"; case "pt": if (sub === "br") { return "PTB"; } return "ENU"; case "fi": return "SUO"; case "SV": return "SVE"; default: return "ENU"; } } get activeDocs() { return [this._document.wrapped]; } set activeDocs(_) { throw new Error("app.activeDocs is read-only"); } get calculate() { return this._document.obj.calculate; } set calculate(calculate) { this._document.obj.calculate = calculate; } get constants() { if (!this._constants) { this._constants = Object.freeze({ align: Object.freeze({ left: 0, center: 1, right: 2, top: 3, bottom: 4 }) }); } return this._constants; } set constants(_) { throw new Error("app.constants is read-only"); } get focusRect() { return this._focusRect; } set focusRect(val) { this._focusRect = val; } get formsVersion() { return FORMS_VERSION; } set formsVersion(_) { throw new Error("app.formsVersion is read-only"); } get fromPDFConverters() { return []; } set fromPDFConverters(_) { throw new Error("app.fromPDFConverters is read-only"); } get fs() { if (this._fs === null) { this._fs = new Proxy(new FullScreen({ send: this._send }), this._proxyHandler); } return this._fs; } set fs(_) { throw new Error("app.fs is read-only"); } get language() { return this._language; } set language(_) { throw new Error("app.language is read-only"); } get media() { return undefined; } set media(_) { throw new Error("app.media is read-only"); } get monitors() { return []; } set monitors(_) { throw new Error("app.monitors is read-only"); } get numPlugins() { return 0; } set numPlugins(_) { throw new Error("app.numPlugins is read-only"); } get openInPlace() { return this._openInPlace; } set openInPlace(val) { this._openInPlace = val; } get platform() { return this._platform; } set platform(_) { throw new Error("app.platform is read-only"); } get plugins() { return []; } set plugins(_) { throw new Error("app.plugins is read-only"); } get printColorProfiles() { return []; } set printColorProfiles(_) { throw new Error("app.printColorProfiles is read-only"); } get printerNames() { return []; } set printerNames(_) { throw new Error("app.printerNames is read-only"); } get runtimeHighlight() { return this._runtimeHighlight; } set runtimeHighlight(val) { this._runtimeHighlight = val; } get runtimeHighlightColor() { return this._runtimeHighlightColor; } set runtimeHighlightColor(val) { if (Color._isValidColor(val)) { this._runtimeHighlightColor = val; } } get thermometer() { if (this._thermometer === null) { this._thermometer = new Proxy(new Thermometer({ send: this._send }), this._proxyHandler); } return this._thermometer; } set thermometer(_) { throw new Error("app.thermometer is read-only"); } get toolbar() { return this._toolbar; } set toolbar(val) { this._toolbar = val; } get toolbarHorizontal() { return this.toolbar; } set toolbarHorizontal(value) { this.toolbar = value; } get toolbarVertical() { return this.toolbar; } set toolbarVertical(value) { this.toolbar = value; } get viewerType() { return VIEWER_TYPE; } set viewerType(_) { throw new Error("app.viewerType is read-only"); } get viewerVariation() { return VIEWER_VARIATION; } set viewerVariation(_) { throw new Error("app.viewerVariation is read-only"); } get viewerVersion() { return VIEWER_VERSION; } set viewerVersion(_) { throw new Error("app.viewerVersion is read-only"); } addMenuItem() {} addSubMenu() {} addToolButton() {} alert(cMsg, nIcon = 0, nType = 0, cTitle = "PDF.js", oDoc = null, oCheckbox = null) { if (!this._document.obj._userActivation) { return 0; } this._document.obj._userActivation = false; if (cMsg && typeof cMsg === "object") { nType = cMsg.nType; cMsg = cMsg.cMsg; } cMsg = (cMsg || "").toString(); nType = typeof nType !== "number" || isNaN(nType) || nType < 0 || nType > 3 ? 0 : nType; if (nType >= 2) { return this._externalCall("confirm", [cMsg]) ? 4 : 3; } this._externalCall("alert", [cMsg]); return 1; } beep() {} beginPriv() {} browseForDoc() {} clearInterval(oInterval) { this._unregisterTimeout(oInterval); } clearTimeOut(oTime) { this._unregisterTimeout(oTime); } endPriv() {} execDialog() {} execMenuItem(item) { if (!this._document.obj._userActivation) { return; } this._document.obj._userActivation = false; switch (item) { case "SaveAs": if (this._document.obj._disableSaving) { return; } this._send({ command: item }); break; case "FirstPage": case "LastPage": case "NextPage": case "PrevPage": case "ZoomViewIn": case "ZoomViewOut": this._send({ command: item }); break; case "FitPage": this._send({ command: "zoom", value: "page-fit" }); break; case "Print": if (this._document.obj._disablePrinting) { return; } this._send({ command: "print" }); break; } } getNthPlugInName() {} getPath() {} goBack() {} goForward() {} hideMenuItem() {} hideToolbarButton() {} launchURL() {} listMenuItems() {} listToolbarButtons() {} loadPolicyFile() {} mailGetAddrs() {} mailMsg() {} newDoc() {} newCollection() {} newFDF() {} openDoc() {} openFDF() {} popUpMenu() {} popUpMenuEx() {} removeToolButton() {} response(cQuestion, cTitle = "", cDefault = "", bPassword = "", cLabel = "") { if (cQuestion && typeof cQuestion === "object") { cDefault = cQuestion.cDefault; cQuestion = cQuestion.cQuestion; } cQuestion = (cQuestion || "").toString(); cDefault = (cDefault || "").toString(); return this._externalCall("prompt", [cQuestion, cDefault || ""]); } setInterval(cExpr, nMilliseconds = 0) { if (cExpr && typeof cExpr === "object") { nMilliseconds = cExpr.nMilliseconds || 0; cExpr = cExpr.cExpr; } if (typeof cExpr !== "string") { throw new TypeError("First argument of app.setInterval must be a string"); } if (typeof nMilliseconds !== "number") { throw new TypeError("Second argument of app.setInterval must be a number"); } const callbackId = this._registerTimeoutCallback(cExpr); this._externalCall("setInterval", [callbackId, nMilliseconds]); return this._registerTimeout(callbackId, true); } setTimeOut(cExpr, nMilliseconds = 0) { if (cExpr && typeof cExpr === "object") { nMilliseconds = cExpr.nMilliseconds || 0; cExpr = cExpr.cExpr; } if (typeof cExpr !== "string") { throw new TypeError("First argument of app.setTimeOut must be a string"); } if (typeof nMilliseconds !== "number") { throw new TypeError("Second argument of app.setTimeOut must be a number"); } const callbackId = this._registerTimeoutCallback(cExpr); this._externalCall("setTimeout", [callbackId, nMilliseconds]); return this._registerTimeout(callbackId, false); } trustedFunction() {} trustPropagatorFunction() {} } ;// CONCATENATED MODULE: ./src/scripting_api/console.js class Console extends PDFObject { clear() { this._send({ id: "clear" }); } hide() {} println(msg) { if (typeof msg === "string") { this._send({ command: "println", value: "PDF.js Console:: " + msg }); } } show() {} } ;// CONCATENATED MODULE: ./src/scripting_api/print_params.js class PrintParams { constructor(data) { this.binaryOk = true; this.bitmapDPI = 150; this.booklet = { binding: 0, duplexMode: 0, subsetFrom: 0, subsetTo: -1 }; this.colorOverride = 0; this.colorProfile = ""; this.constants = Object.freeze({ bookletBindings: Object.freeze({ Left: 0, Right: 1, LeftTall: 2, RightTall: 3 }), bookletDuplexMode: Object.freeze({ BothSides: 0, FrontSideOnly: 1, BasicSideOnly: 2 }), colorOverrides: Object.freeze({ auto: 0, gray: 1, mono: 2 }), fontPolicies: Object.freeze({ everyPage: 0, jobStart: 1, pageRange: 2 }), handling: Object.freeze({ none: 0, fit: 1, shrink: 2, tileAll: 3, tileLarge: 4, nUp: 5, booklet: 6 }), interactionLevel: Object.freeze({ automatic: 0, full: 1, silent: 2 }), nUpPageOrders: Object.freeze({ Horizontal: 0, HorizontalReversed: 1, Vertical: 2 }), printContents: Object.freeze({ doc: 0, docAndComments: 1, formFieldsOnly: 2 }), flagValues: Object.freeze({ applyOverPrint: 1, applySoftProofSettings: 1 << 1, applyWorkingColorSpaces: 1 << 2, emitHalftones: 1 << 3, emitPostScriptXObjects: 1 << 4, emitFormsAsPSForms: 1 << 5, maxJP2KRes: 1 << 6, setPageSize: 1 << 7, suppressBG: 1 << 8, suppressCenter: 1 << 9, suppressCJKFontSubst: 1 << 10, suppressCropClip: 1 << 1, suppressRotate: 1 << 12, suppressTransfer: 1 << 13, suppressUCR: 1 << 14, useTrapAnnots: 1 << 15, usePrintersMarks: 1 << 16 }), rasterFlagValues: Object.freeze({ textToOutline: 1, strokesToOutline: 1 << 1, allowComplexClip: 1 << 2, preserveOverprint: 1 << 3 }), subsets: Object.freeze({ all: 0, even: 1, odd: 2 }), tileMarks: Object.freeze({ none: 0, west: 1, east: 2 }), usages: Object.freeze({ auto: 0, use: 1, noUse: 2 }) }); this.downloadFarEastFonts = false; this.fileName = ""; this.firstPage = 0; this.flags = 0; this.fontPolicy = 0; this.gradientDPI = 150; this.interactive = 1; this.lastPage = data.lastPage; this.npUpAutoRotate = false; this.npUpNumPagesH = 2; this.npUpNumPagesV = 2; this.npUpPageBorder = false; this.npUpPageOrder = 0; this.pageHandling = 0; this.pageSubset = 0; this.printAsImage = false; this.printContent = 0; this.printerName = ""; this.psLevel = 0; this.rasterFlags = 0; this.reversePages = false; this.tileLabel = false; this.tileMark = 0; this.tileOverlap = 0; this.tileScale = 1.0; this.transparencyLevel = 75; this.usePrinterCRD = 0; this.useT1Conversion = 0; } } ;// CONCATENATED MODULE: ./src/scripting_api/doc.js const DOC_EXTERNAL = false; class InfoProxyHandler { static get(obj, prop) { return obj[prop.toLowerCase()]; } static set(obj, prop, value) { throw new Error(`doc.info.${prop} is read-only`); } } class Doc extends PDFObject { constructor(data) { super(data); this._expandos = globalThis; this._baseURL = data.baseURL || ""; this._calculate = true; this._delay = false; this._dirty = false; this._disclosed = false; this._media = undefined; this._metadata = data.metadata || ""; this._noautocomplete = undefined; this._nocache = undefined; this._spellDictionaryOrder = []; this._spellLanguageOrder = []; this._printParams = null; this._fields = new Map(); this._fieldNames = []; this._event = null; this._author = data.Author || ""; this._creator = data.Creator || ""; this._creationDate = this._getDate(data.CreationDate) || null; this._docID = data.docID || ["", ""]; this._documentFileName = data.filename || ""; this._filesize = data.filesize || 0; this._keywords = data.Keywords || ""; this._layout = data.layout || ""; this._modDate = this._getDate(data.ModDate) || null; this._numFields = 0; this._numPages = data.numPages || 1; this._pageNum = data.pageNum || 0; this._producer = data.Producer || ""; this._securityHandler = data.EncryptFilterName || null; this._subject = data.Subject || ""; this._title = data.Title || ""; this._URL = data.URL || ""; this._info = new Proxy({ title: this._title, author: this._author, authors: data.authors || [this._author], subject: this._subject, keywords: this._keywords, creator: this._creator, producer: this._producer, creationdate: this._creationDate, moddate: this._modDate, trapped: data.Trapped || "Unknown" }, InfoProxyHandler); this._zoomType = ZoomType.none; this._zoom = data.zoom || 100; this._actions = createActionsMap(data.actions); this._globalEval = data.globalEval; this._pageActions = new Map(); this._userActivation = false; this._disablePrinting = false; this._disableSaving = false; } _initActions() { const dontRun = new Set(["WillClose", "WillSave", "DidSave", "WillPrint", "DidPrint", "OpenAction"]); this._disableSaving = true; for (const actionName of this._actions.keys()) { if (!dontRun.has(actionName)) { this._runActions(actionName); } } this._runActions("OpenAction"); this._disableSaving = false; } _dispatchDocEvent(name) { switch (name) { case "Open": this._disableSaving = true; this._runActions("OpenAction"); this._disableSaving = false; break; case "WillPrint": this._disablePrinting = true; try { this._runActions(name); } catch (error) { this._send(serializeError(error)); } this._send({ command: "WillPrintFinished" }); this._disablePrinting = false; break; case "WillSave": this._disableSaving = true; this._runActions(name); this._disableSaving = false; break; default: this._runActions(name); } } _dispatchPageEvent(name, actions, pageNumber) { if (name === "PageOpen") { if (!this._pageActions.has(pageNumber)) { this._pageActions.set(pageNumber, createActionsMap(actions)); } this._pageNum = pageNumber - 1; } actions = this._pageActions.get(pageNumber)?.get(name); if (actions) { for (const action of actions) { this._globalEval(action); } } } _runActions(name) { const actions = this._actions.get(name); if (actions) { for (const action of actions) { this._globalEval(action); } } } _addField(name, field) { this._fields.set(name, field); this._fieldNames.push(name); this._numFields++; } _getDate(date) { if (!date || date.length < 15 || !date.startsWith("D:")) { return date; } date = date.substring(2); const year = date.substring(0, 4); const month = date.substring(4, 6); const day = date.substring(6, 8); const hour = date.substring(8, 10); const minute = date.substring(10, 12); const o = date.charAt(12); let second, offsetPos; if (o === "Z" || o === "+" || o === "-") { second = "00"; offsetPos = 12; } else { second = date.substring(12, 14); offsetPos = 14; } const offset = date.substring(offsetPos).replaceAll("'", ""); return new Date(`${year}-${month}-${day}T${hour}:${minute}:${second}${offset}`); } get author() { return this._author; } set author(_) { throw new Error("doc.author is read-only"); } get baseURL() { return this._baseURL; } set baseURL(baseURL) { this._baseURL = baseURL; } get bookmarkRoot() { return undefined; } set bookmarkRoot(_) { throw new Error("doc.bookmarkRoot is read-only"); } get calculate() { return this._calculate; } set calculate(calculate) { this._calculate = calculate; } get creator() { return this._creator; } set creator(_) { throw new Error("doc.creator is read-only"); } get dataObjects() { return []; } set dataObjects(_) { throw new Error("doc.dataObjects is read-only"); } get delay() { return this._delay; } set delay(delay) { this._delay = delay; } get dirty() { return this._dirty; } set dirty(dirty) { this._dirty = dirty; } get disclosed() { return this._disclosed; } set disclosed(disclosed) { this._disclosed = disclosed; } get docID() { return this._docID; } set docID(_) { throw new Error("doc.docID is read-only"); } get documentFileName() { return this._documentFileName; } set documentFileName(_) { throw new Error("doc.documentFileName is read-only"); } get dynamicXFAForm() { return false; } set dynamicXFAForm(_) { throw new Error("doc.dynamicXFAForm is read-only"); } get external() { return DOC_EXTERNAL; } set external(_) { throw new Error("doc.external is read-only"); } get filesize() { return this._filesize; } set filesize(_) { throw new Error("doc.filesize is read-only"); } get hidden() { return false; } set hidden(_) { throw new Error("doc.hidden is read-only"); } get hostContainer() { return undefined; } set hostContainer(_) { throw new Error("doc.hostContainer is read-only"); } get icons() { return undefined; } set icons(_) { throw new Error("doc.icons is read-only"); } get info() { return this._info; } set info(_) { throw new Error("doc.info is read-only"); } get innerAppWindowRect() { return [0, 0, 0, 0]; } set innerAppWindowRect(_) { throw new Error("doc.innerAppWindowRect is read-only"); } get innerDocWindowRect() { return [0, 0, 0, 0]; } set innerDocWindowRect(_) { throw new Error("doc.innerDocWindowRect is read-only"); } get isModal() { return false; } set isModal(_) { throw new Error("doc.isModal is read-only"); } get keywords() { return this._keywords; } set keywords(_) { throw new Error("doc.keywords is read-only"); } get layout() { return this._layout; } set layout(value) { if (!this._userActivation) { return; } this._userActivation = false; if (typeof value !== "string") { return; } if (value !== "SinglePage" && value !== "OneColumn" && value !== "TwoColumnLeft" && value !== "TwoPageLeft" && value !== "TwoColumnRight" && value !== "TwoPageRight") { value = "SinglePage"; } this._send({ command: "layout", value }); this._layout = value; } get media() { return this._media; } set media(media) { this._media = media; } get metadata() { return this._metadata; } set metadata(metadata) { this._metadata = metadata; } get modDate() { return this._modDate; } set modDate(_) { throw new Error("doc.modDate is read-only"); } get mouseX() { return 0; } set mouseX(_) { throw new Error("doc.mouseX is read-only"); } get mouseY() { return 0; } set mouseY(_) { throw new Error("doc.mouseY is read-only"); } get noautocomplete() { return this._noautocomplete; } set noautocomplete(noautocomplete) { this._noautocomplete = noautocomplete; } get nocache() { return this._nocache; } set nocache(nocache) { this._nocache = nocache; } get numFields() { return this._numFields; } set numFields(_) { throw new Error("doc.numFields is read-only"); } get numPages() { return this._numPages; } set numPages(_) { throw new Error("doc.numPages is read-only"); } get numTemplates() { return 0; } set numTemplates(_) { throw new Error("doc.numTemplates is read-only"); } get outerAppWindowRect() { return [0, 0, 0, 0]; } set outerAppWindowRect(_) { throw new Error("doc.outerAppWindowRect is read-only"); } get outerDocWindowRect() { return [0, 0, 0, 0]; } set outerDocWindowRect(_) { throw new Error("doc.outerDocWindowRect is read-only"); } get pageNum() { return this._pageNum; } set pageNum(value) { if (!this._userActivation) { return; } this._userActivation = false; if (typeof value !== "number" || value < 0 || value >= this._numPages) { return; } this._send({ command: "page-num", value }); this._pageNum = value; } get pageWindowRect() { return [0, 0, 0, 0]; } set pageWindowRect(_) { throw new Error("doc.pageWindowRect is read-only"); } get path() { return ""; } set path(_) { throw new Error("doc.path is read-only"); } get permStatusReady() { return true; } set permStatusReady(_) { throw new Error("doc.permStatusReady is read-only"); } get producer() { return this._producer; } set producer(_) { throw new Error("doc.producer is read-only"); } get requiresFullSave() { return false; } set requiresFullSave(_) { throw new Error("doc.requiresFullSave is read-only"); } get securityHandler() { return this._securityHandler; } set securityHandler(_) { throw new Error("doc.securityHandler is read-only"); } get selectedAnnots() { return []; } set selectedAnnots(_) { throw new Error("doc.selectedAnnots is read-only"); } get sounds() { return []; } set sounds(_) { throw new Error("doc.sounds is read-only"); } get spellDictionaryOrder() { return this._spellDictionaryOrder; } set spellDictionaryOrder(spellDictionaryOrder) { this._spellDictionaryOrder = spellDictionaryOrder; } get spellLanguageOrder() { return this._spellLanguageOrder; } set spellLanguageOrder(spellLanguageOrder) { this._spellLanguageOrder = spellLanguageOrder; } get subject() { return this._subject; } set subject(_) { throw new Error("doc.subject is read-only"); } get templates() { return []; } set templates(_) { throw new Error("doc.templates is read-only"); } get title() { return this._title; } set title(_) { throw new Error("doc.title is read-only"); } get URL() { return this._URL; } set URL(_) { throw new Error("doc.URL is read-only"); } get viewState() { return undefined; } set viewState(_) { throw new Error("doc.viewState is read-only"); } get xfa() { return this._xfa; } set xfa(_) { throw new Error("doc.xfa is read-only"); } get XFAForeground() { return false; } set XFAForeground(_) { throw new Error("doc.XFAForeground is read-only"); } get zoomType() { return this._zoomType; } set zoomType(type) { if (!this._userActivation) { return; } this._userActivation = false; if (typeof type !== "string") { return; } switch (type) { case ZoomType.none: this._send({ command: "zoom", value: 1 }); break; case ZoomType.fitP: this._send({ command: "zoom", value: "page-fit" }); break; case ZoomType.fitW: this._send({ command: "zoom", value: "page-width" }); break; case ZoomType.fitH: this._send({ command: "zoom", value: "page-height" }); break; case ZoomType.fitV: this._send({ command: "zoom", value: "auto" }); break; case ZoomType.pref: case ZoomType.refW: break; default: return; } this._zoomType = type; } get zoom() { return this._zoom; } set zoom(value) { if (!this._userActivation) { return; } this._userActivation = false; if (typeof value !== "number" || value < 8.33 || value > 6400) { return; } this._send({ command: "zoom", value: value / 100 }); } addAnnot() {} addField() {} addIcon() {} addLink() {} addRecipientListCryptFilter() {} addRequirement() {} addScript() {} addThumbnails() {} addWatermarkFromFile() {} addWatermarkFromText() {} addWeblinks() {} bringToFront() {} calculateNow() { this._eventDispatcher.calculateNow(); } closeDoc() {} colorConvertPage() {} createDataObject() {} createTemplate() {} deletePages() {} deleteSound() {} embedDocAsDataObject() {} embedOutputIntent() {} encryptForRecipients() {} encryptUsingPolicy() {} exportAsFDF() {} exportAsFDFStr() {} exportAsText() {} exportAsXFDF() {} exportAsXFDFStr() {} exportDataObject() {} exportXFAData() {} extractPages() {} flattenPages() {} getAnnot() {} getAnnots() {} getAnnot3D() {} getAnnots3D() {} getColorConvertAction() {} getDataObject() {} getDataObjectContents() {} _getField(cName) { if (cName && typeof cName === "object") { cName = cName.cName; } if (typeof cName !== "string") { throw new TypeError("Invalid field name: must be a string"); } const searchedField = this._fields.get(cName); if (searchedField) { return searchedField; } const parts = cName.split("#"); let childIndex = NaN; if (parts.length === 2) { childIndex = Math.floor(parseFloat(parts[1])); cName = parts[0]; } for (const [name, field] of this._fields.entries()) { if (name.endsWith(cName)) { if (!isNaN(childIndex)) { const children = this._getChildren(name); if (childIndex < 0 || childIndex >= children.length) { childIndex = 0; } if (childIndex < children.length) { this._fields.set(cName, children[childIndex]); return children[childIndex]; } } this._fields.set(cName, field); return field; } } return null; } getField(cName) { const field = this._getField(cName); if (!field) { return null; } return field.wrapped; } _getChildren(fieldName) { const len = fieldName.length; const children = []; const pattern = /^\.[^.]+$/; for (const [name, field] of this._fields.entries()) { if (name.startsWith(fieldName)) { const finalPart = name.slice(len); if (pattern.test(finalPart)) { children.push(field); } } } return children; } _getTerminalChildren(fieldName) { const children = []; const len = fieldName.length; for (const [name, field] of this._fields.entries()) { if (name.startsWith(fieldName)) { const finalPart = name.slice(len); if (field.obj._hasValue && (finalPart === "" || finalPart.startsWith("."))) { children.push(field.wrapped); } } } return children; } getIcon() {} getLegalWarnings() {} getLinks() {} getNthFieldName(nIndex) { if (nIndex && typeof nIndex === "object") { nIndex = nIndex.nIndex; } if (typeof nIndex !== "number") { throw new TypeError("Invalid field index: must be a number"); } if (0 <= nIndex && nIndex < this.numFields) { return this._fieldNames[Math.trunc(nIndex)]; } return null; } getNthTemplate() { return null; } getOCGs() {} getOCGOrder() {} getPageBox() {} getPageLabel() {} getPageNthWord() {} getPageNthWordQuads() {} getPageNumWords() {} getPageRotation() {} getPageTransition() {} getPrintParams() { return this._printParams ||= new PrintParams({ lastPage: this._numPages - 1 }); } getSound() {} getTemplate() {} getURL() {} gotoNamedDest() {} importAnFDF() {} importAnXFDF() {} importDataObject() {} importIcon() {} importSound() {} importTextData() {} importXFAData() {} insertPages() {} mailDoc() {} mailForm() {} movePage() {} newPage() {} openDataObject() {} print(bUI = true, nStart = 0, nEnd = -1, bSilent = false, bShrinkToFit = false, bPrintAsImage = false, bReverse = false, bAnnotations = true, printParams = null) { if (this._disablePrinting || !this._userActivation) { return; } this._userActivation = false; if (bUI && typeof bUI === "object") { nStart = bUI.nStart; nEnd = bUI.nEnd; bSilent = bUI.bSilent; bShrinkToFit = bUI.bShrinkToFit; bPrintAsImage = bUI.bPrintAsImage; bReverse = bUI.bReverse; bAnnotations = bUI.bAnnotations; printParams = bUI.printParams; bUI = bUI.bUI; } if (printParams) { nStart = printParams.firstPage; nEnd = printParams.lastPage; } nStart = typeof nStart === "number" ? Math.max(0, Math.trunc(nStart)) : 0; nEnd = typeof nEnd === "number" ? Math.max(0, Math.trunc(nEnd)) : -1; this._send({ command: "print", start: nStart, end: nEnd }); } removeDataObject() {} removeField() {} removeIcon() {} removeLinks() {} removeRequirement() {} removeScript() {} removeTemplate() {} removeThumbnails() {} removeWeblinks() {} replacePages() {} resetForm(aFields = null) { if (aFields && typeof aFields === "object" && !Array.isArray(aFields)) { aFields = aFields.aFields; } if (aFields && !Array.isArray(aFields)) { aFields = [aFields]; } let mustCalculate = false; let fieldsToReset; if (aFields) { fieldsToReset = []; for (const fieldName of aFields) { if (!fieldName) { continue; } if (typeof fieldName !== "string") { fieldsToReset = null; break; } const field = this._getField(fieldName); if (!field) { continue; } fieldsToReset.push(field); mustCalculate = true; } } if (!fieldsToReset) { fieldsToReset = this._fields.values(); mustCalculate = this._fields.size !== 0; } for (const field of fieldsToReset) { field.obj.value = field.obj.defaultValue; this._send({ id: field.obj._id, siblings: field.obj._siblings, value: field.obj.defaultValue, formattedValue: null, selRange: [0, 0] }); } if (mustCalculate) { this.calculateNow(); } } saveAs() {} scroll() {} selectPageNthWord() {} setAction() {} setDataObjectContents() {} setOCGOrder() {} setPageAction() {} setPageBoxes() {} setPageLabels() {} setPageRotations() {} setPageTabOrder() {} setPageTransitions() {} spawnPageFromTemplate() {} submitForm() {} syncAnnotScan() {} } ;// CONCATENATED MODULE: ./src/scripting_api/proxy.js class ProxyHandler { constructor() { this.nosend = new Set(["delay"]); } get(obj, prop) { if (prop in obj._expandos) { const val = obj._expandos[prop]; if (typeof val === "function") { return val.bind(obj); } return val; } if (typeof prop === "string" && !prop.startsWith("_") && prop in obj) { const val = obj[prop]; if (typeof val === "function") { return val.bind(obj); } return val; } return undefined; } set(obj, prop, value) { if (obj._kidIds) { obj._kidIds.forEach(id => { obj._appObjects[id].wrapped[prop] = value; }); } if (typeof prop === "string" && !prop.startsWith("_") && prop in obj) { const old = obj[prop]; obj[prop] = value; if (!this.nosend.has(prop) && obj._send && obj._id !== null && typeof old !== "function") { const data = { id: obj._id }; data[prop] = prop === "value" ? obj._getValue() : obj[prop]; if (!obj._siblings) { obj._send(data); } else { data.siblings = obj._siblings; obj._send(data); } } } else { obj._expandos[prop] = value; } return true; } has(obj, prop) { return prop in obj._expandos || typeof prop === "string" && !prop.startsWith("_") && prop in obj; } getPrototypeOf(obj) { return null; } setPrototypeOf(obj, proto) { return false; } isExtensible(obj) { return true; } preventExtensions(obj) { return false; } getOwnPropertyDescriptor(obj, prop) { if (prop in obj._expandos) { return { configurable: true, enumerable: true, value: obj._expandos[prop] }; } if (typeof prop === "string" && !prop.startsWith("_") && prop in obj) { return { configurable: true, enumerable: true, value: obj[prop] }; } return undefined; } defineProperty(obj, key, descriptor) { Object.defineProperty(obj._expandos, key, descriptor); return true; } deleteProperty(obj, prop) { if (prop in obj._expandos) { delete obj._expandos[prop]; } } ownKeys(obj) { const fromExpandos = Reflect.ownKeys(obj._expandos); const fromObj = Reflect.ownKeys(obj).filter(k => !k.startsWith("_")); return fromExpandos.concat(fromObj); } } ;// CONCATENATED MODULE: ./src/scripting_api/util.js class Util extends PDFObject { constructor(data) { super(data); this._scandCache = new Map(); this._months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; this._days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; this.MILLISECONDS_IN_DAY = 86400000; this.MILLISECONDS_IN_WEEK = 604800000; this._externalCall = data.externalCall; } printf(...args) { if (args.length === 0) { throw new Error("Invalid number of params in printf"); } if (typeof args[0] !== "string") { throw new TypeError("First argument of printf must be a string"); } const pattern = /%(,[0-4])?([+ 0#]+)?(\d+)?(\.\d+)?(.)/g; const PLUS = 1; const SPACE = 2; const ZERO = 4; const HASH = 8; let i = 0; return args[0].replaceAll(pattern, function (match, nDecSep, cFlags, nWidth, nPrecision, cConvChar) { if (cConvChar !== "d" && cConvChar !== "f" && cConvChar !== "s" && cConvChar !== "x") { const buf = ["%"]; for (const str of [nDecSep, cFlags, nWidth, nPrecision, cConvChar]) { if (str) { buf.push(str); } } return buf.join(""); } i++; if (i === args.length) { throw new Error("Not enough arguments in printf"); } const arg = args[i]; if (cConvChar === "s") { return arg.toString(); } let flags = 0; if (cFlags) { for (const flag of cFlags) { switch (flag) { case "+": flags |= PLUS; break; case " ": flags |= SPACE; break; case "0": flags |= ZERO; break; case "#": flags |= HASH; break; } } } cFlags = flags; if (nWidth) { nWidth = parseInt(nWidth); } let intPart = Math.trunc(arg); if (cConvChar === "x") { let hex = Math.abs(intPart).toString(16).toUpperCase(); if (nWidth !== undefined) { hex = hex.padStart(nWidth, cFlags & ZERO ? "0" : " "); } if (cFlags & HASH) { hex = `0x${hex}`; } return hex; } if (nPrecision) { nPrecision = parseInt(nPrecision.substring(1)); } nDecSep = nDecSep ? nDecSep.substring(1) : "0"; const separators = { 0: [",", "."], 1: ["", "."], 2: [".", ","], 3: ["", ","], 4: ["'", "."] }; const [thousandSep, decimalSep] = separators[nDecSep]; let decPart = ""; if (cConvChar === "f") { decPart = nPrecision !== undefined ? Math.abs(arg - intPart).toFixed(nPrecision) : Math.abs(arg - intPart).toString(); if (decPart.length > 2) { decPart = `${decimalSep}${decPart.substring(2)}`; } else { if (decPart === "1") { intPart += Math.sign(arg); } decPart = cFlags & HASH ? "." : ""; } } let sign = ""; if (intPart < 0) { sign = "-"; intPart = -intPart; } else if (cFlags & PLUS) { sign = "+"; } else if (cFlags & SPACE) { sign = " "; } if (thousandSep && intPart >= 1000) { const buf = []; while (true) { buf.push((intPart % 1000).toString().padStart(3, "0")); intPart = Math.trunc(intPart / 1000); if (intPart < 1000) { buf.push(intPart.toString()); break; } } intPart = buf.reverse().join(thousandSep); } else { intPart = intPart.toString(); } let n = `${intPart}${decPart}`; if (nWidth !== undefined) { n = n.padStart(nWidth - sign.length, cFlags & ZERO ? "0" : " "); } return `${sign}${n}`; }); } iconStreamFromIcon() {} printd(cFormat, oDate) { switch (cFormat) { case 0: return this.printd("D:yyyymmddHHMMss", oDate); case 1: return this.printd("yyyy.mm.dd HH:MM:ss", oDate); case 2: return this.printd("m/d/yy h:MM:ss tt", oDate); } const handlers = { mmmm: data => this._months[data.month], mmm: data => this._months[data.month].substring(0, 3), mm: data => (data.month + 1).toString().padStart(2, "0"), m: data => (data.month + 1).toString(), dddd: data => this._days[data.dayOfWeek], ddd: data => this._days[data.dayOfWeek].substring(0, 3), dd: data => data.day.toString().padStart(2, "0"), d: data => data.day.toString(), yyyy: data => data.year.toString(), yy: data => (data.year % 100).toString().padStart(2, "0"), HH: data => data.hours.toString().padStart(2, "0"), H: data => data.hours.toString(), hh: data => (1 + (data.hours + 11) % 12).toString().padStart(2, "0"), h: data => (1 + (data.hours + 11) % 12).toString(), MM: data => data.minutes.toString().padStart(2, "0"), M: data => data.minutes.toString(), ss: data => data.seconds.toString().padStart(2, "0"), s: data => data.seconds.toString(), tt: data => data.hours < 12 ? "am" : "pm", t: data => data.hours < 12 ? "a" : "p" }; const data = { year: oDate.getFullYear(), month: oDate.getMonth(), day: oDate.getDate(), dayOfWeek: oDate.getDay(), hours: oDate.getHours(), minutes: oDate.getMinutes(), seconds: oDate.getSeconds() }; const patterns = /(mmmm|mmm|mm|m|dddd|ddd|dd|d|yyyy|yy|HH|H|hh|h|MM|M|ss|s|tt|t|\\.)/g; return cFormat.replaceAll(patterns, function (match, pattern) { if (pattern in handlers) { return handlers[pattern](data); } return pattern.charCodeAt(1); }); } printx(cFormat, cSource) { cSource = (cSource ?? "").toString(); const handlers = [x => x, x => x.toUpperCase(), x => x.toLowerCase()]; const buf = []; let i = 0; const ii = cSource.length; let currCase = handlers[0]; let escaped = false; for (const command of cFormat) { if (escaped) { buf.push(command); escaped = false; continue; } if (i >= ii) { break; } switch (command) { case "?": buf.push(currCase(cSource.charAt(i++))); break; case "X": while (i < ii) { const char = cSource.charAt(i++); if ("a" <= char && char <= "z" || "A" <= char && char <= "Z" || "0" <= char && char <= "9") { buf.push(currCase(char)); break; } } break; case "A": while (i < ii) { const char = cSource.charAt(i++); if ("a" <= char && char <= "z" || "A" <= char && char <= "Z") { buf.push(currCase(char)); break; } } break; case "9": while (i < ii) { const char = cSource.charAt(i++); if ("0" <= char && char <= "9") { buf.push(char); break; } } break; case "*": while (i < ii) { buf.push(currCase(cSource.charAt(i++))); } break; case "\\": escaped = true; break; case ">": currCase = handlers[1]; break; case "<": currCase = handlers[2]; break; case "=": currCase = handlers[0]; break; default: buf.push(command); } } return buf.join(""); } scand(cFormat, cDate) { if (typeof cDate !== "string") { return new Date(cDate); } if (cDate === "") { return new Date(); } switch (cFormat) { case 0: return this.scand("D:yyyymmddHHMMss", cDate); case 1: return this.scand("yyyy.mm.dd HH:MM:ss", cDate); case 2: return this.scand("m/d/yy h:MM:ss tt", cDate); } if (!this._scandCache.has(cFormat)) { const months = this._months; const days = this._days; const handlers = { mmmm: { pattern: `(${months.join("|")})`, action: (value, data) => { data.month = months.indexOf(value); } }, mmm: { pattern: `(${months.map(month => month.substring(0, 3)).join("|")})`, action: (value, data) => { data.month = months.findIndex(month => month.substring(0, 3) === value); } }, mm: { pattern: `(\\d{2})`, action: (value, data) => { data.month = parseInt(value) - 1; } }, m: { pattern: `(\\d{1,2})`, action: (value, data) => { data.month = parseInt(value) - 1; } }, dddd: { pattern: `(${days.join("|")})`, action: (value, data) => { data.day = days.indexOf(value); } }, ddd: { pattern: `(${days.map(day => day.substring(0, 3)).join("|")})`, action: (value, data) => { data.day = days.findIndex(day => day.substring(0, 3) === value); } }, dd: { pattern: "(\\d{2})", action: (value, data) => { data.day = parseInt(value); } }, d: { pattern: "(\\d{1,2})", action: (value, data) => { data.day = parseInt(value); } }, yyyy: { pattern: "(\\d{4})", action: (value, data) => { data.year = parseInt(value); } }, yy: { pattern: "(\\d{2})", action: (value, data) => { data.year = 2000 + parseInt(value); } }, HH: { pattern: "(\\d{2})", action: (value, data) => { data.hours = parseInt(value); } }, H: { pattern: "(\\d{1,2})", action: (value, data) => { data.hours = parseInt(value); } }, hh: { pattern: "(\\d{2})", action: (value, data) => { data.hours = parseInt(value); } }, h: { pattern: "(\\d{1,2})", action: (value, data) => { data.hours = parseInt(value); } }, MM: { pattern: "(\\d{2})", action: (value, data) => { data.minutes = parseInt(value); } }, M: { pattern: "(\\d{1,2})", action: (value, data) => { data.minutes = parseInt(value); } }, ss: { pattern: "(\\d{2})", action: (value, data) => { data.seconds = parseInt(value); } }, s: { pattern: "(\\d{1,2})", action: (value, data) => { data.seconds = parseInt(value); } }, tt: { pattern: "([aApP][mM])", action: (value, data) => { const char = value.charAt(0); data.am = char === "a" || char === "A"; } }, t: { pattern: "([aApP])", action: (value, data) => { data.am = value === "a" || value === "A"; } } }; const escapedFormat = cFormat.replaceAll(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); const patterns = /(mmmm|mmm|mm|m|dddd|ddd|dd|d|yyyy|yy|HH|H|hh|h|MM|M|ss|s|tt|t)/g; const actions = []; const re = escapedFormat.replaceAll(patterns, function (match, patternElement) { const { pattern, action } = handlers[patternElement]; actions.push(action); return pattern; }); this._scandCache.set(cFormat, [re, actions]); } const [re, actions] = this._scandCache.get(cFormat); const matches = new RegExp(`^${re}$`, "g").exec(cDate); if (!matches || matches.length !== actions.length + 1) { return null; } const data = { year: 2000, month: 0, day: 1, hours: 0, minutes: 0, seconds: 0, am: null }; actions.forEach((action, i) => action(matches[i + 1], data)); if (data.am !== null) { data.hours = data.hours % 12 + (data.am ? 0 : 12); } return new Date(data.year, data.month, data.day, data.hours, data.minutes, data.seconds); } spansToXML() {} stringFromStream() {} xmlToSpans() {} } ;// CONCATENATED MODULE: ./src/scripting_api/initialization.js function initSandbox(params) { delete globalThis.pdfjsScripting; const externalCall = globalThis.callExternalFunction; delete globalThis.callExternalFunction; const globalEval = code => globalThis.eval(code); const send = data => externalCall("send", [data]); const proxyHandler = new ProxyHandler(); const { data } = params; const doc = new Doc({ send, globalEval, ...data.docInfo }); const _document = { obj: doc, wrapped: new Proxy(doc, proxyHandler) }; const app = new App({ send, globalEval, externalCall, _document, calculationOrder: data.calculationOrder, proxyHandler, ...data.appInfo }); const util = new Util({ externalCall }); const appObjects = app._objects; if (data.objects) { const annotations = []; for (const [name, objs] of Object.entries(data.objects)) { annotations.length = 0; let container = null; for (const obj of objs) { if (obj.type !== "") { annotations.push(obj); } else { container = obj; } } let obj = container; if (annotations.length > 0) { obj = annotations[0]; obj.send = send; } obj.globalEval = globalEval; obj.doc = _document; obj.fieldPath = name; obj.appObjects = appObjects; let field; switch (obj.type) { case "radiobutton": { const otherButtons = annotations.slice(1); field = new RadioButtonField(otherButtons, obj); break; } case "checkbox": { const otherButtons = annotations.slice(1); field = new CheckboxField(otherButtons, obj); break; } case "text": if (annotations.length <= 1) { field = new Field(obj); break; } obj.siblings = annotations.map(x => x.id).slice(1); field = new Field(obj); break; default: field = new Field(obj); } const wrapped = new Proxy(field, proxyHandler); const _object = { obj: field, wrapped }; doc._addField(name, _object); for (const object of objs) { appObjects[object.id] = _object; } if (container) { appObjects[container.id] = _object; } } } const color = new Color(); globalThis.event = null; globalThis.global = Object.create(null); globalThis.app = new Proxy(app, proxyHandler); globalThis.color = new Proxy(color, proxyHandler); globalThis.console = new Proxy(new Console({ send }), proxyHandler); globalThis.util = new Proxy(util, proxyHandler); globalThis.border = Border; globalThis.cursor = Cursor; globalThis.display = Display; globalThis.font = Font; globalThis.highlight = Highlight; globalThis.position = Position; globalThis.scaleHow = ScaleHow; globalThis.scaleWhen = ScaleWhen; globalThis.style = Style; globalThis.trans = Trans; globalThis.zoomtype = ZoomType; globalThis.ADBE = { Reader_Value_Asked: true, Viewer_Value_Asked: true }; const aform = new AForm(doc, app, util, color); for (const name of Object.getOwnPropertyNames(AForm.prototype)) { if (name !== "constructor" && !name.startsWith("_")) { globalThis[name] = aform[name].bind(aform); } } for (const [name, value] of Object.entries(GlobalConstants)) { Object.defineProperty(globalThis, name, { value, writable: false }); } Object.defineProperties(globalThis, { ColorConvert: { value: color.convert.bind(color), writable: true }, ColorEqual: { value: color.equal.bind(color), writable: true } }); const properties = Object.create(null); for (const name of Object.getOwnPropertyNames(Doc.prototype)) { if (name === "constructor" || name.startsWith("_")) { continue; } const descriptor = Object.getOwnPropertyDescriptor(Doc.prototype, name); if (descriptor.get) { properties[name] = { get: descriptor.get.bind(doc), set: descriptor.set.bind(doc) }; } else { properties[name] = { value: Doc.prototype[name].bind(doc) }; } } Object.defineProperties(globalThis, properties); const functions = { dispatchEvent: app._dispatchEvent.bind(app), timeoutCb: app._evalCallback.bind(app) }; return (name, args) => { try { functions[name](args); } catch (error) { send(serializeError(error)); } }; } ;// CONCATENATED MODULE: ./src/pdf.scripting.js const pdfjsVersion = "4.1.249"; const pdfjsBuild = "d07f37f44"; globalThis.pdfjsScripting = { initSandbox: initSandbox };