1/** 2 * @licstart The following is the entire license notice for the 3 * JavaScript code in this page 4 * 5 * Copyright 2023 Mozilla Foundation 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 * @licend The above is the entire license notice for the 20 * JavaScript code in this page 21 */ 22 23(function webpackUniversalModuleDefinition(root, factory) { 24 25 if(typeof exports === 'object' && typeof module === 'object') 26 module.exports = root.pdfjsLib = factory(); 27 else if(typeof define === 'function' && define.amd) 28 define("pdfjs-dist/build/pdf", [], () => { return (root.pdfjsLib = factory()); }); 29 else if(typeof exports === 'object') 30 exports["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); 31 else 32 root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); 33})(globalThis, () => { 34return /******/ (() => { // webpackBootstrap 35/******/ "use strict"; 36/******/ var __webpack_modules__ = ([ 37/* 0 */, 38/* 1 */ 39/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 40 41 42 43Object.defineProperty(exports, "__esModule", ({ 44 value: true 45})); 46exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.RenderingIntentFlag = exports.PromiseCapability = exp
46orts.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.AnnotationPrefix = exports.AnnotationMode = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; 47exports.assert = assert; 48exports.bytesToString = bytesToString; 49exports.createValidAbsoluteUrl = createValidAbsoluteUrl; 50exports.getModificationDate = getModificationDate; 51exports.getUuid = getUuid; 52exports.getVerbosityLevel = getVerbosityLevel; 53exports.info = info; 54exports.isArrayBuffer = isArrayBuffer; 55exports.isArrayEqual = isArrayEqual; 56exports.isNodeJS = void 0; 57exports.normalizeUnicode = normalizeUnicode; 58exports.objectFromMap = objectFromMap; 59exports.objectSize = objectSize; 60exports.setVerbosityLevel = setVerbosityLevel; 61exports.shadow = shadow; 62exports.string32 = string32; 63exports.stringToBytes = stringToBytes; 64exports.stringToPDFString = stringToPDFString; 65exports.stringToUTF8String = stringToUTF8String; 66exports.unreachable = unreachable; 67exports.utf8StringToString = utf8StringToString; 68exports.warn = warn; 69__w_pdfjs_require__(2); 70__w_pdfjs_require__(84); 71__w_pdfjs_require__(86); 72__w_pdfjs_require__(87); 73__w_pdfjs_require__(89); 74__w_pdfjs_require__(93); 75__w_pdfjs_require__(101); 76__w_pdfjs_require__(102); 77__w_pdfjs_require__(105); 78__w_pdfjs_require__(107); 79__w_pdfjs_require__(109); 80__w_pdfjs_require__(113); 81__w_pdfjs_require__(116); 82__w_pdfjs_require__(123); 83const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
vendor: 4,649 bytes, lines 84-291
84exports.isNodeJS = isNodeJS; 85const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; 86exports.IDENTITY_MATRIX = IDENTITY_MATRIX; 87const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; 88exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; 89const MAX_IMAGE_SIZE_TO_CACHE = 10e6; 90exports.MAX_IMAGE_SIZE_TO_CACHE = MAX_IMAGE_SIZE_TO_CACHE; 91const LINE_FACTOR = 1.35; 92exports.LINE_FACTOR = LINE_FACTOR; 93const LINE_DESCENT_FACTOR = 0.35; 94exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; 95const BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; 96exports.BASELINE_FACTOR = BASELINE_FACTOR; 97const RenderingIntentFlag = { 98 ANY: 0x01, 99 DISPLAY: 0x02, 100 PRINT: 0x04, 101 SAVE: 0x08, 102 ANNOTATIONS_FORMS: 0x10, 103 ANNOTATIONS_STORAGE: 0x20, 104 ANNOTATIONS_DISABLE: 0x40, 105 OPLIST: 0x100 106}; 107exports.RenderingIntentFlag = RenderingIntentFlag; 108const AnnotationMode = { 109 DISABLE: 0, 110 ENABLE: 1, 111 ENABLE_FORMS: 2, 112 ENABLE_STORAGE: 3 113}; 114exports.AnnotationMode = AnnotationMode; 115const AnnotationEditorPrefix = "pdfjs_internal_editor_"; 116exports.AnnotationEditorPrefix = AnnotationEditorPrefix; 117const AnnotationEditorType = { 118 DISABLE: -1, 119 NONE: 0, 120 FREETEXT: 3, 121 STAMP: 13, 122 INK: 15 123}; 124exports.AnnotationEditorType = AnnotationEditorType; 125const AnnotationEditorParamsType = { 126 RESIZE: 1, 127 CREATE: 2, 128 FREETEXT_SIZE: 11, 129 FREETEXT_COLOR: 12, 130 FREETEXT_OPACITY: 13, 131 INK_COLOR: 21, 132 INK_THICKNESS: 22, 133 INK_OPACITY: 23 134}; 135exports.AnnotationEditorParamsType = AnnotationEditorParamsType; 136const PermissionFlag = { 137 PRINT: 0x04, 138 MODIFY_CONTENTS: 0x08, 139 COPY: 0x10, 140 MODIFY_ANNOTATIONS: 0x20, 141 FILL_INTERACTIVE_FORMS: 0x100, 142 COPY_FOR_ACCESSIBILITY: 0x200, 143 ASSEMBLE: 0x400, 144 PRINT_HIGH_QUALITY: 0x800 145}; 146exports.PermissionFlag = PermissionFlag; 147const TextRenderingMode = { 148 FILL: 0, 149 STROKE: 1, 150 FILL_STROKE: 2, 151 INVISIBLE: 3, 152 FILL_ADD_TO_PATH: 4, 153 STROKE_ADD_TO_PATH: 5, 154 FILL_STROKE_ADD_TO_PATH: 6, 155 ADD_TO_PATH: 7, 156 FILL_STROKE_MASK: 3, 157 ADD_TO_PATH_FLAG: 4 158}; 159exports.TextRenderingMode = TextRenderingMode; 160const ImageKind = { 161 GRAYSCALE_1BPP: 1, 162 RGB_24BPP: 2, 163 RGBA_32BPP: 3 164}; 165exports.ImageKind = ImageKind; 166const AnnotationType = { 167 TEXT: 1, 168 LINK: 2, 169 FREETEXT: 3, 170 LINE: 4, 171 SQUARE: 5, 172 CIRCLE: 6, 173 POLYGON: 7, 174 POLYLINE: 8, 175 HIGHLIGHT: 9, 176 UNDERLINE: 10, 177 SQUIGGLY: 11, 178 STRIKEOUT: 12, 179 STAMP: 13, 180 CARET: 14, 181 INK: 15, 182 POPUP: 16, 183 FILEATTACHMENT: 17, 184 SOUND: 18, 185 MOVIE: 19, 186 WIDGET: 20, 187 SCREEN: 21, 188 PRINTERMARK: 22, 189 TRAPNET: 23, 190 WATERMARK: 24, 191 THREED: 25, 192 REDACT: 26 193}; 194exports.AnnotationType = AnnotationType; 195const AnnotationReplyType = { 196 GROUP: "Group", 197 REPLY: "R" 198}; 199exports.AnnotationReplyType = AnnotationReplyType; 200const AnnotationFlag = { 201 INVISIBLE: 0x01, 202 HIDDEN: 0x02, 203 PRINT: 0x04, 204 NOZOOM: 0x08, 205 NOROTATE: 0x10, 206 NOVIEW: 0x20, 207 READONLY: 0x40, 208 LOCKED: 0x80, 209 TOGGLENOVIEW: 0x100, 210 LOCKEDCONTENTS: 0x200 211}; 212exports.AnnotationFlag = AnnotationFlag; 213const AnnotationFieldFlag = { 214 READONLY: 0x0000001, 215 REQUIRED: 0x0000002, 216 NOEXPORT: 0x0000004, 217 MULTILINE: 0x0001000, 218 PASSWORD: 0x0002000, 219 NOTOGGLETOOFF: 0x0004000, 220 RADIO: 0x0008000, 221 PUSHBUTTON: 0x0010000, 222 COMBO: 0x0020000, 223 EDIT: 0x0040000, 224 SORT: 0x0080000, 225 FILESELECT: 0x0100000, 226 MULTISELECT: 0x0200000, 227 DONOTSPELLCHECK: 0x0400000, 228 DONOTSCROLL: 0x0800000, 229 COMB: 0x1000000, 230 RICHTEXT: 0x2000000, 231 RADIOSINUNISON: 0x2000000, 232 COMMITONSELCHANGE: 0x4000000 233}; 234exports.AnnotationFieldFlag = AnnotationFieldFlag; 235const AnnotationBorderStyleType = { 236 SOLID: 1, 237 DASHED: 2, 238 BEVELED: 3, 239 INSET: 4, 240 UNDERLINE: 5 241}; 242exports.AnnotationBorderStyleType = AnnotationBorderStyleType; 243const AnnotationActionEventType = { 244 E: "Mouse Enter", 245 X: "Mouse Exit", 246 D: "Mouse Down", 247 U: "Mouse Up", 248 Fo: "Focus", 249 Bl: "Blur", 250 PO: "PageOpen", 251 PC: "PageClose", 252 PV: "PageVisible", 253 PI: "PageInvisible", 254 K: "Keystroke", 255 F: "Format", 256 V: "Validate", 257 C: "Calculate" 258}; 259exports.AnnotationActionEventType = AnnotationActionEventType; 260const DocumentActionEventType = { 261 WC: "WillClose", 262 WS: "WillSave", 263 DS: "DidSave", 264 WP: "WillPrint", 265 DP: "DidPrint" 266}; 267exports.DocumentActionEventType = DocumentActionEventType; 268const PageActionEventType = { 269 O: "PageOpen", 270 C: "PageClose" 271}; 272exports.PageActionEventType = PageActionEventType; 273const VerbosityLevel = { 274 ERRORS: 0, 275 WARNINGS: 1, 276 INFOS: 5 277}; 278exports.VerbosityLevel = VerbosityLevel; 279const CMapCompressionType = { 280 NONE: 0, 281 BINARY: 1 282}; 283exports.CMapCompressionType = CMapCompressionType; 284const OPS = { 285 dependency: 1, 286 setLineWidth: 2, 287 setLineCap: 3, 288 setLineJoin: 4, 289 setMiterLimit: 5, 290 setDash: 6, 291 setRenderingIntent: 7,
292 setFlatness: 8, 293 setGState: 9, 294 save: 10, 295 restore: 11, 296 transform: 12, 297 moveTo: 13, 298 lineTo: 14, 299 curveTo: 15, 300 curveTo2: 16, 301 curveTo3: 17, 302 closePath: 18, 303 rectangle: 19, 304 stroke: 20, 305 closeStroke: 21, 306 fill: 22, 307 eoFill: 23, 308 fillStroke: 24, 309 eoFillStroke: 25, 310 closeFillStroke: 26, 311 closeEOFillStroke: 27, 312 endPath: 28, 313 clip: 29, 314 eoClip: 30, 315 beginText: 31, 316 endText: 32, 317 setCharSpacing: 33, 318 setWordSpacing: 34, 319 setHScale: 35, 320 setLeading: 36, 321 setFont: 37, 322 setTextRenderingMode: 38, 323 setTextRise: 39, 324 moveText: 40, 325 setLeadingMoveText: 41, 326 setTextMatrix: 42, 327 nextLine: 43, 328 showText: 44, 329 showSpacedText: 45, 330 nextLineShowText: 46, 331 nextLineSetSpacingShowText: 47, 332 setCharWidth: 48, 333 setCharWidthAndBounds: 49, 334 setStrokeColorSpace: 50, 335 setFillColorSpace: 51, 336 setStrokeColor: 52, 337 setStrokeColorN: 53, 338 setFillColor: 54, 339 setFillColorN: 55, 340 setStrokeGray: 56, 341 setFillGray: 57, 342 setStrokeRGBColor: 58, 343 setFillRGBColor: 59, 344 setStrokeCMYKColor: 60, 345 setFillCMYKColor: 61, 346 shadingFill: 62, 347 beginInlineImage: 63, 348 beginImageData: 64, 349 endInlineImage: 65, 350 paintXObject: 66, 351 markPoint: 67, 352 markPointProps: 68, 353 beginMarkedContent: 69, 354 beginMarkedContentProps: 70, 355 endMarkedContent: 71, 356 beginCompat: 72, 357 endCompat: 73, 358 paintFormXObjectBegin: 74, 359 paintFormXObjectEnd: 75, 360 beginGroup: 76, 361 endGroup: 77, 362 beginAnnotation: 80, 363 endAnnotation: 81, 364 paintImageMaskXObject: 83, 365 paintImageMaskXObjectGroup: 84, 366 paintImageXObject: 85, 367 paintInlineImageXObject: 86, 368 paintInlineImageXObjectGroup: 87, 369 paintImageXObjectRepeat: 88, 370 paintImageMaskXObjectRepeat: 89, 371 paintSolidColorImageMask: 90, 372 constructPath: 91 373}; 374exports.OPS = OPS; 375const PasswordResponses = { 376 NEED_PASSWORD: 1, 377 INCORRECT_PASSWORD: 2 378}; 379exports.PasswordResponses = PasswordResponses; 380let verbosity = VerbosityLevel.WARNINGS; 381function setVerbosityLevel(level) { 382 if (Number.isInteger(level)) { 383 verbosity = level; 384 } 385} 386function getVerbosityLevel() { 387 return verbosity; 388} 389function info(msg) { 390 if (verbosity >= VerbosityLevel.INFOS) { 391 console.log(`Info: ${msg}`); 392 } 393} 394function warn(msg) { 395 if (verbosity >= VerbosityLevel.WARNINGS) { 396 console.log(`Warning: ${msg}`); 397 } 398} 399function unreachable(msg) { 400 throw new Error(msg); 401} 402function assert(cond, msg) { 403 if (!cond) { 404 unreachable(msg); 405 } 406} 407function _isValidProtocol(url) { 408 switch (url?.protocol) { 409 case "http:": 410 case "https:": 411 case "ftp:": 412 case "mailto:": 413 case "tel:": 414 return true; 415 default: 416 return false; 417 } 418} 419function createValidAbsoluteUrl(url) { 420 let baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 421 let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 422 if (!url) { 423 return null; 424 } 425 try { 426 if (options && typeof url === "string") { 427 if (options.addDefaultProtocol && url.startsWith("www.")) { 428 const dots = url.match(/\./g); 429 if (dots?.length >= 2) { 430 url = `http://${url}`; 431 } 432 } 433 if (options.tryConvertEncoding) { 434 try { 435 url = stringToUTF8String(url); 436 } catch {} 437 } 438 } 439 const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); 440 if (_isValidProtocol(absoluteUrl)) { 441 return absoluteUrl; 442 } 443 } catch {} 444 return null; 445} 446function shadow(obj, prop, value) { 447 let nonSerializable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; 448 Object.defineProperty(obj, prop, { 449 value, 450 enumerable: !nonSerializable, 451 configurable: true, 452 writable: false 453 }); 454 return value; 455} 456const BaseException = function BaseExceptionClosure() { 457 function BaseException(message, name) { 458 if (this.constructor === BaseException) { 459 unreachable("Cannot initialize BaseException."); 460 } 461 this.message = message; 462 this.name = name; 463 } 464 BaseException.prototype = new Error(); 465 BaseException.constructor = BaseException; 466 return BaseException; 467}(); 468exports.BaseException = BaseException; 469class PasswordException extends BaseException { 470 constructor(msg, code) { 471 super(msg, "PasswordException"); 472 this.code = code; 473 } 474} 475exports.PasswordException = PasswordException; 476class UnknownErrorException extends BaseException { 477 constructor(msg, details) { 478 super(msg, "UnknownErrorException"); 479 this.details = details; 480 } 481} 482exports.UnknownErrorException = UnknownErrorException; 483class InvalidPDFException extends BaseException { 484 constructor(msg) { 485 super(msg, "InvalidPDFException"); 486 } 487} 488exports.InvalidPDFException = InvalidPDFException; 489class MissingPDFException extends BaseException { 490 constructor(msg) { 491 super(msg, "MissingPDFException"); 492 } 493} 494exports.MissingPDFException = MissingPDFException; 495class UnexpectedResponseException extends BaseException { 496 constructor(msg, status) { 497 super(msg, "UnexpectedResponseException"); 498 this.status = status; 499 } 500} 501exports.UnexpectedResponseException = UnexpectedResponseException; 502class FormatError extends BaseException { 503 constructor(msg) { 504 super(msg, "FormatError"); 505 } 506} 507exports.FormatError = FormatError; 508class AbortException extends BaseException { 509 constructor(msg) { 510 super(msg, "AbortException"); 511 } 512} 513exports.AbortException = AbortException; 514function bytesToString(bytes) { 515 if (typeof bytes !== "object" || bytes?.length === undefined) { 516 unreachable("Invalid argument for bytesToString"); 517 } 518 const length = bytes.length; 519 const MAX_ARGUMENT_COUNT = 8192; 520 if (length < MAX_ARGUMENT_COUNT) { 521 return String.fromCharCode.apply(null, bytes); 522 } 523 const strBuf = []; 524 for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { 525 const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); 526 const chunk = bytes.subarray(i, chunkEnd); 527 strBuf.push(String.fromCharCode.apply(null, chunk)); 528 } 529 return strBuf.join(""); 530} 531function stringToBytes(str) { 532 if (typeof str !== "string") { 533 unreachable("Invalid argument for stringToBytes"); 534 } 535 const length = str.length; 536 const bytes = new Uint8Array(length); 537 for (let i = 0; i < length; ++i) { 538 bytes[i] = str.charCodeAt(i) & 0xff;
vendor: 8,096 bytes, lines 539-774
539 } 540 return bytes; 541} 542function string32(value) { 543 return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); 544} 545function objectSize(obj) { 546 return Object.keys(obj).length; 547} 548function objectFromMap(map) { 549 const obj = Object.create(null); 550 for (const [key, value] of map) { 551 obj[key] = value; 552 } 553 return obj; 554} 555function isLittleEndian() { 556 const buffer8 = new Uint8Array(4); 557 buffer8[0] = 1; 558 const view32 = new Uint32Array(buffer8.buffer, 0, 1); 559 return view32[0] === 1; 560} 561function isEvalSupported() { 562 try { 563 new Function(""); 564 return true; 565 } catch { 566 return false; 567 } 568} 569class FeatureTest { 570 static get isLittleEndian() { 571 return shadow(this, "isLittleEndian", isLittleEndian()); 572 } 573 static get isEvalSupported() { 574 return shadow(this, "isEvalSupported", isEvalSupported()); 575 } 576 static get isOffscreenCanvasSupported() { 577 return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); 578 } 579 static get platform() { 580 if (typeof navigator === "undefined") { 581 return shadow(this, "platform", { 582 isWin: false, 583 isMac: false 584 }); 585 } 586 return shadow(this, "platform", { 587 isWin: navigator.platform.includes("Win"), 588 isMac: navigator.platform.includes("Mac") 589 }); 590 } 591 static get isCSSRoundSupported() { 592 return shadow(this, "isCSSRoundSupported", globalThis.CSS?.supports?.("width: round(1.5px, 1px)")); 593 } 594} 595exports.FeatureTest = FeatureTest; 596const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); 597class Util { 598 static makeHexColor(r, g, b) { 599 return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; 600 } 601 static scaleMinMax(transform, minMax) { 602 let temp; 603 if (transform[0]) { 604 if (transform[0] < 0) { 605 temp = minMax[0]; 606 minMax[0] = minMax[1]; 607 minMax[1] = temp; 608 } 609 minMax[0] *= transform[0]; 610 minMax[1] *= transform[0]; 611 if (transform[3] < 0) { 612 temp = minMax[2]; 613 minMax[2] = minMax[3]; 614 minMax[3] = temp; 615 } 616 minMax[2] *= transform[3]; 617 minMax[3] *= transform[3]; 618 } else { 619 temp = minMax[0]; 620 minMax[0] = minMax[2]; 621 minMax[2] = temp; 622 temp = minMax[1]; 623 minMax[1] = minMax[3]; 624 minMax[3] = temp; 625 if (transform[1] < 0) { 626 temp = minMax[2]; 627 minMax[2] = minMax[3]; 628 minMax[3] = temp; 629 } 630 minMax[2] *= transform[1]; 631 minMax[3] *= transform[1]; 632 if (transform[2] < 0) { 633 temp = minMax[0]; 634 minMax[0] = minMax[1]; 635 minMax[1] = temp; 636 } 637 minMax[0] *= transform[2]; 638 minMax[1] *= transform[2]; 639 } 640 minMax[0] += transform[4]; 641 minMax[1] += transform[4]; 642 minMax[2] += transform[5]; 643 minMax[3] += transform[5]; 644 } 645 static transform(m1, m2) { 646 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]]; 647 } 648 static applyTransform(p, m) { 649 const xt = p[0] * m[0] + p[1] * m[2] + m[4]; 650 const yt = p[0] * m[1] + p[1] * m[3] + m[5]; 651 return [xt, yt]; 652 } 653 static applyInverseTransform(p, m) { 654 const d = m[0] * m[3] - m[1] * m[2]; 655 const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; 656 const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; 657 return [xt, yt]; 658 } 659 static getAxialAlignedBoundingBox(r, m) { 660 const p1 = this.applyTransform(r, m); 661 const p2 = this.applyTransform(r.slice(2, 4), m); 662 const p3 = this.applyTransform([r[0], r[3]], m); 663 const p4 = this.applyTransform([r[2], r[1]], m); 664 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])]; 665 } 666 static inverseTransform(m) { 667 const d = m[0] * m[3] - m[1] * m[2]; 668 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]; 669 } 670 static singularValueDecompose2dScale(m) { 671 const transpose = [m[0], m[2], m[1], m[3]]; 672 const a = m[0] * transpose[0] + m[1] * transpose[2]; 673 const b = m[0] * transpose[1] + m[1] * transpose[3]; 674 const c = m[2] * transpose[0] + m[3] * transpose[2]; 675 const d = m[2] * transpose[1] + m[3] * transpose[3]; 676 const first = (a + d) / 2; 677 const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; 678 const sx = first + second || 1; 679 const sy = first - second || 1; 680 return [Math.sqrt(sx), Math.sqrt(sy)]; 681 } 682 static normalizeRect(rect) { 683 const r = rect.slice(0); 684 if (rect[0] > rect[2]) { 685 r[0] = rect[2]; 686 r[2] = rect[0]; 687 } 688 if (rect[1] > rect[3]) { 689 r[1] = rect[3]; 690 r[3] = rect[1]; 691 } 692 return r; 693 } 694 static intersect(rect1, rect2) { 695 const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); 696 const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); 697 if (xLow > xHigh) { 698 return null; 699 } 700 const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); 701 const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); 702 if (yLow > yHigh) { 703 return null; 704 } 705 return [xLow, yLow, xHigh, yHigh]; 706 } 707 static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { 708 const tvalues = [], 709 bounds = [[], []]; 710 let a, b, c, t, t1, t2, b2ac, sqrtb2ac; 711 for (let i = 0; i < 2; ++i) { 712 if (i === 0) { 713 b = 6 * x0 - 12 * x1 + 6 * x2; 714 a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; 715 c = 3 * x1 - 3 * x0; 716 } else { 717 b = 6 * y0 - 12 * y1 + 6 * y2; 718 a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; 719 c = 3 * y1 - 3 * y0; 720 } 721 if (Math.abs(a) < 1e-12) { 722 if (Math.abs(b) < 1e-12) { 723 continue; 724 } 725 t = -c / b; 726 if (0 < t && t < 1) { 727 tvalues.push(t); 728 } 729 continue; 730 } 731 b2ac = b * b - 4 * c * a; 732 sqrtb2ac = Math.sqrt(b2ac); 733 if (b2ac < 0) { 734 continue; 735 } 736 t1 = (-b + sqrtb2ac) / (2 * a); 737 if (0 < t1 && t1 < 1) { 738 tvalues.push(t1); 739 } 740 t2 = (-b - sqrtb2ac) / (2 * a); 741 if (0 < t2 && t2 < 1) { 742 tvalues.push(t2); 743 } 744 } 745 let j = tvalues.length, 746 mt; 747 const jlen = j; 748 while (j--) { 749 t = tvalues[j]; 750 mt = 1 - t; 751 bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; 752 bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; 753 } 754 bounds[0][jlen] = x0; 755 bounds[1][jlen] = y0; 756 bounds[0][jlen + 1] = x3; 757 bounds[1][jlen + 1] = y3; 758 bounds[0].length = bounds[1].length = jlen + 2; 759 return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; 760 } 761} 762exports.Util = Util; 763const 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]; 764function stringToPDFString(str) { 765 if (str[0] >= "\xEF") { 766 let encoding; 767 if (str[0] === "\xFE" && str[1] === "\xFF") { 768 encoding = "utf-16be"; 769 } else if (str[0] === "\xFF" && str[1] === "\xFE") { 770 encoding = "utf-16le"; 771 } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { 772 encoding = "utf-8"; 773 } 774 if (encoding) {
775 try { 776 const decoder = new TextDecoder(encoding, { 777 fatal: true 778 }); 779 const buffer = stringToBytes(str); 780 return decoder.decode(buffer); 781 } catch (ex) { 782 warn(`stringToPDFString: "${ex}".`); 783 } 784 } 785 } 786 const strBuf = []; 787 for (let i = 0, ii = str.length; i < ii; i++) { 788 const code = PDFStringTranslateTable[str.charCodeAt(i)]; 789 strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); 790 } 791 return strBuf.join(""); 792} 793function stringToUTF8String(str) { 794 return decodeURIComponent(escape(str)); 795} 796function utf8StringToString(str) { 797 return unescape(encodeURIComponent(str)); 798} 799function isArrayBuffer(v) { 800 return typeof v === "object" && v?.byteLength !== undefined; 801} 802function isArrayEqual(arr1, arr2) { 803 if (arr1.length !== arr2.length) { 804 return false; 805 } 806 for (let i = 0, ii = arr1.length; i < ii; i++) { 807 if (arr1[i] !== arr2[i]) { 808 return false; 809 } 810 } 811 return true; 812} 813function getModificationDate() { 814 let date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date(); 815 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")]; 816 return buffer.join(""); 817} 818class PromiseCapability { 819 #settled = false; 820 constructor() { 821 this.promise = new Promise((resolve, reject) => { 822 this.resolve = data => { 823 this.#settled = true; 824 resolve(data); 825 }; 826 this.reject = reason => { 827 this.#settled = true; 828 reject(reason); 829 }; 830 }); 831 } 832 get settled() { 833 return this.#settled; 834 } 835} 836exports.PromiseCapability = PromiseCapability; 837let NormalizeRegex = null; 838let NormalizationMap = null; 839function normalizeUnicode(str) { 840 if (!NormalizeRegex) { 841 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; 842 NormalizationMap = new Map([["ſt", "ſt"]]); 843 } 844 return str.replaceAll(NormalizeRegex, (_, p1, p2) => { 845 return p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2); 846 }); 847} 848function getUuid() { 849 if (typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") { 850 return crypto.randomUUID(); 851 } 852 const buf = new Uint8Array(32); 853 if (typeof crypto !== "undefined" && typeof crypto?.getRandomValues === "function") { 854 crypto.getRandomValues(buf); 855 } else { 856 for (let i = 0; i < 32; i++) { 857 buf[i] = Math.floor(Math.random() * 255); 858 } 859 } 860 return bytesToString(buf); 861} 862const AnnotationPrefix = "pdfjs_internal_id_"; 863exports.AnnotationPrefix = AnnotationPrefix; 864 865/***/ }), 866/* 2 */ 867/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 868 869 870var $ = __w_pdfjs_require__(3); 871var global = __w_pdfjs_require__(4); 872var apply = __w_pdfjs_require__(69); 873var wrapErrorConstructorWithCause = __w_pdfjs_require__(70); 874var WEB_ASSEMBLY = 'WebAssembly'; 875var WebAssembly = global[WEB_ASSEMBLY]; 876var FORCED = Error('e', { cause: 7 }).cause !== 7; 877var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) { 878 var O = {}; 879 O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED); 880 $({ 881 global: true, 882 constructor: true, 883 arity: 1, 884 forced: FORCED 885 }, O); 886}; 887var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) { 888 if (WebAssembly && WebAssembly[ERROR_NAME]) { 889 var O = {}; 890 O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED); 891 $({ 892 target: WEB_ASSEMBLY, 893 stat: true, 894 constructor: true, 895 arity: 1, 896 forced: FORCED 897 }, O); 898 } 899}; 900exportGlobalErrorCauseWrapper('Error', function (init) { 901 return function Error(message) { 902 return apply(init, this, arguments); 903 }; 904}); 905exportGlobalErrorCauseWrapper('EvalError', function (init) { 906 return function EvalError(message) { 907 return apply(init, this, arguments); 908 }; 909}); 910exportGlobalErrorCauseWrapper('RangeError', function (init) { 911 return function RangeError(message) { 912 return apply(init, this, arguments); 913 }; 914}); 915exportGlobalErrorCauseWrapper('ReferenceError', function (init) { 916 return function ReferenceError(message) { 917 return apply(init, this, arguments); 918 }; 919}); 920exportGlobalErrorCauseWrapper('SyntaxError', function (init) { 921 return function SyntaxError(message) { 922 return apply(init, this, arguments); 923 }; 924}); 925exportGlobalErrorCauseWrapper('TypeError', function (init) { 926 return function TypeError(message) { 927 return apply(init, this, arguments); 928 }; 929}); 930exportGlobalErrorCauseWrapper('URIError', function (init) { 931 return function URIError(message) { 932 return apply(init, this, arguments); 933 }; 934}); 935exportWebAssemblyErrorCauseWrapper('CompileError', function (init) { 936 return function CompileError(message) { 937 return apply(init, this, arguments); 938 }; 939}); 940exportWebAssemblyErrorCauseWrapper('LinkError', function (init) { 941 return function LinkError(message) { 942 return apply(init, this, arguments); 943 }; 944}); 945exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) { 946 return function RuntimeError(message) { 947 return apply(init, this, arguments); 948 }; 949}); 950 951/***/ }), 952/* 3 */ 953/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 954 955 956var global = __w_pdfjs_require__(4); 957var getOwnPropertyDescriptor = (__w_pdfjs_require__(5).f); 958var createNonEnumerableProperty = __w_pdfjs_require__(44); 959var defineBuiltIn = __w_pdfjs_require__(48); 960var defineGlobalProperty = __w_pdfjs_require__(38); 961var copyConstructorProperties = __w_pdfjs_require__(56); 962var isForced = __w_pdfjs_require__(68); 963module.exports = function (options, source) { 964 var TARGET = options.target; 965 var GLOBAL = options.global; 966 var STATIC = options.stat; 967 var FORCED, target, key, targetProperty, sourceProperty, descriptor; 968 if (GLOBAL) { 969 target = global; 970 } else if (STATIC) { 971 target = global[TARGET] || defineGlobalProperty(TARGET, {}); 972 } else { 973 target = (global[TARGET] || {}).prototype; 974 } 975 if (target) 976 for (key in source) { 977 sourceProperty = source[key]; 978 if (options.dontCallGetSet) { 979 descriptor = getOwnPropertyDescriptor(target, key); 980 targetProperty = descriptor && descriptor.value; 981 } else 982 targetProperty = target[key]; 983 FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); 984 if (!FORCED && targetProperty !== undefined) { 985 if (typeof sourceProperty == typeof targetProperty) 986 continue; 987 copyConstructorProperties(sourceProperty, targetProperty); 988 } 989 if (options.sham || targetProperty && targetProperty.sham) { 990 createNonEnumerableProperty(sourceProperty, 'sham', true); 991 } 992 defineBuiltIn(target, key, sourceProperty, options); 993 } 994}; 995 996/***/ }), 997/* 4 */ 998/***/ (function(module) { 999 1000 1001var check = function (it) { 1002 return it && it.Math === Math && it; 1003}; 1004module.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || (function () { 1005 return this; 1006}()) || this || Function('return this')(); 1007 1008/***/ }), 1009/* 5 */ 1010/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 1011 1012 1013var DESCRIPTORS = __w_pdfjs_require__(6); 1014var call = __w_pdfjs_require__(8); 1015var propertyIsEnumerableModule = __w_pdfjs_require__(10); 1016var createPropertyDescriptor = __w_pdfjs_require__(11); 1017var toIndexedObject = __w_pdfjs_require__(12); 1018var toPropertyKey = __w_pdfjs_require__(18); 1019var hasOwn = __w_pdfjs_require__(39); 1020var IE8_DOM_DEFINE = __w_pdfjs_require__(42); 1021var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; 1022exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { 1023 O = toIndexedObject(O); 1024 P = toPropertyKey(P); 1025 if (IE8_DOM_DEFINE) 1026 try { 1027 return $getOwnPropertyDescriptor(O, P); 1028 } catch (error) { 1029 } 1030 if (hasOwn(O, P)) 1031 return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); 1032}; 1033 1034/***/ }), 1035/* 6 */ 1036/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1037 1038 1039var fails = __w_pdfjs_require__(7); 1040module.exports = !fails(function () { 1041 return Object.defineProperty({}, 1, { 1042 get: function () { 1043 return 7; 1044 } 1045 })[1] !== 7; 1046}); 1047 1048/***/ }), 1049/* 7 */ 1050/***/ ((module) => { 1051 1052 1053module.exports = function (exec) { 1054 try { 1055 return !!exec(); 1056 } catch (error) { 1057 return true; 1058 } 1059}; 1060 1061/***/ }), 1062/* 8 */ 1063/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1064 1065 1066var NATIVE_BIND = __w_pdfjs_require__(9); 1067var call = Function.prototype.call; 1068module.exports = NATIVE_BIND ? call.bind(call) : function () { 1069 return call.apply(call, arguments); 1070}; 1071 1072/***/ }), 1073/* 9 */ 1074/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1075 1076 1077var fails = __w_pdfjs_require__(7); 1078module.exports = !fails(function () { 1079 var test = function () { 1080 }.bind(); 1081 return typeof test != 'function' || test.hasOwnProperty('prototype'); 1082}); 1083 1084/***/ }), 1085/* 10 */
1086/***/ ((__unused_webpack_module, exports) => { 1087 1088 1089var $propertyIsEnumerable = {}.propertyIsEnumerable; 1090var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; 1091var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); 1092exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { 1093 var descriptor = getOwnPropertyDescriptor(this, V); 1094 return !!descriptor && descriptor.enumerable; 1095} : $propertyIsEnumerable; 1096 1097/***/ }), 1098/* 11 */ 1099/***/ ((module) => { 1100 1101 1102module.exports = function (bitmap, value) { 1103 return { 1104 enumerable: !(bitmap & 1), 1105 configurable: !(bitmap & 2), 1106 writable: !(bitmap & 4), 1107 value: value 1108 }; 1109}; 1110 1111/***/ }), 1112/* 12 */ 1113/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1114 1115 1116var IndexedObject = __w_pdfjs_require__(13); 1117var requireObjectCoercible = __w_pdfjs_require__(16); 1118module.exports = function (it) { 1119 return IndexedObject(requireObjectCoercible(it)); 1120}; 1121 1122/***/ }), 1123/* 13 */ 1124/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1125 1126 1127var uncurryThis = __w_pdfjs_require__(14); 1128var fails = __w_pdfjs_require__(7); 1129var classof = __w_pdfjs_require__(15); 1130var $Object = Object; 1131var split = uncurryThis(''.split); 1132module.exports = fails(function () { 1133 return !$Object('z').propertyIsEnumerable(0); 1134}) ? function (it) { 1135 return classof(it) === 'String' ? split(it, '') : $Object(it); 1136} : $Object; 1137 1138/***/ }), 1139/* 14 */ 1140/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1141 1142 1143var NATIVE_BIND = __w_pdfjs_require__(9); 1144var FunctionPrototype = Function.prototype; 1145var call = FunctionPrototype.call; 1146var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); 1147module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { 1148 return function () { 1149 return call.apply(fn, arguments); 1150 }; 1151}; 1152 1153/***/ }), 1154/* 15 */ 1155/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1156 1157 1158var uncurryThis = __w_pdfjs_require__(14); 1159var toString = uncurryThis({}.toString); 1160var stringSlice = uncurryThis(''.slice); 1161module.exports = function (it) { 1162 return stringSlice(toString(it), 8, -1); 1163}; 1164 1165/***/ }), 1166/* 16 */ 1167/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1168 1169 1170var isNullOrUndefined = __w_pdfjs_require__(17); 1171var $TypeError = TypeError; 1172module.exports = function (it) { 1173 if (isNullOrUndefined(it)) 1174 throw $TypeError("Can't call method on " + it); 1175 return it; 1176}; 1177 1178/***/ }), 1179/* 17 */ 1180/***/ ((module) => { 1181 1182 1183module.exports = function (it) { 1184 return it === null || it === undefined; 1185}; 1186 1187/***/ }), 1188/* 18 */ 1189/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1190 1191 1192var toPrimitive = __w_pdfjs_require__(19); 1193var isSymbol = __w_pdfjs_require__(23); 1194module.exports = function (argument) { 1195 var key = toPrimitive(argument, 'string'); 1196 return isSymbol(key) ? key : key + ''; 1197}; 1198 1199/***/ }), 1200/* 19 */ 1201/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1202 1203 1204var call = __w_pdfjs_require__(8); 1205var isObject = __w_pdfjs_require__(20); 1206var isSymbol = __w_pdfjs_require__(23); 1207var getMethod = __w_pdfjs_require__(30); 1208var ordinaryToPrimitive = __w_pdfjs_require__(33); 1209var wellKnownSymbol = __w_pdfjs_require__(34); 1210var $TypeError = TypeError; 1211var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); 1212module.exports = function (input, pref) { 1213 if (!isObject(input) || isSymbol(input)) 1214 return input; 1215 var exoticToPrim = getMethod(input, TO_PRIMITIVE); 1216 var result; 1217 if (exoticToPrim) { 1218 if (pref === undefined) 1219 pref = 'default'; 1220 result = call(exoticToPrim, input, pref); 1221 if (!isObject(result) || isSymbol(result)) 1222 return result; 1223 throw $TypeError("Can't convert object to primitive value"); 1224 } 1225 if (pref === undefined) 1226 pref = 'number'; 1227 return ordinaryToPrimitive(input, pref); 1228}; 1229 1230/***/ }), 1231/* 20 */ 1232/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1233 1234 1235var isCallable = __w_pdfjs_require__(21); 1236var $documentAll = __w_pdfjs_require__(22); 1237var documentAll = $documentAll.all; 1238module.exports = $documentAll.IS_HTMLDDA ? function (it) { 1239 return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll; 1240} : function (it) { 1241 return typeof it == 'object' ? it !== null : isCallable(it); 1242}; 1243 1244/***/ }), 1245/* 21 */ 1246/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1247 1248 1249var $documentAll = __w_pdfjs_require__(22); 1250var documentAll = $documentAll.all; 1251module.exports = $documentAll.IS_HTMLDDA ? function (argument) { 1252 return typeof argument == 'function' || argument === documentAll; 1253} : function (argument) { 1254 return typeof argument == 'function'; 1255}; 1256 1257/***/ }), 1258/* 22 */ 1259/***/ ((module) => { 1260 1261 1262var documentAll = typeof document == 'object' && document.all; 1263var IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined; 1264module.exports = { 1265 all: documentAll, 1266 IS_HTMLDDA: IS_HTMLDDA 1267}; 1268 1269/***/ }), 1270/* 23 */ 1271/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1272 1273 1274var getBuiltIn = __w_pdfjs_require__(24); 1275var isCallable = __w_pdfjs_require__(21); 1276var isPrototypeOf = __w_pdfjs_require__(25); 1277var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26); 1278var $Object = Object; 1279module.exports = USE_SYMBOL_AS_UID ? function (it) { 1280 return typeof it == 'symbol'; 1281} : function (it) { 1282 var $Symbol = getBuiltIn('Symbol'); 1283 return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); 1284}; 1285 1286/***/ }), 1287/* 24 */ 1288/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1289 1290 1291var global = __w_pdfjs_require__(4); 1292var isCallable = __w_pdfjs_require__(21); 1293var aFunction = function (argument) { 1294 return isCallable(argument) ? argument : undefined; 1295}; 1296module.exports = function (namespace, method) { 1297 return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; 1298}; 1299 1300/***/ }), 1301/* 25 */ 1302/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1303 1304 1305var uncurryThis = __w_pdfjs_require__(14); 1306module.exports = uncurryThis({}.isPrototypeOf); 1307 1308/***/ }), 1309/* 26 */ 1310/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1311 1312 1313var NATIVE_SYMBOL = __w_pdfjs_require__(27); 1314module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol'; 1315 1316/***/ }), 1317/* 27 */ 1318/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1319 1320 1321var V8_VERSION = __w_pdfjs_require__(28); 1322var fails = __w_pdfjs_require__(7); 1323var global = __w_pdfjs_require__(4); 1324var $String = global.String; 1325module.exports = !!Object.getOwnPropertySymbols && !fails(function () { 1326 var symbol = Symbol('symbol detection'); 1327 return !$String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41; 1328}); 1329 1330/***/ }), 1331/* 28 */ 1332/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1333 1334 1335var global = __w_pdfjs_require__(4); 1336var userAgent = __w_pdfjs_require__(29); 1337var process = global.process; 1338var Deno = global.Deno; 1339var versions = process && process.versions || Deno && Deno.version; 1340var v8 = versions && versions.v8; 1341var match, version; 1342if (v8) { 1343 match = v8.split('.'); 1344 version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); 1345} 1346if (!version && userAgent) { 1347 match = userAgent.match(/Edge\/(\d+)/); 1348 if (!match || match[1] >= 74) { 1349 match = userAgent.match(/Chrome\/(\d+)/); 1350 if (match) 1351 version = +match[1]; 1352 } 1353} 1354module.exports = version; 1355 1356/***/ }), 1357/* 29 */ 1358/***/ ((module) => { 1359 1360 1361module.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || ''; 1362 1363/***/ }), 1364/* 30 */ 1365/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1366 1367 1368var aCallable = __w_pdfjs_require__(31); 1369var isNullOrUndefined = __w_pdfjs_require__(17); 1370module.exports = function (V, P) { 1371 var func = V[P]; 1372 return isNullOrUndefined(func) ? undefined : aCallable(func); 1373}; 1374 1375/***/ }), 1376/* 31 */ 1377/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1378 1379 1380var isCallable = __w_pdfjs_require__(21); 1381var tryToString = __w_pdfjs_require__(32); 1382var $TypeError = TypeError; 1383module.exports = function (argument) { 1384 if (isCallable(argument)) 1385 return argument; 1386 throw $TypeError(tryToString(argument) + ' is not a function'); 1387}; 1388 1389/***/ }), 1390/* 32 */ 1391/***/ ((module) => { 1392 1393 1394var $String = String; 1395module.exports = function (argument) { 1396 try { 1397 return $String(argument); 1398 } catch (error) { 1399 return 'Object'; 1400 } 1401}; 1402 1403/***/ }), 1404/* 33 */ 1405/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1406 1407 1408var call = __w_pdfjs_require__(8); 1409var isCallable = __w_pdfjs_require__(21); 1410var isObject = __w_pdfjs_require__(20); 1411var $TypeError = TypeError; 1412module.exports = function (input, pref) { 1413 var fn, val; 1414 if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) 1415 return val; 1416 if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) 1417 return val; 1418 if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) 1419 return val; 1420 throw $TypeError("Can't convert object to primitive value"); 1421}; 1422 1423/***/ }), 1424/* 34 */ 1425/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1426 1427 1428var global = __w_pdfjs_require__(4); 1429var shared = __w_pdfjs_require__(35); 1430var hasOwn = __w_pdfjs_require__(39); 1431var uid = __w_pdfjs_require__(41); 1432var NATIVE_SYMBOL = __w_pdfjs_require__(27); 1433var USE_SYMBOL_AS_UID = __w_pdfjs_require__(26); 1434var Symbol = global.Symbol;
1435var WellKnownSymbolsStore = shared('wks'); 1436var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; 1437module.exports = function (name) { 1438 if (!hasOwn(WellKnownSymbolsStore, name)) { 1439 WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) ? Symbol[name] : createWellKnownSymbol('Symbol.' + name); 1440 } 1441 return WellKnownSymbolsStore[name]; 1442}; 1443 1444/***/ }), 1445/* 35 */ 1446/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1447 1448 1449var IS_PURE = __w_pdfjs_require__(36); 1450var store = __w_pdfjs_require__(37); 1451(module.exports = function (key, value) { 1452 return store[key] || (store[key] = value !== undefined ? value : {}); 1453})('versions', []).push({ 1454 version: '3.32.2', 1455 mode: IS_PURE ? 'pure' : 'global', 1456 copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)', 1457 license: 'https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE', 1458 source: 'https://github.com/zloirock/core-js' 1459}); 1460 1461/***/ }), 1462/* 36 */ 1463/***/ ((module) => { 1464 1465 1466module.exports = false; 1467 1468/***/ }), 1469/* 37 */ 1470/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1471 1472 1473var global = __w_pdfjs_require__(4); 1474var defineGlobalProperty = __w_pdfjs_require__(38); 1475var SHARED = '__core-js_shared__'; 1476var store = global[SHARED] || defineGlobalProperty(SHARED, {}); 1477module.exports = store; 1478 1479/***/ }), 1480/* 38 */ 1481/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1482 1483 1484var global = __w_pdfjs_require__(4); 1485var defineProperty = Object.defineProperty; 1486module.exports = function (key, value) { 1487 try { 1488 defineProperty(global, key, { 1489 value: value, 1490 configurable: true, 1491 writable: true 1492 }); 1493 } catch (error) { 1494 global[key] = value; 1495 } 1496 return value; 1497}; 1498 1499/***/ }), 1500/* 39 */ 1501/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1502 1503 1504var uncurryThis = __w_pdfjs_require__(14); 1505var toObject = __w_pdfjs_require__(40); 1506var hasOwnProperty = uncurryThis({}.hasOwnProperty); 1507module.exports = Object.hasOwn || function hasOwn(it, key) { 1508 return hasOwnProperty(toObject(it), key); 1509}; 1510 1511/***/ }), 1512/* 40 */ 1513/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1514 1515 1516var requireObjectCoercible = __w_pdfjs_require__(16); 1517var $Object = Object; 1518module.exports = function (argument) { 1519 return $Object(requireObjectCoercible(argument)); 1520}; 1521 1522/***/ }), 1523/* 41 */ 1524/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1525 1526 1527var uncurryThis = __w_pdfjs_require__(14); 1528var id = 0; 1529var postfix = Math.random(); 1530var toString = uncurryThis(1.0.toString); 1531module.exports = function (key) { 1532 return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); 1533}; 1534 1535/***/ }), 1536/* 42 */ 1537/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1538 1539 1540var DESCRIPTORS = __w_pdfjs_require__(6); 1541var fails = __w_pdfjs_require__(7); 1542var createElement = __w_pdfjs_require__(43); 1543module.exports = !DESCRIPTORS && !fails(function () { 1544 return Object.defineProperty(createElement('div'), 'a', { 1545 get: function () { 1546 return 7; 1547 } 1548 }).a !== 7; 1549}); 1550 1551/***/ }), 1552/* 43 */ 1553/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1554 1555 1556var global = __w_pdfjs_require__(4); 1557var isObject = __w_pdfjs_require__(20); 1558var document = global.document; 1559var EXISTS = isObject(document) && isObject(document.createElement); 1560module.exports = function (it) { 1561 return EXISTS ? document.createElement(it) : {}; 1562}; 1563 1564/***/ }), 1565/* 44 */ 1566/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1567 1568 1569var DESCRIPTORS = __w_pdfjs_require__(6); 1570var definePropertyModule = __w_pdfjs_require__(45); 1571var createPropertyDescriptor = __w_pdfjs_require__(11); 1572module.exports = DESCRIPTORS ? function (object, key, value) { 1573 return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); 1574} : function (object, key, value) { 1575 object[key] = value; 1576 return object; 1577}; 1578 1579/***/ }), 1580/* 45 */ 1581/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 1582 1583 1584var DESCRIPTORS = __w_pdfjs_require__(6); 1585var IE8_DOM_DEFINE = __w_pdfjs_require__(42); 1586var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46); 1587var anObject = __w_pdfjs_require__(47); 1588var toPropertyKey = __w_pdfjs_require__(18); 1589var $TypeError = TypeError; 1590var $defineProperty = Object.defineProperty; 1591var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
vendor: 11,466 bytes, lines 1592-1993
1592var ENUMERABLE = 'enumerable'; 1593var CONFIGURABLE = 'configurable'; 1594var WRITABLE = 'writable'; 1595exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { 1596 anObject(O); 1597 P = toPropertyKey(P); 1598 anObject(Attributes); 1599 if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { 1600 var current = $getOwnPropertyDescriptor(O, P); 1601 if (current && current[WRITABLE]) { 1602 O[P] = Attributes.value; 1603 Attributes = { 1604 configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], 1605 enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], 1606 writable: false 1607 }; 1608 } 1609 } 1610 return $defineProperty(O, P, Attributes); 1611} : $defineProperty : function defineProperty(O, P, Attributes) { 1612 anObject(O); 1613 P = toPropertyKey(P); 1614 anObject(Attributes); 1615 if (IE8_DOM_DEFINE) 1616 try { 1617 return $defineProperty(O, P, Attributes); 1618 } catch (error) { 1619 } 1620 if ('get' in Attributes || 'set' in Attributes) 1621 throw $TypeError('Accessors not supported'); 1622 if ('value' in Attributes) 1623 O[P] = Attributes.value; 1624 return O; 1625}; 1626 1627/***/ }), 1628/* 46 */ 1629/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1630 1631 1632var DESCRIPTORS = __w_pdfjs_require__(6); 1633var fails = __w_pdfjs_require__(7); 1634module.exports = DESCRIPTORS && fails(function () { 1635 return Object.defineProperty(function () { 1636 }, 'prototype', { 1637 value: 42, 1638 writable: false 1639 }).prototype !== 42; 1640}); 1641 1642/***/ }), 1643/* 47 */ 1644/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1645 1646 1647var isObject = __w_pdfjs_require__(20); 1648var $String = String; 1649var $TypeError = TypeError; 1650module.exports = function (argument) { 1651 if (isObject(argument)) 1652 return argument; 1653 throw $TypeError($String(argument) + ' is not an object'); 1654}; 1655 1656/***/ }), 1657/* 48 */ 1658/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1659 1660 1661var isCallable = __w_pdfjs_require__(21); 1662var definePropertyModule = __w_pdfjs_require__(45); 1663var makeBuiltIn = __w_pdfjs_require__(49); 1664var defineGlobalProperty = __w_pdfjs_require__(38); 1665module.exports = function (O, key, value, options) { 1666 if (!options) 1667 options = {}; 1668 var simple = options.enumerable; 1669 var name = options.name !== undefined ? options.name : key; 1670 if (isCallable(value)) 1671 makeBuiltIn(value, name, options); 1672 if (options.global) { 1673 if (simple) 1674 O[key] = value; 1675 else 1676 defineGlobalProperty(key, value); 1677 } else { 1678 try { 1679 if (!options.unsafe) 1680 delete O[key]; 1681 else if (O[key]) 1682 simple = true; 1683 } catch (error) { 1684 } 1685 if (simple) 1686 O[key] = value; 1687 else 1688 definePropertyModule.f(O, key, { 1689 value: value, 1690 enumerable: false, 1691 configurable: !options.nonConfigurable, 1692 writable: !options.nonWritable 1693 }); 1694 } 1695 return O; 1696}; 1697 1698/***/ }), 1699/* 49 */ 1700/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1701 1702 1703var uncurryThis = __w_pdfjs_require__(14); 1704var fails = __w_pdfjs_require__(7); 1705var isCallable = __w_pdfjs_require__(21); 1706var hasOwn = __w_pdfjs_require__(39); 1707var DESCRIPTORS = __w_pdfjs_require__(6); 1708var CONFIGURABLE_FUNCTION_NAME = (__w_pdfjs_require__(50).CONFIGURABLE); 1709var inspectSource = __w_pdfjs_require__(51); 1710var InternalStateModule = __w_pdfjs_require__(52); 1711var enforceInternalState = InternalStateModule.enforce; 1712var getInternalState = InternalStateModule.get; 1713var $String = String; 1714var defineProperty = Object.defineProperty; 1715var stringSlice = uncurryThis(''.slice); 1716var replace = uncurryThis(''.replace); 1717var join = uncurryThis([].join); 1718var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () { 1719 return defineProperty(function () { 1720 }, 'length', { value: 8 }).length !== 8; 1721}); 1722var TEMPLATE = String(String).split('String'); 1723var makeBuiltIn = module.exports = function (value, name, options) { 1724 if (stringSlice($String(name), 0, 7) === 'Symbol(') { 1725 name = '[' + replace($String(name), /^Symbol\(([^)]*)\)/, '$1') + ']'; 1726 } 1727 if (options && options.getter) 1728 name = 'get ' + name; 1729 if (options && options.setter) 1730 name = 'set ' + name; 1731 if (!hasOwn(value, 'name') || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { 1732 if (DESCRIPTORS) 1733 defineProperty(value, 'name', { 1734 value: name, 1735 configurable: true 1736 }); 1737 else 1738 value.name = name; 1739 } 1740 if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) { 1741 defineProperty(value, 'length', { value: options.arity }); 1742 } 1743 try { 1744 if (options && hasOwn(options, 'constructor') && options.constructor) { 1745 if (DESCRIPTORS) 1746 defineProperty(value, 'prototype', { writable: false }); 1747 } else if (value.prototype) 1748 value.prototype = undefined; 1749 } catch (error) { 1750 } 1751 var state = enforceInternalState(value); 1752 if (!hasOwn(state, 'source')) { 1753 state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); 1754 } 1755 return value; 1756}; 1757Function.prototype.toString = makeBuiltIn(function toString() { 1758 return isCallable(this) && getInternalState(this).source || inspectSource(this); 1759}, 'toString'); 1760 1761/***/ }), 1762/* 50 */ 1763/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1764 1765 1766var DESCRIPTORS = __w_pdfjs_require__(6); 1767var hasOwn = __w_pdfjs_require__(39); 1768var FunctionPrototype = Function.prototype; 1769var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; 1770var EXISTS = hasOwn(FunctionPrototype, 'name'); 1771var PROPER = EXISTS && function something() { 1772}.name === 'something'; 1773var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable); 1774module.exports = { 1775 EXISTS: EXISTS, 1776 PROPER: PROPER, 1777 CONFIGURABLE: CONFIGURABLE 1778}; 1779 1780/***/ }), 1781/* 51 */ 1782/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1783 1784 1785var uncurryThis = __w_pdfjs_require__(14); 1786var isCallable = __w_pdfjs_require__(21); 1787var store = __w_pdfjs_require__(37); 1788var functionToString = uncurryThis(Function.toString); 1789if (!isCallable(store.inspectSource)) { 1790 store.inspectSource = function (it) { 1791 return functionToString(it); 1792 }; 1793} 1794module.exports = store.inspectSource; 1795 1796/***/ }), 1797/* 52 */ 1798/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1799 1800 1801var NATIVE_WEAK_MAP = __w_pdfjs_require__(53); 1802var global = __w_pdfjs_require__(4); 1803var isObject = __w_pdfjs_require__(20); 1804var createNonEnumerableProperty = __w_pdfjs_require__(44); 1805var hasOwn = __w_pdfjs_require__(39); 1806var shared = __w_pdfjs_require__(37); 1807var sharedKey = __w_pdfjs_require__(54); 1808var hiddenKeys = __w_pdfjs_require__(55); 1809var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; 1810var TypeError = global.TypeError; 1811var WeakMap = global.WeakMap; 1812var set, get, has; 1813var enforce = function (it) { 1814 return has(it) ? get(it) : set(it, {}); 1815}; 1816var getterFor = function (TYPE) { 1817 return function (it) { 1818 var state; 1819 if (!isObject(it) || (state = get(it)).type !== TYPE) { 1820 throw TypeError('Incompatible receiver, ' + TYPE + ' required'); 1821 } 1822 return state; 1823 }; 1824}; 1825if (NATIVE_WEAK_MAP || shared.state) { 1826 var store = shared.state || (shared.state = new WeakMap()); 1827 store.get = store.get; 1828 store.has = store.has; 1829 store.set = store.set; 1830 set = function (it, metadata) { 1831 if (store.has(it)) 1832 throw TypeError(OBJECT_ALREADY_INITIALIZED); 1833 metadata.facade = it; 1834 store.set(it, metadata); 1835 return metadata; 1836 }; 1837 get = function (it) { 1838 return store.get(it) || {}; 1839 }; 1840 has = function (it) { 1841 return store.has(it); 1842 }; 1843} else { 1844 var STATE = sharedKey('state'); 1845 hiddenKeys[STATE] = true; 1846 set = function (it, metadata) { 1847 if (hasOwn(it, STATE)) 1848 throw TypeError(OBJECT_ALREADY_INITIALIZED); 1849 metadata.facade = it; 1850 createNonEnumerableProperty(it, STATE, metadata); 1851 return metadata; 1852 }; 1853 get = function (it) { 1854 return hasOwn(it, STATE) ? it[STATE] : {}; 1855 }; 1856 has = function (it) { 1857 return hasOwn(it, STATE); 1858 }; 1859} 1860module.exports = { 1861 set: set, 1862 get: get, 1863 has: has, 1864 enforce: enforce, 1865 getterFor: getterFor 1866}; 1867 1868/***/ }), 1869/* 53 */ 1870/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1871 1872 1873var global = __w_pdfjs_require__(4); 1874var isCallable = __w_pdfjs_require__(21); 1875var WeakMap = global.WeakMap; 1876module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); 1877 1878/***/ }), 1879/* 54 */ 1880/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1881 1882 1883var shared = __w_pdfjs_require__(35); 1884var uid = __w_pdfjs_require__(41); 1885var keys = shared('keys'); 1886module.exports = function (key) { 1887 return keys[key] || (keys[key] = uid(key)); 1888}; 1889 1890/***/ }), 1891/* 55 */ 1892/***/ ((module) => { 1893 1894 1895module.exports = {}; 1896 1897/***/ }), 1898/* 56 */ 1899/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1900 1901 1902var hasOwn = __w_pdfjs_require__(39); 1903var ownKeys = __w_pdfjs_require__(57); 1904var getOwnPropertyDescriptorModule = __w_pdfjs_require__(5); 1905var definePropertyModule = __w_pdfjs_require__(45); 1906module.exports = function (target, source, exceptions) { 1907 var keys = ownKeys(source); 1908 var defineProperty = definePropertyModule.f; 1909 var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; 1910 for (var i = 0; i < keys.length; i++) { 1911 var key = keys[i]; 1912 if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { 1913 defineProperty(target, key, getOwnPropertyDescriptor(source, key)); 1914 } 1915 } 1916}; 1917 1918/***/ }), 1919/* 57 */ 1920/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1921 1922 1923var getBuiltIn = __w_pdfjs_require__(24); 1924var uncurryThis = __w_pdfjs_require__(14); 1925var getOwnPropertyNamesModule = __w_pdfjs_require__(58); 1926var getOwnPropertySymbolsModule = __w_pdfjs_require__(67); 1927var anObject = __w_pdfjs_require__(47); 1928var concat = uncurryThis([].concat); 1929module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { 1930 var keys = getOwnPropertyNamesModule.f(anObject(it)); 1931 var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; 1932 return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; 1933}; 1934 1935/***/ }), 1936/* 58 */ 1937/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 1938 1939 1940var internalObjectKeys = __w_pdfjs_require__(59); 1941var enumBugKeys = __w_pdfjs_require__(66); 1942var hiddenKeys = enumBugKeys.concat('length', 'prototype'); 1943exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { 1944 return internalObjectKeys(O, hiddenKeys); 1945}; 1946 1947/***/ }), 1948/* 59 */ 1949/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1950 1951 1952var uncurryThis = __w_pdfjs_require__(14); 1953var hasOwn = __w_pdfjs_require__(39); 1954var toIndexedObject = __w_pdfjs_require__(12); 1955var indexOf = (__w_pdfjs_require__(60).indexOf); 1956var hiddenKeys = __w_pdfjs_require__(55); 1957var push = uncurryThis([].push); 1958module.exports = function (object, names) { 1959 var O = toIndexedObject(object); 1960 var i = 0; 1961 var result = []; 1962 var key; 1963 for (key in O) 1964 !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); 1965 while (names.length > i) 1966 if (hasOwn(O, key = names[i++])) { 1967 ~indexOf(result, key) || push(result, key); 1968 } 1969 return result; 1970}; 1971 1972/***/ }), 1973/* 60 */ 1974/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 1975 1976 1977var toIndexedObject = __w_pdfjs_require__(12); 1978var toAbsoluteIndex = __w_pdfjs_require__(61); 1979var lengthOfArrayLike = __w_pdfjs_require__(64); 1980var createMethod = function (IS_INCLUDES) { 1981 return function ($this, el, fromIndex) { 1982 var O = toIndexedObject($this); 1983 var length = lengthOfArrayLike(O); 1984 var index = toAbsoluteIndex(fromIndex, length); 1985 var value; 1986 if (IS_INCLUDES && el !== el) 1987 while (length > index) { 1988 value = O[index++]; 1989 if (value !== value) 1990 return true; 1991 } 1992 else 1993 for (; length > index; index++) {
vendor: 5,792 bytes, lines 1994-2192
1994 if ((IS_INCLUDES || index in O) && O[index] === el) 1995 return IS_INCLUDES || index || 0; 1996 } 1997 return !IS_INCLUDES && -1; 1998 }; 1999}; 2000module.exports = { 2001 includes: createMethod(true), 2002 indexOf: createMethod(false) 2003}; 2004 2005/***/ }), 2006/* 61 */ 2007/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2008 2009 2010var toIntegerOrInfinity = __w_pdfjs_require__(62); 2011var max = Math.max; 2012var min = Math.min; 2013module.exports = function (index, length) { 2014 var integer = toIntegerOrInfinity(index); 2015 return integer < 0 ? max(integer + length, 0) : min(integer, length); 2016}; 2017 2018/***/ }), 2019/* 62 */ 2020/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2021 2022 2023var trunc = __w_pdfjs_require__(63); 2024module.exports = function (argument) { 2025 var number = +argument; 2026 return number !== number || number === 0 ? 0 : trunc(number); 2027}; 2028 2029/***/ }), 2030/* 63 */ 2031/***/ ((module) => { 2032 2033 2034var ceil = Math.ceil; 2035var floor = Math.floor; 2036module.exports = Math.trunc || function trunc(x) { 2037 var n = +x; 2038 return (n > 0 ? floor : ceil)(n); 2039}; 2040 2041/***/ }), 2042/* 64 */ 2043/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2044 2045 2046var toLength = __w_pdfjs_require__(65); 2047module.exports = function (obj) { 2048 return toLength(obj.length); 2049}; 2050 2051/***/ }), 2052/* 65 */ 2053/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2054 2055 2056var toIntegerOrInfinity = __w_pdfjs_require__(62); 2057var min = Math.min; 2058module.exports = function (argument) { 2059 return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; 2060}; 2061 2062/***/ }), 2063/* 66 */ 2064/***/ ((module) => { 2065 2066 2067module.exports = [ 2068 'constructor', 2069 'hasOwnProperty', 2070 'isPrototypeOf', 2071 'propertyIsEnumerable', 2072 'toLocaleString', 2073 'toString', 2074 'valueOf' 2075]; 2076 2077/***/ }), 2078/* 67 */ 2079/***/ ((__unused_webpack_module, exports) => { 2080 2081 2082exports.f = Object.getOwnPropertySymbols; 2083 2084/***/ }), 2085/* 68 */ 2086/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2087 2088 2089var fails = __w_pdfjs_require__(7); 2090var isCallable = __w_pdfjs_require__(21); 2091var replacement = /#|\.prototype\./; 2092var isForced = function (feature, detection) { 2093 var value = data[normalize(feature)]; 2094 return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; 2095}; 2096var normalize = isForced.normalize = function (string) { 2097 return String(string).replace(replacement, '.').toLowerCase(); 2098}; 2099var data = isForced.data = {}; 2100var NATIVE = isForced.NATIVE = 'N'; 2101var POLYFILL = isForced.POLYFILL = 'P'; 2102module.exports = isForced; 2103 2104/***/ }), 2105/* 69 */ 2106/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2107 2108 2109var NATIVE_BIND = __w_pdfjs_require__(9); 2110var FunctionPrototype = Function.prototype; 2111var apply = FunctionPrototype.apply; 2112var call = FunctionPrototype.call; 2113module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { 2114 return call.apply(apply, arguments); 2115}); 2116 2117/***/ }), 2118/* 70 */ 2119/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2120 2121 2122var getBuiltIn = __w_pdfjs_require__(24); 2123var hasOwn = __w_pdfjs_require__(39); 2124var createNonEnumerableProperty = __w_pdfjs_require__(44); 2125var isPrototypeOf = __w_pdfjs_require__(25); 2126var setPrototypeOf = __w_pdfjs_require__(71); 2127var copyConstructorProperties = __w_pdfjs_require__(56); 2128var proxyAccessor = __w_pdfjs_require__(74); 2129var inheritIfRequired = __w_pdfjs_require__(75); 2130var normalizeStringArgument = __w_pdfjs_require__(76); 2131var installErrorCause = __w_pdfjs_require__(80); 2132var installErrorStack = __w_pdfjs_require__(81); 2133var DESCRIPTORS = __w_pdfjs_require__(6); 2134var IS_PURE = __w_pdfjs_require__(36); 2135module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) { 2136 var STACK_TRACE_LIMIT = 'stackTraceLimit'; 2137 var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1; 2138 var path = FULL_NAME.split('.'); 2139 var ERROR_NAME = path[path.length - 1]; 2140 var OriginalError = getBuiltIn.apply(null, path); 2141 if (!OriginalError) 2142 return; 2143 var OriginalErrorPrototype = OriginalError.prototype; 2144 if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) 2145 delete OriginalErrorPrototype.cause; 2146 if (!FORCED) 2147 return OriginalError; 2148 var BaseError = getBuiltIn('Error'); 2149 var WrappedError = wrapper(function (a, b) { 2150 var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined); 2151 var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError(); 2152 if (message !== undefined) 2153 createNonEnumerableProperty(result, 'message', message); 2154 installErrorStack(result, WrappedError, result.stack, 2); 2155 if (this && isPrototypeOf(OriginalErrorPrototype, this)) 2156 inheritIfRequired(result, this, WrappedError); 2157 if (arguments.length > OPTIONS_POSITION) 2158 installErrorCause(result, arguments[OPTIONS_POSITION]); 2159 return result; 2160 }); 2161 WrappedError.prototype = OriginalErrorPrototype; 2162 if (ERROR_NAME !== 'Error') { 2163 if (setPrototypeOf) 2164 setPrototypeOf(WrappedError, BaseError); 2165 else 2166 copyConstructorProperties(WrappedError, BaseError, { name: true }); 2167 } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) { 2168 proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT); 2169 proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace'); 2170 } 2171 copyConstructorProperties(WrappedError, OriginalError); 2172 if (!IS_PURE) 2173 try { 2174 if (OriginalErrorPrototype.name !== ERROR_NAME) { 2175 createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME); 2176 } 2177 OriginalErrorPrototype.constructor = WrappedError; 2178 } catch (error) { 2179 } 2180 return WrappedError; 2181}; 2182 2183/***/ }), 2184/* 71 */ 2185/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2186 2187 2188var uncurryThisAccessor = __w_pdfjs_require__(72); 2189var anObject = __w_pdfjs_require__(47); 2190var aPossiblePrototype = __w_pdfjs_require__(73); 2191module.exports = Object.setPrototypeOf || ('__proto__' in {} ? (function () { 2192 var CORRECT_SETTER = false;
2193 var test = {}; 2194 var setter; 2195 try { 2196 setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); 2197 setter(test, []); 2198 CORRECT_SETTER = test instanceof Array; 2199 } catch (error) { 2200 } 2201 return function setPrototypeOf(O, proto) { 2202 anObject(O); 2203 aPossiblePrototype(proto); 2204 if (CORRECT_SETTER) 2205 setter(O, proto); 2206 else 2207 O.__proto__ = proto; 2208 return O; 2209 }; 2210}()) : undefined); 2211 2212/***/ }), 2213/* 72 */ 2214/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2215 2216 2217var uncurryThis = __w_pdfjs_require__(14); 2218var aCallable = __w_pdfjs_require__(31); 2219module.exports = function (object, key, method) { 2220 try { 2221 return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); 2222 } catch (error) { 2223 } 2224}; 2225 2226/***/ }), 2227/* 73 */ 2228/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2229 2230 2231var isCallable = __w_pdfjs_require__(21); 2232var $String = String; 2233var $TypeError = TypeError; 2234module.exports = function (argument) { 2235 if (typeof argument == 'object' || isCallable(argument)) 2236 return argument; 2237 throw $TypeError("Can't set " + $String(argument) + ' as a prototype'); 2238}; 2239 2240/***/ }), 2241/* 74 */ 2242/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2243 2244 2245var defineProperty = (__w_pdfjs_require__(45).f); 2246module.exports = function (Target, Source, key) { 2247 key in Target || defineProperty(Target, key, { 2248 configurable: true, 2249 get: function () { 2250 return Source[key]; 2251 }, 2252 set: function (it) { 2253 Source[key] = it; 2254 } 2255 }); 2256}; 2257 2258/***/ }), 2259/* 75 */ 2260/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2261 2262 2263var isCallable = __w_pdfjs_require__(21); 2264var isObject = __w_pdfjs_require__(20); 2265var setPrototypeOf = __w_pdfjs_require__(71); 2266module.exports = function ($this, dummy, Wrapper) { 2267 var NewTarget, NewTargetPrototype; 2268 if (setPrototypeOf && isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype) 2269 setPrototypeOf($this, NewTargetPrototype); 2270 return $this; 2271}; 2272 2273/***/ }), 2274/* 76 */ 2275/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2276 2277 2278var toString = __w_pdfjs_require__(77); 2279module.exports = function (argument, $default) { 2280 return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument); 2281}; 2282 2283/***/ }), 2284/* 77 */ 2285/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2286 2287 2288var classof = __w_pdfjs_require__(78); 2289var $String = String; 2290module.exports = function (argument) { 2291 if (classof(argument) === 'Symbol') 2292 throw TypeError('Cannot convert a Symbol value to a string'); 2293 return $String(argument); 2294}; 2295 2296/***/ }), 2297/* 78 */ 2298/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2299 2300 2301var TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79); 2302var isCallable = __w_pdfjs_require__(21); 2303var classofRaw = __w_pdfjs_require__(15); 2304var wellKnownSymbol = __w_pdfjs_require__(34); 2305var TO_STRING_TAG = wellKnownSymbol('toStringTag'); 2306var $Object = Object; 2307var CORRECT_ARGUMENTS = classofRaw((function () { 2308 return arguments; 2309}())) === 'Arguments'; 2310var tryGet = function (it, key) { 2311 try { 2312 return it[key]; 2313 } catch (error) { 2314 } 2315}; 2316module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { 2317 var O, tag, result; 2318 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; 2319}; 2320 2321/***/ }), 2322/* 79 */ 2323/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2324 2325 2326var wellKnownSymbol = __w_pdfjs_require__(34); 2327var TO_STRING_TAG = wellKnownSymbol('toStringTag'); 2328var test = {}; 2329test[TO_STRING_TAG] = 'z'; 2330module.exports = String(test) === '[object z]'; 2331 2332/***/ }), 2333/* 80 */ 2334/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2335 2336 2337var isObject = __w_pdfjs_require__(20); 2338var createNonEnumerableProperty = __w_pdfjs_require__(44); 2339module.exports = function (O, options) { 2340 if (isObject(options) && 'cause' in options) { 2341 createNonEnumerableProperty(O, 'cause', options.cause); 2342 } 2343}; 2344 2345/***/ }), 2346/* 81 */ 2347/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2348 2349 2350var createNonEnumerableProperty = __w_pdfjs_require__(44); 2351var clearErrorStack = __w_pdfjs_require__(82); 2352var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83); 2353var captureStackTrace = Error.captureStackTrace; 2354module.exports = function (error, C, stack, dropEntries) { 2355 if (ERROR_STACK_INSTALLABLE) { 2356 if (captureStackTrace) 2357 captureStackTrace(error, C); 2358 else 2359 createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries)); 2360 } 2361}; 2362 2363/***/ }), 2364/* 82 */ 2365/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2366 2367 2368var uncurryThis = __w_pdfjs_require__(14); 2369var $Error = Error; 2370var replace = uncurryThis(''.replace); 2371var TEST = function (arg) { 2372 return String($Error(arg).stack); 2373}('zxcasd'); 2374var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/; 2375var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST); 2376module.exports = function (stack, dropEntries) { 2377 if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) { 2378 while (dropEntries--) 2379 stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, ''); 2380 } 2381 return stack; 2382}; 2383 2384/***/ }), 2385/* 83 */ 2386/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2387 2388 2389var fails = __w_pdfjs_require__(7); 2390var createPropertyDescriptor = __w_pdfjs_require__(11); 2391module.exports = !fails(function () { 2392 var error = Error('a'); 2393 if (!('stack' in error)) 2394 return true; 2395 Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7)); 2396 return error.stack !== 7; 2397}); 2398 2399/***/ }), 2400/* 84 */ 2401/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2402 2403 2404var defineBuiltIn = __w_pdfjs_require__(48); 2405var uncurryThis = __w_pdfjs_require__(14); 2406var toString = __w_pdfjs_require__(77); 2407var validateArgumentsLength = __w_pdfjs_require__(85); 2408var $URLSearchParams = URLSearchParams; 2409var URLSearchParamsPrototype = $URLSearchParams.prototype; 2410var append = uncurryThis(URLSearchParamsPrototype.append); 2411var $delete = uncurryThis(URLSearchParamsPrototype['delete']);
vendor: 8,130 bytes, lines 2412-2684
2412var forEach = uncurryThis(URLSearchParamsPrototype.forEach); 2413var push = uncurryThis([].push); 2414var params = new $URLSearchParams('a=1&a=2&b=3'); 2415params['delete']('a', 1); 2416params['delete']('b', undefined); 2417if (params + '' !== 'a=2') { 2418 defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name) { 2419 var length = arguments.length; 2420 var $value = length < 2 ? undefined : arguments[1]; 2421 if (length && $value === undefined) 2422 return $delete(this, name); 2423 var entries = []; 2424 forEach(this, function (v, k) { 2425 push(entries, { 2426 key: k, 2427 value: v 2428 }); 2429 }); 2430 validateArgumentsLength(length, 1); 2431 var key = toString(name); 2432 var value = toString($value); 2433 var index = 0; 2434 var dindex = 0; 2435 var found = false; 2436 var entriesLength = entries.length; 2437 var entry; 2438 while (index < entriesLength) { 2439 entry = entries[index++]; 2440 if (found || entry.key === key) { 2441 found = true; 2442 $delete(this, entry.key); 2443 } else 2444 dindex++; 2445 } 2446 while (dindex < entriesLength) { 2447 entry = entries[dindex++]; 2448 if (!(entry.key === key && entry.value === value)) 2449 append(this, entry.key, entry.value); 2450 } 2451 }, { 2452 enumerable: true, 2453 unsafe: true 2454 }); 2455} 2456 2457/***/ }), 2458/* 85 */ 2459/***/ ((module) => { 2460 2461 2462var $TypeError = TypeError; 2463module.exports = function (passed, required) { 2464 if (passed < required) 2465 throw $TypeError('Not enough arguments'); 2466 return passed; 2467}; 2468 2469/***/ }), 2470/* 86 */ 2471/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2472 2473 2474var defineBuiltIn = __w_pdfjs_require__(48); 2475var uncurryThis = __w_pdfjs_require__(14); 2476var toString = __w_pdfjs_require__(77); 2477var validateArgumentsLength = __w_pdfjs_require__(85); 2478var $URLSearchParams = URLSearchParams; 2479var URLSearchParamsPrototype = $URLSearchParams.prototype; 2480var getAll = uncurryThis(URLSearchParamsPrototype.getAll); 2481var $has = uncurryThis(URLSearchParamsPrototype.has); 2482var params = new $URLSearchParams('a=1'); 2483if (params.has('a', 2) || !params.has('a', undefined)) { 2484 defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name) { 2485 var length = arguments.length; 2486 var $value = length < 2 ? undefined : arguments[1]; 2487 if (length && $value === undefined) 2488 return $has(this, name); 2489 var values = getAll(this, name); 2490 validateArgumentsLength(length, 1); 2491 var value = toString($value); 2492 var index = 0; 2493 while (index < values.length) { 2494 if (values[index++] === value) 2495 return true; 2496 } 2497 return false; 2498 }, { 2499 enumerable: true, 2500 unsafe: true 2501 }); 2502} 2503 2504/***/ }), 2505/* 87 */ 2506/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2507 2508 2509var DESCRIPTORS = __w_pdfjs_require__(6); 2510var uncurryThis = __w_pdfjs_require__(14); 2511var defineBuiltInAccessor = __w_pdfjs_require__(88); 2512var URLSearchParamsPrototype = URLSearchParams.prototype; 2513var forEach = uncurryThis(URLSearchParamsPrototype.forEach); 2514if (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) { 2515 defineBuiltInAccessor(URLSearchParamsPrototype, 'size', { 2516 get: function size() { 2517 var count = 0; 2518 forEach(this, function () { 2519 count++; 2520 }); 2521 return count; 2522 }, 2523 configurable: true, 2524 enumerable: true 2525 }); 2526} 2527 2528/***/ }), 2529/* 88 */ 2530/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2531 2532 2533var makeBuiltIn = __w_pdfjs_require__(49); 2534var defineProperty = __w_pdfjs_require__(45); 2535module.exports = function (target, name, descriptor) { 2536 if (descriptor.get) 2537 makeBuiltIn(descriptor.get, name, { getter: true }); 2538 if (descriptor.set) 2539 makeBuiltIn(descriptor.set, name, { setter: true }); 2540 return defineProperty.f(target, name, descriptor); 2541}; 2542 2543/***/ }), 2544/* 89 */ 2545/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2546 2547 2548var $ = __w_pdfjs_require__(3); 2549var toObject = __w_pdfjs_require__(40); 2550var lengthOfArrayLike = __w_pdfjs_require__(64); 2551var setArrayLength = __w_pdfjs_require__(90); 2552var doesNotExceedSafeInteger = __w_pdfjs_require__(92); 2553var fails = __w_pdfjs_require__(7); 2554var INCORRECT_TO_LENGTH = fails(function () { 2555 return [].push.call({ length: 0x100000000 }, 1) !== 4294967297; 2556}); 2557var properErrorOnNonWritableLength = function () { 2558 try { 2559 Object.defineProperty([], 'length', { writable: false }).push(); 2560 } catch (error) { 2561 return error instanceof TypeError; 2562 } 2563}; 2564var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); 2565$({ 2566 target: 'Array', 2567 proto: true, 2568 arity: 1, 2569 forced: FORCED 2570}, { 2571 push: function push(item) { 2572 var O = toObject(this); 2573 var len = lengthOfArrayLike(O); 2574 var argCount = arguments.length; 2575 doesNotExceedSafeInteger(len + argCount); 2576 for (var i = 0; i < argCount; i++) { 2577 O[len] = arguments[i]; 2578 len++; 2579 } 2580 setArrayLength(O, len); 2581 return len; 2582 } 2583}); 2584 2585/***/ }), 2586/* 90 */ 2587/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2588 2589 2590var DESCRIPTORS = __w_pdfjs_require__(6); 2591var isArray = __w_pdfjs_require__(91); 2592var $TypeError = TypeError; 2593var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; 2594var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !(function () { 2595 if (this !== undefined) 2596 return true; 2597 try { 2598 Object.defineProperty([], 'length', { writable: false }).length = 1; 2599 } catch (error) { 2600 return error instanceof TypeError; 2601 } 2602}()); 2603module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) { 2604 if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) { 2605 throw $TypeError('Cannot set read only .length'); 2606 } 2607 return O.length = length; 2608} : function (O, length) { 2609 return O.length = length; 2610}; 2611 2612/***/ }), 2613/* 91 */ 2614/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2615 2616 2617var classof = __w_pdfjs_require__(15); 2618module.exports = Array.isArray || function isArray(argument) { 2619 return classof(argument) === 'Array'; 2620}; 2621 2622/***/ }), 2623/* 92 */ 2624/***/ ((module) => { 2625 2626 2627var $TypeError = TypeError; 2628var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; 2629module.exports = function (it) { 2630 if (it > MAX_SAFE_INTEGER) 2631 throw $TypeError('Maximum allowed index exceeded'); 2632 return it; 2633}; 2634 2635/***/ }), 2636/* 93 */ 2637/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2638 2639 2640var ArrayBufferViewCore = __w_pdfjs_require__(94); 2641var $findLast = (__w_pdfjs_require__(98).findLast); 2642var aTypedArray = ArrayBufferViewCore.aTypedArray; 2643var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 2644exportTypedArrayMethod('findLast', function findLast(predicate) { 2645 return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined); 2646}); 2647 2648/***/ }), 2649/* 94 */ 2650/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2651 2652 2653var NATIVE_ARRAY_BUFFER = __w_pdfjs_require__(95); 2654var DESCRIPTORS = __w_pdfjs_require__(6); 2655var global = __w_pdfjs_require__(4); 2656var isCallable = __w_pdfjs_require__(21); 2657var isObject = __w_pdfjs_require__(20); 2658var hasOwn = __w_pdfjs_require__(39); 2659var classof = __w_pdfjs_require__(78); 2660var tryToString = __w_pdfjs_require__(32); 2661var createNonEnumerableProperty = __w_pdfjs_require__(44); 2662var defineBuiltIn = __w_pdfjs_require__(48); 2663var defineBuiltInAccessor = __w_pdfjs_require__(88); 2664var isPrototypeOf = __w_pdfjs_require__(25); 2665var getPrototypeOf = __w_pdfjs_require__(96); 2666var setPrototypeOf = __w_pdfjs_require__(71); 2667var wellKnownSymbol = __w_pdfjs_require__(34); 2668var uid = __w_pdfjs_require__(41); 2669var InternalStateModule = __w_pdfjs_require__(52); 2670var enforceInternalState = InternalStateModule.enforce; 2671var getInternalState = InternalStateModule.get; 2672var Int8Array = global.Int8Array; 2673var Int8ArrayPrototype = Int8Array && Int8Array.prototype; 2674var Uint8ClampedArray = global.Uint8ClampedArray; 2675var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype; 2676var TypedArray = Int8Array && getPrototypeOf(Int8Array); 2677var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype); 2678var ObjectPrototype = Object.prototype; 2679var TypeError = global.TypeError; 2680var TO_STRING_TAG = wellKnownSymbol('toStringTag'); 2681var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG'); 2682var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor'; 2683var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera'; 2684var TYPED_ARRAY_TAG_REQUIRED = false;
vendor: 4,819 bytes, lines 2685-2832
2685var NAME, Constructor, Prototype; 2686var TypedArrayConstructorsList = { 2687 Int8Array: 1, 2688 Uint8Array: 1, 2689 Uint8ClampedArray: 1, 2690 Int16Array: 2, 2691 Uint16Array: 2, 2692 Int32Array: 4, 2693 Uint32Array: 4, 2694 Float32Array: 4, 2695 Float64Array: 8 2696}; 2697var BigIntArrayConstructorsList = { 2698 BigInt64Array: 8, 2699 BigUint64Array: 8 2700}; 2701var isView = function isView(it) { 2702 if (!isObject(it)) 2703 return false; 2704 var klass = classof(it); 2705 return klass === 'DataView' || hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass); 2706}; 2707var getTypedArrayConstructor = function (it) { 2708 var proto = getPrototypeOf(it); 2709 if (!isObject(proto)) 2710 return; 2711 var state = getInternalState(proto); 2712 return state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto); 2713}; 2714var isTypedArray = function (it) { 2715 if (!isObject(it)) 2716 return false; 2717 var klass = classof(it); 2718 return hasOwn(TypedArrayConstructorsList, klass) || hasOwn(BigIntArrayConstructorsList, klass); 2719}; 2720var aTypedArray = function (it) { 2721 if (isTypedArray(it)) 2722 return it; 2723 throw TypeError('Target is not a typed array'); 2724}; 2725var aTypedArrayConstructor = function (C) { 2726 if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) 2727 return C; 2728 throw TypeError(tryToString(C) + ' is not a typed array constructor'); 2729}; 2730var exportTypedArrayMethod = function (KEY, property, forced, options) { 2731 if (!DESCRIPTORS) 2732 return; 2733 if (forced) 2734 for (var ARRAY in TypedArrayConstructorsList) { 2735 var TypedArrayConstructor = global[ARRAY]; 2736 if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) 2737 try { 2738 delete TypedArrayConstructor.prototype[KEY]; 2739 } catch (error) { 2740 try { 2741 TypedArrayConstructor.prototype[KEY] = property; 2742 } catch (error2) { 2743 } 2744 } 2745 } 2746 if (!TypedArrayPrototype[KEY] || forced) { 2747 defineBuiltIn(TypedArrayPrototype, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options); 2748 } 2749}; 2750var exportTypedArrayStaticMethod = function (KEY, property, forced) { 2751 var ARRAY, TypedArrayConstructor; 2752 if (!DESCRIPTORS) 2753 return; 2754 if (setPrototypeOf) { 2755 if (forced) 2756 for (ARRAY in TypedArrayConstructorsList) { 2757 TypedArrayConstructor = global[ARRAY]; 2758 if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) 2759 try { 2760 delete TypedArrayConstructor[KEY]; 2761 } catch (error) { 2762 } 2763 } 2764 if (!TypedArray[KEY] || forced) { 2765 try { 2766 return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property); 2767 } catch (error) { 2768 } 2769 } else 2770 return; 2771 } 2772 for (ARRAY in TypedArrayConstructorsList) { 2773 TypedArrayConstructor = global[ARRAY]; 2774 if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) { 2775 defineBuiltIn(TypedArrayConstructor, KEY, property); 2776 } 2777 } 2778}; 2779for (NAME in TypedArrayConstructorsList) { 2780 Constructor = global[NAME]; 2781 Prototype = Constructor && Constructor.prototype; 2782 if (Prototype) 2783 enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor; 2784 else 2785 NATIVE_ARRAY_BUFFER_VIEWS = false; 2786} 2787for (NAME in BigIntArrayConstructorsList) { 2788 Constructor = global[NAME]; 2789 Prototype = Constructor && Constructor.prototype; 2790 if (Prototype) 2791 enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor; 2792} 2793if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) { 2794 TypedArray = function TypedArray() { 2795 throw TypeError('Incorrect invocation'); 2796 }; 2797 if (NATIVE_ARRAY_BUFFER_VIEWS) 2798 for (NAME in TypedArrayConstructorsList) { 2799 if (global[NAME]) 2800 setPrototypeOf(global[NAME], TypedArray); 2801 } 2802} 2803if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) { 2804 TypedArrayPrototype = TypedArray.prototype; 2805 if (NATIVE_ARRAY_BUFFER_VIEWS) 2806 for (NAME in TypedArrayConstructorsList) { 2807 if (global[NAME]) 2808 setPrototypeOf(global[NAME].prototype, TypedArrayPrototype); 2809 } 2810} 2811if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) { 2812 setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype); 2813} 2814if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) { 2815 TYPED_ARRAY_TAG_REQUIRED = true; 2816 defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, { 2817 configurable: true, 2818 get: function () { 2819 return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined; 2820 } 2821 }); 2822 for (NAME in TypedArrayConstructorsList) 2823 if (global[NAME]) { 2824 createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME); 2825 } 2826} 2827module.exports = { 2828 NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS, 2829 TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG, 2830 aTypedArray: aTypedArray, 2831 aTypedArrayConstructor: aTypedArrayConstructor, 2832 exportTypedArrayMethod: exportTypedArrayMethod,
2833 exportTypedArrayStaticMethod: exportTypedArrayStaticMethod, 2834 getTypedArrayConstructor: getTypedArrayConstructor, 2835 isView: isView, 2836 isTypedArray: isTypedArray, 2837 TypedArray: TypedArray, 2838 TypedArrayPrototype: TypedArrayPrototype 2839}; 2840 2841/***/ }), 2842/* 95 */ 2843/***/ ((module) => { 2844 2845 2846module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined'; 2847 2848/***/ }), 2849/* 96 */ 2850/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2851 2852 2853var hasOwn = __w_pdfjs_require__(39); 2854var isCallable = __w_pdfjs_require__(21); 2855var toObject = __w_pdfjs_require__(40); 2856var sharedKey = __w_pdfjs_require__(54); 2857var CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(97); 2858var IE_PROTO = sharedKey('IE_PROTO'); 2859var $Object = Object; 2860var ObjectPrototype = $Object.prototype; 2861module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { 2862 var object = toObject(O); 2863 if (hasOwn(object, IE_PROTO)) 2864 return object[IE_PROTO]; 2865 var constructor = object.constructor; 2866 if (isCallable(constructor) && object instanceof constructor) { 2867 return constructor.prototype; 2868 } 2869 return object instanceof $Object ? ObjectPrototype : null; 2870}; 2871 2872/***/ }), 2873/* 97 */ 2874/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2875 2876 2877var fails = __w_pdfjs_require__(7); 2878module.exports = !fails(function () { 2879 function F() { 2880 } 2881 F.prototype.constructor = null; 2882 return Object.getPrototypeOf(new F()) !== F.prototype; 2883}); 2884 2885/***/ }), 2886/* 98 */ 2887/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2888 2889 2890var bind = __w_pdfjs_require__(99); 2891var IndexedObject = __w_pdfjs_require__(13); 2892var toObject = __w_pdfjs_require__(40); 2893var lengthOfArrayLike = __w_pdfjs_require__(64); 2894var createMethod = function (TYPE) { 2895 var IS_FIND_LAST_INDEX = TYPE === 1; 2896 return function ($this, callbackfn, that) { 2897 var O = toObject($this); 2898 var self = IndexedObject(O); 2899 var boundFunction = bind(callbackfn, that); 2900 var index = lengthOfArrayLike(self); 2901 var value, result; 2902 while (index-- > 0) { 2903 value = self[index]; 2904 result = boundFunction(value, index, O); 2905 if (result) 2906 switch (TYPE) { 2907 case 0: 2908 return value; 2909 case 1: 2910 return index; 2911 } 2912 } 2913 return IS_FIND_LAST_INDEX ? -1 : undefined; 2914 }; 2915}; 2916module.exports = { 2917 findLast: createMethod(0), 2918 findLastIndex: createMethod(1) 2919}; 2920 2921/***/ }), 2922/* 99 */ 2923/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2924 2925 2926var uncurryThis = __w_pdfjs_require__(100); 2927var aCallable = __w_pdfjs_require__(31); 2928var NATIVE_BIND = __w_pdfjs_require__(9); 2929var bind = uncurryThis(uncurryThis.bind); 2930module.exports = function (fn, that) { 2931 aCallable(fn); 2932 return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function () { 2933 return fn.apply(that, arguments); 2934 }; 2935}; 2936 2937/***/ }), 2938/* 100 */ 2939/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 2940 2941 2942var classofRaw = __w_pdfjs_require__(15); 2943var uncurryThis = __w_pdfjs_require__(14); 2944module.exports = function (fn) { 2945 if (classofRaw(fn) === 'Function') 2946 return uncurryThis(fn); 2947}; 2948 2949/***/ }), 2950/* 101 */ 2951/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2952 2953 2954var ArrayBufferViewCore = __w_pdfjs_require__(94); 2955var $findLastIndex = (__w_pdfjs_require__(98).findLastIndex); 2956var aTypedArray = ArrayBufferViewCore.aTypedArray; 2957var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 2958exportTypedArrayMethod('findLastIndex', function findLastIndex(predicate) { 2959 return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined); 2960}); 2961 2962/***/ }), 2963/* 102 */ 2964/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 2965 2966 2967var global = __w_pdfjs_require__(4); 2968var call = __w_pdfjs_require__(8); 2969var ArrayBufferViewCore = __w_pdfjs_require__(94); 2970var lengthOfArrayLike = __w_pdfjs_require__(64); 2971var toOffset = __w_pdfjs_require__(103); 2972var toIndexedObject = __w_pdfjs_require__(40); 2973var fails = __w_pdfjs_require__(7); 2974var RangeError = global.RangeError; 2975var Int8Array = global.Int8Array; 2976var Int8ArrayPrototype = Int8Array && Int8Array.prototype; 2977var $set = Int8ArrayPrototype && Int8ArrayPrototype.set; 2978var aTypedArray = ArrayBufferViewCore.aTypedArray; 2979var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 2980var WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () { 2981 var array = new Uint8ClampedArray(2); 2982 call($set, array, { 2983 length: 1, 2984 0: 3 2985 }, 1); 2986 return array[1] !== 3; 2987}); 2988var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () { 2989 var array = new Int8Array(2); 2990 array.set(1); 2991 array.set('2', 1); 2992 return array[0] !== 0 || array[1] !== 2; 2993}); 2994exportTypedArrayMethod('set', function set(arrayLike) { 2995 aTypedArray(this); 2996 var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); 2997 var src = toIndexedObject(arrayLike); 2998 if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) 2999 return call($set, this, src, offset); 3000 var length = this.length; 3001 var len = lengthOfArrayLike(src); 3002 var index = 0; 3003 if (len + offset > length) 3004 throw RangeError('Wrong length'); 3005 while (index < len) 3006 this[offset + index] = src[index++]; 3007}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG); 3008 3009/***/ }), 3010/* 103 */ 3011/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3012 3013 3014var toPositiveInteger = __w_pdfjs_require__(104); 3015var $RangeError = RangeError; 3016module.exports = function (it, BYTES) { 3017 var offset = toPositiveInteger(it); 3018 if (offset % BYTES) 3019 throw $RangeError('Wrong offset'); 3020 return offset; 3021}; 3022 3023/***/ }), 3024/* 104 */ 3025/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3026 3027 3028var toIntegerOrInfinity = __w_pdfjs_require__(62); 3029var $RangeError = RangeError; 3030module.exports = function (it) { 3031 var result = toIntegerOrInfinity(it); 3032 if (result < 0) 3033 throw $RangeError("The argument can't be less than 0"); 3034 return result; 3035}; 3036 3037/***/ }), 3038/* 105 */ 3039/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3040 3041 3042var arrayToReversed = __w_pdfjs_require__(106); 3043var ArrayBufferViewCore = __w_pdfjs_require__(94); 3044var aTypedArray = ArrayBufferViewCore.aTypedArray; 3045var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 3046var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; 3047exportTypedArrayMethod('toReversed', function toReversed() { 3048 return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this)); 3049}); 3050 3051/***/ }), 3052/* 106 */ 3053/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3054 3055 3056var lengthOfArrayLike = __w_pdfjs_require__(64); 3057module.exports = function (O, C) { 3058 var len = lengthOfArrayLike(O); 3059 var A = new C(len); 3060 var k = 0; 3061 for (; k < len; k++) 3062 A[k] = O[len - k - 1]; 3063 return A; 3064}; 3065 3066/***/ }), 3067/* 107 */ 3068/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3069 3070 3071var ArrayBufferViewCore = __w_pdfjs_require__(94); 3072var uncurryThis = __w_pdfjs_require__(14); 3073var aCallable = __w_pdfjs_require__(31); 3074var arrayFromConstructorAndList = __w_pdfjs_require__(108); 3075var aTypedArray = ArrayBufferViewCore.aTypedArray; 3076var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; 3077var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 3078var sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort); 3079exportTypedArrayMethod('toSorted', function toSorted(compareFn) { 3080 if (compareFn !== undefined) 3081 aCallable(compareFn); 3082 var O = aTypedArray(this); 3083 var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O); 3084 return sort(A, compareFn); 3085}); 3086 3087/***/ }), 3088/* 108 */ 3089/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3090 3091 3092var lengthOfArrayLike = __w_pdfjs_require__(64); 3093module.exports = function (Constructor, list) { 3094 var index = 0; 3095 var length = lengthOfArrayLike(list); 3096 var result = new Constructor(length); 3097 while (length > index) 3098 result[index] = list[index++]; 3099 return result; 3100}; 3101 3102/***/ }), 3103/* 109 */ 3104/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3105 3106 3107var arrayWith = __w_pdfjs_require__(110); 3108var ArrayBufferViewCore = __w_pdfjs_require__(94); 3109var isBigIntArray = __w_pdfjs_require__(111); 3110var toIntegerOrInfinity = __w_pdfjs_require__(62); 3111var toBigInt = __w_pdfjs_require__(112); 3112var aTypedArray = ArrayBufferViewCore.aTypedArray; 3113var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor; 3114var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; 3115var PROPER_ORDER = !!(function () { 3116 try { 3117 new Int8Array(1)['with'](2, {
3118 valueOf: function () { 3119 throw 8; 3120 } 3121 }); 3122 } catch (error) { 3123 return error === 8; 3124 } 3125}()); 3126exportTypedArrayMethod('with', { 3127 'with': function (index, value) { 3128 var O = aTypedArray(this); 3129 var relativeIndex = toIntegerOrInfinity(index); 3130 var actualValue = isBigIntArray(O) ? toBigInt(value) : +value; 3131 return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue); 3132 } 3133}['with'], !PROPER_ORDER); 3134 3135/***/ }), 3136/* 110 */ 3137/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3138 3139 3140var lengthOfArrayLike = __w_pdfjs_require__(64); 3141var toIntegerOrInfinity = __w_pdfjs_require__(62); 3142var $RangeError = RangeError; 3143module.exports = function (O, C, index, value) { 3144 var len = lengthOfArrayLike(O); 3145 var relativeIndex = toIntegerOrInfinity(index); 3146 var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex; 3147 if (actualIndex >= len || actualIndex < 0) 3148 throw $RangeError('Incorrect index'); 3149 var A = new C(len); 3150 var k = 0; 3151 for (; k < len; k++) 3152 A[k] = k === actualIndex ? value : O[k]; 3153 return A; 3154}; 3155 3156/***/ }), 3157/* 111 */ 3158/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3159 3160 3161var classof = __w_pdfjs_require__(78); 3162module.exports = function (it) { 3163 var klass = classof(it); 3164 return klass === 'BigInt64Array' || klass === 'BigUint64Array'; 3165}; 3166 3167/***/ }), 3168/* 112 */ 3169/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3170 3171 3172var toPrimitive = __w_pdfjs_require__(19); 3173var $TypeError = TypeError; 3174module.exports = function (argument) { 3175 var prim = toPrimitive(argument, 'number'); 3176 if (typeof prim == 'number') 3177 throw $TypeError("Can't convert number to bigint"); 3178 return BigInt(prim); 3179}; 3180 3181/***/ }), 3182/* 113 */ 3183/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3184 3185 3186var DESCRIPTORS = __w_pdfjs_require__(6); 3187var defineBuiltInAccessor = __w_pdfjs_require__(88); 3188var isDetached = __w_pdfjs_require__(114); 3189var ArrayBufferPrototype = ArrayBuffer.prototype; 3190if (DESCRIPTORS && !('detached' in ArrayBufferPrototype)) { 3191 defineBuiltInAccessor(ArrayBufferPrototype, 'detached', { 3192 configurable: true, 3193 get: function detached() { 3194 return isDetached(this); 3195 } 3196 }); 3197} 3198 3199/***/ }), 3200/* 114 */ 3201/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3202 3203 3204var uncurryThis = __w_pdfjs_require__(14); 3205var arrayBufferByteLength = __w_pdfjs_require__(115); 3206var slice = uncurryThis(ArrayBuffer.prototype.slice); 3207module.exports = function (O) { 3208 if (arrayBufferByteLength(O) !== 0) 3209 return false; 3210 try { 3211 slice(O, 0, 0); 3212 return false; 3213 } catch (error) { 3214 return true; 3215 } 3216}; 3217 3218/***/ }), 3219/* 115 */ 3220/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3221 3222 3223var uncurryThisAccessor = __w_pdfjs_require__(72); 3224var classof = __w_pdfjs_require__(15); 3225var $TypeError = TypeError; 3226module.exports = uncurryThisAccessor(ArrayBuffer.prototype, 'byteLength', 'get') || function (O) { 3227 if (classof(O) !== 'ArrayBuffer') 3228 throw $TypeError('ArrayBuffer expected'); 3229 return O.byteLength; 3230}; 3231 3232/***/ }), 3233/* 116 */ 3234/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3235 3236 3237var $ = __w_pdfjs_require__(3); 3238var $transfer = __w_pdfjs_require__(117); 3239if ($transfer) 3240 $({ 3241 target: 'ArrayBuffer', 3242 proto: true 3243 }, { 3244 transfer: function transfer() { 3245 return $transfer(this, arguments.length ? arguments[0] : undefined, true); 3246 } 3247 }); 3248 3249/***/ }), 3250/* 117 */ 3251/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3252 3253 3254var global = __w_pdfjs_require__(4); 3255var uncurryThis = __w_pdfjs_require__(14); 3256var uncurryThisAccessor = __w_pdfjs_require__(72); 3257var toIndex = __w_pdfjs_require__(118); 3258var isDetached = __w_pdfjs_require__(114); 3259var arrayBufferByteLength = __w_pdfjs_require__(115); 3260var PROPER_TRANSFER = __w_pdfjs_require__(119); 3261var TypeError = global.TypeError; 3262var structuredClone = global.structuredClone; 3263var ArrayBuffer = global.ArrayBuffer; 3264var DataView = global.DataView; 3265var min = Math.min; 3266var ArrayBufferPrototype = ArrayBuffer.prototype; 3267var DataViewPrototype = DataView.prototype; 3268var slice = uncurryThis(ArrayBufferPrototype.slice); 3269var isResizable = uncurryThisAccessor(ArrayBufferPrototype, 'resizable', 'get'); 3270var maxByteLength = uncurryThisAccessor(ArrayBufferPrototype, 'maxByteLength', 'get'); 3271var getInt8 = uncurryThis(DataViewPrototype.getInt8); 3272var setInt8 = uncurryThis(DataViewPrototype.setInt8); 3273module.exports = PROPER_TRANSFER && function (arrayBuffer, newLength, preserveResizability) { 3274 var byteLength = arrayBufferByteLength(arrayBuffer); 3275 var newByteLength = newLength === undefined ? byteLength : toIndex(newLength); 3276 var fixedLength = !isResizable || !isResizable(arrayBuffer); 3277 if (isDetached(arrayBuffer)) 3278 throw TypeError('ArrayBuffer is detached'); 3279 var newBuffer = structuredClone(arrayBuffer, { transfer: [arrayBuffer] }); 3280 if (byteLength === newByteLength && (preserveResizability || fixedLength)) 3281 return newBuffer; 3282 if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) 3283 return slice(newBuffer, 0, newByteLength); 3284 var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(newBuffer) } : undefined; 3285 var newNewBuffer = new ArrayBuffer(newByteLength, options); 3286 var a = new DataView(newBuffer); 3287 var b = new DataView(newNewBuffer); 3288 var copyLength = min(newByteLength, byteLength); 3289 for (var i = 0; i < copyLength; i++) 3290 setInt8(b, i, getInt8(a, i)); 3291 return newNewBuffer; 3292}; 3293 3294/***/ }), 3295/* 118 */ 3296/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3297 3298 3299var toIntegerOrInfinity = __w_pdfjs_require__(62);
3300var toLength = __w_pdfjs_require__(65); 3301var $RangeError = RangeError; 3302module.exports = function (it) { 3303 if (it === undefined) 3304 return 0; 3305 var number = toIntegerOrInfinity(it); 3306 var length = toLength(number); 3307 if (number !== length) 3308 throw $RangeError('Wrong length or index'); 3309 return length; 3310}; 3311 3312/***/ }), 3313/* 119 */ 3314/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3315 3316 3317var global = __w_pdfjs_require__(4); 3318var fails = __w_pdfjs_require__(7); 3319var V8 = __w_pdfjs_require__(28); 3320var IS_BROWSER = __w_pdfjs_require__(120); 3321var IS_DENO = __w_pdfjs_require__(121); 3322var IS_NODE = __w_pdfjs_require__(122); 3323var structuredClone = global.structuredClone; 3324module.exports = !!structuredClone && !fails(function () { 3325 if (IS_DENO && V8 > 92 || IS_NODE && V8 > 94 || IS_BROWSER && V8 > 97) 3326 return false; 3327 var buffer = new ArrayBuffer(8); 3328 var clone = structuredClone(buffer, { transfer: [buffer] }); 3329 return buffer.byteLength !== 0 || clone.byteLength !== 8; 3330}); 3331 3332/***/ }), 3333/* 120 */ 3334/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3335 3336 3337var IS_DENO = __w_pdfjs_require__(121); 3338var IS_NODE = __w_pdfjs_require__(122); 3339module.exports = !IS_DENO && !IS_NODE && typeof window == 'object' && typeof document == 'object'; 3340 3341/***/ }), 3342/* 121 */ 3343/***/ ((module) => { 3344 3345 3346module.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object'; 3347 3348/***/ }), 3349/* 122 */ 3350/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 3351 3352 3353var global = __w_pdfjs_require__(4); 3354var classof = __w_pdfjs_require__(15); 3355module.exports = classof(global.process) === 'process'; 3356 3357/***/ }), 3358/* 123 */ 3359/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 3360 3361 3362var $ = __w_pdfjs_require__(3); 3363var $transfer = __w_pdfjs_require__(117); 3364if ($transfer) 3365 $({ 3366 target: 'ArrayBuffer', 3367 proto: true 3368 }, { 3369 transferToFixedLength: function transferToFixedLength() { 3370 return $transfer(this, arguments.length ? arguments[0] : undefined, false); 3371 } 3372 }); 3373 3374/***/ }), 3375/* 124 */ 3376/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 3377 3378 3379 3380Object.defineProperty(exports, "__esModule", ({ 3381 value: true 3382})); 3383exports.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; 3384Object.defineProperty(exports, "SVGGraphics", ({ 3385 enumerable: true, 3386 get: function () { 3387 return _displaySvg.SVGGraphics; 3388 } 3389})); 3390exports.build = void 0; 3391exports.getDocument = getDocument; 3392exports.version = void 0; 3393__w_pdfjs_require__(84); 3394__w_pdfjs_require__(86); 3395__w_pdfjs_require__(87); 3396__w_pdfjs_require__(2); 3397__w_pdfjs_require__(93); 3398__w_pdfjs_require__(101); 3399__w_pdfjs_require__(102); 3400__w_pdfjs_require__(105); 3401__w_pdfjs_require__(107); 3402__w_pdfjs_require__(109); 3403__w_pdfjs_require__(113); 3404__w_pdfjs_require__(116); 3405__w_pdfjs_require__(123); 3406__w_pdfjs_require__(89); 3407__w_pdfjs_require__(125); 3408__w_pdfjs_require__(136); 3409__w_pdfjs_require__(138); 3410__w_pdfjs_require__(141); 3411__w_pdfjs_require__(143); 3412__w_pdfjs_require__(145); 3413__w_pdfjs_require__(147); 3414__w_pdfjs_require__(149); 3415__w_pdfjs_require__(152); 3416var _util = __w_pdfjs_require__(1); 3417var _annotation_storage = __w_pdfjs_require__(163); 3418var _display_utils = __w_pdfjs_require__(168); 3419var _font_loader = __w_pdfjs_require__(171); 3420var _displayNode_utils = __w_pdfjs_require__(172); 3421var _canvas = __w_pdfjs_require__(173); 3422var _worker_options = __w_pdfjs_require__(176); 3423var _message_handler = __w_pdfjs_require__(177); 3424var _metadata = __w_pdfjs_require__(178); 3425var _optional_content_config = __w_pdfjs_require__(179); 3426var _transport_stream = __w_pdfjs_require__(180); 3427var _displayFetch_stream = __w_pdfjs_require__(181); 3428var _displayNetwork = __w_pdfjs_require__(184); 3429var _displayNode_stream = __w_pdfjs_require__(185); 3430var _displaySvg = __w_pdfjs_require__(186); 3431var _xfa_text = __w_pdfjs_require__(194); 3432const DEFAULT_RANGE_CHUNK_SIZE = 65536; 3433const RENDERING_CANCELLED_TIMEOUT = 100; 3434const DELAYED_CLEANUP_TIMEOUT = 5000; 3435const DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; 3436exports.DefaultCanvasFactory = DefaultCanvasFactory; 3437const DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; 3438exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; 3439const DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory; 3440exports.DefaultFilterFactory = DefaultFilterFactory; 3441const DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; 3442exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; 3443function getDocument(src) { 3444 if (typeof src === "string" || src instanceof URL) { 3445 src = { 3446 url: src 3447 }; 3448 } else if ((0, _util.isArrayBuffer)(src)) { 3449 src = { 3450 data: src 3451 }; 3452 } 3453 if (typeof src !== "object") { 3454 throw new Error("Invalid parameter in getDocument, need parameter object."); 3455 } 3456 if (!src.url && !src.data && !src.range) { 3457 throw new Error("Invalid parameter object: need either .data, .range or .url"); 3458 } 3459 const task = new PDFDocumentLoadingTask(); 3460 const { 3461 docId 3462 } = task; 3463 const url = src.url ? getUrlProp(src.url) : null; 3464 const data = src.data ? getDataProp(src.data) : null; 3465 const httpHeaders = src.httpHeaders || null; 3466 const withCredentials = src.withCredentials === true; 3467 const password = src.password ?? null; 3468 const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; 3469 const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; 3470 let worker = src.worker instanceof PDFWorker ? src.worker : null; 3471 const verbosity = src.verbosity; 3472 const docBaseUrl = typeof src.docBaseUrl === "string" && !(0, _display_utils.isDataScheme)(src.docBaseUrl) ? src.docBaseUrl : null; 3473 const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; 3474 const cMapPacked = src.cMapPacked !== false; 3475 const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; 3476 const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; 3477 const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; 3478 const ignoreErrors = src.stopAtErrors !== true; 3479 const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; 3480 const isEvalSupported = src.isEvalSupported !== false; 3481 const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !_util.isNodeJS; 3482 const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes :
3482-1; 3483 const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : _util.isNodeJS; 3484 const fontExtraProperties = src.fontExtraProperties === true; 3485 const enableXfa = src.enableXfa === true; 3486 const ownerDocument = src.ownerDocument || globalThis.document; 3487 const disableRange = src.disableRange === true; 3488 const disableStream = src.disableStream === true; 3489 const disableAutoFetch = src.disableAutoFetch === true; 3490 const pdfBug = src.pdfBug === true; 3491 const length = rangeTransport ? rangeTransport.length : src.length ?? NaN; 3492 const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !_util.isNodeJS && !disableFontFace; 3493 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); 3494 const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ 3495 ownerDocument 3496 }); 3497 const filterFactory = src.filterFactory || new DefaultFilterFactory({ 3498 docId, 3499 ownerDocument 3500 }); 3501 const styleElement = null; 3502 (0, _util.setVerbosityLevel)(verbosity); 3503 const transportFactory = { 3504 canvasFactory, 3505 filterFactory 3506 }; 3507 if (!useWorkerFetch) { 3508 transportFactory.cMapReaderFactory = new CMapReaderFactory({ 3509 baseUrl: cMapUrl, 3510 isCompressed: cMapPacked 3511 }); 3512 transportFactory.standardFontDataFactory = new StandardFontDataFactory({ 3513 baseUrl: standardFontDataUrl 3514 }); 3515 } 3516 if (!worker) { 3517 const workerParams = { 3518 verbosity, 3519 port: _worker_options.GlobalWorkerOptions.workerPort 3520 }; 3521 worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); 3522 task._worker = worker; 3523 } 3524 const fetchDocParams = { 3525 docId, 3526 apiVersion: '3.11.174', 3527 data, 3528 password, 3529 disableAutoFetch, 3530 rangeChunkSize, 3531 length, 3532 docBaseUrl, 3533 enableXfa, 3534 evaluatorOptions: { 3535 maxImageSize, 3536 disableFontFace, 3537 ignoreErrors, 3538 isEvalSupported, 3539 isOffscreenCanvasSupported, 3540 canvasMaxAreaInBytes, 3541 fontExtraProperties, 3542 useSystemFonts, 3543 cMapUrl: useWorkerFetch ? cMapUrl : null, 3544 standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null 3545 } 3546 }; 3547 const transportParams = { 3548 ignoreErrors, 3549 isEvalSupported, 3550 disableFontFace, 3551 fontExtraProperties, 3552 enableXfa, 3553 ownerDocument, 3554 disableAutoFetch, 3555 pdfBug, 3556 styleElement 3557 }; 3558 worker.promise.then(function () { 3559 if (task.destroyed) { 3560 throw new Error("Loading aborted"); 3561 } 3562 const workerIdPromise = _fetchDocument(worker, fetchDocParams); 3563 const networkStreamPromise = new Promise(function (resolve) { 3564 let networkStream; 3565 if (rangeTransport) { 3566 networkStream = new _transport_stream.PDFDataTransportStream({ 3567 length, 3568 initialData: rangeTransport.initialData, 3569 progressiveDone: rangeTransport.progressiveDone, 3570 contentDispositionFilename: rangeTransport.contentDispositionFilename, 3571 disableRange, 3572 disableStream 3573 }, rangeTransport); 3574 } else if (!data) { 3575 const createPDFNetworkStream = params => { 3576 if (_util.isNodeJS) { 3577 return new _displayNode_stream.PDFNodeStream(params); 3578 } 3579 return (0, _display_utils.isValidFetchUrl)(params.url) ? new _displayFetch_stream.PDFFetchStream(params) : new _displayNetwork.PDFNetworkStream(params); 3580 }; 3581 networkStream = createPDFNetworkStream({ 3582 url, 3583 length, 3584 httpHeaders, 3585 withCredentials, 3586 rangeChunkSize, 3587 disableRange, 3588 disableStream 3589 }); 3590 } 3591 resolve(networkStream); 3592 }); 3593 return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) { 3594 let [workerId, networkStream] = _ref; 3595 if (task.destroyed) { 3596 throw new Error("Loading aborted"); 3597 } 3598 const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); 3599 const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); 3600 task._transport = transport; 3601 messageHandler.send("Ready", null); 3602 }); 3603 }).catch(task._capability.reject); 3604 return task; 3605} 3606async function _fetchDocument(worker, source) { 3607 if (worker.destroyed) { 3608 throw new Error("Worker was destroyed"); 3609 }
3610 const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", source, source.data ? [source.data.buffer] : null); 3611 if (worker.destroyed) { 3612 throw new Error("Worker was destroyed"); 3613 } 3614 return workerId; 3615} 3616function getUrlProp(val) { 3617 if (val instanceof URL) { 3618 return val.href; 3619 } 3620 try { 3621 return new URL(val, window.location).href; 3622 } catch { 3623 if (_util.isNodeJS && typeof val === "string") { 3624 return val; 3625 } 3626 } 3627 throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); 3628} 3629function getDataProp(val) { 3630 if (_util.isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { 3631 throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); 3632 } 3633 if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { 3634 return val; 3635 } 3636 if (typeof val === "string") { 3637 return (0, _util.stringToBytes)(val); 3638 } 3639 if (typeof val === "object" && !isNaN(val?.length) || (0, _util.isArrayBuffer)(val)) { 3640 return new Uint8Array(val); 3641 } 3642 throw new Error("Invalid PDF binary data: either TypedArray, " + "string, or array-like object is expected in the data property."); 3643} 3644class PDFDocumentLoadingTask { 3645 static #docId = 0; 3646 constructor() { 3647 this._capability = new _util.PromiseCapability(); 3648 this._transport = null; 3649 this._worker = null; 3650 this.docId = `d${PDFDocumentLoadingTask.#docId++}`; 3651 this.destroyed = false; 3652 this.onPassword = null; 3653 this.onProgress = null; 3654 } 3655 get promise() { 3656 return this._capability.promise; 3657 } 3658 async destroy() { 3659 this.destroyed = true; 3660 try { 3661 if (this._worker?.port) { 3662 this._worker._pendingDestroy = true; 3663 } 3664 await this._transport?.destroy(); 3665 } catch (ex) { 3666 if (this._worker?.port) { 3667 delete this._worker._pendingDestroy; 3668 } 3669 throw ex; 3670 } 3671 this._transport = null; 3672 if (this._worker) { 3673 this._worker.destroy(); 3674 this._worker = null; 3675 } 3676 } 3677} 3678exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; 3679class PDFDataRangeTransport { 3680 constructor(length, initialData) { 3681 let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 3682 let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 3683 this.length = length; 3684 this.initialData = initialData; 3685 this.progressiveDone = progressiveDone; 3686 this.contentDispositionFilename = contentDispositionFilename; 3687 this._rangeListeners = []; 3688 this._progressListeners = []; 3689 this._progressiveReadListeners = []; 3690 this._progressiveDoneListeners = []; 3691 this._readyCapability = new _util.PromiseCapability(); 3692 } 3693 addRangeListener(listener) { 3694 this._rangeListeners.push(listener); 3695 } 3696 addProgressListener(listener) { 3697 this._progressListeners.push(listener); 3698 } 3699 addProgressiveReadListener(listener) { 3700 this._progressiveReadListeners.push(listener); 3701 } 3702 addProgressiveDoneListener(listener) { 3703 this._progressiveDoneListeners.push(listener); 3704 } 3705 onDataRange(begin, chunk) { 3706 for (const listener of this._rangeListeners) { 3707 listener(begin, chunk); 3708 } 3709 } 3710 onDataProgress(loaded, total) { 3711 this._readyCapability.promise.then(() => { 3712 for (const listener of this._progressListeners) { 3713 listener(loaded, total); 3714 } 3715 }); 3716 } 3717 onDataProgressiveRead(chunk) { 3718 this._readyCapability.promise.then(() => { 3719 for (const listener of this._progressiveReadListeners) { 3720 listener(chunk); 3721 } 3722 }); 3723 } 3724 onDataProgressiveDone() { 3725 this._readyCapability.promise.then(() => { 3726 for (const listener of this._progressiveDoneListeners) { 3727 listener(); 3728 } 3729 }); 3730 } 3731 transportReady() { 3732 this._readyCapability.resolve(); 3733 } 3734 requestDataRange(begin, end) { 3735 (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); 3736 } 3737 abort() {} 3738} 3739exports.PDFDataRangeTransport = PDFDataRangeTransport; 3740class PDFDocumentProxy { 3741 constructor(pdfInfo, transport) { 3742 this._pdfInfo = pdfInfo; 3743 this._transport = transport; 3744 Object.defineProperty(this, "getJavaScript", { 3745 value: () => { 3746 (0, _display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, " + "please use `PDFDocumentProxy.getJSActions` instead."); 3747 return this.getJSActions().then(js => { 3748 if (!js) { 3749 return js; 3750 } 3751 const jsArr = []; 3752 for (const name in js) { 3753 jsArr.push(...js[name]); 3754 } 3755 return jsArr; 3756 }); 3757 } 3758 }); 3759 } 3760 get annotationStorage() { 3761 return this._transport.annotationStorage; 3762 } 3763 get filterFactory() { 3764 return this._transport.filterFactory; 3765 } 3766 get numPages() { 3767 return this._pdfInfo.numPages; 3768 } 3769 get fingerprints() { 3770 return this._pdfInfo.fingerprints; 3771 } 3772 get isPureXfa() { 3773 return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); 3774 } 3775 get allXfaHtml() { 3776 return this._transport._htmlForXfa; 3777 } 3778 getPage(pageNumber) { 3779 return this._transport.getPage(pageNumber); 3780 } 3781 getPageIndex(ref) { 3782 return this._transport.getPageIndex(ref); 3783 } 3784 getDestinations() { 3785 return this._transport.getDestinations(); 3786 } 3787 getDestination(id) { 3788 return this._transport.getDestination(id); 3789 } 3790 getPageLabels() { 3791 return this._transport.getPageLabels(); 3792 } 3793 getPageLayout() { 3794 return this._transport.getPageLayout(); 3795 } 3796 getPageMode() { 3797 return this._transport.getPageMode(); 3798 } 3799 getViewerPreferences() { 3800 return this._transport.getViewerPreferences(); 3801 } 3802 getOpenAction() { 3803 return this._transport.getOpenAction(); 3804 } 3805 getAttachments() { 3806 return this._transport.getAttachments(); 3807 } 3808 getJSActions() { 3809 return this._transport.getDocJSActions(); 3810 } 3811 getOutline() { 3812 return this._transport.getOutline(); 3813 } 3814 getOptionalContentConfig() { 3815 return this._transport.getOptionalContentConfig(); 3816 } 3817 getPermissions() { 3818 return this._transport.getPermissions(); 3819 } 3820 getMetadata() { 3821 return this._transport.getMetadata(); 3822 } 3823 getMarkInfo() { 3824 return this._transport.getMarkInfo(); 3825 } 3826 getData() { 3827 return this._transport.getData(); 3828 } 3829 saveDocument() { 3830 return this._transport.saveDocument(); 3831 } 3832 getDownloadInfo() { 3833 return this._transport.downloadInfoCapability.promise; 3834 } 3835 cleanup() { 3836 let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
3837 return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); 3838 } 3839 destroy() { 3840 return this.loadingTask.destroy(); 3841 } 3842 get loadingParams() { 3843 return this._transport.loadingParams; 3844 } 3845 get loadingTask() { 3846 return this._transport.loadingTask; 3847 } 3848 getFieldObjects() { 3849 return this._transport.getFieldObjects(); 3850 } 3851 hasJSActions() { 3852 return this._transport.hasJSActions(); 3853 } 3854 getCalculationOrderIds() { 3855 return this._transport.getCalculationOrderIds(); 3856 } 3857} 3858exports.PDFDocumentProxy = PDFDocumentProxy; 3859class PDFPageProxy { 3860 #delayedCleanupTimeout = null; 3861 #pendingCleanup = false; 3862 constructor(pageIndex, pageInfo, transport) { 3863 let pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; 3864 this._pageIndex = pageIndex; 3865 this._pageInfo = pageInfo; 3866 this._transport = transport; 3867 this._stats = pdfBug ? new _display_utils.StatTimer() : null; 3868 this._pdfBug = pdfBug; 3869 this.commonObjs = transport.commonObjs; 3870 this.objs = new PDFObjects(); 3871 this._maybeCleanupAfterRender = false;
3872 this._intentStates = new Map(); 3873 this.destroyed = false; 3874 } 3875 get pageNumber() { 3876 return this._pageIndex + 1; 3877 } 3878 get rotate() { 3879 return this._pageInfo.rotate; 3880 } 3881 get ref() { 3882 return this._pageInfo.ref; 3883 } 3884 get userUnit() { 3885 return this._pageInfo.userUnit; 3886 } 3887 get view() { 3888 return this._pageInfo.view; 3889 } 3890 getViewport() { 3891 let { 3892 scale, 3893 rotation = this.rotate, 3894 offsetX = 0, 3895 offsetY = 0, 3896 dontFlip = false 3897 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 3898 return new _display_utils.PageViewport({ 3899 viewBox: this.view, 3900 scale, 3901 rotation, 3902 offsetX, 3903 offsetY, 3904 dontFlip 3905 }); 3906 } 3907 getAnnotations() { 3908 let { 3909 intent = "display" 3910 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 3911 const intentArgs = this._transport.getRenderingIntent(intent); 3912 return this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); 3913 } 3914 getJSActions() { 3915 return this._transport.getPageJSActions(this._pageIndex); 3916 } 3917 get filterFactory() { 3918 return this._transport.filterFactory; 3919 } 3920 get isPureXfa() { 3921 return (0, _util.shadow)(this, "isPureXfa", !!this._transport._htmlForXfa); 3922 } 3923 async getXfa() { 3924 return this._transport._htmlForXfa?.children[this._pageIndex] || null; 3925 } 3926 render(_ref2) { 3927 let { 3928 canvasContext, 3929 viewport, 3930 intent = "display", 3931 annotationMode = _util.AnnotationMode.ENABLE, 3932 transform = null, 3933 background = null, 3934 optionalContentConfigPromise = null, 3935 annotationCanvasMap = null, 3936 pageColors = null, 3937 printAnnotationStorage = null 3938 } = _ref2; 3939 this._stats?.time("Overall"); 3940 const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage); 3941 this.#pendingCleanup = false; 3942 this.#abortDelayedCleanup(); 3943 if (!optionalContentConfigPromise) { 3944 optionalContentConfigPromise = this._transport.getOptionalContentConfig(); 3945 } 3946 let intentState = this._intentStates.get(intentArgs.cacheKey); 3947 if (!intentState) { 3948 intentState = Object.create(null); 3949 this._intentStates.set(intentArgs.cacheKey, intentState); 3950 } 3951 if (intentState.streamReaderCancelTimeout) { 3952 clearTimeout(intentState.streamReaderCancelTimeout); 3953 intentState.streamReaderCancelTimeout = null; 3954 } 3955 const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); 3956 if (!intentState.displayReadyCapability) { 3957 intentState.displayReadyCapability = new _util.PromiseCapability(); 3958 intentState.operatorList = { 3959 fnArray: [], 3960 argsArray: [], 3961 lastChunk: false, 3962 separateAnnots: null 3963 }; 3964 this._stats?.time("Page Request"); 3965 this._pumpOperatorList(intentArgs); 3966 } 3967 const complete = error => { 3968 intentState.renderTasks.delete(internalRenderTask); 3969 if (this._maybeCleanupAfterRender || intentPrint) { 3970 this.#pendingCleanup = true; 3971 } 3972 this.#tryCleanup(!intentPrint); 3973 if (error) { 3974 internalRenderTask.capability.reject(error); 3975 this._abortOperatorList({ 3976 intentState, 3977 reason: error instanceof Error ? error : new Error(error) 3978 }); 3979 } else { 3980 internalRenderTask.capability.resolve(); 3981 } 3982 this._stats?.timeEnd("Rendering"); 3983 this._stats?.timeEnd("Overall"); 3984 }; 3985 const internalRenderTask = new InternalRenderTask({ 3986 callback: complete, 3987 params: { 3988 canvasContext, 3989 viewport, 3990 transform, 3991 background 3992 }, 3993 objs: this.objs, 3994 commonObjs: this.commonObjs, 3995 annotationCanvasMap, 3996 operatorList: intentState.operatorList, 3997 pageIndex: this._pageIndex, 3998 canvasFactory: this._transport.canvasFactory, 3999 filterFactory: this._transport.filterFactory, 4000 useRequestAnimationFrame: !intentPrint, 4001 pdfBug: this._pdfBug, 4002 pageColors 4003 }); 4004 (intentState.renderTasks ||= new Set()).add(internalRenderTask); 4005 const renderTask = internalRenderTask.task; 4006 Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(_ref3 => { 4007 let [transparency, optionalContentConfig] = _ref3; 4008 if (this.destroyed) { 4009 complete(); 4010 return; 4011 }
4012 this._stats?.time("Rendering"); 4013 internalRenderTask.initializeGraphics({ 4014 transparency, 4015 optionalContentConfig 4016 }); 4017 internalRenderTask.operatorListChanged(); 4018 }).catch(complete); 4019 return renderTask; 4020 } 4021 getOperatorList() { 4022 let { 4023 intent = "display", 4024 annotationMode = _util.AnnotationMode.ENABLE, 4025 printAnnotationStorage = null 4026 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 4027 function operatorListChanged() { 4028 if (intentState.operatorList.lastChunk) { 4029 intentState.opListReadCapability.resolve(intentState.operatorList); 4030 intentState.renderTasks.delete(opListTask); 4031 } 4032 } 4033 const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true); 4034 let intentState = this._intentStates.get(intentArgs.cacheKey); 4035 if (!intentState) { 4036 intentState = Object.create(null); 4037 this._intentStates.set(intentArgs.cacheKey, intentState); 4038 } 4039 let opListTask; 4040 if (!intentState.opListReadCapability) { 4041 opListTask = Object.create(null); 4042 opListTask.operatorListChanged = operatorListChanged; 4043 intentState.opListReadCapability = new _util.PromiseCapability(); 4044 (intentState.renderTasks ||= new Set()).add(opListTask); 4045 intentState.operatorList = { 4046 fnArray: [], 4047 argsArray: [], 4048 lastChunk: false, 4049 separateAnnots: null 4050 }; 4051 this._stats?.time("Page Request"); 4052 this._pumpOperatorList(intentArgs); 4053 } 4054 return intentState.opListReadCapability.promise; 4055 } 4056 streamTextContent() { 4057 let { 4058 includeMarkedContent = false, 4059 disableNormalization = false 4060 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 4061 const TEXT_CONTENT_CHUNK_SIZE = 100; 4062 return this._transport.messageHandler.sendWithStream("GetTextContent", { 4063 pageIndex: this._pageIndex, 4064 includeMarkedContent: includeMarkedContent === true, 4065 disableNormalization: disableNormalization === true 4066 }, { 4067 highWaterMark: TEXT_CONTENT_CHUNK_SIZE, 4068 size(textContent) { 4069 return textContent.items.length; 4070 } 4071 }); 4072 } 4073 getTextContent() { 4074 let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 4075 if (this._transport._htmlForXfa) { 4076 return this.getXfa().then(xfa => { 4077 return _xfa_text.XfaText.textContent(xfa); 4078 }); 4079 } 4080 const readableStream = this.streamTextContent(params); 4081 return new Promise(function (resolve, reject) { 4082 function pump() { 4083 reader.read().then(function (_ref4) { 4084 let { 4085 value, 4086 done 4087 } = _ref4; 4088 if (done) { 4089 resolve(textContent); 4090 return; 4091 } 4092 Object.assign(textContent.styles, value.styles); 4093 textContent.items.push(...value.items); 4094 pump(); 4095 }, reject); 4096 } 4097 const reader = readableStream.getReader(); 4098 const textContent = { 4099 items: [], 4100 styles: Object.create(null) 4101 }; 4102 pump(); 4103 }); 4104 } 4105 getStructTree() { 4106 return this._transport.getStructTree(this._pageIndex); 4107 } 4108 _destroy() { 4109 this.destroyed = true; 4110 const waitOn = []; 4111 for (const intentState of this._intentStates.values()) { 4112 this._abortOperatorList({ 4113 intentState, 4114 reason: new Error("Page was destroyed."), 4115 force: true 4116 }); 4117 if (intentState.opListReadCapability) { 4118 continue; 4119 } 4120 for (const internalRenderTask of intentState.renderTasks) { 4121 waitOn.push(internalRenderTask.completed); 4122 internalRenderTask.cancel(); 4123 } 4124 } 4125 this.objs.clear(); 4126 this.#pendingCleanup = false; 4127 this.#abortDelayedCleanup(); 4128 return Promise.all(waitOn); 4129 } 4130 cleanup() { 4131 let resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 4132 this.#pendingCleanup = true; 4133 const success = this.#tryCleanup(false); 4134 if (resetStats && success) { 4135 this._stats &&= new _display_utils.StatTimer(); 4136 } 4137 return success; 4138 } 4139 #tryCleanup() { 4140 let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
4141 this.#abortDelayedCleanup(); 4142 if (!this.#pendingCleanup || this.destroyed) { 4143 return false; 4144 } 4145 if (delayed) { 4146 this.#delayedCleanupTimeout = setTimeout(() => { 4147 this.#delayedCleanupTimeout = null; 4148 this.#tryCleanup(false); 4149 }, DELAYED_CLEANUP_TIMEOUT); 4150 return false; 4151 } 4152 for (const { 4153 renderTasks, 4154 operatorList 4155 } of this._intentStates.values()) { 4156 if (renderTasks.size > 0 || !operatorList.lastChunk) { 4157 return false; 4158 } 4159 } 4160 this._intentStates.clear(); 4161 this.objs.clear(); 4162 this.#pendingCleanup = false; 4163 return true; 4164 } 4165 #abortDelayedCleanup() { 4166 if (this.#delayedCleanupTimeout) { 4167 clearTimeout(this.#delayedCleanupTimeout); 4168 this.#delayedCleanupTimeout = null; 4169 } 4170 } 4171 _startRenderPage(transparency, cacheKey) { 4172 const intentState = this._intentStates.get(cacheKey); 4173 if (!intentState) { 4174 return; 4175 } 4176 this._stats?.timeEnd("Page Request"); 4177 intentState.displayReadyCapability?.resolve(transparency); 4178 } 4179 _renderPageChunk(operatorListChunk, intentState) { 4180 for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { 4181 intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); 4182 intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); 4183 } 4184 intentState.operatorList.lastChunk = operatorListChunk.lastChunk; 4185 intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; 4186 for (const internalRenderTask of intentState.renderTasks) { 4187 internalRenderTask.operatorListChanged(); 4188 } 4189 if (operatorListChunk.lastChunk) { 4190 this.#tryCleanup(true); 4191 } 4192 } 4193 _pumpOperatorList(_ref5) { 4194 let { 4195 renderingIntent, 4196 cacheKey, 4197 annotationStorageSerializable 4198 } = _ref5; 4199 const { 4200 map, 4201 transfers 4202 } = annotationStorageSerializable; 4203 const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { 4204 pageIndex: this._pageIndex, 4205 intent: renderingIntent, 4206 cacheKey, 4207 annotationStorage: map 4208 }, transfers); 4209 const reader = readableStream.getReader(); 4210 const intentState = this._intentStates.get(cacheKey); 4211 intentState.streamReader = reader; 4212 const pump = () => { 4213 reader.read().then(_ref6 => { 4214 let { 4215 value, 4216 done 4217 } = _ref6; 4218 if (done) { 4219 intentState.streamReader = null; 4220 return; 4221 } 4222 if (this._transport.destroyed) { 4223 return; 4224 } 4225 this._renderPageChunk(value, intentState); 4226 pump(); 4227 }, reason => { 4228 intentState.streamReader = null; 4229 if (this._transport.destroyed) { 4230 return; 4231 } 4232 if (intentState.operatorList) { 4233 intentState.operatorList.lastChunk = true; 4234 for (const internalRenderTask of intentState.renderTasks) { 4235 internalRenderTask.operatorListChanged(); 4236 } 4237 this.#tryCleanup(true); 4238 } 4239 if (intentState.displayReadyCapability) { 4240 intentState.displayReadyCapability.reject(reason); 4241 } else if (intentState.opListReadCapability) { 4242 intentState.opListReadCapability.reject(reason); 4243 } else { 4244 throw reason; 4245 } 4246 }); 4247 }; 4248 pump(); 4249 } 4250 _abortOperatorList(_ref7) { 4251 let { 4252 intentState, 4253 reason, 4254 force = false 4255 } = _ref7; 4256 if (!intentState.streamReader) { 4257 return; 4258 } 4259 if (intentState.streamReaderCancelTimeout) { 4260 clearTimeout(intentState.streamReaderCancelTimeout); 4261 intentState.streamReaderCancelTimeout = null; 4262 } 4263 if (!force) { 4264 if (intentState.renderTasks.size > 0) { 4265 return; 4266 } 4267 if (reason instanceof _display_utils.RenderingCancelledException) { 4268 let delay = RENDERING_CANCELLED_TIMEOUT; 4269 if (reason.extraDelay > 0 && reason.extraDelay < 1000) { 4270 delay += reason.extraDelay; 4271 } 4272 intentState.streamReaderCancelTimeout = setTimeout(() => { 4273 intentState.streamReaderCancelTimeout = null; 4274 this._abortOperatorList({ 4275 intentState, 4276 reason, 4277 force: true 4278 }); 4279 }, delay); 4280 return; 4281 } 4282 } 4283 intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); 4284 intentState.streamReader = null; 4285 if (this._transport.destroyed) { 4286 return; 4287 } 4288 for (const [curCacheKey, curIntentState] of this._intentStates) { 4289 if (curIntentState === intentState) { 4290 this._intentStates.delete(curCacheKey); 4291 break; 4292 } 4293 } 4294 this.cleanup(); 4295 } 4296 get stats() { 4297 return this._stats; 4298 } 4299} 4300exports.PDFPageProxy = PDFPageProxy; 4301class LoopbackPort { 4302 #listeners = new Set(); 4303 #deferred = Promise.resolve(); 4304 postMessage(obj, transfer) { 4305 const event = { 4306 data: structuredClone(obj, null) 4307 }; 4308 this.#deferred.then(() => { 4309 for (const listener of this.#listeners) { 4310 listener.call(this, event); 4311 } 4312 }); 4313 } 4314 addEventListener(name, listener) { 4315 this.#listeners.add(listener); 4316 } 4317 removeEventListener(name, listener) { 4318 this.#listeners.delete(listener); 4319 } 4320 terminate() { 4321 this.#listeners.clear(); 4322 } 4323} 4324exports.LoopbackPort = LoopbackPort; 4325const PDFWorkerUtil = { 4326 isWorkerDisabled: false, 4327 fallbackWorkerSrc: null, 4328 fakeWorkerId: 0 4329}; 4330exports.PDFWorkerUtil = PDFWorkerUtil; 4331{ 4332 if (_util.isNodeJS && typeof require === "function") { 4333 PDFWorkerUtil.isWorkerDisabled = true; 4334 PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js"; 4335 } else if (typeof document === "object") { 4336 const pdfjsFilePath = document?.currentScript?.src; 4337 if (pdfjsFilePath) { 4338 PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".w
4338orker$1$2"); 4339 } 4340 } 4341 PDFWorkerUtil.isSameOrigin = function (baseUrl, otherUrl) { 4342 let base; 4343 try { 4344 base = new URL(baseUrl); 4345 if (!base.origin || base.origin === "null") { 4346 return false; 4347 } 4348 } catch { 4349 return false; 4350 } 4351 const other = new URL(otherUrl, base); 4352 return base.origin === other.origin; 4353 }; 4354 PDFWorkerUtil.createCDNWrapper = function (url) { 4355 const wrapper = `importScripts("${url}");`; 4356 return URL.createObjectURL(new Blob([wrapper])); 4357 }; 4358} 4359class PDFWorker { 4360 static #workerPorts; 4361 constructor() { 4362 let { 4363 name = null, 4364 port = null, 4365 verbosity = (0, _util.getVerbosityLevel)() 4366 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 4367 this.name = name; 4368 this.destroyed = false; 4369 this.verbosity = verbosity; 4370 this._readyCapability = new _util.PromiseCapability(); 4371 this._port = null; 4372 this._webWorker = null; 4373 this._messageHandler = null; 4374 if (port) { 4375 if (PDFWorker.#workerPorts?.has(port)) { 4376 throw new Error("Cannot use more than one PDFWorker per port."); 4377 } 4378 (PDFWorker.#workerPorts ||= new WeakMap()).set(port, this); 4379 this._initializeFromPort(port); 4380 return; 4381 } 4382 this._initialize(); 4383 } 4384 get promise() { 4385 return this._readyCapability.promise; 4386 } 4387 get port() { 4388 return this._port; 4389 } 4390 get messageHandler() { 4391 return this._messageHandler; 4392 } 4393 _initializeFromPort(port) { 4394 this._port = port; 4395 this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); 4396 this._messageHandler.on("ready", function () {}); 4397 this._readyCapability.resolve(); 4398 this._messageHandler.send("configure", { 4399 verbosity: this.verbosity 4400 }); 4401 } 4402 _initialize() { 4403 if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { 4404 let { 4405 workerSrc 4406 } = PDFWorker; 4407 try { 4408 if (!PDFWorkerUtil.isSameOrigin(window.location.href, workerSrc)) { 4409 workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); 4410 } 4411 const worker = new Worker(workerSrc); 4412 const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); 4413 const terminateEarly = () => { 4414 worker.removeEventListener("error", onWorkerError); 4415 messageHandler.destroy(); 4416 worker.terminate(); 4417 if (this.destroyed) { 4418 this._readyCapability.reject(new Error("Worker was destroyed")); 4419 } else { 4420 this._setupFakeWorker(); 4421 } 4422 }; 4423 const onWorkerError = () => { 4424 if (!this._webWorker) { 4425 terminateEarly(); 4426 } 4427 }; 4428 worker.addEventListener("error", onWorkerError); 4429 messageHandler.on("test", data => { 4430 worker.removeEventListener("error", onWorkerError); 4431 if (this.destroyed) { 4432 terminateEarly(); 4433 return; 4434 } 4435 if (data) { 4436 this._messageHandler = messageHandler; 4437 this._port = worker; 4438 this._webWorker = worker; 4439 this._readyCapability.resolve(); 4440 messageHandler.send("configure", { 4441 verbosity: this.verbosity 4442 }); 4443 } else { 4444 this._setupFakeWorker(); 4445 messageHandler.destroy(); 4446 worker.terminate(); 4447 } 4448 }); 4449 messageHandler.on("ready", data => { 4450 worker.removeEventListener("error", onWorkerError); 4451 if (this.destroyed) { 4452 terminateEarly(); 4453 return; 4454 } 4455 try { 4456 sendTest(); 4457 } catch { 4458 this._setupFakeWorker(); 4459 } 4460 }); 4461 const sendTest = () => { 4462 const testObj = new Uint8Array(); 4463 messageHandler.send("test", testObj, [testObj.buffer]); 4464 }; 4465 sendTest(); 4466 return; 4467 } catch { 4468 (0, _util.info)("The worker has been disabled."); 4469 } 4470 } 4471 this._setupFakeWorker(); 4472 } 4473 _setupFakeWorker() { 4474 if (!PDFWorkerUtil.isWorkerDisabled) { 4475 (0, _util.warn)("Setting up fake worker."); 4476 PDFWorkerUtil.isWorkerDisabled = true; 4477 } 4478 PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { 4479 if (this.destroyed) { 4480 this._readyCapability.reject(new Error("Worker was destroyed")); 4481 return; 4482 } 4483 const port = new LoopbackPort(); 4484 this._port = port;
4485 const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; 4486 const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); 4487 WorkerMessageHandler.setup(workerHandler, port); 4488 const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); 4489 this._messageHandler = messageHandler; 4490 this._readyCapability.resolve(); 4491 messageHandler.send("configure", { 4492 verbosity: this.verbosity 4493 }); 4494 }).catch(reason => { 4495 this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); 4496 }); 4497 } 4498 destroy() { 4499 this.destroyed = true; 4500 if (this._webWorker) { 4501 this._webWorker.terminate(); 4502 this._webWorker = null; 4503 } 4504 PDFWorker.#workerPorts?.delete(this._port); 4505 this._port = null; 4506 if (this._messageHandler) { 4507 this._messageHandler.destroy(); 4508 this._messageHandler = null; 4509 } 4510 } 4511 static fromPort(params) { 4512 if (!params?.port) { 4513 throw new Error("PDFWorker.fromPort - invalid method signature."); 4514 } 4515 const cachedPort = this.#workerPorts?.get(params.port); 4516 if (cachedPort) { 4517 if (cachedPort._pendingDestroy) { 4518 throw new Error("PDFWorker.fromPort - the worker is being destroyed.\n" + "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."); 4519 } 4520 return cachedPort; 4521 } 4522 return new PDFWorker(params); 4523 } 4524 static get workerSrc() { 4525 if (_worker_options.GlobalWorkerOptions.workerSrc) { 4526 return _worker_options.GlobalWorkerOptions.workerSrc; 4527 } 4528 if (PDFWorkerUtil.fallbackWorkerSrc !== null) { 4529 if (!_util.isNodeJS) { 4530 (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); 4531 } 4532 return PDFWorkerUtil.fallbackWorkerSrc; 4533 } 4534 throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); 4535 } 4536 static get _mainThreadWorkerMessageHandler() { 4537 try { 4538 return globalThis.pdfjsWorker?.WorkerMessageHandler || null; 4539 } catch { 4540 return null; 4541 } 4542 } 4543 static get _setupFakeWorkerGlobal() { 4544 const loader = async () => { 4545 const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; 4546 if (mainWorkerMessageHandler) { 4547 return mainWorkerMessageHandler; 4548 } 4549 if (_util.isNodeJS && typeof require === "function") { 4550 const worker = eval("require")(this.workerSrc); 4551 return worker.WorkerMessageHandler; 4552 } 4553 await (0, _display_utils.loadScript)(this.workerSrc); 4554 return window.pdfjsWorker.WorkerMessageHandler; 4555 }; 4556 return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); 4557 } 4558} 4559exports.PDFWorker = PDFWorker; 4560class WorkerTransport { 4561 #methodPromises = new Map(); 4562 #pageCache = new Map(); 4563 #pagePromises = new Map(); 4564 #passwordCapability = null; 4565 constructor(messageHandler, loadingTask, networkStream, params, factory) { 4566 this.messageHandler = messageHandler; 4567 this.loadingTask = loadingTask; 4568 this.commonObjs = new PDFObjects(); 4569 this.fontLoader = new _font_loader.FontLoader({ 4570 ownerDocument: params.ownerDocument, 4571 styleElement: params.styleElement 4572 }); 4573 this._params = params; 4574 this.canvasFactory = factory.canvasFactory; 4575 this.filterFactory = factory.filterFactory; 4576 this.cMapReaderFactory = factory.cMapReaderFactory; 4577 this.standardFontDataFactory = factory.standardFontDataFactory; 4578 this.destroyed = false; 4579 this.destroyCapability = null; 4580 this._networkStream = networkStream; 4581 this._fullReader = null; 4582 this._lastProgress = null; 4583 this.downloadInfoCapability = new _util.PromiseCapability(); 4584 this.setupMessageHandler(); 4585 } 4586 #cacheSimpleMethod(name) { 4587 let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 4588 const cachedPromise = this.#methodPromises.get(name); 4589 if (cachedPromise) { 4590 return cachedPromise; 4591 } 4592 const promise = this.messageHandler.sendWithPromise(name, data); 4593 this.#methodPromises.set(name, promise); 4594 return promise; 4595 } 4596 get annotationStorage() { 4597 return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); 4598 }
4599 getRenderingIntent(intent) { 4600 let annotationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _util.AnnotationMode.ENABLE; 4601 let printAnnotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 4602 let isOpList = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; 4603 let renderingIntent = _util.RenderingIntentFlag.DISPLAY; 4604 let annotationStorageSerializable = _annotation_storage.SerializableEmpty; 4605 switch (intent) { 4606 case "any": 4607 renderingIntent = _util.RenderingIntentFlag.ANY; 4608 break; 4609 case "display": 4610 break; 4611 case "print": 4612 renderingIntent = _util.RenderingIntentFlag.PRINT; 4613 break; 4614 default: 4615 (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); 4616 } 4617 switch (annotationMode) { 4618 case _util.AnnotationMode.DISABLE: 4619 renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; 4620 break; 4621 case _util.AnnotationMode.ENABLE: 4622 break; 4623 case _util.AnnotationMode.ENABLE_FORMS: 4624 renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; 4625 break; 4626 case _util.AnnotationMode.ENABLE_STORAGE: 4627 renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; 4628 const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; 4629 annotationStorageSerializable = annotationStorage.serializable; 4630 break; 4631 default: 4632 (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); 4633 } 4634 if (isOpList) { 4635 renderingIntent += _util.RenderingIntentFlag.OPLIST; 4636 } 4637 return { 4638 renderingIntent, 4639 cacheKey: `${renderingIntent}_${annotationStorageSerializable.hash}`, 4640 annotationStorageSerializable 4641 }; 4642 } 4643 destroy() { 4644 if (this.destroyCapability) { 4645 return this.destroyCapability.promise; 4646 } 4647 this.destroyed = true; 4648 this.destroyCapability = new _util.PromiseCapability(); 4649 this.#passwordCapability?.reject(new Error("Worker was destroyed during onPassword callback")); 4650 const waitOn = []; 4651 for (const page of this.#pageCache.values()) { 4652 waitOn.push(page._destroy()); 4653 } 4654 this.#pageCache.clear(); 4655 this.#pagePromises.clear(); 4656 if (this.hasOwnProperty("annotationStorage")) { 4657 this.annotationStorage.resetModified(); 4658 } 4659 const terminated = this.messageHandler.sendWithPromise("Terminate", null); 4660 waitOn.push(terminated); 4661 Promise.all(waitOn).then(() => { 4662 this.commonObjs.clear(); 4663 this.fontLoader.clear(); 4664 this.#methodPromises.clear(); 4665 this.filterFactory.destroy(); 4666 this._networkStream?.cancelAllRequests(new _util.AbortException("Worker was terminated.")); 4667 if (this.messageHandler) { 4668 this.messageHandler.destroy(); 4669 this.messageHandler = null; 4670 } 4671 this.destroyCapability.resolve(); 4672 }, this.destroyCapability.reject); 4673 return this.destroyCapability.promise; 4674 } 4675 setupMessageHandler() { 4676 const { 4677 messageHandler, 4678 loadingTask 4679 } = this; 4680 messageHandler.on("GetReader", (data, sink) => { 4681 (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); 4682 this._fullReader = this._networkStream.getFullReader(); 4683 this._fullReader.onProgress = evt => { 4684 this._lastProgress = { 4685 loaded: evt.loaded, 4686 total: evt.total 4687 }; 4688 }; 4689 sink.onPull = () => { 4690 this._fullReader.read().then(function (_ref8) { 4691 let { 4692 value, 4693 done 4694 } = _ref8; 4695 if (done) { 4696 sink.close(); 4697 return; 4698 } 4699 (0, _util.assert)(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); 4700 sink.enqueue(new Uint8Array(value), 1, [value]); 4701 }).catch(reason => { 4702 sink.error(reason); 4703 }); 4704 }; 4705 sink.onCancel = reason => { 4706 this._fullReader.cancel(reason); 4707 sink.ready.catch(readyReason => { 4708 if (this.destroyed) { 4709 return; 4710 } 4711 throw readyReason; 4712 }); 4713 }; 4714 }); 4715 messageHandler.on("ReaderHeadersReady", data => { 4716 const headersCapability = new _util.PromiseCapability(); 4717 const fullReader = this._fullReader; 4718 fullReader.headersReady.then(() => { 4719 if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { 4720 if (this._lastProgress) { 4721 loadingTask.onProgress?.(this._lastProgress); 4722 } 4723 fullReader.onProgress = evt => { 4724 loadingTask.onProgress?.({ 4725 loaded: evt.loaded, 4726 total: evt.total 4727 }); 4728 }; 4729 } 4730 headersCapability.resolve({ 4731 isStreamingSupported: fullReader.isStreamingSupported, 4732 isRangeSupported: fullReader.isRangeSupported, 4733 contentLength: fullReader.contentLength 4734 }); 4735 }, headersCapability.reject); 4736 return headersCapability.promise; 4737 }); 4738 messageHandler.on("GetRangeReader", (data, sink) => { 4739 (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); 4740 const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); 4741 if (!rangeReader) { 4742 sink.close(); 4743 return; 4744 } 4745 sink.onPull = () => { 4746 rangeReader.read().then(function (_ref9) { 4747 let { 4748 value, 4749 done 4750 } = _ref9; 4751 if (done) { 4752 sink.close(); 4753 return; 4754 } 4755 (0, _util.assert)(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); 4756 sink.enqueue(new Uint8Array(value), 1, [value]); 4757 }).catch(reason => { 4758 sink.error(reason); 4759 }); 4760 }; 4761 sink.onCancel = reason => { 4762 rangeReader.cancel(reason); 4763 sink.ready.catch(readyReason => { 4764 if (this.destroyed) { 4765 return; 4766 } 4767 throw readyReason; 4768 }); 4769 }; 4770 }); 4771 messageHandler.on("GetDoc", _ref10 => { 4772 let { 4773 pdfInfo 4774 } = _ref10; 4775 this._numPages = pdfInfo.numPages; 4776 this._htmlForXfa = pdfInfo.htmlForXfa; 4777 delete pdfInfo.htmlForXfa; 4778 loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); 4779 }); 4780 messageHandler.on("DocException", function (ex) { 4781 let reason; 4782 switch (ex.name) { 4783 case "PasswordException": 4784 reason = new _util.PasswordException(ex.message, ex.code); 4785 break; 4786 case "InvalidPDFException": 4787 reason = new _util.InvalidPDFException(ex.message); 4788 break; 4789 case "MissingPDFException": 4790 reason = new _util.MissingPDFException(ex.message); 4791 break; 4792 case "UnexpectedResponseException": 4793 reason = new _util.UnexpectedResponseException(ex.message, ex.status); 4794 break; 4795 case "UnknownErrorException": 4796 reason = new _util.UnknownErrorException(ex.message, ex.details); 4797 break; 4798 default: 4799 (0, _util.unreachable)("DocException - expected a valid Error."); 4800 } 4801 loadingTask._capability.reject(reason); 4802 }); 4803 messageHandler.on("PasswordRequest", exception => { 4804 this.#passwordCapability = new _util.PromiseCapability(); 4805 if (loadingTask.onPassword) { 4806 const updatePassword = password => { 4807 if (password instanceof Error) { 4808 this.#passwordCapability.reject(password); 4809 } else { 4810 this.#passwordCapability.resolve({ 4811 password 4812 }); 4813 } 4814 }; 4815 try { 4816 loadingTask.onPassword(updatePassword, exception.code); 4817 } catch (ex) { 4818 this.#passwordCapability.reject(ex); 4819 } 4820 } else { 4821 this.#passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); 4822 } 4823 return this.#passwordCapability.promise; 4824 }); 4825 messageHandler.on("DataLoaded", data => { 4826 loadingTask.onProgress?.({ 4827 loaded: data.length, 4828 total: data.length 4829 }); 4830 this.downloadInfoCapability.resolve(data); 4831 }); 4832 messageHandler.on("StartRenderPage", data => { 4833 if (this.destroyed) { 4834 return; 4835 } 4836 const page = this.#pageCache.get(data.pageIndex); 4837 page._startRenderPage(data.transparency, data.cacheKey); 4838 }); 4839 messageHandler.on("commonobj", _ref11 => { 4840 let [id, type, exportedData] = _ref11; 4841 if (this.destroyed) { 4842 return; 4843 } 4844 if (this.commonObjs.has(id)) { 4845 return; 4846 } 4847 switch (type) { 4848 case "Font": 4849 const params = this._params; 4850 if ("error" in exportedData) { 4851 const exportedError = exportedData.error; 4852 (0, _util.warn)(`Error during font loading: ${exportedError}`); 4853 this.commonObjs.resolve(id, exportedError); 4854 break; 4855 } 4856 const inspectFont = params.pdfBug && globalThis.FontInspector?.enabled ? (font, url) => globalThis.FontInspector.fontAdded(font, url) : null; 4857 const font = new _font_loader.FontFaceObject(exportedData, { 4858 isEvalSupported: params.isEvalSupported, 4859 disableFontFace: params.disableFontFace, 4860 ignoreErrors: params.ignoreErrors, 4861 inspectFont 4862 });
4863 this.fontLoader.bind(font).catch(reason => { 4864 return messageHandler.sendWithPromise("FontFallback", { 4865 id 4866 }); 4867 }).finally(() => { 4868 if (!params.fontExtraProperties && font.data) { 4869 font.data = null; 4870 } 4871 this.commonObjs.resolve(id, font); 4872 }); 4873 break; 4874 case "FontPath": 4875 case "Image": 4876 case "Pattern": 4877 this.commonObjs.resolve(id, exportedData); 4878 break; 4879 default: 4880 throw new Error(`Got unknown common object type ${type}`); 4881 } 4882 }); 4883 messageHandler.on("obj", _ref12 => { 4884 let [id, pageIndex, type, imageData] = _ref12; 4885 if (this.destroyed) { 4886 return; 4887 } 4888 const pageProxy = this.#pageCache.get(pageIndex); 4889 if (pageProxy.objs.has(id)) { 4890 return; 4891 } 4892 switch (type) { 4893 case "Image": 4894 pageProxy.objs.resolve(id, imageData); 4895 if (imageData) { 4896 let length; 4897 if (imageData.bitmap) { 4898 const { 4899 width, 4900 height 4901 } = imageData; 4902 length = width * height * 4; 4903 } else { 4904 length = imageData.data?.length || 0; 4905 } 4906 if (length > _util.MAX_IMAGE_SIZE_TO_CACHE) { 4907 pageProxy._maybeCleanupAfterRender = true; 4908 } 4909 } 4910 break; 4911 case "Pattern": 4912 pageProxy.objs.resolve(id, imageData); 4913 break; 4914 default: 4915 throw new Error(`Got unknown object type ${type}`); 4916 } 4917 }); 4918 messageHandler.on("DocProgress", data => { 4919 if (this.destroyed) { 4920 return; 4921 } 4922 loadingTask.onProgress?.({ 4923 loaded: data.loaded, 4924 total: data.total 4925 }); 4926 }); 4927 messageHandler.on("FetchBuiltInCMap", data => { 4928 if (this.destroyed) { 4929 return Promise.reject(new Error("Worker was destroyed.")); 4930 } 4931 if (!this.cMapReaderFactory) { 4932 return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); 4933 } 4934 return this.cMapReaderFactory.fetch(data); 4935 }); 4936 messageHandler.on("FetchStandardFontData", data => { 4937 if (this.destroyed) { 4938 return Promise.reject(new Error("Worker was destroyed.")); 4939 } 4940 if (!this.standardFontDataFactory) { 4941 return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); 4942 } 4943 return this.standardFontDataFactory.fetch(data); 4944 }); 4945 } 4946 getData() { 4947 return this.messageHandler.sendWithPromise("GetData", null); 4948 } 4949 saveDocument() { 4950 if (this.annotationStorage.size <= 0) { 4951 (0, _util.warn)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); 4952 } 4953 const { 4954 map, 4955 transfers 4956 } = this.annotationStorage.serializable; 4957 return this.messageHandler.sendWithPromise("SaveDocument", { 4958 isPureXfa: !!this._htmlForXfa, 4959 numPages: this._numPages, 4960 annotationStorage: map, 4961 filename: this._fullReader?.filename ?? null 4962 }, transfers).finally(() => { 4963 this.annotationStorage.resetModified(); 4964 }); 4965 } 4966 getPage(pageNumber) { 4967 if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { 4968 return Promise.reject(new Error("Invalid page request.")); 4969 } 4970 const pageIndex = pageNumber - 1, 4971 cachedPromise = this.#pagePromises.get(pageIndex); 4972 if (cachedPromise) { 4973 return cachedPromise; 4974 } 4975 const promise = this.messageHandler.sendWithPromise("GetPage", { 4976 pageIndex 4977 }).then(pageInfo => { 4978 if (this.destroyed) { 4979 throw new Error("Transport destroyed"); 4980 } 4981 const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); 4982 this.#pageCache.set(pageIndex, page); 4983 return page; 4984 }); 4985 this.#pagePromises.set(pageIndex, promise); 4986 return promise; 4987 } 4988 getPageIndex(ref) { 4989 if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { 4990 return Promise.reject(new Error("Invalid pageIndex request.")); 4991 }
4992 return this.messageHandler.sendWithPromise("GetPageIndex", { 4993 num: ref.num, 4994 gen: ref.gen 4995 }); 4996 } 4997 getAnnotations(pageIndex, intent) { 4998 return this.messageHandler.sendWithPromise("GetAnnotations", { 4999 pageIndex, 5000 intent 5001 }); 5002 } 5003 getFieldObjects() { 5004 return this.#cacheSimpleMethod("GetFieldObjects"); 5005 } 5006 hasJSActions() { 5007 return this.#cacheSimpleMethod("HasJSActions"); 5008 } 5009 getCalculationOrderIds() { 5010 return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); 5011 } 5012 getDestinations() { 5013 return this.messageHandler.sendWithPromise("GetDestinations", null); 5014 } 5015 getDestination(id) { 5016 if (typeof id !== "string") { 5017 return Promise.reject(new Error("Invalid destination request.")); 5018 } 5019 return this.messageHandler.sendWithPromise("GetDestination", { 5020 id 5021 }); 5022 } 5023 getPageLabels() { 5024 return this.messageHandler.sendWithPromise("GetPageLabels", null); 5025 } 5026 getPageLayout() { 5027 return this.messageHandler.sendWithPromise("GetPageLayout", null); 5028 } 5029 getPageMode() { 5030 return this.messageHandler.sendWithPromise("GetPageMode", null); 5031 } 5032 getViewerPreferences() { 5033 return this.messageHandler.sendWithPromise("GetViewerPreferences", null); 5034 } 5035 getOpenAction() { 5036 return this.messageHandler.sendWithPromise("GetOpenAction", null); 5037 } 5038 getAttachments() { 5039 return this.messageHandler.sendWithPromise("GetAttachments", null); 5040 } 5041 getDocJSActions() { 5042 return this.#cacheSimpleMethod("GetDocJSActions"); 5043 } 5044 getPageJSActions(pageIndex) { 5045 return this.messageHandler.sendWithPromise("GetPageJSActions", { 5046 pageIndex 5047 }); 5048 } 5049 getStructTree(pageIndex) { 5050 return this.messageHandler.sendWithPromise("GetStructTree", { 5051 pageIndex 5052 }); 5053 } 5054 getOutline() { 5055 return this.messageHandler.sendWithPromise("GetOutline", null); 5056 } 5057 getOptionalContentConfig() { 5058 return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { 5059 return new _optional_content_config.OptionalContentConfig(results); 5060 }); 5061 } 5062 getPermissions() { 5063 return this.messageHandler.sendWithPromise("GetPermissions", null); 5064 } 5065 getMetadata() { 5066 const name = "GetMetadata", 5067 cachedPromise = this.#methodPromises.get(name); 5068 if (cachedPromise) { 5069 return cachedPromise; 5070 } 5071 const promise = this.messageHandler.sendWithPromise(name, null).then(results => { 5072 return { 5073 info: results[0], 5074 metadata: results[1] ? new _metadata.Metadata(results[1]) : null, 5075 contentDispositionFilename: this._fullReader?.filename ?? null, 5076 contentLength: this._fullReader?.contentLength ?? null 5077 }; 5078 }); 5079 this.#methodPromises.set(name, promise); 5080 return promise; 5081 } 5082 getMarkInfo() { 5083 return this.messageHandler.sendWithPromise("GetMarkInfo", null); 5084 } 5085 async startCleanup() { 5086 let keepLoadedFonts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 5087 if (this.destroyed) { 5088 return; 5089 } 5090 await this.messageHandler.sendWithPromise("Cleanup", null); 5091 for (const page of this.#pageCache.values()) { 5092 const cleanupSuccessful = page.cleanup(); 5093 if (!cleanupSuccessful) { 5094 throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); 5095 } 5096 } 5097 this.commonObjs.clear(); 5098 if (!keepLoadedFonts) { 5099 this.fontLoader.clear(); 5100 } 5101 this.#methodPromises.clear(); 5102 this.filterFactory.destroy(true); 5103 } 5104 get loadingParams() { 5105 const { 5106 disableAutoFetch, 5107 enableXfa 5108 } = this._params; 5109 return (0, _util.shadow)(this, "loadingParams", { 5110 disableAutoFetch, 5111 enableXfa 5112 }); 5113 } 5114} 5115class PDFObjects { 5116 #objs = Object.create(null); 5117 #ensureObj(objId) { 5118 return this.#objs[objId] ||= { 5119 capability: new _util.PromiseCapability(), 5120 data: null 5121 }; 5122 } 5123 get(objId) {
5124 let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 5125 if (callback) { 5126 const obj = this.#ensureObj(objId); 5127 obj.capability.promise.then(() => callback(obj.data)); 5128 return null; 5129 } 5130 const obj = this.#objs[objId]; 5131 if (!obj?.capability.settled) { 5132 throw new Error(`Requesting object that isn't resolved yet ${objId}.`); 5133 } 5134 return obj.data; 5135 } 5136 has(objId) { 5137 const obj = this.#objs[objId]; 5138 return obj?.capability.settled || false; 5139 } 5140 resolve(objId) { 5141 let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 5142 const obj = this.#ensureObj(objId); 5143 obj.data = data; 5144 obj.capability.resolve(); 5145 } 5146 clear() { 5147 for (const objId in this.#objs) { 5148 const { 5149 data 5150 } = this.#objs[objId]; 5151 data?.bitmap?.close(); 5152 } 5153 this.#objs = Object.create(null); 5154 } 5155} 5156class RenderTask { 5157 #internalRenderTask = null; 5158 constructor(internalRenderTask) { 5159 this.#internalRenderTask = internalRenderTask; 5160 this.onContinue = null; 5161 } 5162 get promise() { 5163 return this.#internalRenderTask.capability.promise; 5164 } 5165 cancel() { 5166 let extraDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 5167 this.#internalRenderTask.cancel(null, extraDelay); 5168 } 5169 get separateAnnots() { 5170 const { 5171 separateAnnots 5172 } = this.#internalRenderTask.operatorList; 5173 if (!separateAnnots) { 5174 return false; 5175 } 5176 const { 5177 annotationCanvasMap 5178 } = this.#internalRenderTask; 5179 return separateAnnots.form || separateAnnots.canvas && annotationCanvasMap?.size > 0; 5180 } 5181} 5182exports.RenderTask = RenderTask; 5183class InternalRenderTask { 5184 static #canvasInUse = new WeakSet(); 5185 constructor(_ref13) { 5186 let { 5187 callback, 5188 params, 5189 objs, 5190 commonObjs, 5191 annotationCanvasMap, 5192 operatorList, 5193 pageIndex, 5194 canvasFactory, 5195 filterFactory, 5196 useRequestAnimationFrame = false, 5197 pdfBug = false, 5198 pageColors = null 5199 } = _ref13; 5200 this.callback = callback; 5201 this.params = params; 5202 this.objs = objs; 5203 this.commonObjs = commonObjs; 5204 this.annotationCanvasMap = annotationCanvasMap; 5205 this.operatorListIdx = null; 5206 this.operatorList = operatorList; 5207 this._pageIndex = pageIndex; 5208 this.canvasFactory = canvasFactory; 5209 this.filterFactory = filterFactory; 5210 this._pdfBug = pdfBug; 5211 this.pageColors = pageColors; 5212 this.running = false; 5213 this.graphicsReadyCallback = null; 5214 this.graphicsReady = false; 5215 this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; 5216 this.cancelled = false; 5217 this.capability = new _util.PromiseCapability(); 5218 this.task = new RenderTask(this); 5219 this._cancelBound = this.cancel.bind(this); 5220 this._continueBound = this._continue.bind(this); 5221 this._scheduleNextBound = this._scheduleNext.bind(this); 5222 this._nextBound = this._next.bind(this); 5223 this._canvas = params.canvasContext.canvas; 5224 } 5225 get completed() { 5226 return this.capability.promise.catch(function () {}); 5227 } 5228 initializeGraphics(_ref14) { 5229 let { 5230 transparency = false, 5231 optionalContentConfig 5232 } = _ref14; 5233 if (this.cancelled) { 5234 return; 5235 } 5236 if (this._canvas) { 5237 if (InternalRenderTask.#canvasInUse.has(this._canvas)) { 5238 throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); 5239 } 5240 InternalRenderTask.#canvasInUse.add(this._canvas); 5241 } 5242 if (this._pdfBug && globalThis.StepperManager?.enabled) { 5243 this.stepper = globalThis.StepperManager.create(this._pageIndex); 5244 this.stepper.init(this.operatorList); 5245 this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); 5246 } 5247 const { 5248 canvasContext, 5249 viewport, 5250 transform, 5251 background 5252 } = this.params; 5253 this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { 5254 optionalContentConfig 5255 }, this.annotationCanvasMap, this.pageColors); 5256 this.gfx.beginDrawing({ 5257 transform, 5258 viewport, 5259 transparency, 5260 background 5261 }); 5262 this.operatorListIdx = 0; 5263 this.graphicsReady = true; 5264 this.graphicsReadyCallback?.(); 5265 } 5266 cancel() { 5267 let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 5268 let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 5269 this.running = false;
5270 this.cancelled = true; 5271 this.gfx?.endDrawing(); 5272 InternalRenderTask.#canvasInUse.delete(this._canvas); 5273 this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); 5274 } 5275 operatorListChanged() { 5276 if (!this.graphicsReady) { 5277 this.graphicsReadyCallback ||= this._continueBound; 5278 return; 5279 } 5280 this.stepper?.updateOperatorList(this.operatorList); 5281 if (this.running) { 5282 return; 5283 } 5284 this._continue(); 5285 } 5286 _continue() { 5287 this.running = true; 5288 if (this.cancelled) { 5289 return; 5290 } 5291 if (this.task.onContinue) { 5292 this.task.onContinue(this._scheduleNextBound); 5293 } else { 5294 this._scheduleNext(); 5295 } 5296 } 5297 _scheduleNext() { 5298 if (this._useRequestAnimationFrame) { 5299 window.requestAnimationFrame(() => { 5300 this._nextBound().catch(this._cancelBound); 5301 }); 5302 } else { 5303 Promise.resolve().then(this._nextBound).catch(this._cancelBound); 5304 } 5305 } 5306 async _next() { 5307 if (this.cancelled) { 5308 return; 5309 } 5310 this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); 5311 if (this.operatorListIdx === this.operatorList.argsArray.length) { 5312 this.running = false; 5313 if (this.operatorList.lastChunk) { 5314 this.gfx.endDrawing(); 5315 InternalRenderTask.#canvasInUse.delete(this._canvas); 5316 this.callback(); 5317 } 5318 } 5319 } 5320} 5321const version = '3.11.174'; 5322exports.version = version; 5323const build = 'ce8716743'; 5324exports.build = build; 5325 5326/***/ }), 5327/* 125 */ 5328/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5329 5330 5331var $ = __w_pdfjs_require__(3); 5332var difference = __w_pdfjs_require__(126); 5333var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5334$({ 5335 target: 'Set', 5336 proto: true, 5337 real: true, 5338 forced: !setMethodAcceptSetLike('difference') 5339}, { difference: difference }); 5340 5341/***/ }), 5342/* 126 */ 5343/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5344 5345 5346var aSet = __w_pdfjs_require__(127); 5347var SetHelpers = __w_pdfjs_require__(128); 5348var clone = __w_pdfjs_require__(129); 5349var size = __w_pdfjs_require__(132); 5350var getSetRecord = __w_pdfjs_require__(133); 5351var iterateSet = __w_pdfjs_require__(130); 5352var iterateSimple = __w_pdfjs_require__(131); 5353var has = SetHelpers.has; 5354var remove = SetHelpers.remove; 5355module.exports = function difference(other) { 5356 var O = aSet(this); 5357 var otherRec = getSetRecord(other); 5358 var result = clone(O); 5359 if (size(O) <= otherRec.size) 5360 iterateSet(O, function (e) { 5361 if (otherRec.includes(e)) 5362 remove(result, e); 5363 }); 5364 else 5365 iterateSimple(otherRec.getIterator(), function (e) { 5366 if (has(O, e)) 5367 remove(result, e); 5368 }); 5369 return result; 5370}; 5371 5372/***/ }), 5373/* 127 */ 5374/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5375 5376 5377var has = (__w_pdfjs_require__(128).has); 5378module.exports = function (it) { 5379 has(it); 5380 return it; 5381}; 5382 5383/***/ }), 5384/* 128 */ 5385/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5386 5387 5388var uncurryThis = __w_pdfjs_require__(14); 5389var SetPrototype = Set.prototype; 5390module.exports = { 5391 Set: Set, 5392 add: uncurryThis(SetPrototype.add), 5393 has: uncurryThis(SetPrototype.has), 5394 remove: uncurryThis(SetPrototype['delete']), 5395 proto: SetPrototype 5396}; 5397 5398/***/ }), 5399/* 129 */ 5400/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5401 5402 5403var SetHelpers = __w_pdfjs_require__(128); 5404var iterate = __w_pdfjs_require__(130); 5405var Set = SetHelpers.Set; 5406var add = SetHelpers.add; 5407module.exports = function (set) { 5408 var result = new Set(); 5409 iterate(set, function (it) { 5410 add(result, it); 5411 }); 5412 return result; 5413}; 5414 5415/***/ }), 5416/* 130 */ 5417/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5418 5419 5420var uncurryThis = __w_pdfjs_require__(14); 5421var iterateSimple = __w_pdfjs_require__(131); 5422var SetHelpers = __w_pdfjs_require__(128); 5423var Set = SetHelpers.Set; 5424var SetPrototype = SetHelpers.proto; 5425var forEach = uncurryThis(SetPrototype.forEach); 5426var keys = uncurryThis(SetPrototype.keys); 5427var next = keys(new Set()).next; 5428module.exports = function (set, fn, interruptible) { 5429 return interruptible ? iterateSimple({ 5430 iterator: keys(set), 5431 next: next 5432 }, fn) : forEach(set, fn); 5433}; 5434 5435/***/ }), 5436/* 131 */ 5437/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5438 5439 5440var call = __w_pdfjs_require__(8); 5441module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) { 5442 var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator; 5443 var next = record.next; 5444 var step, result; 5445 while (!(step = call(next, iterator)).done) { 5446 result = fn(step.value); 5447 if (result !== undefined) 5448 return result; 5449 } 5450}; 5451 5452/***/ }), 5453/* 132 */ 5454/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5455 5456 5457var uncurryThisAccessor = __w_pdfjs_require__(72); 5458var SetHelpers = __w_pdfjs_require__(128); 5459module.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) { 5460 return set.size; 5461}; 5462 5463/***/ }), 5464/* 133 */ 5465/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5466 5467 5468var aCallable = __w_pdfjs_require__(31); 5469var anObject = __w_pdfjs_require__(47); 5470var call = __w_pdfjs_require__(8); 5471var toIntegerOrInfinity = __w_pdfjs_require__(62); 5472var getIteratorDirect = __w_pdfjs_require__(134); 5473var INVALID_SIZE = 'Invalid size'; 5474var $RangeError = RangeError; 5475var $TypeError = TypeError; 5476var max = Math.max; 5477var SetRecord = function (set, size, has, keys) { 5478 this.set = set; 5479 this.size = size; 5480 this.has = has; 5481 this.keys = keys; 5482}; 5483SetRecord.prototype = { 5484 getIterator: function () { 5485 return getIteratorDirect(anObject(call(this.keys, this.set))); 5486 }, 5487 includes: function (it) { 5488 return call(this.has, this.set, it); 5489 } 5490}; 5491module.exports = function (obj) { 5492 anObject(obj); 5493 var numSize = +obj.size; 5494 if (numSize !== numSize) 5495 throw $TypeError(INVALID_SIZE); 5496 var intSize = toIntegerOrInfinity(numSize); 5497 if (intSize < 0) 5498 throw $RangeError(INVALID_SIZE);
vendor: 4,821 bytes, lines 5499-5710
5499 return new SetRecord(obj, max(intSize, 0), aCallable(obj.has), aCallable(obj.keys)); 5500}; 5501 5502/***/ }), 5503/* 134 */ 5504/***/ ((module) => { 5505 5506 5507module.exports = function (obj) { 5508 return { 5509 iterator: obj, 5510 next: obj.next, 5511 done: false 5512 }; 5513}; 5514 5515/***/ }), 5516/* 135 */ 5517/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5518 5519 5520var getBuiltIn = __w_pdfjs_require__(24); 5521var createSetLike = function (size) { 5522 return { 5523 size: size, 5524 has: function () { 5525 return false; 5526 }, 5527 keys: function () { 5528 return { 5529 next: function () { 5530 return { done: true }; 5531 } 5532 }; 5533 } 5534 }; 5535}; 5536module.exports = function (name) { 5537 var Set = getBuiltIn('Set'); 5538 try { 5539 new Set()[name](createSetLike(0)); 5540 try { 5541 new Set()[name](createSetLike(-1)); 5542 return false; 5543 } catch (error2) { 5544 return true; 5545 } 5546 } catch (error) { 5547 return false; 5548 } 5549}; 5550 5551/***/ }), 5552/* 136 */ 5553/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5554 5555 5556var $ = __w_pdfjs_require__(3); 5557var fails = __w_pdfjs_require__(7); 5558var intersection = __w_pdfjs_require__(137); 5559var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5560var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () { 5561 return Array.from(new Set([ 5562 1, 5563 2, 5564 3 5565 ]).intersection(new Set([ 5566 3, 5567 2 5568 ]))) !== '3,2'; 5569}); 5570$({ 5571 target: 'Set', 5572 proto: true, 5573 real: true, 5574 forced: INCORRECT 5575}, { intersection: intersection }); 5576 5577/***/ }), 5578/* 137 */ 5579/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5580 5581 5582var aSet = __w_pdfjs_require__(127); 5583var SetHelpers = __w_pdfjs_require__(128); 5584var size = __w_pdfjs_require__(132); 5585var getSetRecord = __w_pdfjs_require__(133); 5586var iterateSet = __w_pdfjs_require__(130); 5587var iterateSimple = __w_pdfjs_require__(131); 5588var Set = SetHelpers.Set; 5589var add = SetHelpers.add; 5590var has = SetHelpers.has; 5591module.exports = function intersection(other) { 5592 var O = aSet(this); 5593 var otherRec = getSetRecord(other); 5594 var result = new Set(); 5595 if (size(O) > otherRec.size) { 5596 iterateSimple(otherRec.getIterator(), function (e) { 5597 if (has(O, e)) 5598 add(result, e); 5599 }); 5600 } else { 5601 iterateSet(O, function (e) { 5602 if (otherRec.includes(e)) 5603 add(result, e); 5604 }); 5605 } 5606 return result; 5607}; 5608 5609/***/ }), 5610/* 138 */ 5611/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5612 5613 5614var $ = __w_pdfjs_require__(3); 5615var isDisjointFrom = __w_pdfjs_require__(139); 5616var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5617$({ 5618 target: 'Set', 5619 proto: true, 5620 real: true, 5621 forced: !setMethodAcceptSetLike('isDisjointFrom') 5622}, { isDisjointFrom: isDisjointFrom }); 5623 5624/***/ }), 5625/* 139 */ 5626/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5627 5628 5629var aSet = __w_pdfjs_require__(127); 5630var has = (__w_pdfjs_require__(128).has); 5631var size = __w_pdfjs_require__(132); 5632var getSetRecord = __w_pdfjs_require__(133); 5633var iterateSet = __w_pdfjs_require__(130); 5634var iterateSimple = __w_pdfjs_require__(131); 5635var iteratorClose = __w_pdfjs_require__(140); 5636module.exports = function isDisjointFrom(other) { 5637 var O = aSet(this); 5638 var otherRec = getSetRecord(other); 5639 if (size(O) <= otherRec.size) 5640 return iterateSet(O, function (e) { 5641 if (otherRec.includes(e)) 5642 return false; 5643 }, true) !== false; 5644 var iterator = otherRec.getIterator(); 5645 return iterateSimple(iterator, function (e) { 5646 if (has(O, e)) 5647 return iteratorClose(iterator, 'normal', false); 5648 }) !== false; 5649}; 5650 5651/***/ }), 5652/* 140 */ 5653/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5654 5655 5656var call = __w_pdfjs_require__(8); 5657var anObject = __w_pdfjs_require__(47); 5658var getMethod = __w_pdfjs_require__(30); 5659module.exports = function (iterator, kind, value) { 5660 var innerResult, innerError; 5661 anObject(iterator); 5662 try { 5663 innerResult = getMethod(iterator, 'return'); 5664 if (!innerResult) { 5665 if (kind === 'throw') 5666 throw value; 5667 return value; 5668 } 5669 innerResult = call(innerResult, iterator); 5670 } catch (error) { 5671 innerError = true; 5672 innerResult = error; 5673 } 5674 if (kind === 'throw') 5675 throw value; 5676 if (innerError) 5677 throw innerResult; 5678 anObject(innerResult); 5679 return value; 5680}; 5681 5682/***/ }), 5683/* 141 */ 5684/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5685 5686 5687var $ = __w_pdfjs_require__(3); 5688var isSubsetOf = __w_pdfjs_require__(142); 5689var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5690$({ 5691 target: 'Set', 5692 proto: true, 5693 real: true, 5694 forced: !setMethodAcceptSetLike('isSubsetOf') 5695}, { isSubsetOf: isSubsetOf }); 5696 5697/***/ }), 5698/* 142 */ 5699/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5700 5701 5702var aSet = __w_pdfjs_require__(127); 5703var size = __w_pdfjs_require__(132); 5704var iterate = __w_pdfjs_require__(130); 5705var getSetRecord = __w_pdfjs_require__(133); 5706module.exports = function isSubsetOf(other) { 5707 var O = aSet(this); 5708 var otherRec = getSetRecord(other); 5709 if (size(O) > otherRec.size) 5710 return false;
vendor: 6,294 bytes, lines 5711-5919
5711 return iterate(O, function (e) { 5712 if (!otherRec.includes(e)) 5713 return false; 5714 }, true) !== false; 5715}; 5716 5717/***/ }), 5718/* 143 */ 5719/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5720 5721 5722var $ = __w_pdfjs_require__(3); 5723var isSupersetOf = __w_pdfjs_require__(144); 5724var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5725$({ 5726 target: 'Set', 5727 proto: true, 5728 real: true, 5729 forced: !setMethodAcceptSetLike('isSupersetOf') 5730}, { isSupersetOf: isSupersetOf }); 5731 5732/***/ }), 5733/* 144 */ 5734/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5735 5736 5737var aSet = __w_pdfjs_require__(127); 5738var has = (__w_pdfjs_require__(128).has); 5739var size = __w_pdfjs_require__(132); 5740var getSetRecord = __w_pdfjs_require__(133); 5741var iterateSimple = __w_pdfjs_require__(131); 5742var iteratorClose = __w_pdfjs_require__(140); 5743module.exports = function isSupersetOf(other) { 5744 var O = aSet(this); 5745 var otherRec = getSetRecord(other); 5746 if (size(O) < otherRec.size) 5747 return false; 5748 var iterator = otherRec.getIterator(); 5749 return iterateSimple(iterator, function (e) { 5750 if (!has(O, e)) 5751 return iteratorClose(iterator, 'normal', false); 5752 }) !== false; 5753}; 5754 5755/***/ }), 5756/* 145 */ 5757/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5758 5759 5760var $ = __w_pdfjs_require__(3); 5761var symmetricDifference = __w_pdfjs_require__(146); 5762var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5763$({ 5764 target: 'Set', 5765 proto: true, 5766 real: true, 5767 forced: !setMethodAcceptSetLike('symmetricDifference') 5768}, { symmetricDifference: symmetricDifference }); 5769 5770/***/ }), 5771/* 146 */ 5772/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5773 5774 5775var aSet = __w_pdfjs_require__(127); 5776var SetHelpers = __w_pdfjs_require__(128); 5777var clone = __w_pdfjs_require__(129); 5778var getSetRecord = __w_pdfjs_require__(133); 5779var iterateSimple = __w_pdfjs_require__(131); 5780var add = SetHelpers.add; 5781var has = SetHelpers.has; 5782var remove = SetHelpers.remove; 5783module.exports = function symmetricDifference(other) { 5784 var O = aSet(this); 5785 var keysIter = getSetRecord(other).getIterator(); 5786 var result = clone(O); 5787 iterateSimple(keysIter, function (e) { 5788 if (has(O, e)) 5789 remove(result, e); 5790 else 5791 add(result, e); 5792 }); 5793 return result; 5794}; 5795 5796/***/ }), 5797/* 147 */ 5798/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5799 5800 5801var $ = __w_pdfjs_require__(3); 5802var union = __w_pdfjs_require__(148); 5803var setMethodAcceptSetLike = __w_pdfjs_require__(135); 5804$({ 5805 target: 'Set', 5806 proto: true, 5807 real: true, 5808 forced: !setMethodAcceptSetLike('union') 5809}, { union: union }); 5810 5811/***/ }), 5812/* 148 */ 5813/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5814 5815 5816var aSet = __w_pdfjs_require__(127); 5817var add = (__w_pdfjs_require__(128).add); 5818var clone = __w_pdfjs_require__(129); 5819var getSetRecord = __w_pdfjs_require__(133); 5820var iterateSimple = __w_pdfjs_require__(131); 5821module.exports = function union(other) { 5822 var O = aSet(this); 5823 var keysIter = getSetRecord(other).getIterator(); 5824 var result = clone(O); 5825 iterateSimple(keysIter, function (it) { 5826 add(result, it); 5827 }); 5828 return result; 5829}; 5830 5831/***/ }), 5832/* 149 */ 5833/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 5834 5835 5836var $ = __w_pdfjs_require__(3); 5837var global = __w_pdfjs_require__(4); 5838var getBuiltIn = __w_pdfjs_require__(24); 5839var createPropertyDescriptor = __w_pdfjs_require__(11); 5840var defineProperty = (__w_pdfjs_require__(45).f); 5841var hasOwn = __w_pdfjs_require__(39); 5842var anInstance = __w_pdfjs_require__(150); 5843var inheritIfRequired = __w_pdfjs_require__(75); 5844var normalizeStringArgument = __w_pdfjs_require__(76); 5845var DOMExceptionConstants = __w_pdfjs_require__(151); 5846var clearErrorStack = __w_pdfjs_require__(82); 5847var DESCRIPTORS = __w_pdfjs_require__(6); 5848var IS_PURE = __w_pdfjs_require__(36); 5849var DOM_EXCEPTION = 'DOMException'; 5850var Error = getBuiltIn('Error'); 5851var NativeDOMException = getBuiltIn(DOM_EXCEPTION); 5852var $DOMException = function DOMException() { 5853 anInstance(this, DOMExceptionPrototype); 5854 var argumentsLength = arguments.length; 5855 var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]); 5856 var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error'); 5857 var that = new NativeDOMException(message, name); 5858 var error = Error(message); 5859 error.name = DOM_EXCEPTION; 5860 defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1))); 5861 inheritIfRequired(that, this, $DOMException); 5862 return that; 5863}; 5864var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype; 5865var ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION); 5866var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2); 5867var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION); 5868var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable); 5869var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK; 5870$({ 5871 global: true, 5872 constructor: true, 5873 forced: IS_PURE || FORCED_CONSTRUCTOR 5874}, { DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException }); 5875var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION); 5876var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype; 5877if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) { 5878 if (!IS_PURE) { 5879 defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException)); 5880 } 5881 for (var key in DOMExceptionConstants) 5882 if (hasOwn(DOMExceptionConstants, key)) { 5883 var constant = DOMExceptionConstants[key]; 5884 var constantName = constant.s; 5885 if (!hasOwn(PolyfilledDOMException, constantName)) { 5886 defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c)); 5887 } 5888 } 5889} 5890 5891/***/ }), 5892/* 150 */ 5893/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 5894 5895 5896var isPrototypeOf = __w_pdfjs_require__(25); 5897var $TypeError = TypeError; 5898module.exports = function (it, Prototype) { 5899 if (isPrototypeOf(Prototype, it)) 5900 return it; 5901 throw $TypeError('Incorrect invocation'); 5902}; 5903 5904/***/ }), 5905/* 151 */ 5906/***/ ((module) => { 5907 5908 5909module.exports = { 5910 IndexSizeError: { 5911 s: 'INDEX_SIZE_ERR', 5912 c: 1, 5913 m: 1 5914 }, 5915 DOMStringSizeError: { 5916 s: 'DOMSTRING_SIZE_ERR', 5917 c: 2, 5918 m: 0 5919 },
5920 HierarchyRequestError: { 5921 s: 'HIERARCHY_REQUEST_ERR', 5922 c: 3, 5923 m: 1 5924 }, 5925 WrongDocumentError: { 5926 s: 'WRONG_DOCUMENT_ERR', 5927 c: 4, 5928 m: 1 5929 }, 5930 InvalidCharacterError: { 5931 s: 'INVALID_CHARACTER_ERR', 5932 c: 5, 5933 m: 1 5934 }, 5935 NoDataAllowedError: { 5936 s: 'NO_DATA_ALLOWED_ERR', 5937 c: 6, 5938 m: 0 5939 }, 5940 NoModificationAllowedError: { 5941 s: 'NO_MODIFICATION_ALLOWED_ERR', 5942 c: 7, 5943 m: 1 5944 }, 5945 NotFoundError: { 5946 s: 'NOT_FOUND_ERR', 5947 c: 8, 5948 m: 1 5949 }, 5950 NotSupportedError: { 5951 s: 'NOT_SUPPORTED_ERR', 5952 c: 9, 5953 m: 1 5954 }, 5955 InUseAttributeError: { 5956 s: 'INUSE_ATTRIBUTE_ERR', 5957 c: 10, 5958 m: 1 5959 }, 5960 InvalidStateError: { 5961 s: 'INVALID_STATE_ERR', 5962 c: 11, 5963 m: 1 5964 }, 5965 SyntaxError: { 5966 s: 'SYNTAX_ERR', 5967 c: 12, 5968 m: 1 5969 }, 5970 InvalidModificationError: { 5971 s: 'INVALID_MODIFICATION_ERR', 5972 c: 13, 5973 m: 1 5974 }, 5975 NamespaceError: { 5976 s: 'NAMESPACE_ERR', 5977 c: 14, 5978 m: 1 5979 }, 5980 InvalidAccessError: { 5981 s: 'INVALID_ACCESS_ERR', 5982 c: 15, 5983 m: 1 5984 }, 5985 ValidationError: { 5986 s: 'VALIDATION_ERR', 5987 c: 16, 5988 m: 0 5989 }, 5990 TypeMismatchError: { 5991 s: 'TYPE_MISMATCH_ERR', 5992 c: 17, 5993 m: 1 5994 }, 5995 SecurityError: { 5996 s: 'SECURITY_ERR', 5997 c: 18, 5998 m: 1 5999 }, 6000 NetworkError: { 6001 s: 'NETWORK_ERR', 6002 c: 19, 6003 m: 1 6004 }, 6005 AbortError: { 6006 s: 'ABORT_ERR', 6007 c: 20, 6008 m: 1 6009 }, 6010 URLMismatchError: { 6011 s: 'URL_MISMATCH_ERR', 6012 c: 21, 6013 m: 1 6014 }, 6015 QuotaExceededError: { 6016 s: 'QUOTA_EXCEEDED_ERR', 6017 c: 22, 6018 m: 1 6019 }, 6020 TimeoutError: { 6021 s: 'TIMEOUT_ERR', 6022 c: 23, 6023 m: 1 6024 }, 6025 InvalidNodeTypeError: {
vendor: 6,575 bytes, lines 6026-6206
6026 s: 'INVALID_NODE_TYPE_ERR', 6027 c: 24, 6028 m: 1 6029 }, 6030 DataCloneError: { 6031 s: 'DATA_CLONE_ERR', 6032 c: 25, 6033 m: 1 6034 } 6035}; 6036 6037/***/ }), 6038/* 152 */ 6039/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 6040 6041 6042var IS_PURE = __w_pdfjs_require__(36); 6043var $ = __w_pdfjs_require__(3); 6044var global = __w_pdfjs_require__(4); 6045var getBuiltin = __w_pdfjs_require__(24); 6046var uncurryThis = __w_pdfjs_require__(14); 6047var fails = __w_pdfjs_require__(7); 6048var uid = __w_pdfjs_require__(41); 6049var isCallable = __w_pdfjs_require__(21); 6050var isConstructor = __w_pdfjs_require__(153); 6051var isNullOrUndefined = __w_pdfjs_require__(17); 6052var isObject = __w_pdfjs_require__(20); 6053var isSymbol = __w_pdfjs_require__(23); 6054var iterate = __w_pdfjs_require__(154); 6055var anObject = __w_pdfjs_require__(47); 6056var classof = __w_pdfjs_require__(78); 6057var hasOwn = __w_pdfjs_require__(39); 6058var createProperty = __w_pdfjs_require__(159); 6059var createNonEnumerableProperty = __w_pdfjs_require__(44); 6060var lengthOfArrayLike = __w_pdfjs_require__(64); 6061var validateArgumentsLength = __w_pdfjs_require__(85); 6062var getRegExpFlags = __w_pdfjs_require__(160); 6063var MapHelpers = __w_pdfjs_require__(162); 6064var SetHelpers = __w_pdfjs_require__(128); 6065var ERROR_STACK_INSTALLABLE = __w_pdfjs_require__(83); 6066var PROPER_TRANSFER = __w_pdfjs_require__(119); 6067var Object = global.Object; 6068var Array = global.Array; 6069var Date = global.Date; 6070var Error = global.Error; 6071var EvalError = global.EvalError; 6072var RangeError = global.RangeError; 6073var ReferenceError = global.ReferenceError; 6074var SyntaxError = global.SyntaxError; 6075var TypeError = global.TypeError; 6076var URIError = global.URIError; 6077var PerformanceMark = global.PerformanceMark; 6078var WebAssembly = global.WebAssembly; 6079var CompileError = WebAssembly && WebAssembly.CompileError || Error; 6080var LinkError = WebAssembly && WebAssembly.LinkError || Error; 6081var RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error; 6082var DOMException = getBuiltin('DOMException'); 6083var Map = MapHelpers.Map; 6084var mapHas = MapHelpers.has; 6085var mapGet = MapHelpers.get; 6086var mapSet = MapHelpers.set; 6087var Set = SetHelpers.Set; 6088var setAdd = SetHelpers.add; 6089var objectKeys = getBuiltin('Object', 'keys'); 6090var push = uncurryThis([].push); 6091var thisBooleanValue = uncurryThis(true.valueOf); 6092var thisNumberValue = uncurryThis(1.0.valueOf); 6093var thisStringValue = uncurryThis(''.valueOf); 6094var thisTimeValue = uncurryThis(Date.prototype.getTime); 6095var PERFORMANCE_MARK = uid('structuredClone'); 6096var DATA_CLONE_ERROR = 'DataCloneError'; 6097var TRANSFERRING = 'Transferring'; 6098var checkBasicSemantic = function (structuredCloneImplementation) { 6099 return !fails(function () { 6100 var set1 = new global.Set([7]); 6101 var set2 = structuredCloneImplementation(set1); 6102 var number = structuredCloneImplementation(Object(7)); 6103 return set2 === set1 || !set2.has(7) || typeof number != 'object' || +number !== 7; 6104 }) && structuredCloneImplementation; 6105}; 6106var checkErrorsCloning = function (structuredCloneImplementation, $Error) { 6107 return !fails(function () { 6108 var error = new $Error(); 6109 var test = structuredCloneImplementation({ 6110 a: error, 6111 b: error 6112 }); 6113 return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack); 6114 }); 6115}; 6116var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) { 6117 return !fails(function () { 6118 var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 })); 6119 return test.name !== 'AggregateError' || test.errors[0] !== 1 || test.message !== PERFORMANCE_MARK || test.cause !== 3; 6120 }); 6121}; 6122var nativeStructuredClone = global.structuredClone; 6123var FORCED_REPLACEMENT = IS_PURE || !checkErrorsCloning(nativeStructuredClone, Error) || !checkErrorsCloning(nativeStructuredClone, DOMException) || !checkNewErrorsCloningSemantic(nativeStructuredClone); 6124var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) { 6125 return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail; 6126}); 6127var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark; 6128var throwUncloneable = function (type) { 6129 throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR); 6130}; 6131var throwUnpolyfillable = function (type, action) { 6132 throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR); 6133}; 6134var tryNativeRestrictedStructuredClone = function (value, type) { 6135 if (!nativeRestrictedStructuredClone) 6136 throwUnpolyfillable(type); 6137 return nativeRestrictedStructuredClone(value); 6138}; 6139var createDataTransfer = function () { 6140 var dataTransfer; 6141 try { 6142 dataTransfer = new global.DataTransfer(); 6143 } catch (error) { 6144 try { 6145 dataTransfer = new global.ClipboardEvent('').clipboardData; 6146 } catch (error2) { 6147 } 6148 } 6149 return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null; 6150}; 6151var cloneBuffer = function (value, map, $type) { 6152 if (mapHas(map, value)) 6153 return mapGet(map, value); 6154 var type = $type || classof(value); 6155 var clone, length, options, source, target, i; 6156 if (type === 'SharedArrayBuffer') { 6157 if (nativeRestrictedStructuredClone) 6158 clone = nativeRestrictedStructuredClone(value); 6159 else 6160 clone = value; 6161 } else { 6162 var DataView = global.DataView; 6163 if (!DataView && typeof value.slice != 'function') 6164 throwUnpolyfillable('ArrayBuffer'); 6165 try { 6166 if (typeof value.slice == 'function' && !value.resizable) { 6167 clone = value.slice(0); 6168 } else { 6169 length = value.byteLength; 6170 options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined; 6171 clone = new ArrayBuffer(length, options); 6172 source = new DataView(value); 6173 target = new DataView(clone); 6174 for (i = 0; i < length; i++) { 6175 target.setUint8(i, source.getUint8(i)); 6176 } 6177 } 6178 } catch (error) { 6179 throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR); 6180 } 6181 } 6182 mapSet(map, value, clone); 6183 return clone; 6184}; 6185var cloneView = function (value, type, offset, length, map) { 6186 var C = global[type]; 6187 if (!isObject(C)) 6188 throwUnpolyfillable(type); 6189 return new C(cloneBuffer(value.buffer, map), offset, length); 6190}; 6191var Placeholder = function (object, type, metadata) { 6192 this.object = object; 6193 this.type = type; 6194 this.metadata = metadata; 6195}; 6196var structuredCloneInternal = function (value, map, transferredBuffers) { 6197 if (isSymbol(value)) 6198 throwUncloneable('Symbol'); 6199 if (!isObject(value)) 6200 return value; 6201 if (map) { 6202 if (mapHas(map, value)) 6203 return mapGet(map, value); 6204 } else 6205 map = new Map(); 6206 var type = classof(value);
6207 var C, name, cloned, dataTransfer, i, length, keys, key; 6208 switch (type) { 6209 case 'Array': 6210 cloned = Array(lengthOfArrayLike(value)); 6211 break; 6212 case 'Object': 6213 cloned = {}; 6214 break; 6215 case 'Map': 6216 cloned = new Map(); 6217 break; 6218 case 'Set': 6219 cloned = new Set(); 6220 break; 6221 case 'RegExp': 6222 cloned = new RegExp(value.source, getRegExpFlags(value)); 6223 break; 6224 case 'Error': 6225 name = value.name; 6226 switch (name) { 6227 case 'AggregateError': 6228 cloned = getBuiltin('AggregateError')([]); 6229 break; 6230 case 'EvalError': 6231 cloned = EvalError(); 6232 break; 6233 case 'RangeError': 6234 cloned = RangeError(); 6235 break; 6236 case 'ReferenceError': 6237 cloned = ReferenceError(); 6238 break; 6239 case 'SyntaxError': 6240 cloned = SyntaxError(); 6241 break; 6242 case 'TypeError': 6243 cloned = TypeError(); 6244 break; 6245 case 'URIError': 6246 cloned = URIError(); 6247 break; 6248 case 'CompileError': 6249 cloned = CompileError(); 6250 break; 6251 case 'LinkError': 6252 cloned = LinkError(); 6253 break; 6254 case 'RuntimeError': 6255 cloned = RuntimeError(); 6256 break; 6257 default: 6258 cloned = Error(); 6259 } 6260 break; 6261 case 'DOMException': 6262 cloned = new DOMException(value.message, value.name); 6263 break; 6264 case 'ArrayBuffer': 6265 case 'SharedArrayBuffer': 6266 cloned = transferredBuffers ? new Placeholder(value, type) : cloneBuffer(value, map, type); 6267 break; 6268 case 'DataView': 6269 case 'Int8Array': 6270 case 'Uint8Array': 6271 case 'Uint8ClampedArray': 6272 case 'Int16Array': 6273 case 'Uint16Array': 6274 case 'Int32Array': 6275 case 'Uint32Array': 6276 case 'Float16Array': 6277 case 'Float32Array': 6278 case 'Float64Array': 6279 case 'BigInt64Array': 6280 case 'BigUint64Array': 6281 length = type === 'DataView' ? value.byteLength : value.length; 6282 cloned = transferredBuffers ? new Placeholder(value, type, { 6283 offset: value.byteOffset, 6284 length: length 6285 }) : cloneView(value, type, value.byteOffset, length, map); 6286 break; 6287 case 'DOMQuad': 6288 try { 6289 cloned = new DOMQuad(structuredCloneInternal(value.p1, map, transferredBuffers), structuredCloneInternal(value.p2, map, transferredBuffers), structuredCloneInternal(value.p3, map, transferredBuffers), structuredCloneInternal(value.p4, map, transferredBuffers)); 6290 } catch (error) { 6291 cloned = tryNativeRestrictedStructuredClone(value, type); 6292 } 6293 break; 6294 case 'File': 6295 if (nativeRestrictedStructuredClone) 6296 try { 6297 cloned = nativeRestrictedStructuredClone(value); 6298 if (classof(cloned) !== type) 6299 cloned = undefined; 6300 } catch (error) { 6301 } 6302 if (!cloned) 6303 try { 6304 cloned = new File([value], value.name, value); 6305 } catch (error) { 6306 } 6307 if (!cloned) 6308 throwUnpolyfillable(type); 6309 break; 6310 case 'FileList': 6311 dataTransfer = createDataTransfer(); 6312 if (dataTransfer) { 6313 for (i = 0, length = lengthOfArrayLike(value); i < length; i++) { 6314 dataTransfer.items.add(structuredCloneInternal(value[i], map, transferredBuffers)); 6315 } 6316 cloned = dataTransfer.files; 6317 } else 6318 cloned = tryNativeRestrictedStructuredClone(value, type); 6319 break; 6320 case 'ImageData': 6321 try { 6322 cloned = new ImageData(structuredCloneInternal(value.data, map, transferredBuffers), value.width, value.height, { colorSpace: value.colorSpace }); 6323 } catch (error) { 6324 cloned = tryNativeRestrictedStructuredClone(value, type); 6325 } 6326 break; 6327 default: 6328 if (nativeRestrictedStructuredClone) { 6329 cloned = nativeRestrictedStructuredClone(value); 6330 } else 6331 switch (type) { 6332 case 'BigInt': 6333 cloned = Object(value.valueOf()); 6334 break; 6335 case 'Boolean': 6336 cloned = Object(thisBooleanValue(value)); 6337 break; 6338 case 'Number': 6339 cloned = Object(thisNumberValue(value)); 6340 break; 6341 case 'String': 6342 cloned = Object(thisStringValue(value)); 6343 break; 6344 case 'Date': 6345 cloned = new Date(thisTimeValue(value)); 6346 break; 6347 case 'Blob': 6348 try { 6349 cloned = value.slice(0, value.size, value.type); 6350 } catch (error) { 6351 throwUnpolyfillable(type); 6352 } 6353 break; 6354 case 'DOMPoint': 6355 case 'DOMPointReadOnly': 6356 C = global[type]; 6357 try { 6358 cloned = C.fromPoint ? C.fromPoint(value) : new C(value.x, value.y, value.z, value.w); 6359 } catch (error) { 6360 throwUnpolyfillable(type); 6361 } 6362 break; 6363 case 'DOMRect': 6364 case 'DOMRectReadOnly': 6365 C = global[type]; 6366 try { 6367 cloned = C.fromRect ? C.fromRect(value) : new C(value.x, value.y, value.width, value.height); 6368 } catch (error) { 6369 throwUnpolyfillable(type); 6370 } 6371 break; 6372 case 'DOMMatrix': 6373 case 'DOMMatrixReadOnly': 6374 C = global[type]; 6375 try { 6376 cloned = C.fromMatrix ? C.fromMatrix(value) : new C(value); 6377 } catch (error) { 6378 throwUnpolyfillable(type); 6379 } 6380 break; 6381 case 'AudioData': 6382 case 'VideoFrame': 6383 if (!isCallable(value.clone)) 6384 throwUnpolyfillable(type); 6385 try { 6386 cloned = value.clone(); 6387 } catch (error) { 6388 throwUncloneable(type); 6389 } 6390 break; 6391 case 'CropTarget': 6392 case 'CryptoKey': 6393 case 'FileSystemDirectoryHandle': 6394 case 'FileSystemFileHandle': 6395 case 'FileSystemHandle': 6396 case 'GPUCompilationInfo': 6397 case 'GPUCompilationMessage': 6398 case 'ImageBitmap': 6399 case 'RTCCertificate': 6400 case 'WebAssembly.Module': 6401 throwUnpolyfillable(type); 6402 default: 6403 throwUncloneable(type); 6404 } 6405 } 6406 mapSet(map, value, cloned); 6407 switch (type) { 6408 case 'Array': 6409 case 'Object': 6410 keys = objectKeys(value); 6411 for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) { 6412 key = keys[i]; 6413 createProperty(cloned, key, structuredCloneInternal(value[key], map, transferredBuffers)); 6414 } 6415 break; 6416 case 'Map': 6417 value.forEach(function (v, k) { 6418 mapSet(cloned, structuredCloneInternal(k, map, transferredBuffers), structuredCloneInternal(v, map, transferredBuffers)); 6419 }); 6420 break; 6421 case 'Set': 6422 value.forEach(function (v) { 6423 setAdd(cloned, structuredCloneInternal(v, map, transferredBuffers)); 6424 }); 6425 break; 6426 case 'Error': 6427 createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map, transferredBuffers)); 6428 if (hasOwn(value, 'cause')) { 6429 createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map, transferredBuffers)); 6430 } 6431 if (name === 'AggregateError') { 6432 cloned.errors = structuredCloneInternal(value.errors, map, transferredBuffers); 6433 } 6434 case 'DOMException': 6435 if (ERROR_STACK_INSTALLABLE) { 6436 createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map, transferredBuffers)); 6437 } 6438 } 6439 return cloned; 6440}; 6441var replacePlaceholders = function (value, map) { 6442 if (!isObject(value)) 6443 return value; 6444 if (mapHas(map, value)) 6445 return mapGet(map, value); 6446 var type, object, metadata, i, length, keys, key, replacement; 6447 if (value instanceof Placeholder) { 6448 type = value.type; 6449 object = value.object; 6450 switch (type) { 6451 case 'ArrayBuffer': 6452 case 'SharedArrayBuffer': 6453 replacement = cloneBuffer(object, map, type); 6454 break; 6455 case 'DataView': 6456 case 'Int8Array': 6457 case 'Uint8Array': 6458 case 'Uint8ClampedArray': 6459 case 'Int16Array': 6460 case 'Uint16Array': 6461 case 'Int32Array': 6462 case 'Uint32Array': 6463 case 'Float16Array': 6464 case 'Float32Array': 6465 case 'Float64Array': 6466 case 'BigInt64Array': 6467 case 'BigUint64Array': 6468 metadata = value.metadata; 6469 replacement = cloneView(object, type, metadata.offset, metadata.length, map); 6470 } 6471 } else 6472 switch (classof(value)) { 6473 case 'Array': 6474 case 'Object': 6475 keys = objectKeys(value); 6476 for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) { 6477 key = keys[i]; 6478 value[key] = replacePlaceholders(value[key], map); 6479 } 6480 break; 6481 case 'Map': 6482 replacement = new Map(); 6483 value.forEach(function (v, k) { 6484 mapSet(replacement, replacePlaceholders(k, map), replacePlaceholders(v, map)); 6485 }); 6486 break; 6487 case 'Set': 6488 replacement = new Set(); 6489 value.forEach(function (v) { 6490 setAdd(replacement, replacePlaceholders(v, map)); 6491 }); 6492 break; 6493 case 'Error': 6494 value.message = replacePlaceholders(value.message, map); 6495 if (hasOwn(value, 'cause')) { 6496 value.cause = replacePlaceholders(value.cause, map); 6497 } 6498 if (value.name === 'AggregateError') { 6499 value.errors = replacePlaceholders(value.errors, map); 6500 } 6501 case 'DOMException': 6502 if (ERROR_STACK_INSTALLABLE) { 6503 value.stack = replacePlaceholders(value.stack, map); 6504 } 6505 } 6506 mapSet(map, value, replacement || value); 6507 return replacement || value; 6508}; 6509var tryToTransfer = function (rawTransfer, map) { 6510 if (!isObject(rawTransfer)) 6511 throw TypeError('Transfer option cannot be converted to a sequence'); 6512 var transfer = []; 6513 iterate(rawTransfer, function (value) { 6514 push(transfer, anObject(value)); 6515 }); 6516 var i = 0; 6517 var length = lengthOfArrayLike(transfer); 6518 var buffers = []; 6519 var value, type, C, transferred, canvas, context; 6520 while (i < length) { 6521 value = transfer[i++]; 6522 type = classof(value); 6523 if (type === 'ArrayBuffer') { 6524 push(buffers, value); 6525 continue; 6526 } 6527 if (mapHas(map, value)) 6528 throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR); 6529 if (PROPER_TRANSFER) { 6530 transferred = nativeStructuredClone(value, { transfer: [value] }); 6531 } else 6532 switch (type) { 6533 case 'ImageBitmap': 6534 C = global.OffscreenCanvas; 6535 if (!isConstructor(C)) 6536 throwUnpolyfillable(type, TRANSFERRING); 6537 try {
6538 canvas = new C(value.width, value.height); 6539 context = canvas.getContext('bitmaprenderer'); 6540 context.transferFromImageBitmap(value); 6541 transferred = canvas.transferToImageBitmap(); 6542 } catch (error) { 6543 } 6544 break; 6545 case 'AudioData': 6546 case 'VideoFrame': 6547 if (!isCallable(value.clone) || !isCallable(value.close)) 6548 throwUnpolyfillable(type, TRANSFERRING); 6549 try { 6550 transferred = value.clone(); 6551 value.close(); 6552 } catch (error) { 6553 } 6554 break; 6555 case 'MediaSourceHandle': 6556 case 'MessagePort': 6557 case 'OffscreenCanvas': 6558 case 'ReadableStream': 6559 case 'TransformStream': 6560 case 'WritableStream': 6561 throwUnpolyfillable(type, TRANSFERRING); 6562 } 6563 if (transferred === undefined) 6564 throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR); 6565 mapSet(map, value, transferred); 6566 } 6567 return buffers; 6568}; 6569var tryToTransferBuffers = function (transfer, map) { 6570 var i = 0; 6571 var length = lengthOfArrayLike(transfer); 6572 var value, transferred; 6573 while (i < length) { 6574 value = transfer[i++]; 6575 if (mapHas(map, value)) 6576 throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR); 6577 if (PROPER_TRANSFER) { 6578 transferred = nativeStructuredClone(value, { transfer: [value] }); 6579 } else { 6580 if (!isCallable(value.transfer)) 6581 throwUnpolyfillable('ArrayBuffer', TRANSFERRING); 6582 transferred = value.transfer(); 6583 } 6584 mapSet(map, value, transferred); 6585 } 6586}; 6587$({ 6588 global: true, 6589 enumerable: true, 6590 sham: !PROPER_TRANSFER, 6591 forced: FORCED_REPLACEMENT 6592}, { 6593 structuredClone: function structuredClone(value) { 6594 var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined; 6595 var transfer = options ? options.transfer : undefined; 6596 var transferredBuffers = false; 6597 var map, buffers; 6598 if (transfer !== undefined) { 6599 map = new Map(); 6600 buffers = tryToTransfer(transfer, map); 6601 transferredBuffers = !!lengthOfArrayLike(buffers); 6602 } 6603 var clone = structuredCloneInternal(value, map, transferredBuffers); 6604 if (transferredBuffers) { 6605 map = new Map(); 6606 tryToTransferBuffers(transfer, map); 6607 clone = replacePlaceholders(clone, map); 6608 } 6609 return clone; 6610 } 6611}); 6612 6613/***/ }), 6614/* 153 */ 6615/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6616 6617 6618var uncurryThis = __w_pdfjs_require__(14); 6619var fails = __w_pdfjs_require__(7); 6620var isCallable = __w_pdfjs_require__(21); 6621var classof = __w_pdfjs_require__(78); 6622var getBuiltIn = __w_pdfjs_require__(24); 6623var inspectSource = __w_pdfjs_require__(51); 6624var noop = function () { 6625}; 6626var empty = []; 6627var construct = getBuiltIn('Reflect', 'construct'); 6628var constructorRegExp = /^\s*(?:class|function)\b/; 6629var exec = uncurryThis(constructorRegExp.exec); 6630var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); 6631var isConstructorModern = function isConstructor(argument) { 6632 if (!isCallable(argument)) 6633 return false; 6634 try { 6635 construct(noop, empty, argument); 6636 return true; 6637 } catch (error) { 6638 return false; 6639 } 6640}; 6641var isConstructorLegacy = function isConstructor(argument) { 6642 if (!isCallable(argument)) 6643 return false; 6644 switch (classof(argument)) { 6645 case 'AsyncFunction': 6646 case 'GeneratorFunction': 6647 case 'AsyncGeneratorFunction': 6648 return false; 6649 } 6650 try { 6651 return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); 6652 } catch (error) { 6653 return true; 6654 } 6655}; 6656isConstructorLegacy.sham = true; 6657module.exports = !construct || fails(function () { 6658 var called; 6659 return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () { 6660 called = true; 6661 }) || called; 6662}) ? isConstructorLegacy : isConstructorModern; 6663 6664/***/ }), 6665/* 154 */ 6666/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6667 6668 6669var bind = __w_pdfjs_require__(99); 6670var call = __w_pdfjs_require__(8); 6671var anObject = __w_pdfjs_require__(47); 6672var tryToString = __w_pdfjs_require__(32); 6673var isArrayIteratorMethod = __w_pdfjs_require__(155); 6674var lengthOfArrayLike = __w_pdfjs_require__(64); 6675var isPrototypeOf = __w_pdfjs_require__(25); 6676var getIterator = __w_pdfjs_require__(157); 6677var getIteratorMethod = __w_pdfjs_require__(158); 6678var iteratorClose = __w_pdfjs_require__(140); 6679var $TypeError = TypeError; 6680var Result = function (stopped, result) { 6681 this.stopped = stopped; 6682 this.result = result; 6683}; 6684var ResultPrototype = Result.prototype; 6685module.exports = function (iterable, unboundFunction, options) { 6686 var that = options && options.that; 6687 var AS_ENTRIES = !!(options && options.AS_ENTRIES); 6688 var IS_RECORD = !!(options && options.IS_RECORD); 6689 var IS_ITERATOR = !!(options && options.IS_ITERATOR); 6690 var INTERRUPTED = !!(options && options.INTERRUPTED); 6691 var fn = bind(unboundFunction, that); 6692 var iterator, iterFn, index, length, result, next, step; 6693 var stop = function (condition) { 6694 if (iterator) 6695 iteratorClose(iterator, 'normal', condition); 6696 return new Result(true, condition); 6697 }; 6698 var callFn = function (value) { 6699 if (AS_ENTRIES) { 6700 anObject(value); 6701 return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); 6702 }
6703 return INTERRUPTED ? fn(value, stop) : fn(value); 6704 }; 6705 if (IS_RECORD) { 6706 iterator = iterable.iterator; 6707 } else if (IS_ITERATOR) { 6708 iterator = iterable; 6709 } else { 6710 iterFn = getIteratorMethod(iterable); 6711 if (!iterFn) 6712 throw $TypeError(tryToString(iterable) + ' is not iterable'); 6713 if (isArrayIteratorMethod(iterFn)) { 6714 for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { 6715 result = callFn(iterable[index]); 6716 if (result && isPrototypeOf(ResultPrototype, result)) 6717 return result; 6718 } 6719 return new Result(false); 6720 } 6721 iterator = getIterator(iterable, iterFn); 6722 } 6723 next = IS_RECORD ? iterable.next : iterator.next; 6724 while (!(step = call(next, iterator)).done) { 6725 try { 6726 result = callFn(step.value); 6727 } catch (error) { 6728 iteratorClose(iterator, 'throw', error); 6729 } 6730 if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) 6731 return result; 6732 } 6733 return new Result(false); 6734}; 6735 6736/***/ }), 6737/* 155 */ 6738/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6739 6740 6741var wellKnownSymbol = __w_pdfjs_require__(34); 6742var Iterators = __w_pdfjs_require__(156); 6743var ITERATOR = wellKnownSymbol('iterator'); 6744var ArrayPrototype = Array.prototype; 6745module.exports = function (it) { 6746 return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); 6747}; 6748 6749/***/ }), 6750/* 156 */ 6751/***/ ((module) => { 6752 6753 6754module.exports = {}; 6755 6756/***/ }), 6757/* 157 */ 6758/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6759 6760 6761var call = __w_pdfjs_require__(8); 6762var aCallable = __w_pdfjs_require__(31); 6763var anObject = __w_pdfjs_require__(47); 6764var tryToString = __w_pdfjs_require__(32); 6765var getIteratorMethod = __w_pdfjs_require__(158); 6766var $TypeError = TypeError; 6767module.exports = function (argument, usingIterator) { 6768 var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; 6769 if (aCallable(iteratorMethod)) 6770 return anObject(call(iteratorMethod, argument)); 6771 throw $TypeError(tryToString(argument) + ' is not iterable'); 6772}; 6773 6774/***/ }), 6775/* 158 */ 6776/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6777 6778 6779var classof = __w_pdfjs_require__(78); 6780var getMethod = __w_pdfjs_require__(30); 6781var isNullOrUndefined = __w_pdfjs_require__(17); 6782var Iterators = __w_pdfjs_require__(156); 6783var wellKnownSymbol = __w_pdfjs_require__(34); 6784var ITERATOR = wellKnownSymbol('iterator'); 6785module.exports = function (it) { 6786 if (!isNullOrUndefined(it)) 6787 return getMethod(it, ITERATOR) || getMethod(it, '@@iterator') || Iterators[classof(it)]; 6788}; 6789 6790/***/ }), 6791/* 159 */ 6792/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6793 6794 6795var toPropertyKey = __w_pdfjs_require__(18); 6796var definePropertyModule = __w_pdfjs_require__(45); 6797var createPropertyDescriptor = __w_pdfjs_require__(11); 6798module.exports = function (object, key, value) { 6799 var propertyKey = toPropertyKey(key); 6800 if (propertyKey in object) 6801 definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); 6802 else 6803 object[propertyKey] = value; 6804}; 6805 6806/***/ }), 6807/* 160 */ 6808/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6809 6810 6811var call = __w_pdfjs_require__(8); 6812var hasOwn = __w_pdfjs_require__(39); 6813var isPrototypeOf = __w_pdfjs_require__(25); 6814var regExpFlags = __w_pdfjs_require__(161); 6815var RegExpPrototype = RegExp.prototype; 6816module.exports = function (R) { 6817 var flags = R.flags; 6818 return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; 6819}; 6820 6821/***/ }), 6822/* 161 */ 6823/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6824 6825 6826var anObject = __w_pdfjs_require__(47); 6827module.exports = function () { 6828 var that = anObject(this); 6829 var result = ''; 6830 if (that.hasIndices) 6831 result += 'd'; 6832 if (that.global) 6833 result += 'g'; 6834 if (that.ignoreCase) 6835 result += 'i'; 6836 if (that.multiline) 6837 result += 'm'; 6838 if (that.dotAll) 6839 result += 's'; 6840 if (that.unicode) 6841 result += 'u'; 6842 if (that.unicodeSets) 6843 result += 'v'; 6844 if (that.sticky) 6845 result += 'y'; 6846 return result; 6847}; 6848 6849/***/ }), 6850/* 162 */ 6851/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 6852 6853 6854var uncurryThis = __w_pdfjs_require__(14); 6855var MapPrototype = Map.prototype; 6856module.exports = { 6857 Map: Map, 6858 set: uncurryThis(MapPrototype.set), 6859 get: uncurryThis(MapPrototype.get), 6860 has: uncurryThis(MapPrototype.has), 6861 remove: uncurryThis(MapPrototype['delete']), 6862 proto: MapPrototype 6863}; 6864 6865/***/ }), 6866/* 163 */ 6867/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 6868 6869 6870 6871Object.defineProperty(exports, "__esModule", ({ 6872 value: true 6873}));
6874exports.SerializableEmpty = exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0; 6875__w_pdfjs_require__(89); 6876__w_pdfjs_require__(149); 6877__w_pdfjs_require__(152); 6878var _util = __w_pdfjs_require__(1); 6879var _editor = __w_pdfjs_require__(164); 6880var _murmurhash = __w_pdfjs_require__(170); 6881const SerializableEmpty = Object.freeze({ 6882 map: null, 6883 hash: "", 6884 transfers: undefined 6885}); 6886exports.SerializableEmpty = SerializableEmpty; 6887class AnnotationStorage { 6888 #modified = false; 6889 #storage = new Map(); 6890 constructor() { 6891 this.onSetModified = null; 6892 this.onResetModified = null; 6893 this.onAnnotationEditor = null; 6894 } 6895 getValue(key, defaultValue) { 6896 const value = this.#storage.get(key); 6897 if (value === undefined) { 6898 return defaultValue; 6899 } 6900 return Object.assign(defaultValue, value); 6901 } 6902 getRawValue(key) { 6903 return this.#storage.get(key); 6904 } 6905 remove(key) { 6906 this.#storage.delete(key); 6907 if (this.#storage.size === 0) { 6908 this.resetModified(); 6909 } 6910 if (typeof this.onAnnotationEditor === "function") { 6911 for (const value of this.#storage.values()) { 6912 if (value instanceof _editor.AnnotationEditor) { 6913 return; 6914 } 6915 } 6916 this.onAnnotationEditor(null); 6917 } 6918 } 6919 setValue(key, value) { 6920 const obj = this.#storage.get(key); 6921 let modified = false; 6922 if (obj !== undefined) { 6923 for (const [entry, val] of Object.entries(value)) { 6924 if (obj[entry] !== val) { 6925 modified = true; 6926 obj[entry] = val; 6927 } 6928 } 6929 } else { 6930 modified = true; 6931 this.#storage.set(key, value); 6932 } 6933 if (modified) { 6934 this.#setModified(); 6935 } 6936 if (value instanceof _editor.AnnotationEditor && typeof this.onAnnotationEditor === "function") { 6937 this.onAnnotationEditor(value.constructor._type); 6938 } 6939 } 6940 has(key) { 6941 return this.#storage.has(key); 6942 } 6943 getAll() { 6944 return this.#storage.size > 0 ? (0, _util.objectFromMap)(this.#storage) : null; 6945 } 6946 setAll(obj) { 6947 for (const [key, val] of Object.entries(obj)) { 6948 this.setValue(key, val); 6949 } 6950 } 6951 get size() { 6952 return this.#storage.size; 6953 } 6954 #setModified() { 6955 if (!this.#modified) { 6956 this.#modified = true; 6957 if (typeof this.onSetModified === "function") { 6958 this.onSetModified(); 6959 } 6960 } 6961 } 6962 resetModified() { 6963 if (this.#modified) { 6964 this.#modified = false; 6965 if (typeof this.onResetModified === "function") { 6966 this.onResetModified(); 6967 } 6968 } 6969 } 6970 get print() { 6971 return new PrintAnnotationStorage(this); 6972 } 6973 get serializable() { 6974 if (this.#storage.size === 0) { 6975 return SerializableEmpty; 6976 } 6977 const map = new Map(), 6978 hash = new _murmurhash.MurmurHash3_64(), 6979 transfers = []; 6980 const context = Object.create(null); 6981 let hasBitmap = false; 6982 for (const [key, val] of this.#storage) { 6983 const serialized = val instanceof _editor.AnnotationEditor ? val.serialize(false, context) : val; 6984 if (serialized) { 6985 map.set(key, serialized); 6986 hash.update(`${key}:${JSON.stringify(serialized)}`); 6987 hasBitmap ||= !!serialized.bitmap; 6988 } 6989 } 6990 if (hasBitmap) { 6991 for (const value of map.values()) { 6992 if (value.bitmap) { 6993 transfers.push(value.bitmap); 6994 } 6995 } 6996 } 6997 return map.size > 0 ? { 6998 map, 6999 hash: hash.hexdigest(), 7000 transfers 7001 } : SerializableEmpty; 7002 } 7003} 7004exports.AnnotationStorage = AnnotationStorage; 7005class PrintAnnotationStorage extends AnnotationStorage { 7006 #serializable; 7007 constructor(parent) { 7008 super(); 7009 const { 7010 map, 7011 hash, 7012 transfers 7013 } = parent.serializable; 7014 const clone = structuredClone(map, null); 7015 this.#serializable = { 7016 map: clone, 7017 hash, 7018 transfers 7019 }; 7020 } 7021 get print() { 7022 (0, _util.unreachable)("Should not call PrintAnnotationStorage.print"); 7023 } 7024 get serializable() { 7025 return this.#serializable; 7026 } 7027} 7028exports.PrintAnnotationStorage = PrintAnnotationStorage; 7029 7030/***/ }), 7031/* 164 */ 7032/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 7033 7034 7035 7036Object.defineProperty(exports, "__esModule", ({ 7037 value: true 7038})); 7039exports.AnnotationEditor = void 0; 7040__w_pdfjs_require__(89); 7041__w_pdfjs_require__(2); 7042var _tools = __w_pdfjs_require__(165); 7043var _util = __w_pdfjs_require__(1); 7044var _display_utils = __w_pdfjs_require__(168); 7045class AnnotationEditor { 7046 #altText = ""; 7047 #altTextDecorative = false;
7048 #altTextButton = null; 7049 #altTextTooltip = null; 7050 #altTextTooltipTimeout = null; 7051 #keepAspectRatio = false; 7052 #resizersDiv = null; 7053 #boundFocusin = this.focusin.bind(this); 7054 #boundFocusout = this.focusout.bind(this); 7055 #hasBeenClicked = false; 7056 #isEditing = false; 7057 #isInEditMode = false; 7058 _initialOptions = Object.create(null); 7059 _uiManager = null; 7060 _focusEventsAllowed = true; 7061 _l10nPromise = null; 7062 #isDraggable = false; 7063 #zIndex = AnnotationEditor._zIndex++; 7064 static _borderLineWidth = -1; 7065 static _colorManager = new _tools.ColorManager(); 7066 static _zIndex = 1; 7067 static SMALL_EDITOR_SIZE = 0; 7068 constructor(parameters) { 7069 if (this.constructor === AnnotationEditor) { 7070 (0, _util.unreachable)("Cannot initialize AnnotationEditor."); 7071 } 7072 this.parent = parameters.parent; 7073 this.id = parameters.id; 7074 this.width = this.height = null; 7075 this.pageIndex = parameters.parent.pageIndex; 7076 this.name = parameters.name; 7077 this.div = null; 7078 this._uiManager = parameters.uiManager; 7079 this.annotationElementId = null; 7080 this._willKeepAspectRatio = false; 7081 this._initialOptions.isCentered = parameters.isCentered; 7082 this._structTreeParentId = null; 7083 const { 7084 rotation, 7085 rawDims: { 7086 pageWidth, 7087 pageHeight, 7088 pageX, 7089 pageY 7090 } 7091 } = this.parent.viewport; 7092 this.rotation = rotation; 7093 this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; 7094 this.pageDimensions = [pageWidth, pageHeight]; 7095 this.pageTranslation = [pageX, pageY]; 7096 const [width, height] = this.parentDimensions; 7097 this.x = parameters.x / width; 7098 this.y = parameters.y / height; 7099 this.isAttachedToDOM = false; 7100 this.deleted = false; 7101 } 7102 get editorType() { 7103 return Object.getPrototypeOf(this).constructor._type; 7104 } 7105 static get _defaultLineColor() { 7106 return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); 7107 } 7108 static deleteAnnotationElement(editor) { 7109 const fakeEditor = new FakeEditor({ 7110 id: editor.parent.getNextId(), 7111 parent: editor.parent, 7112 uiManager: editor._uiManager 7113 }); 7114 fakeEditor.annotationElementId = editor.annotationElementId; 7115 fakeEditor.deleted = true; 7116 fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); 7117 } 7118 static initialize(l10n) { 7119 let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 7120 AnnotationEditor._l10nPromise ||= new Map(["editor_alt_text_button_label", "editor_alt_text_edit_button_label", "editor_alt_text_decorative_tooltip"].map(str => [str, l10n.get(str)])); 7121 if (options?.strings) { 7122 for (const str of options.strings) { 7123 AnnotationEditor._l10nPromise.set(str, l10n.get(str)); 7124 } 7125 } 7126 if (AnnotationEditor._borderLineWidth !== -1) { 7127 return; 7128 } 7129 const style = getComputedStyle(document.documentElement); 7130 AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; 7131 } 7132 static updateDefaultParams(_type, _value) {} 7133 static get defaultPropertiesToUpdate() { 7134 return []; 7135 } 7136 static isHandlingMimeForPasting(mime) { 7137 return false; 7138 } 7139 static paste(item, parent) { 7140 (0, _util.unreachable)("Not implemented"); 7141 } 7142 get propertiesToUpdate() { 7143 return []; 7144 } 7145 get _isDraggable() { 7146 return this.#isDraggable; 7147 } 7148 set _isDraggable(value) { 7149 this.#isDraggable = value; 7150 this.div?.classList.toggle("draggable", value); 7151 } 7152 center() { 7153 const [pageWidth, pageHeight] = this.pageDimensions; 7154 switch (this.parentRotation) { 7155 case 90: 7156 this.x -= this.height * pageHeight / (pageWidth * 2); 7157 this.y += this.width * pageWidth / (pageHeight * 2); 7158 break; 7159 case 180: 7160 this.x += this.width / 2; 7161 this.y += this.height / 2; 7162 break; 7163 case 270: 7164 this.x += this.height * pageHeight / (pageWidth * 2); 7165 this.y -= this.width * pageWidth / (pageHeight * 2); 7166 break; 7167 default: 7168 this.x -= this.width / 2; 7169 this.y -= this.height / 2; 7170 break; 7171 } 7172 this.fixAndSetPosition(); 7173 } 7174 addCommands(params) { 7175 this._uiManager.addCommands(params); 7176 } 7177 get currentLayer() { 7178 return this._uiManager.currentLayer; 7179 }
7180 setInBackground() { 7181 this.div.style.zIndex = 0; 7182 } 7183 setInForeground() { 7184 this.div.style.zIndex = this.#zIndex; 7185 } 7186 setParent(parent) { 7187 if (parent !== null) { 7188 this.pageIndex = parent.pageIndex; 7189 this.pageDimensions = parent.pageDimensions; 7190 } 7191 this.parent = parent; 7192 } 7193 focusin(event) { 7194 if (!this._focusEventsAllowed) { 7195 return; 7196 } 7197 if (!this.#hasBeenClicked) { 7198 this.parent.setSelected(this); 7199 } else { 7200 this.#hasBeenClicked = false; 7201 } 7202 } 7203 focusout(event) { 7204 if (!this._focusEventsAllowed) { 7205 return; 7206 } 7207 if (!this.isAttachedToDOM) { 7208 return; 7209 } 7210 const target = event.relatedTarget; 7211 if (target?.closest(`#${this.id}`)) { 7212 return; 7213 } 7214 event.preventDefault(); 7215 if (!this.parent?.isMultipleSelection) { 7216 this.commitOrRemove(); 7217 } 7218 } 7219 commitOrRemove() { 7220 if (this.isEmpty()) { 7221 this.remove(); 7222 } else { 7223 this.commit(); 7224 } 7225 } 7226 commit() { 7227 this.addToAnnotationStorage(); 7228 } 7229 addToAnnotationStorage() { 7230 this._uiManager.addToAnnotationStorage(this); 7231 } 7232 setAt(x, y, tx, ty) { 7233 const [width, height] = this.parentDimensions; 7234 [tx, ty] = this.screenToPageTranslation(tx, ty); 7235 this.x = (x + tx) / width; 7236 this.y = (y + ty) / height; 7237 this.fixAndSetPosition(); 7238 } 7239 #translate(_ref, x, y) { 7240 let [width, height] = _ref; 7241 [x, y] = this.screenToPageTranslation(x, y); 7242 this.x += x / width; 7243 this.y += y / height; 7244 this.fixAndSetPosition(); 7245 } 7246 translate(x, y) { 7247 this.#translate(this.parentDimensions, x, y); 7248 } 7249 translateInPage(x, y) { 7250 this.#translate(this.pageDimensions, x, y); 7251 this.div.scrollIntoView({ 7252 block: "nearest" 7253 }); 7254 } 7255 drag(tx, ty) { 7256 const [parentWidth, parentHeight] = this.parentDimensions; 7257 this.x += tx / parentWidth; 7258 this.y += ty / parentHeight; 7259 if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { 7260 const { 7261 x, 7262 y 7263 } = this.div.getBoundingClientRect(); 7264 if (this.parent.findNewParent(this, x, y)) { 7265 this.x -= Math.floor(this.x); 7266 this.y -= Math.floor(this.y); 7267 } 7268 } 7269 let { 7270 x, 7271 y 7272 } = this; 7273 const [bx, by] = this.#getBaseTranslation(); 7274 x += bx; 7275 y += by; 7276 this.div.style.left = `${(100 * x).toFixed(2)}%`; 7277 this.div.style.top = `${(100 * y).toFixed(2)}%`; 7278 this.div.scrollIntoView({ 7279 block: "nearest" 7280 }); 7281 } 7282 #getBaseTranslation() { 7283 const [parentWidth, parentHeight] = this.parentDimensions; 7284 const { 7285 _borderLineWidth 7286 } = AnnotationEditor; 7287 const x = _borderLineWidth / parentWidth; 7288 const y = _borderLineWidth / parentHeight; 7289 switch (this.rotation) { 7290 case 90: 7291 return [-x, y]; 7292 case 180: 7293 return [x, y]; 7294 case 270: 7295 return [x, -y]; 7296 default: 7297 return [-x, -y]; 7298 } 7299 } 7300 fixAndSetPosition() { 7301 const [pageWidth, pageHeight] = this.pageDimensions; 7302 let { 7303 x, 7304 y, 7305 width, 7306 height 7307 } = this; 7308 width *= pageWidth; 7309 height *= pageHeight; 7310 x *= pageWidth; 7311 y *= pageHeight; 7312 switch (this.rotation) { 7313 case 0: 7314 x = Math.max(0, Math.min(pageWidth - width, x)); 7315 y = Math.max(0, Math.min(pageHeight - height, y)); 7316 break; 7317 case 90: 7318 x = Math.max(0, Math.min(pageWidth - height, x)); 7319 y = Math.min(pageHeight, Math.max(width, y)); 7320 break; 7321 case 180: 7322 x = Math.min(pageWidth, Math.max(width, x)); 7323 y = Math.min(pageHeight, Math.max(height, y)); 7324 break; 7325 case 270: 7326 x = Math.min(pageWidth, Math.max(height, x)); 7327 y = Math.max(0, Math.min(pageHeight - width, y)); 7328 break; 7329 } 7330 this.x = x /= pageWidth; 7331 this.y = y /= pageHeight; 7332 const [bx, by] = this.#getBaseTranslation(); 7333 x += bx; 7334 y += by; 7335 const { 7336 style 7337 } = this.div; 7338 style.left = `${(100 * x).toFixed(2)}%`; 7339 style.top = `${(100 * y).toFixed(2)}%`; 7340 this.moveInDOM(); 7341 } 7342 static #rotatePoint(x, y, angle) { 7343 switch (angle) { 7344 case 90: 7345 return [y, -x]; 7346 case 180: 7347 return [-x, -y]; 7348 case 270: 7349 return [-y, x]; 7350 default: 7351 return [x, y]; 7352 } 7353 } 7354 screenToPageTranslation(x, y) { 7355 return AnnotationEditor.#rotatePoint(x, y, this.parentRotation); 7356 } 7357 pageTranslationToScreen(x, y) { 7358 return AnnotationEditor.#rotatePoint(x, y, 360 - this.parentRotation); 7359 } 7360 #getRotationMatrix(rotation) { 7361 switch (rotation) { 7362 case 90: 7363 { 7364 const [pageWidth, pageHeight] = this.pageDimensions; 7365 return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; 7366 } 7367 case 180: 7368 return [-1, 0, 0, -1]; 7369 case 270: 7370 { 7371 const [pageWidth, pageHeight] = this.pageDimensions; 7372 return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; 7373 } 7374 default: 7375 return [1, 0, 0, 1]; 7376 } 7377 } 7378 get parentScale() { 7379 return this._uiManager.viewParameters.realScale; 7380 } 7381 get parentRotation() { 7382 return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; 7383 } 7384 get parentDimensions() { 7385 const { 7386 parentScale, 7387 pageDimensions: [pageWidth, pageHeight] 7388 } = this; 7389 const scaledWidth = pageWidth * parentScale; 7390 const scaledHeight = pageHeight * parentScale; 7391 return _util.FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; 7392 } 7393 setDims(width, height) { 7394 const [parentWidth, parentHeight] = this.parentDimensions; 7395 this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; 7396 if (!this.#keepAspectRatio) { 7397 this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; 7398 } 7399 this.#altTextButton?.classList.toggle("small", width < AnnotationEditor.SMALL_EDITOR_SIZE || height < AnnotationEditor.SMALL_EDITOR_SIZE); 7400 } 7401 fixDims() { 7402 const { 7403 style 7404 } = this.div; 7405 const { 7406 height, 7407 width 7408 } = style; 7409 const widthPercent = width.endsWith("%"); 7410 const heightPercent = !this.#keepAspectRatio && height.endsWith("%"); 7411 if (widthPercent && heightPercent) { 7412 return; 7413 } 7414 const [parentWidth, parentHeight] = this.parentDimensions; 7415 if (!widthPercent) { 7416 style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; 7417 } 7418 if (!this.#keepAspectRatio && !heightPercent) { 7419 style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; 7420 } 7421 } 7422 getInitialTranslation() { 7423 return [0, 0]; 7424 } 7425 #createResizers() { 7426 if (this.#resizersDiv) { 7427 return; 7428 } 7429 this.#resizersDiv = document.createElement("div"); 7430 this.#resizersDiv.classList.add("resizers"); 7431 const classes = ["topLeft", "topRight", "bottomRight", "bottomLeft"]; 7432 if (!this._willKeepAspectRatio) { 7433 classes.push("topMiddle", "middleRight", "bottomMiddle", "middleLeft"); 7434 } 7435 for (const name of classes) { 7436 const div = document.createElement("div"); 7437 this.#resizersDiv.append(div); 7438 div.classList.add("resizer", name); 7439 div.addEventListener("pointerdown", this.#resizerPointerdown.bind(this, name)); 7440 div.addEventListener("contextmenu", _display_utils.noContextMenu); 7441 } 7442 this.div.prepend(this.#resizersDiv); 7443 } 7444 #resizerPointerdown(name, event) { 7445 event.preventDefault(); 7446 const { 7447 isMac 7448 } = _util.FeatureTest.platform; 7449 if (event.button !== 0 || event.ctrlKey && isMac) { 7450 return; 7451 } 7452 const boundResizerPointermove = this.#resizerPointermove.bind(this, name); 7453 const savedDraggable = this._isDraggable; 7454 this._isDraggable = false;
7455 const pointerMoveOptions = { 7456 passive: true, 7457 capture: true 7458 }; 7459 window.addEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); 7460 const savedX = this.x; 7461 const savedY = this.y; 7462 const savedWidth = this.width; 7463 const savedHeight = this.height; 7464 const savedParentCursor = this.parent.div.style.cursor; 7465 const savedCursor = this.div.style.cursor; 7466 this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; 7467 const pointerUpCallback = () => { 7468 this._isDraggable = savedDraggable; 7469 window.removeEventListener("pointerup", pointerUpCallback); 7470 window.removeEventListener("blur", pointerUpCallback); 7471 window.removeEventListener("pointermove", boundResizerPointermove, pointerMoveOptions); 7472 this.parent.div.style.cursor = savedParentCursor; 7473 this.div.style.cursor = savedCursor; 7474 const newX = this.x; 7475 const newY = this.y; 7476 const newWidth = this.width; 7477 const newHeight = this.height; 7478 if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { 7479 return; 7480 } 7481 this.addCommands({ 7482 cmd: () => { 7483 this.width = newWidth; 7484 this.height = newHeight; 7485 this.x = newX; 7486 this.y = newY; 7487 const [parentWidth, parentHeight] = this.parentDimensions; 7488 this.setDims(parentWidth * newWidth, parentHeight * newHeight); 7489 this.fixAndSetPosition(); 7490 }, 7491 undo: () => { 7492 this.width = savedWidth; 7493 this.height = savedHeight; 7494 this.x = savedX; 7495 this.y = savedY; 7496 const [parentWidth, parentHeight] = this.parentDimensions; 7497 this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); 7498 this.fixAndSetPosition(); 7499 }, 7500 mustExec: true 7501 }); 7502 }; 7503 window.addEventListener("pointerup", pointerUpCallback); 7504 window.addEventListener("blur", pointerUpCallback); 7505 } 7506 #resizerPointermove(name, event) { 7507 const [parentWidth, parentHeight] = this.parentDimensions; 7508 const savedX = this.x; 7509 const savedY = this.y; 7510 const savedWidth = this.width; 7511 const savedHeight = this.height; 7512 const minWidth = AnnotationEditor.MIN_SIZE / parentWidth; 7513 const minHeight = AnnotationEditor.MIN_SIZE / parentHeight; 7514 const round = x => Math.round(x * 10000) / 10000; 7515 const rotationMatrix = this.#getRotationMatrix(this.rotation); 7516 const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; 7517 const invRotationMatrix = this.#getRotationMatrix(360 - this.rotation); 7518 const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; 7519 let getPoint; 7520 let getOpposite; 7521 let isDiagonal = false;
7522 let isHorizontal = false; 7523 switch (name) { 7524 case "topLeft": 7525 isDiagonal = true; 7526 getPoint = (w, h) => [0, 0]; 7527 getOpposite = (w, h) => [w, h]; 7528 break; 7529 case "topMiddle": 7530 getPoint = (w, h) => [w / 2, 0]; 7531 getOpposite = (w, h) => [w / 2, h]; 7532 break; 7533 case "topRight": 7534 isDiagonal = true; 7535 getPoint = (w, h) => [w, 0]; 7536 getOpposite = (w, h) => [0, h]; 7537 break; 7538 case "middleRight": 7539 isHorizontal = true; 7540 getPoint = (w, h) => [w, h / 2]; 7541 getOpposite = (w, h) => [0, h / 2]; 7542 break; 7543 case "bottomRight": 7544 isDiagonal = true; 7545 getPoint = (w, h) => [w, h]; 7546 getOpposite = (w, h) => [0, 0]; 7547 break; 7548 case "bottomMiddle": 7549 getPoint = (w, h) => [w / 2, h]; 7550 getOpposite = (w, h) => [w / 2, 0]; 7551 break; 7552 case "bottomLeft": 7553 isDiagonal = true; 7554 getPoint = (w, h) => [0, h]; 7555 getOpposite = (w, h) => [w, 0]; 7556 break; 7557 case "middleLeft": 7558 isHorizontal = true; 7559 getPoint = (w, h) => [0, h / 2]; 7560 getOpposite = (w, h) => [w, h / 2]; 7561 break; 7562 } 7563 const point = getPoint(savedWidth, savedHeight); 7564 const oppositePoint = getOpposite(savedWidth, savedHeight); 7565 let transfOppositePoint = transf(...oppositePoint); 7566 const oppositeX = round(savedX + transfOppositePoint[0]); 7567 const oppositeY = round(savedY + transfOppositePoint[1]); 7568 let ratioX = 1; 7569 let ratioY = 1; 7570 let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); 7571 [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); 7572 if (isDiagonal) { 7573 const oldDiag = Math.hypot(savedWidth, savedHeight); 7574 ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); 7575 } else if (isHorizontal) { 7576 ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; 7577 } else { 7578 ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; 7579 } 7580 const newWidth = round(savedWidth * ratioX); 7581 const newHeight = round(savedHeight * ratioY); 7582 transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); 7583 const newX = oppositeX - transfOppositePoint[0]; 7584 const newY = oppositeY - transfOppositePoint[1]; 7585 this.width = newWidth; 7586 this.height = newHeight; 7587 this.x = newX; 7588 this.y = newY; 7589 this.setDims(parentWidth * newWidth, parentHeight * newHeight); 7590 this.fixAndSetPosition(); 7591 } 7592 async addAltTextButton() { 7593 if (this.#altTextButton) { 7594 return; 7595 } 7596 const altText = this.#altTextButton = document.createElement("button"); 7597 altText.className = "altText"; 7598 const msg = await AnnotationEditor._l10nPromise.get("editor_alt_text_button_label"); 7599 altText.textContent = msg; 7600 altText.setAttribute("aria-label", msg); 7601 altText.tabIndex = "0"; 7602 altText.addEventListener("contextmenu", _display_utils.noContextMenu); 7603 altText.addEventListener("pointerdown", event => event.stopPropagation()); 7604 altText.addEventListener("click", event => { 7605 event.preventDefault(); 7606 this._uiManager.editAltText(this); 7607 }, { 7608 capture: true 7609 }); 7610 altText.addEventListener("keydown", event => { 7611 if (event.target === altText && event.key === "Enter") { 7612 event.preventDefault(); 7613 this._uiManager.editAltText(this); 7614 } 7615 }); 7616 this.#setAltTextButtonState(); 7617 this.div.append(altText); 7618 if (!AnnotationEditor.SMALL_EDITOR_SIZE) { 7619 const PERCENT = 40; 7620 AnnotationEditor.SMALL_EDITOR_SIZE = Math.min(128, Math.round(altText.getBoundingClientRect().width * (1 + PERCENT / 100))); 7621 } 7622 } 7623 async #setAltTextButtonState() { 7624 const button = this.#altTextButton; 7625 if (!button) { 7626 return; 7627 } 7628 if (!this.#altText && !this.#altTextDecorative) { 7629 button.classList.remove("done"); 7630 this.#altTextTooltip?.remove(); 7631 return; 7632 } 7633 AnnotationEditor._l10nPromise.get("editor_alt_text_edit_button_label").then(msg => { 7634 button.setAttribute("aria-label", msg); 7635 }); 7636 let tooltip = this.#altTextTooltip; 7637 if (!tooltip) { 7638 this.#altTextTooltip = tooltip = document.createElement("span"); 7639 tooltip.className = "tooltip"; 7640 tooltip.setAttribute("role", "tooltip"); 7641 const id = tooltip.id = `alt-text-tooltip-${this.id}`; 7642 button.setAttribute("aria-describedby", id); 7643 const DELAY_TO_SHOW_TOOLTIP = 100; 7644 button.addEventListener("mouseenter", () => { 7645 this.#altTextTooltipTimeout = setTimeout(() => { 7646 this.#altTextTooltipTimeout = null; 7647 this.#altTextTooltip.classList.add("show"); 7648 this._uiManager._eventBus.dispatch("reporttelemetry", { 7649 source: this, 7650 details: { 7651 type: "editing", 7652 subtype: this.editorType, 7653 data: { 7654 action: "alt_text_tooltip" 7655 } 7656 } 7657 }); 7658 }, DELAY_TO_SHOW_TOOLTIP); 7659 }); 7660 button.addEventListener("mouseleave", () => { 7661 clearTimeout(this.#altTextTooltipTimeout); 7662 this.#altTextTooltipTimeout = null; 7663 this.#altTextTooltip?.classList.remove("show"); 7664 }); 7665 } 7666 button.classList.add("done"); 7667 tooltip.innerText = this.#altTextDecorative ? await AnnotationEditor._l10nPromise.get("editor_alt_text_decorative_tooltip") : this.#altText; 7668 if (!tooltip.parentNode) { 7669 button.append(tooltip); 7670 } 7671 } 7672 getClientDimensions() { 7673 return this.div.getBoundingClientRect(); 7674 } 7675 get altTextData() { 7676 return { 7677 altText: this.#altText, 7678 decorative: this.#altTextDecorative 7679 }; 7680 } 7681 set altTextData(_ref2) { 7682 let { 7683 altText, 7684 decorative 7685 } = _ref2; 7686 if (this.#altText === altText && this.#altTextDecorative === decorative) { 7687 return; 7688 } 7689 this.#altText = altText; 7690 this.#altTextDecorative = decorative; 7691 this.#setAltTextButtonState(); 7692 } 7693 render() { 7694 this.div = document.createElement("div"); 7695 this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); 7696 this.div.className = this.name; 7697 this.div.setAttribute("id", this.id); 7698 this.div.setAttribute("tabIndex", 0); 7699 this.setInForeground(); 7700 this.div.addEventListener("focusin", this.#boundFocusin); 7701 this.div.addEventListener("focusout", this.#boundFocusout); 7702 const [parentWidth, parentHeight] = this.parentDimensions; 7703 if (this.parentRotation % 180 !== 0) { 7704 this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; 7705 this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; 7706 } 7707 const [tx, ty] = this.getInitialTranslation(); 7708 this.translate(tx, ty); 7709 (0, _tools.bindEvents)(this, this.div, ["pointerdown"]); 7710 return this.div; 7711 } 7712 pointerdown(event) { 7713 const { 7714 isMac 7715 } = _util.FeatureTest.platform; 7716 if (event.button !== 0 || event.ctrlKey && isMac) { 7717 event.preventDefault(); 7718 return; 7719 } 7720 this.#hasBeenClicked = true; 7721 this.#setUpDragSession(event); 7722 } 7723 #setUpDragSession(event) { 7724 if (!this._isDraggable) { 7725 return; 7726 } 7727 const isSelected = this._uiManager.isSelected(this); 7728 this._uiManager.setUpDragSession(); 7729 let pointerMoveOptions, pointerMoveCallback; 7730 if (isSelected) { 7731 pointerMoveOptions = { 7732 passive: true, 7733 capture: true 7734 }; 7735 pointerMoveCallback = e => { 7736 const [tx, ty] = this.screenToPageTranslation(e.movementX, e.movementY); 7737 this._uiManager.dragSelectedEditors(tx, ty); 7738 }; 7739 window.addEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); 7740 } 7741 const pointerUpCallback = () => { 7742 window.removeEventListener("pointerup", pointerUpCallback); 7743 window.removeEventListener("blur", pointerUpCallback); 7744 if (isSelected) { 7745 window.removeEventListener("pointermove", pointerMoveCallback, pointerMoveOptions); 7746 } 7747 this.#hasBeenClicked = false;
7748 if (!this._uiManager.endDragSession()) { 7749 const { 7750 isMac 7751 } = _util.FeatureTest.platform; 7752 if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { 7753 this.parent.toggleSelected(this); 7754 } else { 7755 this.parent.setSelected(this); 7756 } 7757 } 7758 }; 7759 window.addEventListener("pointerup", pointerUpCallback); 7760 window.addEventListener("blur", pointerUpCallback); 7761 } 7762 moveInDOM() { 7763 this.parent?.moveEditorInDOM(this); 7764 } 7765 _setParentAndPosition(parent, x, y) { 7766 parent.changeParent(this); 7767 this.x = x; 7768 this.y = y; 7769 this.fixAndSetPosition(); 7770 } 7771 getRect(tx, ty) { 7772 const scale = this.parentScale; 7773 const [pageWidth, pageHeight] = this.pageDimensions; 7774 const [pageX, pageY] = this.pageTranslation; 7775 const shiftX = tx / scale; 7776 const shiftY = ty / scale; 7777 const x = this.x * pageWidth; 7778 const y = this.y * pageHeight; 7779 const width = this.width * pageWidth; 7780 const height = this.height * pageHeight; 7781 switch (this.rotation) { 7782 case 0: 7783 return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; 7784 case 90: 7785 return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; 7786 case 180: 7787 return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; 7788 case 270: 7789 return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; 7790 default: 7791 throw new Error("Invalid rotation"); 7792 } 7793 } 7794 getRectInCurrentCoords(rect, pageHeight) { 7795 const [x1, y1, x2, y2] = rect; 7796 const width = x2 - x1; 7797 const height = y2 - y1; 7798 switch (this.rotation) { 7799 case 0: 7800 return [x1, pageHeight - y2, width, height]; 7801 case 90: 7802 return [x1, pageHeight - y1, height, width]; 7803 case 180: 7804 return [x2, pageHeight - y1, width, height]; 7805 case 270: 7806 return [x2, pageHeight - y2, height, width]; 7807 default: 7808 throw new Error("Invalid rotation"); 7809 } 7810 } 7811 onceAdded() {} 7812 isEmpty() { 7813 return false; 7814 } 7815 enableEditMode() { 7816 this.#isInEditMode = true; 7817 } 7818 disableEditMode() { 7819 this.#isInEditMode = false; 7820 } 7821 isInEditMode() { 7822 return this.#isInEditMode; 7823 } 7824 shouldGetKeyboardEvents() { 7825 return false; 7826 } 7827 needsToBeRebuilt() { 7828 return this.div && !this.isAttachedToDOM; 7829 } 7830 rebuild() { 7831 this.div?.addEventListener("focusin", this.#boundFocusin); 7832 this.div?.addEventListener("focusout", this.#boundFocusout); 7833 } 7834 serialize() { 7835 let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 7836 let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 7837 (0, _util.unreachable)("An editor must be serializable"); 7838 } 7839 static deserialize(data, parent, uiManager) { 7840 const editor = new this.prototype.constructor({ 7841 parent, 7842 id: parent.getNextId(), 7843 uiManager 7844 }); 7845 editor.rotation = data.rotation; 7846 const [pageWidth, pageHeight] = editor.pageDimensions; 7847 const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); 7848 editor.x = x / pageWidth; 7849 editor.y = y / pageHeight; 7850 editor.width = width / pageWidth; 7851 editor.height = height / pageHeight; 7852 return editor; 7853 } 7854 remove() { 7855 this.div.removeEventListener("focusin", this.#boundFocusin); 7856 this.div.removeEventListener("focusout", this.#boundFocusout); 7857 if (!this.isEmpty()) { 7858 this.commit(); 7859 } 7860 if (this.parent) { 7861 this.parent.remove(this); 7862 } else { 7863 this._uiManager.removeEditor(this); 7864 } 7865 this.#altTextButton?.remove(); 7866 this.#altTextButton = null; 7867 this.#altTextTooltip = null; 7868 } 7869 get isResizable() { 7870 return false; 7871 } 7872 makeResizable() { 7873 if (this.isResizable) { 7874 this.#createResizers(); 7875 this.#resizersDiv.classList.remove("hidden"); 7876 } 7877 } 7878 select() { 7879 this.makeResizable(); 7880 this.div?.classList.add("selectedEditor"); 7881 } 7882 unselect() { 7883 this.#resizersDiv?.classList.add("hidden"); 7884 this.div?.classList.remove("selectedEditor"); 7885 if (this.div?.contains(document.activeElement)) { 7886 this._uiManager.currentLayer.div.focus(); 7887 } 7888 } 7889 updateParams(type, value) {} 7890 disableEditing() { 7891 if (this.#altTextButton) { 7892 this.#altTextButton.hidden = true; 7893 } 7894 } 7895 enableEditing() { 7896 if (this.#altTextButton) { 7897 this.#altTextButton.hidden = false;
7898 } 7899 } 7900 enterInEditMode() {} 7901 get contentDiv() { 7902 return this.div; 7903 } 7904 get isEditing() { 7905 return this.#isEditing; 7906 } 7907 set isEditing(value) { 7908 this.#isEditing = value; 7909 if (!this.parent) { 7910 return; 7911 } 7912 if (value) { 7913 this.parent.setSelected(this); 7914 this.parent.setActiveEditor(this); 7915 } else { 7916 this.parent.setActiveEditor(null); 7917 } 7918 } 7919 setAspectRatio(width, height) { 7920 this.#keepAspectRatio = true; 7921 const aspectRatio = width / height; 7922 const { 7923 style 7924 } = this.div; 7925 style.aspectRatio = aspectRatio; 7926 style.height = "auto"; 7927 } 7928 static get MIN_SIZE() { 7929 return 16; 7930 } 7931} 7932exports.AnnotationEditor = AnnotationEditor; 7933class FakeEditor extends AnnotationEditor { 7934 constructor(params) { 7935 super(params); 7936 this.annotationElementId = params.annotationElementId; 7937 this.deleted = true; 7938 } 7939 serialize() { 7940 return { 7941 id: this.annotationElementId, 7942 deleted: true, 7943 pageIndex: this.pageIndex 7944 }; 7945 } 7946} 7947 7948/***/ }), 7949/* 165 */ 7950/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 7951 7952 7953 7954Object.defineProperty(exports, "__esModule", ({ 7955 value: true 7956})); 7957exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0; 7958exports.bindEvents = bindEvents; 7959exports.opacityToHex = opacityToHex; 7960__w_pdfjs_require__(93); 7961__w_pdfjs_require__(101); 7962__w_pdfjs_require__(102); 7963__w_pdfjs_require__(105); 7964__w_pdfjs_require__(107); 7965__w_pdfjs_require__(109); 7966__w_pdfjs_require__(113); 7967__w_pdfjs_require__(116); 7968__w_pdfjs_require__(123); 7969__w_pdfjs_require__(2); 7970__w_pdfjs_require__(89); 7971__w_pdfjs_require__(125); 7972__w_pdfjs_require__(136); 7973__w_pdfjs_require__(138); 7974__w_pdfjs_require__(141); 7975__w_pdfjs_require__(143); 7976__w_pdfjs_require__(145); 7977__w_pdfjs_require__(147); 7978__w_pdfjs_require__(166); 7979var _util = __w_pdfjs_require__(1); 7980var _display_utils = __w_pdfjs_require__(168); 7981function bindEvents(obj, element, names) { 7982 for (const name of names) { 7983 element.addEventListener(name, obj[name].bind(obj)); 7984 } 7985} 7986function opacityToHex(opacity) { 7987 return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); 7988} 7989class IdManager { 7990 #id = 0; 7991 getId() { 7992 return `${_util.AnnotationEditorPrefix}${this.#id++}`; 7993 } 7994} 7995class ImageManager { 7996 #baseId = (0, _util.getUuid)(); 7997 #id = 0; 7998 #cache = null; 7999 static get _isSVGFittingCanvas() { 8000 const svg = `data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>`; 8001 const canvas = new OffscreenCanvas(1, 3); 8002 const ctx = canvas.getContext("2d"); 8003 const image = new Image(); 8004 image.src = svg; 8005 const promise = image.decode().then(() => { 8006 ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); 8007 return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; 8008 }); 8009 return (0, _util.shadow)(this, "_isSVGFittingCanvas", promise); 8010 } 8011 async #get(key, rawData) { 8012 this.#cache ||= new Map(); 8013 let data = this.#cache.get(key); 8014 if (data === null) { 8015 return null; 8016 } 8017 if (data?.bitmap) { 8018 data.refCounter += 1; 8019 return data; 8020 } 8021 try { 8022 data ||= { 8023 bitmap: null, 8024 id: `image_${this.#baseId}_${this.#id++}`, 8025 refCounter: 0, 8026 isSvg: false 8027 }; 8028 let image; 8029 if (typeof rawData === "string") { 8030 data.url = rawData; 8031 const response = await fetch(rawData); 8032 if (!response.ok) { 8033 throw new Error(response.statusText); 8034 } 8035 image = await response.blob(); 8036 } else { 8037 image = data.file = rawData; 8038 } 8039 if (image.type === "image/svg+xml") { 8040 const mustRemoveAspectRatioPromise = ImageManager._isSVGFittingCanvas; 8041 const fileReader = new FileReader(); 8042 const imageElement = new Image(); 8043 const imagePromise = new Promise((resolve, reject) => { 8044 imageElement.onload = () => { 8045 data.bitmap = imageElement; 8046 data.isSvg = true; 8047 resolve(); 8048 }; 8049 fileReader.onload = async () => { 8050 const url = data.svgUrl = fileReader.result; 8051 imageElement.src = (await mustRemoveAspectRatioPromise) ? `${url}#svgView(preserveAspectRatio(none))` : url; 8052 }; 8053 imageElement.onerror = fileReader.onerror = reject; 8054 });
vendor: 6,170 bytes, lines 8055-8318
8055 fileReader.readAsDataURL(image); 8056 await imagePromise; 8057 } else { 8058 data.bitmap = await createImageBitmap(image); 8059 } 8060 data.refCounter = 1; 8061 } catch (e) { 8062 console.error(e); 8063 data = null; 8064 } 8065 this.#cache.set(key, data); 8066 if (data) { 8067 this.#cache.set(data.id, data); 8068 } 8069 return data; 8070 } 8071 async getFromFile(file) { 8072 const { 8073 lastModified, 8074 name, 8075 size, 8076 type 8077 } = file; 8078 return this.#get(`${lastModified}_${name}_${size}_${type}`, file); 8079 } 8080 async getFromUrl(url) { 8081 return this.#get(url, url); 8082 } 8083 async getFromId(id) { 8084 this.#cache ||= new Map(); 8085 const data = this.#cache.get(id); 8086 if (!data) { 8087 return null; 8088 } 8089 if (data.bitmap) { 8090 data.refCounter += 1; 8091 return data; 8092 } 8093 if (data.file) { 8094 return this.getFromFile(data.file); 8095 } 8096 return this.getFromUrl(data.url); 8097 } 8098 getSvgUrl(id) { 8099 const data = this.#cache.get(id); 8100 if (!data?.isSvg) { 8101 return null; 8102 } 8103 return data.svgUrl; 8104 } 8105 deleteId(id) { 8106 this.#cache ||= new Map(); 8107 const data = this.#cache.get(id); 8108 if (!data) { 8109 return; 8110 } 8111 data.refCounter -= 1; 8112 if (data.refCounter !== 0) { 8113 return; 8114 } 8115 data.bitmap = null; 8116 } 8117 isValidId(id) { 8118 return id.startsWith(`image_${this.#baseId}_`); 8119 } 8120} 8121class CommandManager { 8122 #commands = []; 8123 #locked = false; 8124 #maxSize; 8125 #position = -1; 8126 constructor() { 8127 let maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128; 8128 this.#maxSize = maxSize; 8129 } 8130 add(_ref) { 8131 let { 8132 cmd, 8133 undo, 8134 mustExec, 8135 type = NaN, 8136 overwriteIfSameType = false, 8137 keepUndo = false 8138 } = _ref; 8139 if (mustExec) { 8140 cmd(); 8141 } 8142 if (this.#locked) { 8143 return; 8144 } 8145 const save = { 8146 cmd, 8147 undo, 8148 type 8149 }; 8150 if (this.#position === -1) { 8151 if (this.#commands.length > 0) { 8152 this.#commands.length = 0; 8153 } 8154 this.#position = 0; 8155 this.#commands.push(save); 8156 return; 8157 } 8158 if (overwriteIfSameType && this.#commands[this.#position].type === type) { 8159 if (keepUndo) { 8160 save.undo = this.#commands[this.#position].undo; 8161 } 8162 this.#commands[this.#position] = save; 8163 return; 8164 } 8165 const next = this.#position + 1; 8166 if (next === this.#maxSize) { 8167 this.#commands.splice(0, 1); 8168 } else { 8169 this.#position = next; 8170 if (next < this.#commands.length) { 8171 this.#commands.splice(next); 8172 } 8173 } 8174 this.#commands.push(save); 8175 } 8176 undo() { 8177 if (this.#position === -1) { 8178 return; 8179 } 8180 this.#locked = true; 8181 this.#commands[this.#position].undo(); 8182 this.#locked = false; 8183 this.#position -= 1; 8184 } 8185 redo() { 8186 if (this.#position < this.#commands.length - 1) { 8187 this.#position += 1; 8188 this.#locked = true; 8189 this.#commands[this.#position].cmd(); 8190 this.#locked = false; 8191 } 8192 } 8193 hasSomethingToUndo() { 8194 return this.#position !== -1; 8195 } 8196 hasSomethingToRedo() { 8197 return this.#position < this.#commands.length - 1; 8198 } 8199 destroy() { 8200 this.#commands = null; 8201 } 8202} 8203exports.CommandManager = CommandManager; 8204class KeyboardManager { 8205 constructor(callbacks) { 8206 this.buffer = []; 8207 this.callbacks = new Map(); 8208 this.allKeys = new Set(); 8209 const { 8210 isMac 8211 } = _util.FeatureTest.platform; 8212 for (const [keys, callback, options = {}] of callbacks) { 8213 for (const key of keys) { 8214 const isMacKey = key.startsWith("mac+"); 8215 if (isMac && isMacKey) { 8216 this.callbacks.set(key.slice(4), { 8217 callback, 8218 options 8219 }); 8220 this.allKeys.add(key.split("+").at(-1)); 8221 } else if (!isMac && !isMacKey) { 8222 this.callbacks.set(key, { 8223 callback, 8224 options 8225 }); 8226 this.allKeys.add(key.split("+").at(-1)); 8227 } 8228 } 8229 } 8230 } 8231 #serialize(event) { 8232 if (event.altKey) { 8233 this.buffer.push("alt"); 8234 } 8235 if (event.ctrlKey) { 8236 this.buffer.push("ctrl"); 8237 } 8238 if (event.metaKey) { 8239 this.buffer.push("meta"); 8240 } 8241 if (event.shiftKey) { 8242 this.buffer.push("shift"); 8243 } 8244 this.buffer.push(event.key); 8245 const str = this.buffer.join("+"); 8246 this.buffer.length = 0; 8247 return str; 8248 } 8249 exec(self, event) { 8250 if (!this.allKeys.has(event.key)) { 8251 return; 8252 } 8253 const info = this.callbacks.get(this.#serialize(event)); 8254 if (!info) { 8255 return; 8256 } 8257 const { 8258 callback, 8259 options: { 8260 bubbles = false, 8261 args = [], 8262 checker = null 8263 } 8264 } = info; 8265 if (checker && !checker(self, event)) { 8266 return; 8267 } 8268 callback.bind(self, ...args)(); 8269 if (!bubbles) { 8270 event.stopPropagation(); 8271 event.preventDefault(); 8272 } 8273 } 8274} 8275exports.KeyboardManager = KeyboardManager; 8276class ColorManager { 8277 static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); 8278 get _colors() { 8279 const colors = new Map([["CanvasText", null], ["Canvas", null]]); 8280 (0, _display_utils.getColorValues)(colors); 8281 return (0, _util.shadow)(this, "_colors", colors); 8282 } 8283 convert(color) { 8284 const rgb = (0, _display_utils.getRGB)(color); 8285 if (!window.matchMedia("(forced-colors: active)").matches) { 8286 return rgb; 8287 } 8288 for (const [name, RGB] of this._colors) { 8289 if (RGB.every((x, i) => x === rgb[i])) { 8290 return ColorManager._colorsMapping.get(name); 8291 } 8292 } 8293 return rgb; 8294 } 8295 getHexCode(name) { 8296 const rgb = this._colors.get(name); 8297 if (!rgb) { 8298 return name; 8299 } 8300 return _util.Util.makeHexColor(...rgb); 8301 } 8302} 8303exports.ColorManager = ColorManager; 8304class AnnotationEditorUIManager { 8305 #activeEditor = null; 8306 #allEditors = new Map(); 8307 #allLayers = new Map(); 8308 #altTextManager = null; 8309 #annotationStorage = null; 8310 #commandManager = new CommandManager(); 8311 #currentPageIndex = 0; 8312 #deletedAnnotationsElementIds = new Set(); 8313 #draggingEditors = null; 8314 #editorTypes = null; 8315 #editorsToRescale = new Set(); 8316 #filterFactory = null; 8317 #idManager = new IdManager(); 8318 #isEnabled = false;
8319 #isWaiting = false; 8320 #lastActiveElement = null; 8321 #mode = _util.AnnotationEditorType.NONE; 8322 #selectedEditors = new Set(); 8323 #pageColors = null; 8324 #boundBlur = this.blur.bind(this); 8325 #boundFocus = this.focus.bind(this); 8326 #boundCopy = this.copy.bind(this); 8327 #boundCut = this.cut.bind(this); 8328 #boundPaste = this.paste.bind(this); 8329 #boundKeydown = this.keydown.bind(this); 8330 #boundOnEditingAction = this.onEditingAction.bind(this); 8331 #boundOnPageChanging = this.onPageChanging.bind(this); 8332 #boundOnScaleChanging = this.onScaleChanging.bind(this); 8333 #boundOnRotationChanging = this.onRotationChanging.bind(this); 8334 #previousStates = { 8335 isEditing: false, 8336 isEmpty: true, 8337 hasSomethingToUndo: false, 8338 hasSomethingToRedo: false, 8339 hasSelectedEditor: false 8340 }; 8341 #translation = [0, 0]; 8342 #translationTimeoutId = null; 8343 #container = null; 8344 #viewer = null; 8345 static TRANSLATE_SMALL = 1; 8346 static TRANSLATE_BIG = 10; 8347 static get _keyboardManager() { 8348 const proto = AnnotationEditorUIManager.prototype; 8349 const arrowChecker = self => { 8350 const { 8351 activeElement 8352 } = document; 8353 return activeElement && self.#container.contains(activeElement) && self.hasSomethingToControl(); 8354 }; 8355 const small = this.TRANSLATE_SMALL; 8356 const big = this.TRANSLATE_BIG; 8357 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, { 8358 args: [-small, 0], 8359 checker: arrowChecker 8360 }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { 8361 args: [-big, 0], 8362 checker: arrowChecker 8363 }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { 8364 args: [small, 0], 8365 checker: arrowChecker 8366 }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { 8367 args: [big, 0], 8368 checker: arrowChecker 8369 }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { 8370 args: [0, -small], 8371 checker: arrowChecker 8372 }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { 8373 args: [0, -big], 8374 checker: arrowChecker 8375 }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { 8376 args: [0, small], 8377 checker: arrowChecker 8378 }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { 8379 args: [0, big], 8380 checker: arrowChecker 8381 }]])); 8382 } 8383 constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors) { 8384 this.#container = container; 8385 this.#viewer = viewer; 8386 this.#altTextManager = altTextManager; 8387 this._eventBus = eventBus; 8388 this._eventBus._on("editingaction", this.#boundOnEditingAction); 8389 this._eventBus._on("pagechanging", this.#boundOnPageChanging); 8390 this._eventBus._on("scalechanging", this.#boundOnScaleChanging); 8391 this._eventBus._on("rotationchanging", this.#boundOnRotationChanging); 8392 this.#annotationStorage = pdfDocument.annotationStorage; 8393 this.#filterFactory = pdfDocument.filterFactory; 8394 this.#pageColors = pageColors; 8395 this.viewParameters = { 8396 realScale: _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS, 8397 rotation: 0 8398 }; 8399 } 8400 destroy() { 8401 this.#removeKeyboardManager(); 8402 this.#removeFocusManager(); 8403 this._eventBus._off("editingaction", this.#boundOnEditingAction); 8404 this._eventBus._off("pagechanging", this.#boundOnPageChanging); 8405 this._eventBus._off("scalechanging", this.#boundOnScaleChanging); 8406 this._eventBus._off("rotationchanging", this.#boundOnRotationChanging); 8407 for (const layer of this.#allLayers.values()) { 8408 layer.destroy(); 8409 } 8410 this.#allLayers.clear(); 8411 this.#allEditors.clear(); 8412 this.#editorsToRescale.clear(); 8413 this.#activeEditor = null; 8414 this.#selectedEditors.clear(); 8415 this.#commandManager.destroy(); 8416 this.#altTextManager.destroy(); 8417 } 8418 get hcmFilter() { 8419 return (0, _util.shadow)(this, "hcmFilter", this.#pageColors ? this.#filterFactory.addHCMFilter(this.#pageColors.foreground, this.#pageColors.background) : "none"); 8420 } 8421 get direction() { 8422 return (0, _util.shadow)(this, "direction", getComputedStyle(this.#container).direction); 8423 } 8424 editAltText(editor) { 8425 this.#altTextManager?.editAltText(this, editor); 8426 } 8427 onPageChanging(_ref2) { 8428 let { 8429 pageNumber 8430 } = _ref2; 8431 this.#currentPageIndex = pageNumber - 1; 8432 } 8433 focusMainContainer() { 8434 this.#container.focus(); 8435 } 8436 findParent(x, y) { 8437 for (const layer of this.#allLayers.values()) { 8438 const { 8439 x: layerX, 8440 y: layerY, 8441 width, 8442 height 8443 } = layer.div.getBoundingClientRect(); 8444 if (x >= layerX && x <= layerX + width && y >
8444= layerY && y <= layerY + height) { 8445 return layer; 8446 } 8447 } 8448 return null; 8449 } 8450 disableUserSelect() { 8451 let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 8452 this.#viewer.classList.toggle("noUserSelect", value); 8453 } 8454 addShouldRescale(editor) { 8455 this.#editorsToRescale.add(editor); 8456 } 8457 removeShouldRescale(editor) { 8458 this.#editorsToRescale.delete(editor); 8459 } 8460 onScaleChanging(_ref3) { 8461 let { 8462 scale 8463 } = _ref3; 8464 this.commitOrRemove(); 8465 this.viewParameters.realScale = scale * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS; 8466 for (const editor of this.#editorsToRescale) { 8467 editor.onScaleChanging(); 8468 } 8469 } 8470 onRotationChanging(_ref4) { 8471 let { 8472 pagesRotation 8473 } = _ref4; 8474 this.commitOrRemove(); 8475 this.viewParameters.rotation = pagesRotation; 8476 } 8477 addToAnnotationStorage(editor) { 8478 if (!editor.isEmpty() && this.#annotationStorage && !this.#annotationStorage.has(editor.id)) { 8479 this.#annotationStorage.setValue(editor.id, editor); 8480 } 8481 } 8482 #addFocusManager() { 8483 window.addEventListener("focus", this.#boundFocus); 8484 window.addEventListener("blur", this.#boundBlur); 8485 } 8486 #removeFocusManager() { 8487 window.removeEventListener("focus", this.#boundFocus); 8488 window.removeEventListener("blur", this.#boundBlur); 8489 } 8490 blur() { 8491 if (!this.hasSelection) { 8492 return; 8493 } 8494 const { 8495 activeElement 8496 } = document; 8497 for (const editor of this.#selectedEditors) { 8498 if (editor.div.contains(activeElement)) { 8499 this.#lastActiveElement = [editor, activeElement]; 8500 editor._focusEventsAllowed = false; 8501 break; 8502 } 8503 } 8504 } 8505 focus() { 8506 if (!this.#lastActiveElement) { 8507 return; 8508 } 8509 const [lastEditor, lastActiveElement] = this.#lastActiveElement; 8510 this.#lastActiveElement = null; 8511 lastActiveElement.addEventListener("focusin", () => { 8512 lastEditor._focusEventsAllowed = true; 8513 }, { 8514 once: true 8515 }); 8516 lastActiveElement.focus(); 8517 } 8518 #addKeyboardManager() { 8519 window.addEventListener("keydown", this.#boundKeydown, { 8520 capture: true 8521 }); 8522 } 8523 #removeKeyboardManager() { 8524 window.removeEventListener("keydown", this.#boundKeydown, { 8525 capture: true 8526 }); 8527 } 8528 #addCopyPasteListeners() { 8529 document.addEventListener("copy", this.#boundCopy); 8530 document.addEventListener("cut", this.#boundCut); 8531 document.addEventListener("paste", this.#boundPaste); 8532 } 8533 #removeCopyPasteListeners() { 8534 document.removeEventListener("copy", this.#boundCopy); 8535 document.removeEventListener("cut", this.#boundCut); 8536 document.removeEventListener("paste", this.#boundPaste); 8537 } 8538 addEditListeners() { 8539 this.#addKeyboardManager(); 8540 this.#addCopyPasteListeners(); 8541 } 8542 removeEditListeners() { 8543 this.#removeKeyboardManager(); 8544 this.#removeCopyPasteListeners(); 8545 } 8546 copy(event) { 8547 event.preventDefault(); 8548 this.#activeEditor?.commitOrRemove(); 8549 if (!this.hasSelection) { 8550 return; 8551 } 8552 const editors = []; 8553 for (const editor of this.#selectedEditors) { 8554 const serialized = editor.serialize(true); 8555 if (serialized) { 8556 editors.push(serialized); 8557 } 8558 } 8559 if (editors.length === 0) { 8560 return; 8561 } 8562 event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); 8563 } 8564 cut(event) { 8565 this.copy(event); 8566 this.delete(); 8567 } 8568 paste(event) { 8569 event.preventDefault(); 8570 const { 8571 clipboardData 8572 } = event; 8573 for (const item of clipboardData.items) { 8574 for (const editorType of this.#editorTypes) { 8575 if (editorType.isHandlingMimeForPasting(item.type)) { 8576 editorType.paste(item, this.currentLayer); 8577 return; 8578 } 8579 } 8580 } 8581 let data = clipboardData.getData("application/pdfjs"); 8582 if (!data) { 8583 return; 8584 } 8585 try { 8586 data = JSON.parse(data); 8587 } catch (ex) { 8588 (0, _util.warn)(`paste: "${ex.message}".`); 8589 return; 8590 } 8591 if (!Array.isArray(data)) { 8592 return; 8593 } 8594 this.unselectAll(); 8595 const layer = this.currentLayer; 8596 try { 8597 const newEditors = []; 8598 for (const editor of data) { 8599 const deserializedEditor = layer.deserialize(editor); 8600 if (!deserializedEditor) { 8601 return; 8602 } 8603 newEditors.push(deserializedEditor); 8604 } 8605 const cmd = () => { 8606 for (const editor of newEditors) { 8607 this.#addEditorToLayer(editor); 8608 } 8609 this.#selectEditors(newEditors); 8610 }; 8611 const undo = () => { 8612 for (const editor of newEditors) { 8613 editor.remove(); 8614 } 8615 }; 8616 this.addCommands({ 8617 cmd, 8618 undo, 8619 mustExec: true 8620 }); 8621 } catch (ex) { 8622 (0, _util.warn)(`paste: "${ex.message}".`); 8623 } 8624 } 8625 keydown(event) { 8626 if (!this.getActive()?.shouldGetKeyboardEvents()) { 8627 AnnotationEditorUIManager._keyboardManager.exec(this, event); 8628 } 8629 } 8630 onEditingAction(details) {
8631 if (["undo", "redo", "delete", "selectAll"].includes(details.name)) { 8632 this[details.name](); 8633 } 8634 } 8635 #dispatchUpdateStates(details) { 8636 const hasChanged = Object.entries(details).some(_ref5 => { 8637 let [key, value] = _ref5; 8638 return this.#previousStates[key] !== value; 8639 }); 8640 if (hasChanged) { 8641 this._eventBus.dispatch("annotationeditorstateschanged", { 8642 source: this, 8643 details: Object.assign(this.#previousStates, details) 8644 }); 8645 } 8646 } 8647 #dispatchUpdateUI(details) { 8648 this._eventBus.dispatch("annotationeditorparamschanged", { 8649 source: this, 8650 details 8651 }); 8652 } 8653 setEditingState(isEditing) { 8654 if (isEditing) { 8655 this.#addFocusManager(); 8656 this.#addKeyboardManager(); 8657 this.#addCopyPasteListeners(); 8658 this.#dispatchUpdateStates({ 8659 isEditing: this.#mode !== _util.AnnotationEditorType.NONE, 8660 isEmpty: this.#isEmpty(), 8661 hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), 8662 hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), 8663 hasSelectedEditor: false 8664 }); 8665 } else { 8666 this.#removeFocusManager(); 8667 this.#removeKeyboardManager(); 8668 this.#removeCopyPasteListeners(); 8669 this.#dispatchUpdateStates({ 8670 isEditing: false 8671 }); 8672 this.disableUserSelect(false); 8673 } 8674 } 8675 registerEditorTypes(types) { 8676 if (this.#editorTypes) { 8677 return; 8678 } 8679 this.#editorTypes = types; 8680 for (const editorType of this.#editorTypes) { 8681 this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); 8682 } 8683 } 8684 getId() { 8685 return this.#idManager.getId(); 8686 } 8687 get currentLayer() { 8688 return this.#allLayers.get(this.#currentPageIndex); 8689 } 8690 getLayer(pageIndex) { 8691 return this.#allLayers.get(pageIndex); 8692 } 8693 get currentPageIndex() { 8694 return this.#currentPageIndex; 8695 } 8696 addLayer(layer) { 8697 this.#allLayers.set(layer.pageIndex, layer); 8698 if (this.#isEnabled) { 8699 layer.enable(); 8700 } else { 8701 layer.disable(); 8702 } 8703 } 8704 removeLayer(layer) { 8705 this.#allLayers.delete(layer.pageIndex); 8706 } 8707 updateMode(mode) { 8708 let editId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 8709 if (this.#mode === mode) { 8710 return; 8711 } 8712 this.#mode = mode; 8713 if (mode === _util.AnnotationEditorType.NONE) { 8714 this.setEditingState(false); 8715 this.#disableAll(); 8716 return; 8717 } 8718 this.setEditingState(true); 8719 this.#enableAll(); 8720 this.unselectAll(); 8721 for (const layer of this.#allLayers.values()) { 8722 layer.updateMode(mode); 8723 } 8724 if (!editId) { 8725 return; 8726 } 8727 for (const editor of this.#allEditors.values()) { 8728 if (editor.annotationElementId === editId) { 8729 this.setSelected(editor); 8730 editor.enterInEditMode(); 8731 break; 8732 } 8733 } 8734 } 8735 updateToolbar(mode) { 8736 if (mode === this.#mode) { 8737 return; 8738 } 8739 this._eventBus.dispatch("switchannotationeditormode", { 8740 source: this, 8741 mode 8742 }); 8743 } 8744 updateParams(type, value) { 8745 if (!this.#editorTypes) { 8746 return; 8747 } 8748 if (type === _util.AnnotationEditorParamsType.CREATE) { 8749 this.currentLayer.addNewEditor(type); 8750 return; 8751 } 8752 for (const editor of this.#selectedEditors) { 8753 editor.updateParams(type, value); 8754 } 8755 for (const editorType of this.#editorTypes) { 8756 editorType.updateDefaultParams(type, value); 8757 } 8758 } 8759 enableWaiting() { 8760 let mustWait = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 8761 if (this.#isWaiting === mustWait) { 8762 return; 8763 } 8764 this.#isWaiting = mustWait; 8765 for (const layer of this.#allLayers.values()) { 8766 if (mustWait) { 8767 layer.disableClick(); 8768 } else { 8769 layer.enableClick(); 8770 } 8771 layer.div.classList.toggle("waiting", mustWait); 8772 } 8773 } 8774 #enableAll() { 8775 if (!this.#isEnabled) { 8776 this.#isEnabled = true; 8777 for (const layer of this.#allLayers.values()) { 8778 layer.enable(); 8779 } 8780 } 8781 } 8782 #disableAll() { 8783 this.unselectAll(); 8784 if (this.#isEnabled) { 8785 this.#isEnabled = false;
vendor: 10,346 bytes, lines 8786-9175
8786 for (const layer of this.#allLayers.values()) { 8787 layer.disable(); 8788 } 8789 } 8790 } 8791 getEditors(pageIndex) { 8792 const editors = []; 8793 for (const editor of this.#allEditors.values()) { 8794 if (editor.pageIndex === pageIndex) { 8795 editors.push(editor); 8796 } 8797 } 8798 return editors; 8799 } 8800 getEditor(id) { 8801 return this.#allEditors.get(id); 8802 } 8803 addEditor(editor) { 8804 this.#allEditors.set(editor.id, editor); 8805 } 8806 removeEditor(editor) { 8807 this.#allEditors.delete(editor.id); 8808 this.unselect(editor); 8809 if (!editor.annotationElementId || !this.#deletedAnnotationsElementIds.has(editor.annotationElementId)) { 8810 this.#annotationStorage?.remove(editor.id); 8811 } 8812 } 8813 addDeletedAnnotationElement(editor) { 8814 this.#deletedAnnotationsElementIds.add(editor.annotationElementId); 8815 editor.deleted = true; 8816 } 8817 isDeletedAnnotationElement(annotationElementId) { 8818 return this.#deletedAnnotationsElementIds.has(annotationElementId); 8819 } 8820 removeDeletedAnnotationElement(editor) { 8821 this.#deletedAnnotationsElementIds.delete(editor.annotationElementId); 8822 editor.deleted = false; 8823 } 8824 #addEditorToLayer(editor) { 8825 const layer = this.#allLayers.get(editor.pageIndex); 8826 if (layer) { 8827 layer.addOrRebuild(editor); 8828 } else { 8829 this.addEditor(editor); 8830 } 8831 } 8832 setActiveEditor(editor) { 8833 if (this.#activeEditor === editor) { 8834 return; 8835 } 8836 this.#activeEditor = editor; 8837 if (editor) { 8838 this.#dispatchUpdateUI(editor.propertiesToUpdate); 8839 } 8840 } 8841 toggleSelected(editor) { 8842 if (this.#selectedEditors.has(editor)) { 8843 this.#selectedEditors.delete(editor); 8844 editor.unselect(); 8845 this.#dispatchUpdateStates({ 8846 hasSelectedEditor: this.hasSelection 8847 }); 8848 return; 8849 } 8850 this.#selectedEditors.add(editor); 8851 editor.select(); 8852 this.#dispatchUpdateUI(editor.propertiesToUpdate); 8853 this.#dispatchUpdateStates({ 8854 hasSelectedEditor: true 8855 }); 8856 } 8857 setSelected(editor) { 8858 for (const ed of this.#selectedEditors) { 8859 if (ed !== editor) { 8860 ed.unselect(); 8861 } 8862 } 8863 this.#selectedEditors.clear(); 8864 this.#selectedEditors.add(editor); 8865 editor.select(); 8866 this.#dispatchUpdateUI(editor.propertiesToUpdate); 8867 this.#dispatchUpdateStates({ 8868 hasSelectedEditor: true 8869 }); 8870 } 8871 isSelected(editor) { 8872 return this.#selectedEditors.has(editor); 8873 } 8874 unselect(editor) { 8875 editor.unselect(); 8876 this.#selectedEditors.delete(editor); 8877 this.#dispatchUpdateStates({ 8878 hasSelectedEditor: this.hasSelection 8879 }); 8880 } 8881 get hasSelection() { 8882 return this.#selectedEditors.size !== 0; 8883 } 8884 undo() { 8885 this.#commandManager.undo(); 8886 this.#dispatchUpdateStates({ 8887 hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), 8888 hasSomethingToRedo: true, 8889 isEmpty: this.#isEmpty() 8890 }); 8891 } 8892 redo() { 8893 this.#commandManager.redo(); 8894 this.#dispatchUpdateStates({ 8895 hasSomethingToUndo: true, 8896 hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), 8897 isEmpty: this.#isEmpty() 8898 }); 8899 } 8900 addCommands(params) { 8901 this.#commandManager.add(params); 8902 this.#dispatchUpdateStates({ 8903 hasSomethingToUndo: true, 8904 hasSomethingToRedo: false, 8905 isEmpty: this.#isEmpty() 8906 }); 8907 } 8908 #isEmpty() { 8909 if (this.#allEditors.size === 0) { 8910 return true; 8911 } 8912 if (this.#allEditors.size === 1) { 8913 for (const editor of this.#allEditors.values()) { 8914 return editor.isEmpty(); 8915 } 8916 } 8917 return false; 8918 } 8919 delete() { 8920 this.commitOrRemove(); 8921 if (!this.hasSelection) { 8922 return; 8923 } 8924 const editors = [...this.#selectedEditors]; 8925 const cmd = () => { 8926 for (const editor of editors) { 8927 editor.remove(); 8928 } 8929 }; 8930 const undo = () => { 8931 for (const editor of editors) { 8932 this.#addEditorToLayer(editor); 8933 } 8934 }; 8935 this.addCommands({ 8936 cmd, 8937 undo, 8938 mustExec: true 8939 }); 8940 } 8941 commitOrRemove() { 8942 this.#activeEditor?.commitOrRemove(); 8943 } 8944 hasSomethingToControl() { 8945 return this.#activeEditor || this.hasSelection; 8946 } 8947 #selectEditors(editors) { 8948 this.#selectedEditors.clear(); 8949 for (const editor of editors) { 8950 if (editor.isEmpty()) { 8951 continue; 8952 } 8953 this.#selectedEditors.add(editor); 8954 editor.select(); 8955 } 8956 this.#dispatchUpdateStates({ 8957 hasSelectedEditor: true 8958 }); 8959 } 8960 selectAll() { 8961 for (const editor of this.#selectedEditors) { 8962 editor.commit(); 8963 } 8964 this.#selectEditors(this.#allEditors.values()); 8965 } 8966 unselectAll() { 8967 if (this.#activeEditor) { 8968 this.#activeEditor.commitOrRemove(); 8969 return; 8970 } 8971 if (!this.hasSelection) { 8972 return; 8973 } 8974 for (const editor of this.#selectedEditors) { 8975 editor.unselect(); 8976 } 8977 this.#selectedEditors.clear(); 8978 this.#dispatchUpdateStates({ 8979 hasSelectedEditor: false 8980 }); 8981 } 8982 translateSelectedEditors(x, y) { 8983 let noCommit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 8984 if (!noCommit) { 8985 this.commitOrRemove(); 8986 } 8987 if (!this.hasSelection) { 8988 return; 8989 } 8990 this.#translation[0] += x; 8991 this.#translation[1] += y; 8992 const [totalX, totalY] = this.#translation; 8993 const editors = [...this.#selectedEditors]; 8994 const TIME_TO_WAIT = 1000; 8995 if (this.#translationTimeoutId) { 8996 clearTimeout(this.#translationTimeoutId); 8997 } 8998 this.#translationTimeoutId = setTimeout(() => { 8999 this.#translationTimeoutId = null; 9000 this.#translation[0] = this.#translation[1] = 0; 9001 this.addCommands({ 9002 cmd: () => { 9003 for (const editor of editors) { 9004 if (this.#allEditors.has(editor.id)) { 9005 editor.translateInPage(totalX, totalY); 9006 } 9007 } 9008 }, 9009 undo: () => { 9010 for (const editor of editors) { 9011 if (this.#allEditors.has(editor.id)) { 9012 editor.translateInPage(-totalX, -totalY); 9013 } 9014 } 9015 }, 9016 mustExec: false 9017 }); 9018 }, TIME_TO_WAIT); 9019 for (const editor of editors) { 9020 editor.translateInPage(x, y); 9021 } 9022 } 9023 setUpDragSession() { 9024 if (!this.hasSelection) { 9025 return; 9026 } 9027 this.disableUserSelect(true); 9028 this.#draggingEditors = new Map(); 9029 for (const editor of this.#selectedEditors) { 9030 this.#draggingEditors.set(editor, { 9031 savedX: editor.x, 9032 savedY: editor.y, 9033 savedPageIndex: editor.pageIndex, 9034 newX: 0, 9035 newY: 0, 9036 newPageIndex: -1 9037 }); 9038 } 9039 } 9040 endDragSession() { 9041 if (!this.#draggingEditors) { 9042 return false; 9043 } 9044 this.disableUserSelect(false); 9045 const map = this.#draggingEditors; 9046 this.#draggingEditors = null; 9047 let mustBeAddedInUndoStack = false; 9048 for (const [{ 9049 x, 9050 y, 9051 pageIndex 9052 }, value] of map) { 9053 value.newX = x; 9054 value.newY = y; 9055 value.newPageIndex = pageIndex; 9056 mustBeAddedInUndoStack ||= x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex; 9057 } 9058 if (!mustBeAddedInUndoStack) { 9059 return false; 9060 } 9061 const move = (editor, x, y, pageIndex) => { 9062 if (this.#allEditors.has(editor.id)) { 9063 const parent = this.#allLayers.get(pageIndex); 9064 if (parent) { 9065 editor._setParentAndPosition(parent, x, y); 9066 } else { 9067 editor.pageIndex = pageIndex; 9068 editor.x = x; 9069 editor.y = y; 9070 } 9071 } 9072 }; 9073 this.addCommands({ 9074 cmd: () => { 9075 for (const [editor, { 9076 newX, 9077 newY, 9078 newPageIndex 9079 }] of map) { 9080 move(editor, newX, newY, newPageIndex); 9081 } 9082 }, 9083 undo: () => { 9084 for (const [editor, { 9085 savedX, 9086 savedY, 9087 savedPageIndex 9088 }] of map) { 9089 move(editor, savedX, savedY, savedPageIndex); 9090 } 9091 }, 9092 mustExec: true 9093 }); 9094 return true; 9095 } 9096 dragSelectedEditors(tx, ty) { 9097 if (!this.#draggingEditors) { 9098 return; 9099 } 9100 for (const editor of this.#draggingEditors.keys()) { 9101 editor.drag(tx, ty); 9102 } 9103 } 9104 rebuild(editor) { 9105 if (editor.parent === null) { 9106 const parent = this.getLayer(editor.pageIndex); 9107 if (parent) { 9108 parent.changeParent(editor); 9109 parent.addOrRebuild(editor); 9110 } else { 9111 this.addEditor(editor); 9112 this.addToAnnotationStorage(editor); 9113 editor.rebuild(); 9114 } 9115 } else { 9116 editor.parent.addOrRebuild(editor); 9117 } 9118 } 9119 isActive(editor) { 9120 return this.#activeEditor === editor; 9121 } 9122 getActive() { 9123 return this.#activeEditor; 9124 } 9125 getMode() { 9126 return this.#mode; 9127 } 9128 get imageManager() { 9129 return (0, _util.shadow)(this, "imageManager", new ImageManager()); 9130 } 9131} 9132exports.AnnotationEditorUIManager = AnnotationEditorUIManager; 9133 9134/***/ }), 9135/* 166 */ 9136/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 9137 9138 9139var $ = __w_pdfjs_require__(3); 9140var DESCRIPTORS = __w_pdfjs_require__(6); 9141var global = __w_pdfjs_require__(4); 9142var getBuiltIn = __w_pdfjs_require__(24); 9143var uncurryThis = __w_pdfjs_require__(14); 9144var call = __w_pdfjs_require__(8); 9145var isCallable = __w_pdfjs_require__(21); 9146var isObject = __w_pdfjs_require__(20); 9147var isArray = __w_pdfjs_require__(91); 9148var hasOwn = __w_pdfjs_require__(39); 9149var toString = __w_pdfjs_require__(77); 9150var lengthOfArrayLike = __w_pdfjs_require__(64); 9151var createProperty = __w_pdfjs_require__(159); 9152var fails = __w_pdfjs_require__(7); 9153var parseJSONString = __w_pdfjs_require__(167); 9154var NATIVE_SYMBOL = __w_pdfjs_require__(27); 9155var JSON = global.JSON; 9156var Number = global.Number; 9157var SyntaxError = global.SyntaxError; 9158var nativeParse = JSON && JSON.parse; 9159var enumerableOwnProperties = getBuiltIn('Object', 'keys'); 9160var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; 9161var at = uncurryThis(''.charAt); 9162var slice = uncurryThis(''.slice); 9163var exec = uncurryThis(/./.exec); 9164var push = uncurryThis([].push); 9165var IS_DIGIT = /^\d$/; 9166var IS_NON_ZERO_DIGIT = /^[1-9]$/; 9167var IS_NUMBER_START = /^(?:-|\d)$/; 9168var IS_WHITESPACE = /^[\t\n\r ]$/; 9169var PRIMITIVE = 0; 9170var OBJECT = 1; 9171var $parse = function (source, reviver) { 9172 source = toString(source); 9173 var context = new Context(source, 0, ''); 9174 var root = context.parse(); 9175 var value = root.value;
vendor: 4,608 bytes, lines 9176-9345
9176 var endIndex = context.skip(IS_WHITESPACE, root.end); 9177 if (endIndex < source.length) { 9178 throw SyntaxError('Unexpected extra character: "' + at(source, endIndex) + '" after the parsed data at: ' + endIndex); 9179 } 9180 return isCallable(reviver) ? internalize({ '': value }, '', reviver, root) : value; 9181}; 9182var internalize = function (holder, name, reviver, node) { 9183 var val = holder[name]; 9184 var unmodified = node && val === node.value; 9185 var context = unmodified && typeof node.source == 'string' ? { source: node.source } : {}; 9186 var elementRecordsLen, keys, len, i, P; 9187 if (isObject(val)) { 9188 var nodeIsArray = isArray(val); 9189 var nodes = unmodified ? node.nodes : nodeIsArray ? [] : {}; 9190 if (nodeIsArray) { 9191 elementRecordsLen = nodes.length; 9192 len = lengthOfArrayLike(val); 9193 for (i = 0; i < len; i++) { 9194 internalizeProperty(val, i, internalize(val, '' + i, reviver, i < elementRecordsLen ? nodes[i] : undefined)); 9195 } 9196 } else { 9197 keys = enumerableOwnProperties(val); 9198 len = lengthOfArrayLike(keys); 9199 for (i = 0; i < len; i++) { 9200 P = keys[i]; 9201 internalizeProperty(val, P, internalize(val, P, reviver, hasOwn(nodes, P) ? nodes[P] : undefined)); 9202 } 9203 } 9204 } 9205 return call(reviver, holder, name, val, context); 9206}; 9207var internalizeProperty = function (object, key, value) { 9208 if (DESCRIPTORS) { 9209 var descriptor = getOwnPropertyDescriptor(object, key); 9210 if (descriptor && !descriptor.configurable) 9211 return; 9212 } 9213 if (value === undefined) 9214 delete object[key]; 9215 else 9216 createProperty(object, key, value); 9217}; 9218var Node = function (value, end, source, nodes) { 9219 this.value = value; 9220 this.end = end; 9221 this.source = source; 9222 this.nodes = nodes; 9223}; 9224var Context = function (source, index) { 9225 this.source = source; 9226 this.index = index; 9227}; 9228Context.prototype = { 9229 fork: function (nextIndex) { 9230 return new Context(this.source, nextIndex); 9231 }, 9232 parse: function () { 9233 var source = this.source; 9234 var i = this.skip(IS_WHITESPACE, this.index); 9235 var fork = this.fork(i); 9236 var chr = at(source, i); 9237 if (exec(IS_NUMBER_START, chr)) 9238 return fork.number(); 9239 switch (chr) { 9240 case '{': 9241 return fork.object(); 9242 case '[': 9243 return fork.array(); 9244 case '"': 9245 return fork.string(); 9246 case 't': 9247 return fork.keyword(true); 9248 case 'f': 9249 return fork.keyword(false); 9250 case 'n': 9251 return fork.keyword(null); 9252 } 9253 throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i); 9254 }, 9255 node: function (type, value, start, end, nodes) { 9256 return new Node(value, end, type ? null : slice(this.source, start, end), nodes); 9257 }, 9258 object: function () { 9259 var source = this.source; 9260 var i = this.index + 1; 9261 var expectKeypair = false; 9262 var object = {}; 9263 var nodes = {}; 9264 while (i < source.length) { 9265 i = this.until([ 9266 '"', 9267 '}' 9268 ], i); 9269 if (at(source, i) === '}' && !expectKeypair) { 9270 i++; 9271 break; 9272 } 9273 var result = this.fork(i).string(); 9274 var key = result.value; 9275 i = result.end; 9276 i = this.until([':'], i) + 1; 9277 i = this.skip(IS_WHITESPACE, i); 9278 result = this.fork(i).parse(); 9279 createProperty(nodes, key, result); 9280 createProperty(object, key, result.value); 9281 i = this.until([ 9282 ',', 9283 '}' 9284 ], result.end); 9285 var chr = at(source, i); 9286 if (chr === ',') { 9287 expectKeypair = true; 9288 i++; 9289 } else if (chr === '}') { 9290 i++; 9291 break; 9292 } 9293 } 9294 return this.node(OBJECT, object, this.index, i, nodes); 9295 }, 9296 array: function () { 9297 var source = this.source; 9298 var i = this.index + 1; 9299 var expectElement = false; 9300 var array = []; 9301 var nodes = []; 9302 while (i < source.length) { 9303 i = this.skip(IS_WHITESPACE, i); 9304 if (at(source, i) === ']' && !expectElement) { 9305 i++; 9306 break; 9307 } 9308 var result = this.fork(i).parse(); 9309 push(nodes, result); 9310 push(array, result.value); 9311 i = this.until([ 9312 ',', 9313 ']' 9314 ], result.end); 9315 if (at(source, i) === ',') { 9316 expectElement = true; 9317 i++; 9318 } else if (at(source, i) === ']') { 9319 i++; 9320 break; 9321 } 9322 } 9323 return this.node(OBJECT, array, this.index, i, nodes); 9324 }, 9325 string: function () { 9326 var index = this.index; 9327 var parsed = parseJSONString(this.source, this.index + 1); 9328 return this.node(PRIMITIVE, parsed.value, index, parsed.end); 9329 }, 9330 number: function () { 9331 var source = this.source; 9332 var startIndex = this.index; 9333 var i = startIndex; 9334 if (at(source, i) === '-') 9335 i++; 9336 if (at(source, i) === '0') 9337 i++; 9338 else if (exec(IS_NON_ZERO_DIGIT, at(source, i))) 9339 i = this.skip(IS_DIGIT, ++i); 9340 else 9341 throw SyntaxError('Failed to parse number at: ' + i); 9342 if (at(source, i) === '.') 9343 i = this.skip(IS_DIGIT, ++i); 9344 if (at(source, i) === 'e' || at(source, i) === 'E') { 9345 i++;
9346 if (at(source, i) === '+' || at(source, i) === '-') 9347 i++; 9348 var exponentStartIndex = i; 9349 i = this.skip(IS_DIGIT, i); 9350 if (exponentStartIndex === i) 9351 throw SyntaxError("Failed to parse number's exponent value at: " + i); 9352 } 9353 return this.node(PRIMITIVE, Number(slice(source, startIndex, i)), startIndex, i); 9354 }, 9355 keyword: function (value) { 9356 var keyword = '' + value; 9357 var index = this.index; 9358 var endIndex = index + keyword.length; 9359 if (slice(this.source, index, endIndex) !== keyword) 9360 throw SyntaxError('Failed to parse value at: ' + index); 9361 return this.node(PRIMITIVE, value, index, endIndex); 9362 }, 9363 skip: function (regex, i) { 9364 var source = this.source; 9365 for (; i < source.length; i++) 9366 if (!exec(regex, at(source, i))) 9367 break; 9368 return i; 9369 }, 9370 until: function (array, i) { 9371 i = this.skip(IS_WHITESPACE, i); 9372 var chr = at(this.source, i); 9373 for (var j = 0; j < array.length; j++) 9374 if (array[j] === chr) 9375 return i; 9376 throw SyntaxError('Unexpected character: "' + chr + '" at: ' + i); 9377 } 9378}; 9379var NO_SOURCE_SUPPORT = fails(function () { 9380 var unsafeInt = '9007199254740993'; 9381 var source; 9382 nativeParse(unsafeInt, function (key, value, context) { 9383 source = context.source; 9384 }); 9385 return source !== unsafeInt; 9386}); 9387var PROPER_BASE_PARSE = NATIVE_SYMBOL && !fails(function () { 9388 return 1 / nativeParse('-0 \t') !== -Infinity; 9389}); 9390$({ 9391 target: 'JSON', 9392 stat: true, 9393 forced: NO_SOURCE_SUPPORT 9394}, { 9395 parse: function parse(text, reviver) { 9396 return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text) : $parse(text, reviver); 9397 } 9398}); 9399 9400/***/ }), 9401/* 167 */ 9402/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 9403 9404 9405var uncurryThis = __w_pdfjs_require__(14); 9406var hasOwn = __w_pdfjs_require__(39); 9407var $SyntaxError = SyntaxError; 9408var $parseInt = parseInt; 9409var fromCharCode = String.fromCharCode; 9410var at = uncurryThis(''.charAt); 9411var slice = uncurryThis(''.slice); 9412var exec = uncurryThis(/./.exec); 9413var codePoints = { 9414 '\\"': '"', 9415 '\\\\': '\\', 9416 '\\/': '/', 9417 '\\b': '\b', 9418 '\\f': '\f', 9419 '\\n': '\n', 9420 '\\r': '\r', 9421 '\\t': '\t' 9422}; 9423var IS_4_HEX_DIGITS = /^[\da-f]{4}$/i; 9424var IS_C0_CONTROL_CODE = /^[\u0000-\u001F]$/; 9425module.exports = function (source, i) { 9426 var unterminated = true; 9427 var value = ''; 9428 while (i < source.length) { 9429 var chr = at(source, i); 9430 if (chr === '\\') { 9431 var twoChars = slice(source, i, i + 2); 9432 if (hasOwn(codePoints, twoChars)) { 9433 value += codePoints[twoChars]; 9434 i += 2; 9435 } else if (twoChars === '\\u') { 9436 i += 2; 9437 var fourHexDigits = slice(source, i, i + 4); 9438 if (!exec(IS_4_HEX_DIGITS, fourHexDigits)) 9439 throw $SyntaxError('Bad Unicode escape at: ' + i); 9440 value += fromCharCode($parseInt(fourHexDigits, 16)); 9441 i += 4; 9442 } else 9443 throw $SyntaxError('Unknown escape sequence: "' + twoChars + '"'); 9444 } else if (chr === '"') { 9445 unterminated = false; 9446 i++; 9447 break; 9448 } else { 9449 if (exec(IS_C0_CONTROL_CODE, chr)) 9450 throw $SyntaxError('Bad control character in string literal at: ' + i); 9451 value += chr; 9452 i++; 9453 } 9454 } 9455 if (unterminated) 9456 throw $SyntaxError('Unterminated string at: ' + i); 9457 return { 9458 value: value, 9459 end: i 9460 }; 9461}; 9462 9463/***/ }), 9464/* 168 */ 9465/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 9466 9467 9468 9469Object.defineProperty(exports, "__esModule", ({ 9470 value: true 9471})); 9472exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMFilterFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; 9473exports.deprecated = deprecated; 9474exports.getColorValues = getColorValues; 9475exports.getCurrentTransform = getCurrentTransform; 9476exports.getCurrentTransformInverse = getCurrentTransformInverse; 9477exports.getFilenameFromUrl = getFilenameFromUrl; 9478exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; 9479exports.getRGB = getRGB; 9480exports.getXfaPageViewport = getXfaPageViewport; 9481exports.isDataScheme = isDataScheme; 9482exports.isPdfFile = isPdfFile; 9483exports.isValidFetchUrl = isValidFetchUrl; 9484exports.loadScript = loadScript; 9485exports.noContextMenu = noContextMenu; 9486exports.setLayerDimensions = setLayerDimensions; 9487__w_pdfjs_require__(2); 9488__w_pdfjs_require__(93); 9489__w_pdfjs_require__(101); 9490__w_pdfjs_require__(102); 9491__w_pdfjs_require__(105); 9492__w_pdfjs_require__(107); 9493__w_pdfjs_require__(109); 9494__w_pdfjs_require__(113); 9495__w_pdfjs_require__(116); 9496__w_pdfjs_require__(123); 9497__w_pdfjs_require__(89); 9498__w_pdfjs_require__(84); 9499__w_pdfjs_require__(86); 9500__w_pdfjs_require__(87); 9501var _base_factory = __w_pdfjs_require__(169); 9502var _util = __w_pdfjs_require__(1); 9503const SVG_NS = "http://www.w3.org/2000/svg"; 9504class PixelsPerInch { 9505 static CSS = 96.0; 9506 static PDF = 72.0; 9507 static PDF_TO_CSS_UNITS = this.CSS / this.PDF; 9508} 9509exports.PixelsPerInch = PixelsPerInch; 9510class DOMFilterFactory extends _base_factory.BaseFilterFactory { 9511 #_cache; 9512 #_defs; 9513 #docId; 9514 #document; 9515 #hcmFilter; 9516 #hcmKey; 9517 #hcmUrl; 9518 #hcmHighlightFilter; 9519 #hcmHighlightKey; 9520 #hcmHighlightUrl; 9521 #id = 0; 9522 constructor() { 9523 let { 9524 docId, 9525 ownerDocument = globalThis.document 9526 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 9527 super(); 9528 this.#docId = docId; 9529 this.#document = ownerDocument; 9530 } 9531 get #cache() { 9532 return this.#_cache ||= new Map(); 9533 } 9534 get #defs() { 9535 if (!this.#_defs) { 9536 const div = this.#document.createElement("div"); 9537 const { 9538 style 9539 } = div; 9540 style.visibility = "hidden"; 9541 style.contain = "strict"; 9542 style.width = style.height = 0; 9543 style.position = "absolute"; 9544 style.top = style.left = 0; 9545 style.zIndex = -1; 9546 const svg = this.#document.createElementNS(SVG_NS, "svg"); 9547 svg.setAttribute("width", 0); 9548 svg.setAttribute("height", 0); 9549 this.#_defs = this.#document.createElementNS(SVG_NS, "defs"); 9550 div.append(svg); 9551 svg.append(this.#_defs); 9552 this.#document.body.append(div); 9553 } 9554 return this.#_defs; 9555 } 9556 addFilter(maps) { 9557 if (!maps) { 9558 return "none"; 9559 } 9560 let value = this.#cache.get(maps); 9561 if (value) { 9562 return value; 9563 } 9564 let tableR, tableG, tableB, key; 9565 if (maps.length === 1) { 9566 const mapR = maps[0]; 9567 const buffer = new Array(256); 9568 for (let i = 0; i < 256; i++) {
9569 buffer[i] = mapR[i] / 255; 9570 } 9571 key = tableR = tableG = tableB = buffer.join(","); 9572 } else { 9573 const [mapR, mapG, mapB] = maps; 9574 const bufferR = new Array(256); 9575 const bufferG = new Array(256); 9576 const bufferB = new Array(256); 9577 for (let i = 0; i < 256; i++) { 9578 bufferR[i] = mapR[i] / 255; 9579 bufferG[i] = mapG[i] / 255; 9580 bufferB[i] = mapB[i] / 255; 9581 } 9582 tableR = bufferR.join(","); 9583 tableG = bufferG.join(","); 9584 tableB = bufferB.join(","); 9585 key = `${tableR}${tableG}${tableB}`; 9586 } 9587 value = this.#cache.get(key); 9588 if (value) { 9589 this.#cache.set(maps, value); 9590 return value; 9591 } 9592 const id = `g_${this.#docId}_transfer_map_${this.#id++}`; 9593 const url = `url(#${id})`; 9594 this.#cache.set(maps, url); 9595 this.#cache.set(key, url); 9596 const filter = this.#createFilter(id); 9597 this.#addTransferMapConversion(tableR, tableG, tableB, filter); 9598 return url; 9599 } 9600 addHCMFilter(fgColor, bgColor) { 9601 const key = `${fgColor}-${bgColor}`; 9602 if (this.#hcmKey === key) { 9603 return this.#hcmUrl; 9604 } 9605 this.#hcmKey = key; 9606 this.#hcmUrl = "none"; 9607 this.#hcmFilter?.remove(); 9608 if (!fgColor || !bgColor) { 9609 return this.#hcmUrl; 9610 } 9611 const fgRGB = this.#getRGB(fgColor); 9612 fgColor = _util.Util.makeHexColor(...fgRGB); 9613 const bgRGB = this.#getRGB(bgColor); 9614 bgColor = _util.Util.makeHexColor(...bgRGB); 9615 this.#defs.style.color = ""; 9616 if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { 9617 return this.#hcmUrl; 9618 } 9619 const map = new Array(256); 9620 for (let i = 0; i <= 255; i++) { 9621 const x = i / 255; 9622 map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; 9623 } 9624 const table = map.join(","); 9625 const id = `g_${this.#docId}_hcm_filter`; 9626 const filter = this.#hcmHighlightFilter = this.#createFilter(id); 9627 this.#addTransferMapConversion(table, table, table, filter); 9628 this.#addGrayConversion(filter); 9629 const getSteps = (c, n) => { 9630 const start = fgRGB[c] / 255; 9631 const end = bgRGB[c] / 255; 9632 const arr = new Array(n + 1); 9633 for (let i = 0; i <= n; i++) { 9634 arr[i] = start + i / n * (end - start); 9635 } 9636 return arr.join(","); 9637 }; 9638 this.#addTransferMapConversion(getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); 9639 this.#hcmUrl = `url(#${id})`; 9640 return this.#hcmUrl; 9641 } 9642 addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { 9643 const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; 9644 if (this.#hcmHighlightKey === key) { 9645 return this.#hcmHighlightUrl; 9646 } 9647 this.#hcmHighlightKey = key; 9648 this.#hcmHighlightUrl = "none"; 9649 this.#hcmHighlightFilter?.remove(); 9650 if (!fgColor || !bgColor) { 9651 return this.#hcmHighlightUrl; 9652 } 9653 const [fgRGB, bgRGB] = [fgColor, bgColor].map(this.#getRGB.bind(this)); 9654 let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); 9655 let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); 9656 let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(this.#getRGB.bind(this)); 9657 if (bgGray < fgGray) { 9658 [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; 9659 } 9660 this.#defs.style.color = ""; 9661 const getSteps = (fg, bg, n) => { 9662 const arr = new Array(256); 9663 const step = (bgGray - fgGray) / n; 9664 const newStart = fg / 255; 9665 const newStep = (bg - fg) / (255 * n); 9666 let prev = 0; 9667 for (let i = 0; i <= n; i++) { 9668 const k = Math.round(fgGray + i * step); 9669 const value = newStart + i * newStep; 9670 for (let j = prev; j <= k; j++) { 9671 arr[j] = value; 9672 } 9673 prev = k + 1; 9674 } 9675 for (let i = prev; i < 256; i++) { 9676 arr[i] = arr[prev - 1]; 9677 } 9678 return arr.join(","); 9679 }; 9680 const id = `g_${this.#docId}_hcm_highlight_filter`; 9681 const filter = this.#hcmHighlightFilter = this.#createFilter(id); 9682 this.#addGrayConversion(filter); 9683 this.#addTransferMapConversion(getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); 9684 this.#hcmHighlightUrl = `url(#${id})`; 9685 return this.#hcmHighlightUrl; 9686 } 9687 destroy() { 9688 let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
9689 if (keepHCM && (this.#hcmUrl || this.#hcmHighlightUrl)) { 9690 return; 9691 } 9692 if (this.#_defs) { 9693 this.#_defs.parentNode.parentNode.remove(); 9694 this.#_defs = null; 9695 } 9696 if (this.#_cache) { 9697 this.#_cache.clear(); 9698 this.#_cache = null; 9699 } 9700 this.#id = 0; 9701 } 9702 #addGrayConversion(filter) { 9703 const feColorMatrix = this.#document.createElementNS(SVG_NS, "feColorMatrix"); 9704 feColorMatrix.setAttribute("type", "matrix"); 9705 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"); 9706 filter.append(feColorMatrix); 9707 } 9708 #createFilter(id) { 9709 const filter = this.#document.createElementNS(SVG_NS, "filter"); 9710 filter.setAttribute("color-interpolation-filters", "sRGB"); 9711 filter.setAttribute("id", id); 9712 this.#defs.append(filter); 9713 return filter; 9714 } 9715 #appendFeFunc(feComponentTransfer, func, table) { 9716 const feFunc = this.#document.createElementNS(SVG_NS, func); 9717 feFunc.setAttribute("type", "discrete"); 9718 feFunc.setAttribute("tableValues", table); 9719 feComponentTransfer.append(feFunc); 9720 } 9721 #addTransferMapConversion(rTable, gTable, bTable, filter) { 9722 const feComponentTransfer = this.#document.createElementNS(SVG_NS, "feComponentTransfer"); 9723 filter.append(feComponentTransfer); 9724 this.#appendFeFunc(feComponentTransfer, "feFuncR", rTable); 9725 this.#appendFeFunc(feComponentTransfer, "feFuncG", gTable); 9726 this.#appendFeFunc(feComponentTransfer, "feFuncB", bTable); 9727 } 9728 #getRGB(color) { 9729 this.#defs.style.color = color; 9730 return getRGB(getComputedStyle(this.#defs).getPropertyValue("color")); 9731 } 9732} 9733exports.DOMFilterFactory = DOMFilterFactory; 9734class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { 9735 constructor() { 9736 let { 9737 ownerDocument = globalThis.document 9738 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 9739 super(); 9740 this._document = ownerDocument; 9741 } 9742 _createCanvas(width, height) { 9743 const canvas = this._document.createElement("canvas"); 9744 canvas.width = width; 9745 canvas.height = height; 9746 return canvas; 9747 } 9748} 9749exports.DOMCanvasFactory = DOMCanvasFactory; 9750async function fetchData(url) { 9751 let asTypedArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 9752 if (isValidFetchUrl(url, document.baseURI)) { 9753 const response = await fetch(url); 9754 if (!response.ok) { 9755 throw new Error(response.statusText); 9756 } 9757 return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); 9758 } 9759 return new Promise((resolve, reject) => { 9760 const request = new XMLHttpRequest(); 9761 request.open("GET", url, true); 9762 if (asTypedArray) { 9763 request.responseType = "arraybuffer"; 9764 } 9765 request.onreadystatechange = () => { 9766 if (request.readyState !== XMLHttpRequest.DONE) { 9767 return; 9768 } 9769 if (request.status === 200 || request.status === 0) { 9770 let data; 9771 if (asTypedArray && request.response) { 9772 data = new Uint8Array(request.response); 9773 } else if (!asTypedArray && request.responseText) { 9774 data = (0, _util.stringToBytes)(request.responseText); 9775 } 9776 if (data) { 9777 resolve(data); 9778 return; 9779 } 9780 } 9781 reject(new Error(request.statusText)); 9782 }; 9783 request.send(null); 9784 }); 9785} 9786class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { 9787 _fetchData(url, compressionType) { 9788 return fetchData(url, this.isCompressed).then(data => { 9789 return { 9790 cMapData: data, 9791 compressionType 9792 }; 9793 }); 9794 } 9795} 9796exports.DOMCMapReaderFactory = DOMCMapReaderFactory; 9797class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { 9798 _fetchData(url) { 9799 return fetchData(url, true); 9800 } 9801} 9802exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; 9803class DOMSVGFactory extends _base_factory.BaseSVGFactory { 9804 _createSVG(type) { 9805 return document.createElementNS(SVG_NS, type); 9806 } 9807} 9808exports.DOMSVGFactory = DOMSVGFactory; 9809class PageViewport { 9810 constructor(_ref) { 9811 let {
9812 viewBox, 9813 scale, 9814 rotation, 9815 offsetX = 0, 9816 offsetY = 0, 9817 dontFlip = false 9818 } = _ref; 9819 this.viewBox = viewBox; 9820 this.scale = scale; 9821 this.rotation = rotation; 9822 this.offsetX = offsetX; 9823 this.offsetY = offsetY; 9824 const centerX = (viewBox[2] + viewBox[0]) / 2; 9825 const centerY = (viewBox[3] + viewBox[1]) / 2; 9826 let rotateA, rotateB, rotateC, rotateD; 9827 rotation %= 360; 9828 if (rotation < 0) { 9829 rotation += 360; 9830 } 9831 switch (rotation) { 9832 case 180: 9833 rotateA = -1; 9834 rotateB = 0; 9835 rotateC = 0; 9836 rotateD = 1; 9837 break; 9838 case 90: 9839 rotateA = 0; 9840 rotateB = 1; 9841 rotateC = 1; 9842 rotateD = 0; 9843 break; 9844 case 270: 9845 rotateA = 0; 9846 rotateB = -1; 9847 rotateC = -1; 9848 rotateD = 0; 9849 break; 9850 case 0: 9851 rotateA = 1; 9852 rotateB = 0; 9853 rotateC = 0; 9854 rotateD = -1; 9855 break; 9856 default: 9857 throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); 9858 } 9859 if (dontFlip) { 9860 rotateC = -rotateC; 9861 rotateD = -rotateD; 9862 } 9863 let offsetCanvasX, offsetCanvasY; 9864 let width, height; 9865 if (rotateA === 0) { 9866 offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; 9867 offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; 9868 width = (viewBox[3] - viewBox[1]) * scale; 9869 height = (viewBox[2] - viewBox[0]) * scale; 9870 } else { 9871 offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; 9872 offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; 9873 width = (viewBox[2] - viewBox[0]) * scale; 9874 height = (viewBox[3] - viewBox[1]) * scale; 9875 } 9876 this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; 9877 this.width = width; 9878 this.height = height; 9879 } 9880 get rawDims() { 9881 const { 9882 viewBox 9883 } = this; 9884 return (0, _util.shadow)(this, "rawDims", { 9885 pageWidth: viewBox[2] - viewBox[0], 9886 pageHeight: viewBox[3] - viewBox[1], 9887 pageX: viewBox[0], 9888 pageY: viewBox[1] 9889 }); 9890 } 9891 clone() { 9892 let { 9893 scale = this.scale, 9894 rotation = this.rotation, 9895 offsetX = this.offsetX, 9896 offsetY = this.offsetY, 9897 dontFlip = false 9898 } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 9899 return new PageViewport({ 9900 viewBox: this.viewBox.slice(), 9901 scale, 9902 rotation, 9903 offsetX, 9904 offsetY, 9905 dontFlip 9906 }); 9907 } 9908 convertToViewportPoint(x, y) { 9909 return _util.Util.applyTransform([x, y], this.transform); 9910 } 9911 convertToViewportRectangle(rect) { 9912 const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); 9913 const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); 9914 return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; 9915 } 9916 convertToPdfPoint(x, y) { 9917 return _util.Util.applyInverseTransform([x, y], this.transform); 9918 } 9919} 9920exports.PageViewport = PageViewport; 9921class RenderingCancelledException extends _util.BaseException { 9922 constructor(msg) { 9923 let extraDelay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 9924 super(msg, "RenderingCancelledException"); 9925 this.extraDelay = extraDelay; 9926 } 9927} 9928exports.RenderingCancelledException = RenderingCancelledException; 9929function isDataScheme(url) { 9930 const ii = url.length; 9931 let i = 0; 9932 while (i < ii && url[i].trim() === "") { 9933 i++; 9934 } 9935 return url.substring(i, i + 5).toLowerCase() === "data:"; 9936} 9937function isPdfFile(filename) { 9938 return typeof filename === "string" && /\.pdf$/i.test(filename); 9939} 9940function getFilenameFromUrl(url) { 9941 let onlyStripPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 9942 if (!onlyStripPath) { 9943 [url] = url.split(/[#?]/, 1); 9944 } 9945 return url.substring(url.lastIndexOf("/") + 1); 9946} 9947function getPdfFilenameFromUrl(url) { 9948 let defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "document.pdf"; 9949 if (typeof url !== "string") { 9950 return defaultFilename; 9951 } 9952 if (isDataScheme(url)) { 9953 (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); 9954 return defaultFilename; 9955 } 9956 const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; 9957 const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; 9958 const splitURI = reURI.exec(url); 9959 let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); 9960 if (suggestedFilename) { 9961 suggestedFilename = suggestedFilename[0]; 9962 if (suggestedFilename.includes("%")) {
9963 try { 9964 suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; 9965 } catch {} 9966 } 9967 } 9968 return suggestedFilename || defaultFilename; 9969} 9970class StatTimer { 9971 started = Object.create(null); 9972 times = []; 9973 time(name) { 9974 if (name in this.started) { 9975 (0, _util.warn)(`Timer is already running for ${name}`); 9976 } 9977 this.started[name] = Date.now(); 9978 } 9979 timeEnd(name) { 9980 if (!(name in this.started)) { 9981 (0, _util.warn)(`Timer has not been started for ${name}`); 9982 } 9983 this.times.push({ 9984 name, 9985 start: this.started[name], 9986 end: Date.now() 9987 }); 9988 delete this.started[name]; 9989 } 9990 toString() { 9991 const outBuf = []; 9992 let longest = 0; 9993 for (const { 9994 name 9995 } of this.times) { 9996 longest = Math.max(name.length, longest); 9997 } 9998 for (const { 9999 name, 10000 start, 10001 end 10002 } of this.times) { 10003 outBuf.push(`${name.padEnd(longest)} ${end - start}ms\n`); 10004 } 10005 return outBuf.join(""); 10006 } 10007} 10008exports.StatTimer = StatTimer; 10009function isValidFetchUrl(url, baseUrl) { 10010 try { 10011 const { 10012 protocol 10013 } = baseUrl ? new URL(url, baseUrl) : new URL(url); 10014 return protocol === "http:" || protocol === "https:"; 10015 } catch { 10016 return false; 10017 } 10018} 10019function noContextMenu(e) { 10020 e.preventDefault(); 10021} 10022function loadScript(src) { 10023 let removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 10024 return new Promise((resolve, reject) => { 10025 const script = document.createElement("script"); 10026 script.src = src; 10027 script.onload = function (evt) { 10028 if (removeScriptElement) { 10029 script.remove(); 10030 } 10031 resolve(evt); 10032 }; 10033 script.onerror = function () { 10034 reject(new Error(`Cannot load script at: ${script.src}`)); 10035 }; 10036 (document.head || document.documentElement).append(script); 10037 }); 10038} 10039function deprecated(details) { 10040 console.log("Deprecated API usage: " + details); 10041} 10042let pdfDateStringRegex; 10043class PDFDateString { 10044 static toDateObject(input) { 10045 if (!input || typeof input !== "string") { 10046 return null; 10047 } 10048 pdfDateStringRegex ||= new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); 10049 const matches = pdfDateStringRegex.exec(input); 10050 if (!matches) { 10051 return null; 10052 } 10053 const year = parseInt(matches[1], 10); 10054 let month = parseInt(matches[2], 10);
10055 month = month >= 1 && month <= 12 ? month - 1 : 0; 10056 let day = parseInt(matches[3], 10); 10057 day = day >= 1 && day <= 31 ? day : 1; 10058 let hour = parseInt(matches[4], 10); 10059 hour = hour >= 0 && hour <= 23 ? hour : 0; 10060 let minute = parseInt(matches[5], 10); 10061 minute = minute >= 0 && minute <= 59 ? minute : 0; 10062 let second = parseInt(matches[6], 10); 10063 second = second >= 0 && second <= 59 ? second : 0; 10064 const universalTimeRelation = matches[7] || "Z"; 10065 let offsetHour = parseInt(matches[8], 10); 10066 offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; 10067 let offsetMinute = parseInt(matches[9], 10) || 0; 10068 offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; 10069 if (universalTimeRelation === "-") { 10070 hour += offsetHour; 10071 minute += offsetMinute; 10072 } else if (universalTimeRelation === "+") { 10073 hour -= offsetHour; 10074 minute -= offsetMinute; 10075 } 10076 return new Date(Date.UTC(year, month, day, hour, minute, second)); 10077 } 10078} 10079exports.PDFDateString = PDFDateString; 10080function getXfaPageViewport(xfaPage, _ref2) { 10081 let { 10082 scale = 1, 10083 rotation = 0 10084 } = _ref2; 10085 const { 10086 width, 10087 height 10088 } = xfaPage.attributes.style; 10089 const viewBox = [0, 0, parseInt(width), parseInt(height)]; 10090 return new PageViewport({ 10091 viewBox, 10092 scale, 10093 rotation 10094 }); 10095} 10096function getRGB(color) { 10097 if (color.startsWith("#")) { 10098 const colorRGB = parseInt(color.slice(1), 16); 10099 return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; 10100 } 10101 if (color.startsWith("rgb(")) { 10102 return color.slice(4, -1).split(",").map(x => parseInt(x)); 10103 } 10104 if (color.startsWith("rgba(")) { 10105 return color.slice(5, -1).split(",").map(x => parseInt(x)).slice(0, 3); 10106 } 10107 (0, _util.warn)(`Not a valid color format: "${color}"`); 10108 return [0, 0, 0]; 10109} 10110function getColorValues(colors) { 10111 const span = document.createElement("span"); 10112 span.style.visibility = "hidden"; 10113 document.body.append(span); 10114 for (const name of colors.keys()) { 10115 span.style.color = name; 10116 const computedColor = window.getComputedStyle(span).color; 10117 colors.set(name, getRGB(computedColor)); 10118 } 10119 span.remove(); 10120} 10121function getCurrentTransform(ctx) { 10122 const { 10123 a, 10124 b, 10125 c, 10126 d, 10127 e, 10128 f 10129 } = ctx.getTransform(); 10130 return [a, b, c, d, e, f]; 10131} 10132function getCurrentTransformInverse(ctx) { 10133 const { 10134 a, 10135 b, 10136 c, 10137 d, 10138 e, 10139 f 10140 } = ctx.getTransform().invertSelf(); 10141 return [a, b, c, d, e, f]; 10142} 10143function setLayerDimensions(div, viewport) { 10144 let mustFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 10145 let mustRotate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; 10146 if (viewport instanceof PageViewport) { 10147 const { 10148 pageWidth, 10149 pageHeight 10150 } = viewport.rawDims; 10151 const { 10152 style 10153 } = div; 10154 const useRound = _util.FeatureTest.isCSSRoundSupported; 10155 const w = `var(--scale-factor) * ${pageWidth}px`, 10156 h = `var(--scale-factor) * ${pageHeight}px`; 10157 const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, 10158 heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; 10159 if (!mustFlip || viewport.rotation % 180 === 0) { 10160 style.width = widthStr; 10161 style.height = heightStr; 10162 } else { 10163 style.width = heightStr; 10164 style.height = widthStr; 10165 } 10166 } 10167 if (mustRotate) { 10168 div.setAttribute("data-main-rotation", viewport.rotation); 10169 } 10170} 10171 10172/***/ }), 10173/* 169 */ 10174/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 10175 10176 10177 10178Object.defineProperty(exports, "__esModule", ({ 10179 value: true 10180})); 10181exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseFilterFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; 10182__w_pdfjs_require__(2); 10183var _util = __w_pdfjs_require__(1); 10184class BaseFilterFactory { 10185 constructor() { 10186 if (this.constructor === BaseFilterFactory) { 10187 (0, _util.unreachable)("Cannot initialize BaseFilterFactory."); 10188 } 10189 } 10190 addFilter(maps) { 10191 return "none"; 10192 } 10193 addHCMFilter(fgColor, bgColor) { 10194 return "none"; 10195 } 10196 addHighlightHCMFilter(fgColor, bgColor, newFgColor, newBgColor) { 10197 return "none"; 10198 } 10199 destroy() { 10200 let keepHCM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
10201 } 10202} 10203exports.BaseFilterFactory = BaseFilterFactory; 10204class BaseCanvasFactory { 10205 constructor() { 10206 if (this.constructor === BaseCanvasFactory) { 10207 (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); 10208 } 10209 } 10210 create(width, height) { 10211 if (width <= 0 || height <= 0) { 10212 throw new Error("Invalid canvas size"); 10213 } 10214 const canvas = this._createCanvas(width, height); 10215 return { 10216 canvas, 10217 context: canvas.getContext("2d") 10218 }; 10219 } 10220 reset(canvasAndContext, width, height) { 10221 if (!canvasAndContext.canvas) { 10222 throw new Error("Canvas is not specified"); 10223 } 10224 if (width <= 0 || height <= 0) { 10225 throw new Error("Invalid canvas size"); 10226 } 10227 canvasAndContext.canvas.width = width; 10228 canvasAndContext.canvas.height = height; 10229 } 10230 destroy(canvasAndContext) { 10231 if (!canvasAndContext.canvas) { 10232 throw new Error("Canvas is not specified"); 10233 } 10234 canvasAndContext.canvas.width = 0; 10235 canvasAndContext.canvas.height = 0; 10236 canvasAndContext.canvas = null; 10237 canvasAndContext.context = null; 10238 } 10239 _createCanvas(width, height) { 10240 (0, _util.unreachable)("Abstract method `_createCanvas` called."); 10241 } 10242} 10243exports.BaseCanvasFactory = BaseCanvasFactory; 10244class BaseCMapReaderFactory { 10245 constructor(_ref) { 10246 let { 10247 baseUrl = null, 10248 isCompressed = true 10249 } = _ref; 10250 if (this.constructor === BaseCMapReaderFactory) { 10251 (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); 10252 } 10253 this.baseUrl = baseUrl; 10254 this.isCompressed = isCompressed; 10255 } 10256 async fetch(_ref2) { 10257 let { 10258 name 10259 } = _ref2; 10260 if (!this.baseUrl) { 10261 throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); 10262 } 10263 if (!name) { 10264 throw new Error("CMap name must be specified."); 10265 } 10266 const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); 10267 const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; 10268 return this._fetchData(url, compressionType).catch(reason => { 10269 throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); 10270 }); 10271 } 10272 _fetchData(url, compressionType) { 10273 (0, _util.unreachable)("Abstract method `_fetchData` called."); 10274 } 10275} 10276exports.BaseCMapReaderFactory = BaseCMapReaderFactory; 10277class BaseStandardFontDataFactory { 10278 constructor(_ref3) { 10279 let { 10280 baseUrl = null 10281 } = _ref3; 10282 if (this.constructor === BaseStandardFontDataFactory) { 10283 (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); 10284 } 10285 this.baseUrl = baseUrl; 10286 } 10287 async fetch(_ref4) { 10288 let { 10289 filename 10290 } = _ref4; 10291 if (!this.baseUrl) { 10292 throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); 10293 } 10294 if (!filename) { 10295 throw new Error("Font filename must be specified."); 10296 } 10297 const url = `${this.baseUrl}${filename}`; 10298 return this._fetchData(url).catch(reason => { 10299 throw new Error(`Unable to load font data at: ${url}`); 10300 }); 10301 } 10302 _fetchData(url) { 10303 (0, _util.unreachable)("Abstract method `_fetchData` called."); 10304 } 10305} 10306exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; 10307class BaseSVGFactory { 10308 constructor() { 10309 if (this.constructor === BaseSVGFactory) { 10310 (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); 10311 } 10312 } 10313 create(width, height) { 10314 let skipDimensions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 10315 if (width <= 0 || height <= 0) { 10316 throw new Error("Invalid SVG dimensions"); 10317 } 10318 const svg = this._createSVG("svg:svg"); 10319 svg.setAttribute("version", "1.1"); 10320 if (!skipDimensions) { 10321 svg.setAttribute("width", `${width}px`); 10322 svg.setAttribute("height", `${height}px`); 10323 } 10324 svg.setAttribute("preserveAspectRatio", "none"); 10325 svg.setAttribute("viewBox", `0 0 ${width} ${height}`); 10326 return svg; 10327 } 10328 createElement(type) { 10329 if (typeof type !== "string") { 10330 throw new Error("Invalid SVG element type"); 10331 } 10332 return this._createSVG(type); 10333 } 10334 _createSVG(type) { 10335 (0, _util.unreachable)("Abstract method `_createSVG` called."); 10336 } 10337} 10338exports.BaseSVGFactory = BaseSVGFactory; 10339 10340/***/ }), 10341/* 170 */ 10342/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 10343 10344 10345 10346Object.defineProperty(exports, "__esModule", ({ 10347 value: true 10348})); 10349exports.MurmurHash3_64 = void 0; 10350__w_pdfjs_require__(93); 10351__w_pdfjs_require__(101); 10352__w_pdfjs_require__(102); 10353__w_pdfjs_require__(105); 10354__w_pdfjs_require__(107); 10355__w_pdfjs_require__(109); 10356__w_pdfjs_require__(113); 10357__w_pdfjs_require__(116); 10358__w_pdfjs_require__(123); 10359__w_pdfjs_require__(2); 10360var _util = __w_pdfjs_require__(1); 10361const SEED = 0xc3d2e1f0; 10362const MASK_HIGH = 0xffff0000; 10363const MASK_LOW = 0xffff; 10364class MurmurHash3_64 { 10365 constructor(seed) { 10366 this.h1 = seed ? seed & 0xffffffff : SEED; 10367 this.h2 = seed ? seed & 0xffffffff : SEED; 10368 } 10369 update(input) { 10370 let data, length; 10371 if (typeof input === "string") { 10372 data = new Uint8Array(input.length * 2); 10373 length = 0; 10374 for (let i = 0, ii = input.length; i < ii; i++) { 10375 const code = input.charCodeAt(i); 10376 if (code <= 0xff) { 10377 data[length++] = code; 10378 } else { 10379 data[length++] = code >>> 8; 10380 data[length++] = code & 0xff; 10381 } 10382 } 10383 } else if ((0, _util.isArrayBuffer)(input)) { 10384 data = input.slice(); 10385 length = data.byteLength; 10386 } else { 10387 throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); 10388 } 10389 const blockCounts = length >> 2; 10390 const tailLength = length - blockCounts * 4; 10391 const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); 10392 let k1 = 0, 10393 k2 = 0; 10394 let h1 = this.h1, 10395 h2 = this.h2; 10396 const C1 = 0xcc9e2d51, 10397 C2 = 0x1b873593; 10398 const C1_LOW = C1 & MASK_LOW, 10399 C2_LOW = C2 & MASK_LOW; 10400 for (let i = 0; i < blockCounts; i++) { 10401 if (i & 1) {
10402 k1 = dataUint32[i]; 10403 k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; 10404 k1 = k1 << 15 | k1 >>> 17; 10405 k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; 10406 h1 ^= k1; 10407 h1 = h1 << 13 | h1 >>> 19; 10408 h1 = h1 * 5 + 0xe6546b64; 10409 } else { 10410 k2 = dataUint32[i]; 10411 k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; 10412 k2 = k2 << 15 | k2 >>> 17; 10413 k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; 10414 h2 ^= k2; 10415 h2 = h2 << 13 | h2 >>> 19; 10416 h2 = h2 * 5 + 0xe6546b64; 10417 } 10418 } 10419 k1 = 0; 10420 switch (tailLength) { 10421 case 3: 10422 k1 ^= data[blockCounts * 4 + 2] << 16; 10423 case 2: 10424 k1 ^= data[blockCounts * 4 + 1] << 8; 10425 case 1: 10426 k1 ^= data[blockCounts * 4]; 10427 k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; 10428 k1 = k1 << 15 | k1 >>> 17; 10429 k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; 10430 if (blockCounts & 1) { 10431 h1 ^= k1; 10432 } else { 10433 h2 ^= k1; 10434 } 10435 } 10436 this.h1 = h1; 10437 this.h2 = h2; 10438 } 10439 hexdigest() { 10440 let h1 = this.h1, 10441 h2 = this.h2; 10442 h1 ^= h2 >>> 1; 10443 h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; 10444 h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; 10445 h1 ^= h2 >>> 1; 10446 h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; 10447 h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; 10448 h1 ^= h2 >>> 1; 10449 return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); 10450 } 10451} 10452exports.MurmurHash3_64 = MurmurHash3_64; 10453 10454/***/ }), 10455/* 171 */ 10456/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 10457 10458 10459 10460Object.defineProperty(exports, "__esModule", ({ 10461 value: true 10462})); 10463exports.FontLoader = exports.FontFaceObject = void 0; 10464__w_pdfjs_require__(125); 10465__w_pdfjs_require__(136); 10466__w_pdfjs_require__(138); 10467__w_pdfjs_require__(141); 10468__w_pdfjs_require__(143); 10469__w_pdfjs_require__(145); 10470__w_pdfjs_require__(147); 10471__w_pdfjs_require__(89); 10472__w_pdfjs_require__(149); 10473var _util = __w_pdfjs_require__(1); 10474class FontLoader { 10475 #systemFonts = new Set(); 10476 constructor(_ref) { 10477 let { 10478 ownerDocument = globalThis.document, 10479 styleElement = null 10480 } = _ref; 10481 this._document = ownerDocument; 10482 this.nativeFontFaces = new Set(); 10483 this.styleElement = null; 10484 this.loadingRequests = []; 10485 this.loadTestFontId = 0; 10486 } 10487 addNativeFontFace(nativeFontFace) { 10488 this.nativeFontFaces.add(nativeFontFace); 10489 this._document.fonts.add(nativeFontFace); 10490 } 10491 removeNativeFontFace(nativeFontFace) { 10492 this.nativeFontFaces.delete(nativeFontFace); 10493 this._document.fonts.delete(nativeFontFace); 10494 } 10495 insertRule(rule) { 10496 if (!this.styleElement) { 10497 this.styleElement = this._document.createElement("style"); 10498 this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); 10499 } 10500 const styleSheet = this.styleElement.sheet; 10501 styleSheet.insertRule(rule, styleSheet.cssRules.length); 10502 } 10503 clear() { 10504 for (const nativeFontFace of this.nativeFontFaces) { 10505 this._document.fonts.delete(nativeFontFace); 10506 } 10507 this.nativeFontFaces.clear(); 10508 this.#systemFonts.clear(); 10509 if (this.styleElement) { 10510 this.styleElement.remove(); 10511 this.styleElement = null; 10512 } 10513 } 10514 async loadSystemFont(info) { 10515 if (!info || this.#systemFonts.has(info.loadedName)) { 10516 return; 10517 } 10518 (0, _util.assert)(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); 10519 if (this.isFontLoadingAPISupported) { 10520 const { 10521 loadedName, 10522 src, 10523 style 10524 } = info; 10525 const fontFace = new FontFace(loadedName, src, style); 10526 this.addNativeFontFace(fontFace); 10527 try { 10528 await fontFace.load(); 10529 this.#systemFonts.add(loadedName); 10530 } catch { 10531 (0, _util.warn)(`Cannot load system font: ${info.baseFontName}, installing it could help to improve PDF rendering.`); 10532 this.removeNativeFontFace(fontFace); 10533 } 10534 return; 10535 } 10536 (0, _util.unreachable)("Not implemented: loadSystemFont without the Font Loading API."); 10537 } 10538 async bind(font) { 10539 if (font.attached || font.missingFile && !font.systemFontInfo) { 10540 return; 10541 } 10542 font.attached = true; 10543 if (font.systemFontInfo) { 10544 await this.loadSystemFont(font.systemFontInfo); 10545 return; 10546 } 10547 if (this.isFontLoadingAPISupported) { 10548 const nativeFontFace = font.createNativeFontFace(); 10549 if (nativeFontFace) { 10550 this.addNativeFontFace(nativeFontFace); 10551 try { 10552 await nativeFontFace.loaded; 10553 } catch (ex) { 10554 (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); 10555 font.disableFontFace = true; 10556 throw ex; 10557 } 10558 } 10559 return; 10560 } 10561 const rule = font.createFontFaceRule(); 10562 if (rule) { 10563 this.insertRule(rule); 10564 if (this.isSyncFontLoadingSupported) { 10565 return; 10566 } 10567 await new Promise(resolve => { 10568 const request = this._queueLoadingCallback(resolve); 10569 this._prepareFontLoadEvent(font, request); 10570 }); 10571 } 10572 } 10573 get isFontLoadingAPISupported() { 10574 const hasFonts = !!this._document?.fonts; 10575 return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); 10576 } 10577 get isSyncFontLoadingSupported() { 10578 let supported = false;
10579 if (_util.isNodeJS) { 10580 supported = true; 10581 } else if (typeof navigator !== "undefined" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { 10582 supported = true; 10583 } 10584 return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); 10585 } 10586 _queueLoadingCallback(callback) { 10587 function completeRequest() { 10588 (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); 10589 request.done = true; 10590 while (loadingRequests.length > 0 && loadingRequests[0].done) { 10591 const otherRequest = loadingRequests.shift(); 10592 setTimeout(otherRequest.callback, 0); 10593 } 10594 } 10595 const { 10596 loadingRequests 10597 } = this; 10598 const request = { 10599 done: false, 10600 complete: completeRequest, 10601 callback 10602 }; 10603 loadingRequests.push(request); 10604 return request; 10605 } 10606 get _loadTestFont() { 10607 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=="); 10608 return (0, _util.shadow)(this, "_loadTestFont", testFont); 10609 } 10610 _prepareFontLoadEvent(font, request) { 10611 function int32(data, offset) { 10612 return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; 10613 } 10614 function spliceString(s, offset, remove, insert) { 10615 const chunk1 = s.substring(0, offset); 10616 const chunk2 = s.substring(offset + remove); 10617 return chunk1 + insert + chunk2; 10618 } 10619 let i, ii; 10620 const canvas = this._document.createElement("canvas"); 10621 canvas.width = 1; 10622 canvas.height = 1; 10623 const ctx = canvas.getContext("2d"); 10624 let called = 0; 10625 function isFontReady(name, callback) { 10626 if (++called > 30) { 10627 (0, _util.warn)("Load test font never loaded."); 10628 callback(); 10629 return; 10630 } 10631 ctx.font = "30px " + name; 10632 ctx.fillText(".", 0, 20); 10633 const imageData = ctx.getImageData(0, 0, 1, 1); 10634 if (imageData.data[3] > 0) { 10635 callback(); 10636 return; 10637 } 10638 setTimeout(isFontReady.bind(null, name, callback)); 10639 } 10640 const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; 10641 let data = this._loadTestFont; 10642 const COMMENT_OFFSET = 976; 10643 data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); 10644 const CFF_CHECKSUM_OFFSET = 16; 10645 const XXXX_VALUE = 0x58585858; 10646 let checksum = int32(data, CFF_CHECKSUM_OFFSET); 10647 for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { 10648 checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; 10649 } 10650 if (i < loadTestFontId.length) { 10651 checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; 10652 }
10653 data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); 10654 const url = `url(data:font/opentype;base64,${btoa(data)});`; 10655 const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; 10656 this.insertRule(rule); 10657 const div = this._document.createElement("div"); 10658 div.style.visibility = "hidden"; 10659 div.style.width = div.style.height = "10px"; 10660 div.style.position = "absolute"; 10661 div.style.top = div.style.left = "0px"; 10662 for (const name of [font.loadedName, loadTestFontId]) { 10663 const span = this._document.createElement("span"); 10664 span.textContent = "Hi"; 10665 span.style.fontFamily = name; 10666 div.append(span); 10667 } 10668 this._document.body.append(div); 10669 isFontReady(loadTestFontId, () => { 10670 div.remove(); 10671 request.complete(); 10672 }); 10673 } 10674} 10675exports.FontLoader = FontLoader; 10676class FontFaceObject { 10677 constructor(translatedData, _ref2) { 10678 let { 10679 isEvalSupported = true, 10680 disableFontFace = false, 10681 ignoreErrors = false, 10682 inspectFont = null 10683 } = _ref2; 10684 this.compiledGlyphs = Object.create(null); 10685 for (const i in translatedData) { 10686 this[i] = translatedData[i]; 10687 } 10688 this.isEvalSupported = isEvalSupported !== false; 10689 this.disableFontFace = disableFontFace === true; 10690 this.ignoreErrors = ignoreErrors === true; 10691 this._inspectFont = inspectFont; 10692 } 10693 createNativeFontFace() { 10694 if (!this.data || this.disableFontFace) { 10695 return null; 10696 } 10697 let nativeFontFace; 10698 if (!this.cssFontInfo) { 10699 nativeFontFace = new FontFace(this.loadedName, this.data, {}); 10700 } else { 10701 const css = { 10702 weight: this.cssFontInfo.fontWeight 10703 }; 10704 if (this.cssFontInfo.italicAngle) { 10705 css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; 10706 } 10707 nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); 10708 } 10709 this._inspectFont?.(this); 10710 return nativeFontFace; 10711 } 10712 createFontFaceRule() { 10713 if (!this.data || this.disableFontFace) { 10714 return null; 10715 } 10716 const data = (0, _util.bytesToString)(this.data); 10717 const url = `url(data:${this.mimetype};base64,${btoa(data)});`; 10718 let rule; 10719 if (!this.cssFontInfo) { 10720 rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; 10721 } else { 10722 let css = `font-weight: ${this.cssFontInfo.fontWeight};`; 10723 if (this.cssFontInfo.italicAngle) { 10724 css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; 10725 } 10726 rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; 10727 } 10728 this._inspectFont?.(this, url); 10729 return rule; 10730 } 10731 getPathGenerator(objs, character) { 10732 if (this.compiledGlyphs[character] !== undefined) { 10733 return this.compiledGlyphs[character]; 10734 } 10735 let cmds; 10736 try { 10737 cmds = objs.get(this.loadedName + "_path_" + character); 10738 } catch (ex) { 10739 if (!this.ignoreErrors) { 10740 throw ex; 10741 } 10742 (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); 10743 return this.compiledGlyphs[character] = function (c, size) {}; 10744 } 10745 if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) { 10746 const jsBuf = []; 10747 for (const current of cmds) { 10748 const args = current.args !== undefined ? current.args.join(",") : ""; 10749 jsBuf.push("c.", current.cmd, "(", args, ");\n"); 10750 } 10751 return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); 10752 } 10753 return this.compiledGlyphs[character] = function (c, size) { 10754 for (const current of cmds) { 10755 if (current.cmd === "scale") { 10756 current.args = [size, -size]; 10757 } 10758 c[current.cmd].apply(c, current.args); 10759 } 10760 }; 10761 } 10762} 10763exports.FontFaceObject = FontFaceObject; 10764 10765/***/ }), 10766/* 172 */ 10767/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 10768 10769 10770 10771Object.defineProperty(exports, "__esModule", ({ 10772 value: true 10773})); 10774exports.NodeStandardFontDataFactory = exports.NodeFilterFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0; 10775__w_pdfjs_require__(2); 10776__w_pdfjs_require__(93); 10777__w_pdfjs_require__(101); 10778__w_pdfjs_require__(102); 10779__w_pdfjs_require__(105); 10780__w_pdfjs_require__(107); 10781__w_pdfjs_require__(109); 10782__w_pdfjs_require__(113); 10783__w_pdfjs_require__(116); 10784__w_pdfjs_require__(123); 10785var _base_factory = __w_pdfjs_require__(169); 10786var _util = __w_pdfjs_require__(1); 10787; 10788{ 10789 (function checkDOMMatrix() { 10790 if (globalThis.DOMMatrix || !_util.isNodeJS) { 10791 return; 10792 } 10793 try { 10794 globalThis.DOMMatrix = require("canvas").DOMMatrix; 10795 } catch (ex) { 10796 (0, _util.warn)(`Cannot polyfill \`DOMMatrix\`, rendering may be broken: "${ex}".`); 10797 } 10798 })(); 10799 (function checkPath2D() { 10800 if (globalThis.Path2D || !_util.isNodeJS) { 10801 return; 10802 } 10803 try { 10804 const { 10805 CanvasRenderingContext2D 10806 } = require("canvas"); 10807 const { 10808 polyfillPath2D 10809 } = require("path2d-polyfill"); 10810 globalThis.CanvasRenderingContext2D = CanvasRenderingContext2D; 10811 polyfillPath2D(globalThis); 10812 } catch (ex) { 10813 (0, _util.warn)(`Cannot polyfill \`Path2D\`, rendering may be broken: "${ex}".`); 10814 } 10815 })(); 10816} 10817const fetchData = function (url) { 10818 return new Promise((resolve, reject) => { 10819 const fs = require("fs"); 10820 fs.readFile(url, (error, data) => { 10821 if (error || !data) { 10822 reject(new Error(error)); 10823 return; 10824 } 10825 resolve(new Uint8Array(data)); 10826 }); 10827 }); 10828}; 10829class NodeFilterFactory extends _base_factory.BaseFilterFactory {}
10830exports.NodeFilterFactory = NodeFilterFactory; 10831class NodeCanvasFactory extends _base_factory.BaseCanvasFactory { 10832 _createCanvas(width, height) { 10833 const Canvas = require("canvas"); 10834 return Canvas.createCanvas(width, height); 10835 } 10836} 10837exports.NodeCanvasFactory = NodeCanvasFactory; 10838class NodeCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { 10839 _fetchData(url, compressionType) { 10840 return fetchData(url).then(data => { 10841 return { 10842 cMapData: data, 10843 compressionType 10844 }; 10845 }); 10846 } 10847} 10848exports.NodeCMapReaderFactory = NodeCMapReaderFactory; 10849class NodeStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { 10850 _fetchData(url) { 10851 return fetchData(url); 10852 } 10853} 10854exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; 10855 10856/***/ }), 10857/* 173 */ 10858/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 10859 10860 10861 10862Object.defineProperty(exports, "__esModule", ({ 10863 value: true 10864})); 10865exports.CanvasGraphics = void 0; 10866__w_pdfjs_require__(2); 10867__w_pdfjs_require__(93); 10868__w_pdfjs_require__(101); 10869__w_pdfjs_require__(102); 10870__w_pdfjs_require__(105); 10871__w_pdfjs_require__(107); 10872__w_pdfjs_require__(109); 10873__w_pdfjs_require__(113); 10874__w_pdfjs_require__(116); 10875__w_pdfjs_require__(123); 10876__w_pdfjs_require__(89); 10877var _util = __w_pdfjs_require__(1); 10878var _display_utils = __w_pdfjs_require__(168); 10879var _pattern_helper = __w_pdfjs_require__(174); 10880var _image_utils = __w_pdfjs_require__(175); 10881const MIN_FONT_SIZE = 16; 10882const MAX_FONT_SIZE = 100; 10883const MAX_GROUP_SIZE = 4096; 10884const EXECUTION_TIME = 15; 10885const EXECUTION_STEPS = 10; 10886const MAX_SIZE_TO_COMPILE = 1000; 10887const FULL_CHUNK_HEIGHT = 16; 10888function mirrorContextOperations(ctx, destCtx) { 10889 if (ctx._removeMirroring) { 10890 throw new Error("Context is already forwarding operations."); 10891 } 10892 ctx.__originalSave = ctx.save; 10893 ctx.__originalRestore = ctx.restore; 10894 ctx.__originalRotate = ctx.rotate; 10895 ctx.__originalScale = ctx.scale; 10896 ctx.__originalTranslate = ctx.translate; 10897 ctx.__originalTransform = ctx.transform; 10898 ctx.__originalSetTransform = ctx.setTransform; 10899 ctx.__originalResetTransform = ctx.resetTransform; 10900 ctx.__originalClip = ctx.clip; 10901 ctx.__originalMoveTo = ctx.moveTo; 10902 ctx.__originalLineTo = ctx.lineTo; 10903 ctx.__originalBezierCurveTo = ctx.bezierCurveTo; 10904 ctx.__originalRect = ctx.rect; 10905 ctx.__originalClosePath = ctx.closePath; 10906 ctx.__originalBeginPath = ctx.beginPath; 10907 ctx._removeMirroring = () => { 10908 ctx.save = ctx.__originalSave; 10909 ctx.restore = ctx.__originalRestore; 10910 ctx.rotate = ctx.__originalRotate; 10911 ctx.scale = ctx.__originalScale; 10912 ctx.translate = ctx.__originalTranslate; 10913 ctx.transform = ctx.__originalTransform; 10914 ctx.setTransform = ctx.__originalSetTransform; 10915 ctx.resetTransform = ctx.__originalResetTransform; 10916 ctx.clip = ctx.__originalClip; 10917 ctx.moveTo = ctx.__originalMoveTo; 10918 ctx.lineTo = ctx.__originalLineTo; 10919 ctx.bezierCurveTo = ctx.__originalBezierCurveTo; 10920 ctx.rect = ctx.__originalRect; 10921 ctx.closePath = ctx.__originalClosePath; 10922 ctx.beginPath = ctx.__originalBeginPath; 10923 delete ctx._removeMirroring; 10924 }; 10925 ctx.save = function ctxSave() { 10926 destCtx.save(); 10927 this.__originalSave(); 10928 }; 10929 ctx.restore = function ctxRestore() { 10930 destCtx.restore(); 10931 this.__originalRestore(); 10932 }; 10933 ctx.translate = function ctxTranslate(x, y) { 10934 destCtx.translate(x, y); 10935 this.__originalTranslate(x, y); 10936 }; 10937 ctx.scale = function ctxScale(x, y) { 10938 destCtx.scale(x, y); 10939 this.__originalScale(x, y); 10940 }; 10941 ctx.transform = function ctxTransform(a, b, c, d, e, f) { 10942 destCtx.transform(a, b, c, d, e, f); 10943 this.__originalTransform(a, b, c, d, e, f); 10944 }; 10945 ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { 10946 destCtx.setTransform(a, b, c, d, e, f); 10947 this.__originalSetTransform(a, b, c, d, e, f); 10948 }; 10949 ctx.resetTransform = function ctxResetTransform() { 10950 destCtx.resetTransform(); 10951 this.__originalResetTransform(); 10952 }; 10953 ctx.rotate = function ctxRotate(angle) { 10954 destCtx.rotate(angle); 10955 this.__originalRotate(angle); 10956 }; 10957 ctx.clip = function ctxRotate(rule) { 10958 destCtx.clip(rule); 10959 this.__originalClip(rule); 10960 }; 10961 ctx.moveTo = function (x, y) { 10962 destCtx.moveTo(x, y); 10963 this.__originalMoveTo(x, y); 10964 }; 10965 ctx.lineTo = function (x, y) { 10966 destCtx.lineTo(x, y); 10967 this.__originalLineTo(x, y); 10968 }; 10969 ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { 10970 destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); 10971 this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); 10972 }; 10973 ctx.rect = function (x, y, width, height) { 10974 destCtx.rect(x, y, width, height); 10975 this.__originalRect(x, y, width, height); 10976 }; 10977 ctx.closePath = function () { 10978 destCtx.closePath(); 10979 this.__originalClosePath(); 10980 }; 10981 ctx.beginPath = function () { 10982 destCtx.beginPath(); 10983 this.__originalBeginPath(); 10984 }; 10985} 10986class CachedCanvases { 10987 constructor(canvasFactory) { 10988 this.canvasFactory = canvasFactory; 10989 this.cache = Object.create(null); 10990 } 10991 getCanvas(id, width, height) {
10992 let canvasEntry; 10993 if (this.cache[id] !== undefined) { 10994 canvasEntry = this.cache[id]; 10995 this.canvasFactory.reset(canvasEntry, width, height); 10996 } else { 10997 canvasEntry = this.canvasFactory.create(width, height); 10998 this.cache[id] = canvasEntry; 10999 } 11000 return canvasEntry; 11001 } 11002 delete(id) { 11003 delete this.cache[id]; 11004 } 11005 clear() { 11006 for (const id in this.cache) { 11007 const canvasEntry = this.cache[id]; 11008 this.canvasFactory.destroy(canvasEntry); 11009 delete this.cache[id]; 11010 } 11011 } 11012} 11013function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { 11014 const [a, b, c, d, tx, ty] = (0, _display_utils.getCurrentTransform)(ctx); 11015 if (b === 0 && c === 0) { 11016 const tlX = destX * a + tx; 11017 const rTlX = Math.round(tlX); 11018 const tlY = destY * d + ty; 11019 const rTlY = Math.round(tlY); 11020 const brX = (destX + destW) * a + tx; 11021 const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; 11022 const brY = (destY + destH) * d + ty; 11023 const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; 11024 ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); 11025 ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); 11026 ctx.setTransform(a, b, c, d, tx, ty); 11027 return [rWidth, rHeight]; 11028 } 11029 if (a === 0 && d === 0) { 11030 const tlX = destY * c + tx; 11031 const rTlX = Math.round(tlX); 11032 const tlY = destX * b + ty; 11033 const rTlY = Math.round(tlY); 11034 const brX = (destY + destH) * c + tx; 11035 const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; 11036 const brY = (destX + destW) * b + ty; 11037 const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; 11038 ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); 11039 ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); 11040 ctx.setTransform(a, b, c, d, tx, ty); 11041 return [rHeight, rWidth]; 11042 } 11043 ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); 11044 const scaleX = Math.hypot(a, b); 11045 const scaleY = Math.hypot(c, d); 11046 return [scaleX * destW, scaleY * destH]; 11047} 11048function compileType3Glyph(imgData) { 11049 const { 11050 width, 11051 height 11052 } = imgData; 11053 if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { 11054 return null; 11055 } 11056 const POINT_TO_PROCESS_LIMIT = 1000; 11057 const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); 11058 const width1 = width + 1; 11059 let points = new Uint8Array(width1 * (height + 1)); 11060 let i, j, j0; 11061 const lineSize = width + 7 & ~7; 11062 let data = new Uint8Array(lineSize * height), 11063 pos = 0; 11064 for (const elem of imgData.data) { 11065 let mask = 128; 11066 while (mask > 0) { 11067 data[pos++] = elem & mask ? 0 : 255; 11068 mask >>= 1; 11069 } 11070 } 11071 let count = 0; 11072 pos = 0; 11073 if (data[pos] !== 0) { 11074 points[0] = 1; 11075 ++count; 11076 } 11077 for (j = 1; j < width; j++) { 11078 if (data[pos] !== data[pos + 1]) { 11079 points[j] = data[pos] ? 2 : 1; 11080 ++count; 11081 } 11082 pos++; 11083 } 11084 if (data[pos] !== 0) { 11085 points[j] = 2; 11086 ++count; 11087 } 11088 for (i = 1; i < height; i++) { 11089 pos = i * lineSize; 11090 j0 = i * width1; 11091 if (data[pos - lineSize] !== data[pos]) { 11092 points[j0] = data[pos] ? 1 : 8; 11093 ++count; 11094 } 11095 let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); 11096 for (j = 1; j < width; j++) { 11097 sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); 11098 if (POINT_TYPES[sum]) { 11099 points[j0 + j] = POINT_TYPES[sum]; 11100 ++count; 11101 } 11102 pos++; 11103 } 11104 if (data[pos - lineSize] !== data[pos]) { 11105 points[j0 + j] = data[pos] ? 2 : 4; 11106 ++count; 11107 } 11108 if (count > POINT_TO_PROCESS_LIMIT) { 11109 return null; 11110 } 11111 } 11112 pos = lineSize * (height - 1); 11113 j0 = i * width1; 11114 if (data[pos] !== 0) { 11115 points[j0] = 8; 11116 ++count; 11117 } 11118 for (j = 1; j < width; j++) { 11119 if (data[pos] !== data[pos + 1]) { 11120 points[j0 + j] = data[pos] ? 4 : 8; 11121 ++count; 11122 } 11123 pos++; 11124 } 11125 if (data[pos] !== 0) { 11126 points[j0 + j] = 4; 11127 ++count; 11128 } 11129 if (count > POINT_TO_PROCESS_LIMIT) { 11130 return null; 11131 } 11132 const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); 11133 const path = new Path2D(); 11134 for (i = 0; count && i <= height; i++) { 11135 let p = i * width1; 11136 const end = p + width; 11137 while (p < end && !points[p]) { 11138 p++; 11139 } 11140 if (p === end) { 11141 continue; 11142 } 11143 path.moveTo(p % width1, i); 11144 const p0 = p; 11145 let type = points[p]; 11146 do { 11147 const step = steps[type]; 11148 do { 11149 p += step; 11150 } while (!points[p]); 11151 const pp = points[p]; 11152 if (pp !== 5 && pp !== 10) { 11153 type = pp; 11154 points[p] = 0; 11155 } else { 11156 type = pp & 0x33 * type >> 4; 11157 points[p] &= type >> 2 | type << 2; 11158 } 11159 path.lineTo(p % width1, p / width1 | 0); 11160 if (!points[p]) { 11161 --count; 11162 } 11163 } while (p0 !== p); 11164 --i; 11165 } 11166 data = null; 11167 points = null; 11168 const drawOutline = function (c) { 11169 c.save(); 11170 c.scale(1 / width, -1 / height); 11171 c.translate(0, -height); 11172 c.fill(path); 11173 c.beginPath();
11174 c.restore(); 11175 }; 11176 return drawOutline; 11177} 11178class CanvasExtraState { 11179 constructor(width, height) { 11180 this.alphaIsShape = false; 11181 this.fontSize = 0; 11182 this.fontSizeScale = 1; 11183 this.textMatrix = _util.IDENTITY_MATRIX; 11184 this.textMatrixScale = 1; 11185 this.fontMatrix = _util.FONT_IDENTITY_MATRIX; 11186 this.leading = 0; 11187 this.x = 0; 11188 this.y = 0; 11189 this.lineX = 0; 11190 this.lineY = 0; 11191 this.charSpacing = 0; 11192 this.wordSpacing = 0; 11193 this.textHScale = 1; 11194 this.textRenderingMode = _util.TextRenderingMode.FILL; 11195 this.textRise = 0; 11196 this.fillColor = "#000000"; 11197 this.strokeColor = "#000000"; 11198 this.patternFill = false; 11199 this.fillAlpha = 1; 11200 this.strokeAlpha = 1; 11201 this.lineWidth = 1; 11202 this.activeSMask = null; 11203 this.transferMaps = "none"; 11204 this.startNewPathAndClipBox([0, 0, width, height]); 11205 } 11206 clone() { 11207 const clone = Object.create(this); 11208 clone.clipBox = this.clipBox.slice(); 11209 return clone; 11210 } 11211 setCurrentPoint(x, y) { 11212 this.x = x; 11213 this.y = y; 11214 } 11215 updatePathMinMax(transform, x, y) { 11216 [x, y] = _util.Util.applyTransform([x, y], transform); 11217 this.minX = Math.min(this.minX, x); 11218 this.minY = Math.min(this.minY, y); 11219 this.maxX = Math.max(this.maxX, x); 11220 this.maxY = Math.max(this.maxY, y); 11221 } 11222 updateRectMinMax(transform, rect) { 11223 const p1 = _util.Util.applyTransform(rect, transform); 11224 const p2 = _util.Util.applyTransform(rect.slice(2), transform); 11225 this.minX = Math.min(this.minX, p1[0], p2[0]); 11226 this.minY = Math.min(this.minY, p1[1], p2[1]); 11227 this.maxX = Math.max(this.maxX, p1[0], p2[0]); 11228 this.maxY = Math.max(this.maxY, p1[1], p2[1]); 11229 } 11230 updateScalingPathMinMax(transform, minMax) { 11231 _util.Util.scaleMinMax(transform, minMax); 11232 this.minX = Math.min(this.minX, minMax[0]); 11233 this.maxX = Math.max(this.maxX, minMax[1]); 11234 this.minY = Math.min(this.minY, minMax[2]); 11235 this.maxY = Math.max(this.maxY, minMax[3]); 11236 } 11237 updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { 11238 const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); 11239 if (minMax) { 11240 minMax[0] = Math.min(minMax[0], box[0], box[2]); 11241 minMax[1] = Math.max(minMax[1], box[0], box[2]); 11242 minMax[2] = Math.min(minMax[2], box[1], box[3]); 11243 minMax[3] = Math.max(minMax[3], box[1], box[3]); 11244 return; 11245 } 11246 this.updateRectMinMax(transform, box); 11247 } 11248 getPathBoundingBox() { 11249 let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL; 11250 let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 11251 const box = [this.minX, this.minY, this.maxX, this.maxY]; 11252 if (pathType === _pattern_helper.PathType.STROKE) { 11253 if (!transform) { 11254 (0, _util.unreachable)("Stroke bounding box must include transform."); 11255 } 11256 const scale = _util.Util.singularValueDecompose2dScale(transform); 11257 const xStrokePad = scale[0] * this.lineWidth / 2; 11258 const yStrokePad = scale[1] * this.lineWidth / 2; 11259 box[0] -= xStrokePad; 11260 box[1] -= yStrokePad; 11261 box[2] += xStrokePad; 11262 box[3] += yStrokePad; 11263 } 11264 return box; 11265 } 11266 updateClipFromPath() { 11267 const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); 11268 this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); 11269 } 11270 isEmptyClip() { 11271 return this.minX === Infinity; 11272 } 11273 startNewPathAndClipBox(box) { 11274 this.clipBox = box; 11275 this.minX = Infinity; 11276 this.minY = Infinity; 11277 this.maxX = 0; 11278 this.maxY = 0; 11279 } 11280 getClippedPathBoundingBox() { 11281 let pathType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _pattern_helper.PathType.FILL; 11282 let transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 11283 return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); 11284 } 11285} 11286function putBinaryImageData(ctx, imgData) { 11287 if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { 11288 ctx.putImageData(imgData, 0, 0); 11289 return; 11290 } 11291 const height = imgData.height, 11292 width = imgData.width; 11293 const partialChunkHeight = height % FULL_CHUNK_HEIGHT; 11294 const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; 11295 const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; 11296 const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); 11297 let srcPos = 0, 11298 destPos; 11299 const src = imgData.data; 11300 const dest = chunkImgData.data; 11301 let i, j, thisChunkHeight, elemsInThisChunk; 11302 if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { 11303 const srcLength = src.byteLength; 11304 const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); 11305 const dest32DataLength = dest32.length; 11306 const fullSrcDiff = width + 7 >> 3; 11307 const white = 0xffffffff; 11308 const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; 11309 for (i = 0; i < totalChunks; i++) { 11310 thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; 11311 destPos = 0; 11312 for (j = 0; j < thisChunkHeight; j++) { 11313 const srcDiff = srcLength - srcPos; 11314 let k = 0;
11315 const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; 11316 const kEndUnrolled = kEnd & ~7; 11317 let mask = 0; 11318 let srcByte = 0; 11319 for (; k < kEndUnrolled; k += 8) { 11320 srcByte = src[srcPos++]; 11321 dest32[destPos++] = srcByte & 128 ? white : black; 11322 dest32[destPos++] = srcByte & 64 ? white : black; 11323 dest32[destPos++] = srcByte & 32 ? white : black; 11324 dest32[destPos++] = srcByte & 16 ? white : black; 11325 dest32[destPos++] = srcByte & 8 ? white : black; 11326 dest32[destPos++] = srcByte & 4 ? white : black; 11327 dest32[destPos++] = srcByte & 2 ? white : black; 11328 dest32[destPos++] = srcByte & 1 ? white : black; 11329 } 11330 for (; k < kEnd; k++) { 11331 if (mask === 0) { 11332 srcByte = src[srcPos++]; 11333 mask = 128; 11334 } 11335 dest32[destPos++] = srcByte & mask ? white : black; 11336 mask >>= 1; 11337 } 11338 } 11339 while (destPos < dest32DataLength) { 11340 dest32[destPos++] = 0; 11341 } 11342 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); 11343 } 11344 } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { 11345 j = 0; 11346 elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; 11347 for (i = 0; i < fullChunks; i++) { 11348 dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); 11349 srcPos += elemsInThisChunk; 11350 ctx.putImageData(chunkImgData, 0, j); 11351 j += FULL_CHUNK_HEIGHT; 11352 } 11353 if (i < totalChunks) { 11354 elemsInThisChunk = width * partialChunkHeight * 4; 11355 dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); 11356 ctx.putImageData(chunkImgData, 0, j); 11357 } 11358 } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { 11359 thisChunkHeight = FULL_CHUNK_HEIGHT; 11360 elemsInThisChunk = width * thisChunkHeight; 11361 for (i = 0; i < totalChunks; i++) { 11362 if (i >= fullChunks) { 11363 thisChunkHeight = partialChunkHeight; 11364 elemsInThisChunk = width * thisChunkHeight; 11365 } 11366 destPos = 0; 11367 for (j = elemsInThisChunk; j--;) { 11368 dest[destPos++] = src[srcPos++]; 11369 dest[destPos++] = src[srcPos++]; 11370 dest[destPos++] = src[srcPos++]; 11371 dest[destPos++] = 255; 11372 } 11373 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); 11374 } 11375 } else { 11376 throw new Error(`bad image kind: ${imgData.kind}`); 11377 } 11378} 11379function putBinaryImageMask(ctx, imgData) { 11380 if (imgData.bitmap) { 11381 ctx.drawImage(imgData.bitmap, 0, 0); 11382 return; 11383 } 11384 const height = imgData.height, 11385 width = imgData.width; 11386 const partialChunkHeight = height % FULL_CHUNK_HEIGHT; 11387 const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; 11388 const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; 11389 const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); 11390 let srcPos = 0; 11391 const src = imgData.data; 11392 const dest = chunkImgData.data; 11393 for (let i = 0; i < totalChunks; i++) { 11394 const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; 11395 ({ 11396 srcPos 11397 } = (0, _image_utils.convertBlackAndWhiteToRGBA)({ 11398 src, 11399 srcPos, 11400 dest, 11401 width, 11402 height: thisChunkHeight, 11403 nonBlackColor: 0 11404 })); 11405 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); 11406 } 11407} 11408function copyCtxState(sourceCtx, destCtx) { 11409 const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; 11410 for (const property of properties) { 11411 if (sourceCtx[property] !== undefined) { 11412 destCtx[property] = sourceCtx[property]; 11413 } 11414 } 11415 if (sourceCtx.setLineDash !== undefined) { 11416 destCtx.setLineDash(sourceCtx.getLineDash()); 11417 destCtx.lineDashOffset = sourceCtx.lineDashOffset; 11418 } 11419} 11420function resetCtxToDefault(ctx) { 11421 ctx.strokeStyle = ctx.fillStyle = "#000000"; 11422 ctx.fillRule = "nonzero"; 11423 ctx.globalAlpha = 1; 11424 ctx.lineWidth = 1; 11425 ctx.lineCap = "butt"; 11426 ctx.lineJoin = "miter"; 11427 ctx.miterLimit = 10; 11428 ctx.globalCompositeOperation = "source-over"; 11429 ctx.font = "10px sans-serif"; 11430 if (ctx.setLineDash !== undefined) { 11431 ctx.setLineDash([]); 11432 ctx.lineDashOffset = 0; 11433 } 11434 if (!_util.isNodeJS) { 11435 const { 11436 filter 11437 } = ctx; 11438 if (filter !== "none" && filter !== "") { 11439 ctx.filter = "none"; 11440 } 11441 } 11442} 11443function composeSMaskBackdrop(bytes, r0, g0, b0) { 11444 const length = bytes.length; 11445 for (let i = 3; i < length; i += 4) {
11446 const alpha = bytes[i]; 11447 if (alpha === 0) { 11448 bytes[i - 3] = r0; 11449 bytes[i - 2] = g0; 11450 bytes[i - 1] = b0; 11451 } else if (alpha < 255) { 11452 const alpha_ = 255 - alpha; 11453 bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; 11454 bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; 11455 bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; 11456 } 11457 } 11458} 11459function composeSMaskAlpha(maskData, layerData, transferMap) { 11460 const length = maskData.length; 11461 const scale = 1 / 255; 11462 for (let i = 3; i < length; i += 4) { 11463 const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; 11464 layerData[i] = layerData[i] * alpha * scale | 0; 11465 } 11466} 11467function composeSMaskLuminosity(maskData, layerData, transferMap) { 11468 const length = maskData.length; 11469 for (let i = 3; i < length; i += 4) { 11470 const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; 11471 layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; 11472 } 11473} 11474function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { 11475 const hasBackdrop = !!backdrop; 11476 const r0 = hasBackdrop ? backdrop[0] : 0; 11477 const g0 = hasBackdrop ? backdrop[1] : 0; 11478 const b0 = hasBackdrop ? backdrop[2] : 0; 11479 const composeFn = subtype === "Luminosity" ? composeSMaskLuminosity : composeSMaskAlpha; 11480 const PIXELS_TO_PROCESS = 1048576; 11481 const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); 11482 for (let row = 0; row < height; row += chunkSize) { 11483 const chunkHeight = Math.min(chunkSize, height - row); 11484 const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); 11485 const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); 11486 if (hasBackdrop) { 11487 composeSMaskBackdrop(maskData.data, r0, g0, b0); 11488 } 11489 composeFn(maskData.data, layerData.data, transferMap); 11490 layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); 11491 } 11492} 11493function composeSMask(ctx, smask, layerCtx, layerBox) { 11494 const layerOffsetX = layerBox[0]; 11495 const layerOffsetY = layerBox[1]; 11496 const layerWidth = layerBox[2] - layerOffsetX; 11497 const layerHeight = layerBox[3] - layerOffsetY; 11498 if (layerWidth === 0 || layerHeight === 0) { 11499 return; 11500 } 11501 genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); 11502 ctx.save(); 11503 ctx.globalAlpha = 1; 11504 ctx.globalCompositeOperation = "source-over"; 11505 ctx.setTransform(1, 0, 0, 1, 0, 0); 11506 ctx.drawImage(layerCtx.canvas, 0, 0); 11507 ctx.restore(); 11508} 11509function getImageSmoothingEnabled(transform, interpolate) { 11510 const scale = _util.Util.singularValueDecompose2dScale(transform); 11511 scale[0] = Math.fround(scale[0]); 11512 scale[1] = Math.fround(scale[1]); 11513 const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); 11514 if (interpolate !== undefined) { 11515 return interpolate; 11516 } else if (scale[0] <= actualScale || scale[1] <= actualScale) { 11517 return true; 11518 } 11519 return false; 11520} 11521const LINE_CAP_STYLES = ["butt", "round", "square"]; 11522const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; 11523const NORMAL_CLIP = {}; 11524const EO_CLIP = {}; 11525class CanvasGraphics { 11526 constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, _ref, annotationCanvasMap, pageColors) { 11527 let { 11528 optionalContentConfig, 11529 markedContentStack = null 11530 } = _ref; 11531 this.ctx = canvasCtx; 11532 this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); 11533 this.stateStack = []; 11534 this.pendingClip = null; 11535 this.pendingEOFill = false; 11536 this.res = null; 11537 this.xobjs = null; 11538 this.commonObjs = commonObjs; 11539 this.objs = objs; 11540 this.canvasFactory = canvasFactory; 11541 this.filterFactory = filterFactory; 11542 this.groupStack = []; 11543 this.processingType3 = null; 11544 this.baseTransform = null; 11545 this.baseTransformStack = []; 11546 this.groupLevel = 0; 11547 this.smaskStack = []; 11548 this.smaskCounter = 0; 11549 this.tempSMask = null; 11550 this.suspendedCtx = null; 11551 this.contentVisible = true; 11552 this.markedContentStack = markedContentStack || []; 11553 this.optionalContentConfig = optionalContentConfig; 11554 this.cachedCanvases = new CachedCanvases(this.canvasFactory); 11555 this.cachedPatterns = new Map(); 11556 this.annotationCanvasMap = annotationCanvasMap; 11557 this.viewportScale = 1; 11558 this.outputScaleX = 1; 11559 this.outputScaleY = 1;
11560 this.pageColors = pageColors; 11561 this._cachedScaleForStroking = [-1, 0]; 11562 this._cachedGetSinglePixelWidth = null; 11563 this._cachedBitmapsMap = new Map(); 11564 } 11565 getObject(data) { 11566 let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 11567 if (typeof data === "string") { 11568 return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); 11569 } 11570 return fallback; 11571 } 11572 beginDrawing(_ref2) { 11573 let { 11574 transform, 11575 viewport, 11576 transparency = false, 11577 background = null 11578 } = _ref2; 11579 const width = this.ctx.canvas.width; 11580 const height = this.ctx.canvas.height; 11581 const savedFillStyle = this.ctx.fillStyle; 11582 this.ctx.fillStyle = background || "#ffffff"; 11583 this.ctx.fillRect(0, 0, width, height); 11584 this.ctx.fillStyle = savedFillStyle; 11585 if (transparency) { 11586 const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); 11587 this.compositeCtx = this.ctx; 11588 this.transparentCanvas = transparentCanvas.canvas; 11589 this.ctx = transparentCanvas.context; 11590 this.ctx.save(); 11591 this.ctx.transform(...(0, _display_utils.getCurrentTransform)(this.compositeCtx)); 11592 } 11593 this.ctx.save(); 11594 resetCtxToDefault(this.ctx); 11595 if (transform) { 11596 this.ctx.transform(...transform); 11597 this.outputScaleX = transform[0]; 11598 this.outputScaleY = transform[0]; 11599 } 11600 this.ctx.transform(...viewport.transform); 11601 this.viewportScale = viewport.scale; 11602 this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); 11603 } 11604 executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { 11605 const argsArray = operatorList.argsArray; 11606 const fnArray = operatorList.fnArray; 11607 let i = executionStartIdx || 0; 11608 const argsArrayLen = argsArray.length; 11609 if (argsArrayLen === i) { 11610 return i; 11611 } 11612 const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; 11613 const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; 11614 let steps = 0; 11615 const commonObjs = this.commonObjs; 11616 const objs = this.objs; 11617 let fnId; 11618 while (true) { 11619 if (stepper !== undefined && i === stepper.nextBreakPoint) { 11620 stepper.breakIt(i, continueCallback); 11621 return i; 11622 } 11623 fnId = fnArray[i]; 11624 if (fnId !== _util.OPS.dependency) { 11625 this[fnId].apply(this, argsArray[i]); 11626 } else { 11627 for (const depObjId of argsArray[i]) { 11628 const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; 11629 if (!objsPool.has(depObjId)) { 11630 objsPool.get(depObjId, continueCallback); 11631 return i; 11632 } 11633 } 11634 } 11635 i++; 11636 if (i === argsArrayLen) { 11637 return i; 11638 } 11639 if (chunkOperations && ++steps > EXECUTION_STEPS) { 11640 if (Date.now() > endTime) { 11641 continueCallback(); 11642 return i; 11643 } 11644 steps = 0; 11645 } 11646 } 11647 } 11648 #restoreInitialState() { 11649 while (this.stateStack.length || this.inSMaskMode) { 11650 this.restore(); 11651 } 11652 this.ctx.restore(); 11653 if (this.transparentCanvas) { 11654 this.ctx = this.compositeCtx; 11655 this.ctx.save(); 11656 this.ctx.setTransform(1, 0, 0, 1, 0, 0); 11657 this.ctx.drawImage(this.transparentCanvas, 0, 0); 11658 this.ctx.restore(); 11659 this.transparentCanvas = null; 11660 } 11661 } 11662 endDrawing() { 11663 this.#restoreInitialState(); 11664 this.cachedCanvases.clear(); 11665 this.cachedPatterns.clear(); 11666 for (const cache of this._cachedBitmapsMap.values()) { 11667 for (const canvas of cache.values()) { 11668 if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { 11669 canvas.width = canvas.height = 0; 11670 } 11671 } 11672 cache.clear(); 11673 } 11674 this._cachedBitmapsMap.clear(); 11675 this.#drawFilter(); 11676 } 11677 #drawFilter() { 11678 if (this.pageColors) { 11679 const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); 11680 if (hcmFilterId !== "none") { 11681 const savedFilter = this.ctx.filter; 11682 this.ctx.filter = hcmFilterId; 11683 this.ctx.drawImage(this.ctx.canvas, 0, 0); 11684 this.ctx.filter = savedFilter; 11685 } 11686 } 11687 } 11688 _scaleImage(img, inverseTransform) { 11689 const width = img.width;
11690 const height = img.height; 11691 let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); 11692 let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); 11693 let paintWidth = width, 11694 paintHeight = height; 11695 let tmpCanvasId = "prescale1"; 11696 let tmpCanvas, tmpCtx; 11697 while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { 11698 let newWidth = paintWidth, 11699 newHeight = paintHeight; 11700 if (widthScale > 2 && paintWidth > 1) { 11701 newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); 11702 widthScale /= paintWidth / newWidth; 11703 } 11704 if (heightScale > 2 && paintHeight > 1) { 11705 newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; 11706 heightScale /= paintHeight / newHeight; 11707 } 11708 tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); 11709 tmpCtx = tmpCanvas.context; 11710 tmpCtx.clearRect(0, 0, newWidth, newHeight); 11711 tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); 11712 img = tmpCanvas.canvas; 11713 paintWidth = newWidth; 11714 paintHeight = newHeight; 11715 tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; 11716 } 11717 return { 11718 img, 11719 paintWidth, 11720 paintHeight 11721 }; 11722 } 11723 _createMaskCanvas(img) { 11724 const ctx = this.ctx; 11725 const { 11726 width, 11727 height 11728 } = img; 11729 const fillColor = this.current.fillColor; 11730 const isPatternFill = this.current.patternFill; 11731 const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); 11732 let cache, cacheKey, scaled, maskCanvas; 11733 if ((img.bitmap || img.data) && img.count > 1) { 11734 const mainKey = img.bitmap || img.data.buffer; 11735 cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); 11736 cache = this._cachedBitmapsMap.get(mainKey); 11737 if (!cache) { 11738 cache = new Map(); 11739 this._cachedBitmapsMap.set(mainKey, cache); 11740 } 11741 const cachedImage = cache.get(cacheKey); 11742 if (cachedImage && !isPatternFill) { 11743 const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); 11744 const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); 11745 return { 11746 canvas: cachedImage, 11747 offsetX, 11748 offsetY 11749 }; 11750 } 11751 scaled = cachedImage; 11752 } 11753 if (!scaled) { 11754 maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); 11755 putBinaryImageMask(maskCanvas.context, img); 11756 } 11757 let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); 11758 maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); 11759 const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); 11760 const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); 11761 const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); 11762 const drawnWidth = Math.round(rect[2] - rect[0]) || 1; 11763 const drawnHeight = Math.round(rect[3] - rect[1]) || 1; 11764 const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); 11765 const fillCtx = fillCanvas.context; 11766 const offsetX = Math.min(cord1[0], cord2[0]); 11767 const offsetY = Math.min(cord1[1], cord2[1]); 11768 fillCtx.translate(-offsetX, -offsetY); 11769 fillCtx.transform(...maskToCanvas); 11770 if (!scaled) { 11771 scaled = this._scaleImage(maskCanvas.canvas, (0, _display_utils.getCurrentTransformInverse)(fillCtx)); 11772 scaled = scaled.img; 11773 if (cache && isPatternFill) { 11774 cache.set(cacheKey, scaled); 11775 } 11776 } 11777 fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(fillCtx), img.interpolate); 11778 drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); 11779 fillCtx.globalCompositeOperation = "source-in"; 11780 const inverse = _util.Util.transform((0, _display_utils.getCurrentTransformInverse)(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); 11781 fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; 11782 fillCtx.fillRect(0, 0, width, height); 11783 if (cache && !isPatternFill) { 11784 this.cachedCanvases.delete("fillCanvas"); 11785 cache.set(cacheKey, fillCanvas.canvas); 11786 } 11787 return {
11788 canvas: fillCanvas.canvas, 11789 offsetX: Math.round(offsetX), 11790 offsetY: Math.round(offsetY) 11791 }; 11792 } 11793 setLineWidth(width) { 11794 if (width !== this.current.lineWidth) { 11795 this._cachedScaleForStroking[0] = -1; 11796 } 11797 this.current.lineWidth = width; 11798 this.ctx.lineWidth = width; 11799 } 11800 setLineCap(style) { 11801 this.ctx.lineCap = LINE_CAP_STYLES[style]; 11802 } 11803 setLineJoin(style) { 11804 this.ctx.lineJoin = LINE_JOIN_STYLES[style]; 11805 } 11806 setMiterLimit(limit) { 11807 this.ctx.miterLimit = limit; 11808 } 11809 setDash(dashArray, dashPhase) { 11810 const ctx = this.ctx; 11811 if (ctx.setLineDash !== undefined) { 11812 ctx.setLineDash(dashArray); 11813 ctx.lineDashOffset = dashPhase; 11814 } 11815 } 11816 setRenderingIntent(intent) {} 11817 setFlatness(flatness) {} 11818 setGState(states) { 11819 for (const [key, value] of states) { 11820 switch (key) { 11821 case "LW": 11822 this.setLineWidth(value); 11823 break; 11824 case "LC": 11825 this.setLineCap(value); 11826 break; 11827 case "LJ": 11828 this.setLineJoin(value); 11829 break; 11830 case "ML": 11831 this.setMiterLimit(value); 11832 break; 11833 case "D": 11834 this.setDash(value[0], value[1]); 11835 break; 11836 case "RI": 11837 this.setRenderingIntent(value); 11838 break; 11839 case "FL": 11840 this.setFlatness(value); 11841 break; 11842 case "Font": 11843 this.setFont(value[0], value[1]); 11844 break; 11845 case "CA": 11846 this.current.strokeAlpha = value; 11847 break; 11848 case "ca": 11849 this.current.fillAlpha = value; 11850 this.ctx.globalAlpha = value; 11851 break; 11852 case "BM": 11853 this.ctx.globalCompositeOperation = value; 11854 break; 11855 case "SMask": 11856 this.current.activeSMask = value ? this.tempSMask : null; 11857 this.tempSMask = null; 11858 this.checkSMaskState(); 11859 break; 11860 case "TR": 11861 this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); 11862 break; 11863 } 11864 } 11865 } 11866 get inSMaskMode() { 11867 return !!this.suspendedCtx; 11868 } 11869 checkSMaskState() { 11870 const inSMaskMode = this.inSMaskMode; 11871 if (this.current.activeSMask && !inSMaskMode) { 11872 this.beginSMaskMode(); 11873 } else if (!this.current.activeSMask && inSMaskMode) { 11874 this.endSMaskMode(); 11875 } 11876 } 11877 beginSMaskMode() { 11878 if (this.inSMaskMode) { 11879 throw new Error("beginSMaskMode called while already in smask mode"); 11880 } 11881 const drawnWidth = this.ctx.canvas.width; 11882 const drawnHeight = this.ctx.canvas.height; 11883 const cacheId = "smaskGroupAt" + this.groupLevel; 11884 const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); 11885 this.suspendedCtx = this.ctx; 11886 this.ctx = scratchCanvas.context; 11887 const ctx = this.ctx; 11888 ctx.setTransform(...(0, _display_utils.getCurrentTransform)(this.suspendedCtx)); 11889 copyCtxState(this.suspendedCtx, ctx); 11890 mirrorContextOperations(ctx, this.suspendedCtx); 11891 this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); 11892 } 11893 endSMaskMode() { 11894 if (!this.inSMaskMode) { 11895 throw new Error("endSMaskMode called while not in smask mode"); 11896 } 11897 this.ctx._removeMirroring(); 11898 copyCtxState(this.ctx, this.suspendedCtx); 11899 this.ctx = this.suspendedCtx; 11900 this.suspendedCtx = null; 11901 } 11902 compose(dirtyBox) { 11903 if (!this.current.activeSMask) { 11904 return; 11905 } 11906 if (!dirtyBox) { 11907 dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; 11908 } else { 11909 dirtyBox[0] = Math.floor(dirtyBox[0]); 11910 dirtyBox[1] = Math.floor(dirtyBox[1]); 11911 dirtyBox[2] = Math.ceil(dirtyBox[2]); 11912 dirtyBox[3] = Math.ceil(dirtyBox[3]); 11913 } 11914 const smask = this.current.activeSMask; 11915 const suspendedCtx = this.suspendedCtx; 11916 composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); 11917 this.ctx.save(); 11918 this.ctx.setTransform(1, 0, 0, 1, 0, 0); 11919 this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); 11920 this.ctx.restore(); 11921 } 11922 save() { 11923 if (this.inSMaskMode) { 11924 copyCtxState(this.ctx, this.suspendedCtx); 11925 this.suspendedCtx.save(); 11926 } else { 11927 this.ctx.save(); 11928 } 11929 const old = this.current; 11930 this.stateStack.push(old); 11931 this.current = old.clone(); 11932 }
11933 restore() { 11934 if (this.stateStack.length === 0 && this.inSMaskMode) { 11935 this.endSMaskMode(); 11936 } 11937 if (this.stateStack.length !== 0) { 11938 this.current = this.stateStack.pop(); 11939 if (this.inSMaskMode) { 11940 this.suspendedCtx.restore(); 11941 copyCtxState(this.suspendedCtx, this.ctx); 11942 } else { 11943 this.ctx.restore(); 11944 } 11945 this.checkSMaskState(); 11946 this.pendingClip = null; 11947 this._cachedScaleForStroking[0] = -1; 11948 this._cachedGetSinglePixelWidth = null; 11949 } 11950 } 11951 transform(a, b, c, d, e, f) { 11952 this.ctx.transform(a, b, c, d, e, f); 11953 this._cachedScaleForStroking[0] = -1; 11954 this._cachedGetSinglePixelWidth = null; 11955 } 11956 constructPath(ops, args, minMax) { 11957 const ctx = this.ctx; 11958 const current = this.current; 11959 let x = current.x, 11960 y = current.y; 11961 let startX, startY; 11962 const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); 11963 const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; 11964 const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; 11965 for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { 11966 switch (ops[i] | 0) { 11967 case _util.OPS.rectangle: 11968 x = args[j++]; 11969 y = args[j++]; 11970 const width = args[j++]; 11971 const height = args[j++]; 11972 const xw = x + width; 11973 const yh = y + height; 11974 ctx.moveTo(x, y); 11975 if (width === 0 || height === 0) { 11976 ctx.lineTo(xw, yh); 11977 } else { 11978 ctx.lineTo(xw, y); 11979 ctx.lineTo(xw, yh); 11980 ctx.lineTo(x, yh); 11981 } 11982 if (!isScalingMatrix) { 11983 current.updateRectMinMax(currentTransform, [x, y, xw, yh]); 11984 } 11985 ctx.closePath(); 11986 break; 11987 case _util.OPS.moveTo: 11988 x = args[j++]; 11989 y = args[j++]; 11990 ctx.moveTo(x, y); 11991 if (!isScalingMatrix) { 11992 current.updatePathMinMax(currentTransform, x, y); 11993 } 11994 break; 11995 case _util.OPS.lineTo: 11996 x = args[j++]; 11997 y = args[j++]; 11998 ctx.lineTo(x, y); 11999 if (!isScalingMatrix) { 12000 current.updatePathMinMax(currentTransform, x, y); 12001 } 12002 break; 12003 case _util.OPS.curveTo: 12004 startX = x; 12005 startY = y; 12006 x = args[j + 4]; 12007 y = args[j + 5]; 12008 ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); 12009 current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); 12010 j += 6; 12011 break; 12012 case _util.OPS.curveTo2: 12013 startX = x; 12014 startY = y; 12015 ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); 12016 current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); 12017 x = args[j + 2]; 12018 y = args[j + 3]; 12019 j += 4; 12020 break; 12021 case _util.OPS.curveTo3: 12022 startX = x; 12023 startY = y; 12024 x = args[j + 2]; 12025 y = args[j + 3]; 12026 ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); 12027 current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); 12028 j += 4; 12029 break; 12030 case _util.OPS.closePath: 12031 ctx.closePath(); 12032 break; 12033 } 12034 } 12035 if (isScalingMatrix) { 12036 current.updateScalingPathMinMax(currentTransform, minMaxForBezier); 12037 } 12038 current.setCurrentPoint(x, y); 12039 } 12040 closePath() { 12041 this.ctx.closePath(); 12042 } 12043 stroke() {
12044 let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; 12045 const ctx = this.ctx; 12046 const strokeColor = this.current.strokeColor; 12047 ctx.globalAlpha = this.current.strokeAlpha; 12048 if (this.contentVisible) { 12049 if (typeof strokeColor === "object" && strokeColor?.getPattern) { 12050 ctx.save(); 12051 ctx.strokeStyle = strokeColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.STROKE); 12052 this.rescaleAndStroke(false); 12053 ctx.restore(); 12054 } else { 12055 this.rescaleAndStroke(true); 12056 } 12057 } 12058 if (consumePath) { 12059 this.consumePath(this.current.getClippedPathBoundingBox()); 12060 } 12061 ctx.globalAlpha = this.current.fillAlpha; 12062 } 12063 closeStroke() { 12064 this.closePath(); 12065 this.stroke(); 12066 } 12067 fill() { 12068 let consumePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; 12069 const ctx = this.ctx; 12070 const fillColor = this.current.fillColor; 12071 const isPatternFill = this.current.patternFill; 12072 let needRestore = false; 12073 if (isPatternFill) { 12074 ctx.save(); 12075 ctx.fillStyle = fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); 12076 needRestore = true; 12077 } 12078 const intersect = this.current.getClippedPathBoundingBox(); 12079 if (this.contentVisible && intersect !== null) { 12080 if (this.pendingEOFill) { 12081 ctx.fill("evenodd"); 12082 this.pendingEOFill = false; 12083 } else { 12084 ctx.fill(); 12085 } 12086 } 12087 if (needRestore) { 12088 ctx.restore(); 12089 } 12090 if (consumePath) { 12091 this.consumePath(intersect); 12092 } 12093 } 12094 eoFill() { 12095 this.pendingEOFill = true; 12096 this.fill(); 12097 } 12098 fillStroke() { 12099 this.fill(false); 12100 this.stroke(false); 12101 this.consumePath(); 12102 } 12103 eoFillStroke() { 12104 this.pendingEOFill = true; 12105 this.fillStroke(); 12106 } 12107 closeFillStroke() { 12108 this.closePath(); 12109 this.fillStroke(); 12110 } 12111 closeEOFillStroke() { 12112 this.pendingEOFill = true; 12113 this.closePath(); 12114 this.fillStroke(); 12115 } 12116 endPath() { 12117 this.consumePath(); 12118 } 12119 clip() { 12120 this.pendingClip = NORMAL_CLIP; 12121 } 12122 eoClip() { 12123 this.pendingClip = EO_CLIP; 12124 } 12125 beginText() { 12126 this.current.textMatrix = _util.IDENTITY_MATRIX; 12127 this.current.textMatrixScale = 1; 12128 this.current.x = this.current.lineX = 0; 12129 this.current.y = this.current.lineY = 0; 12130 } 12131 endText() { 12132 const paths = this.pendingTextPaths; 12133 const ctx = this.ctx; 12134 if (paths === undefined) { 12135 ctx.beginPath(); 12136 return; 12137 } 12138 ctx.save(); 12139 ctx.beginPath(); 12140 for (const path of paths) { 12141 ctx.setTransform(...path.transform); 12142 ctx.translate(path.x, path.y); 12143 path.addToPath(ctx, path.fontSize); 12144 } 12145 ctx.restore(); 12146 ctx.clip(); 12147 ctx.beginPath(); 12148 delete this.pendingTextPaths; 12149 } 12150 setCharSpacing(spacing) { 12151 this.current.charSpacing = spacing; 12152 } 12153 setWordSpacing(spacing) { 12154 this.current.wordSpacing = spacing; 12155 } 12156 setHScale(scale) { 12157 this.current.textHScale = scale / 100; 12158 } 12159 setLeading(leading) { 12160 this.current.leading = -leading; 12161 } 12162 setFont(fontRefName, size) { 12163 const fontObj = this.commonObjs.get(fontRefName); 12164 const current = this.current; 12165 if (!fontObj) { 12166 throw new Error(`Can't find font for ${fontRefName}`); 12167 } 12168 current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; 12169 if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { 12170 (0, _util.warn)("Invalid font matrix for font " + fontRefName); 12171 } 12172 if (size < 0) { 12173 size = -size; 12174 current.fontDirection = -1; 12175 } else { 12176 current.fontDirection = 1; 12177 } 12178 this.current.font = fontObj; 12179 this.current.fontSize = size; 12180 if (fontObj.isType3Font) { 12181 return; 12182 } 12183 const name = fontObj.loadedName || "sans-serif"; 12184 const typeface = fontObj.systemFontInfo?.css || `"${name}", ${fontObj.fallbackName}`; 12185 let bold = "normal"; 12186 if (fontObj.black) { 12187 bold = "900"; 12188 } else if (fontObj.bold) { 12189 bold = "bold"; 12190 } 12191 const italic = fontObj.italic ? "italic" : "normal"; 12192 let browserFontSize = size; 12193 if (size < MIN_FONT_SIZE) { 12194 browserFontSize = MIN_FONT_SIZE; 12195 } else if (size > MAX_FONT_SIZE) { 12196 browserFontSize = MAX_FONT_SIZE; 12197 } 12198 this.current.fontSizeScale = size / browserFontSize; 12199 this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; 12200 } 12201 setTextRenderingMode(mode) { 12202 this.current.textRenderingMode = mode; 12203 } 12204 setTextRise(rise) { 12205 this.current.textRise = rise; 12206 } 12207 moveText(x, y) { 12208 this.current.x = this.current.lineX += x; 12209 this.current.y = this.current.lineY += y; 12210 } 12211 setLeadingMoveText(x, y) { 12212 this.setLeading(-y); 12213 this.moveText(x, y); 12214 } 12215 setTextMatrix(a, b, c, d, e, f) { 12216 this.current.textMatrix = [a, b, c, d, e, f]; 12217 this.current.textMatrixScale = Math.hypot(a, b); 12218 this.current.x = this.current.lineX = 0; 12219 this.current.y = this.current.lineY = 0; 12220 } 12221 nextLine() { 12222 this.moveText(0, this.current.leading); 12223 } 12224 paintChar(character, x, y, patternTransform) { 12225 const ctx = this.ctx; 12226 const current = this.current; 12227 const font = current.font; 12228 const textRenderingMode = current.textRenderingMode; 12229 const fontSize = current.fontSize / current.fontSizeScale; 12230 const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; 12231 const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); 12232 const patternFill = current.patternFill && !font.missingFile; 12233 let addToPath; 12234 if (font.disableFontFace || isAddToPathSet || patternFill) { 12235 addToPath = font.getPathGenerator(this.commonObjs, character); 12236 } 12237 if (font.disableFontFace || patternFill) { 12238 ctx.save(); 12239 ctx.translate(x, y); 12240 ctx.beginPath(); 12241 addToPath(ctx, fontSize); 12242 if (patternTransform) { 12243 ctx.setTransform(...patternTransform); 12244 } 12245 if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 12246 ctx.fill(); 12247 } 12248 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 12249 ctx.stroke(); 12250 }
12251 ctx.restore(); 12252 } else { 12253 if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 12254 ctx.fillText(character, x, y); 12255 } 12256 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 12257 ctx.strokeText(character, x, y); 12258 } 12259 } 12260 if (isAddToPathSet) { 12261 const paths = this.pendingTextPaths ||= []; 12262 paths.push({ 12263 transform: (0, _display_utils.getCurrentTransform)(ctx), 12264 x, 12265 y, 12266 fontSize, 12267 addToPath 12268 }); 12269 } 12270 } 12271 get isFontSubpixelAAEnabled() { 12272 const { 12273 context: ctx 12274 } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); 12275 ctx.scale(1.5, 1); 12276 ctx.fillText("I", 0, 10); 12277 const data = ctx.getImageData(0, 0, 10, 10).data; 12278 let enabled = false; 12279 for (let i = 3; i < data.length; i += 4) { 12280 if (data[i] > 0 && data[i] < 255) { 12281 enabled = true; 12282 break; 12283 } 12284 } 12285 return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); 12286 } 12287 showText(glyphs) { 12288 const current = this.current; 12289 const font = current.font; 12290 if (font.isType3Font) { 12291 return this.showType3Text(glyphs); 12292 } 12293 const fontSize = current.fontSize; 12294 if (fontSize === 0) { 12295 return undefined; 12296 } 12297 const ctx = this.ctx; 12298 const fontSizeScale = current.fontSizeScale; 12299 const charSpacing = current.charSpacing; 12300 const wordSpacing = current.wordSpacing; 12301 const fontDirection = current.fontDirection; 12302 const textHScale = current.textHScale * fontDirection; 12303 const glyphsLength = glyphs.length; 12304 const vertical = font.vertical; 12305 const spacingDir = vertical ? 1 : -1; 12306 const defaultVMetrics = font.defaultVMetrics; 12307 const widthAdvanceScale = fontSize * current.fontMatrix[0]; 12308 const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; 12309 ctx.save(); 12310 ctx.transform(...current.textMatrix); 12311 ctx.translate(current.x, current.y + current.textRise); 12312 if (fontDirection > 0) { 12313 ctx.scale(textHScale, -1); 12314 } else { 12315 ctx.scale(textHScale, 1); 12316 } 12317 let patternTransform; 12318 if (current.patternFill) { 12319 ctx.save(); 12320 const pattern = current.fillColor.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL); 12321 patternTransform = (0, _display_utils.getCurrentTransform)(ctx); 12322 ctx.restore(); 12323 ctx.fillStyle = pattern; 12324 } 12325 let lineWidth = current.lineWidth; 12326 const scale = current.textMatrixScale; 12327 if (scale === 0 || lineWidth === 0) { 12328 const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; 12329 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 12330 lineWidth = this.getSinglePixelWidth(); 12331 } 12332 } else { 12333 lineWidth /= scale; 12334 } 12335 if (fontSizeScale !== 1.0) { 12336 ctx.scale(fontSizeScale, fontSizeScale); 12337 lineWidth /= fontSizeScale; 12338 } 12339 ctx.lineWidth = lineWidth; 12340 if (font.isInvalidPDFjsFont) { 12341 const chars = []; 12342 let width = 0; 12343 for (const glyph of glyphs) { 12344 chars.push(glyph.unicode); 12345 width += glyph.width; 12346 } 12347 ctx.fillText(chars.join(""), 0, 0); 12348 current.x += width * widthAdvanceScale * textHScale; 12349 ctx.restore(); 12350 this.compose(); 12351 return undefined; 12352 } 12353 let x = 0, 12354 i; 12355 for (i = 0; i < glyphsLength; ++i) { 12356 const glyph = glyphs[i];
vendor: 3,295 bytes, lines 12357-12441
12357 if (typeof glyph === "number") { 12358 x += spacingDir * glyph * fontSize / 1000; 12359 continue; 12360 } 12361 let restoreNeeded = false; 12362 const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; 12363 const character = glyph.fontChar; 12364 const accent = glyph.accent; 12365 let scaledX, scaledY; 12366 let width = glyph.width; 12367 if (vertical) { 12368 const vmetric = glyph.vmetric || defaultVMetrics; 12369 const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; 12370 const vy = vmetric[2] * widthAdvanceScale; 12371 width = vmetric ? -vmetric[0] : width; 12372 scaledX = vx / fontSizeScale; 12373 scaledY = (x + vy) / fontSizeScale; 12374 } else { 12375 scaledX = x / fontSizeScale; 12376 scaledY = 0; 12377 } 12378 if (font.remeasure && width > 0) { 12379 const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; 12380 if (width < measuredWidth && this.isFontSubpixelAAEnabled) { 12381 const characterScaleX = width / measuredWidth; 12382 restoreNeeded = true; 12383 ctx.save(); 12384 ctx.scale(characterScaleX, 1); 12385 scaledX /= characterScaleX; 12386 } else if (width !== measuredWidth) { 12387 scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; 12388 } 12389 } 12390 if (this.contentVisible && (glyph.isInFont || font.missingFile)) { 12391 if (simpleFillText && !accent) { 12392 ctx.fillText(character, scaledX, scaledY); 12393 } else { 12394 this.paintChar(character, scaledX, scaledY, patternTransform); 12395 if (accent) { 12396 const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; 12397 const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; 12398 this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); 12399 } 12400 } 12401 } 12402 const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; 12403 x += charWidth; 12404 if (restoreNeeded) { 12405 ctx.restore(); 12406 } 12407 } 12408 if (vertical) { 12409 current.y -= x; 12410 } else { 12411 current.x += x * textHScale; 12412 } 12413 ctx.restore(); 12414 this.compose(); 12415 return undefined; 12416 } 12417 showType3Text(glyphs) { 12418 const ctx = this.ctx; 12419 const current = this.current; 12420 const font = current.font; 12421 const fontSize = current.fontSize; 12422 const fontDirection = current.fontDirection; 12423 const spacingDir = font.vertical ? 1 : -1; 12424 const charSpacing = current.charSpacing; 12425 const wordSpacing = current.wordSpacing; 12426 const textHScale = current.textHScale * fontDirection; 12427 const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; 12428 const glyphsLength = glyphs.length; 12429 const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; 12430 let i, glyph, width, spacingLength; 12431 if (isTextInvisible || fontSize === 0) { 12432 return; 12433 } 12434 this._cachedScaleForStroking[0] = -1; 12435 this._cachedGetSinglePixelWidth = null; 12436 ctx.save(); 12437 ctx.transform(...current.textMatrix); 12438 ctx.translate(current.x, current.y); 12439 ctx.scale(textHScale, fontDirection); 12440 for (i = 0; i < glyphsLength; ++i) { 12441 glyph = glyphs[i];
12442 if (typeof glyph === "number") { 12443 spacingLength = spacingDir * glyph * fontSize / 1000; 12444 this.ctx.translate(spacingLength, 0); 12445 current.x += spacingLength * textHScale; 12446 continue; 12447 } 12448 const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; 12449 const operatorList = font.charProcOperatorList[glyph.operatorListId]; 12450 if (!operatorList) { 12451 (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); 12452 continue; 12453 } 12454 if (this.contentVisible) { 12455 this.processingType3 = glyph; 12456 this.save(); 12457 ctx.scale(fontSize, fontSize); 12458 ctx.transform(...fontMatrix); 12459 this.executeOperatorList(operatorList); 12460 this.restore(); 12461 } 12462 const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); 12463 width = transformed[0] * fontSize + spacing; 12464 ctx.translate(width, 0); 12465 current.x += width * textHScale; 12466 } 12467 ctx.restore(); 12468 this.processingType3 = null; 12469 } 12470 setCharWidth(xWidth, yWidth) {} 12471 setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { 12472 this.ctx.rect(llx, lly, urx - llx, ury - lly); 12473 this.ctx.clip(); 12474 this.endPath(); 12475 } 12476 getColorN_Pattern(IR) { 12477 let pattern; 12478 if (IR[0] === "TilingPattern") { 12479 const color = IR[1]; 12480 const baseTransform = this.baseTransform || (0, _display_utils.getCurrentTransform)(this.ctx); 12481 const canvasGraphicsFactory = { 12482 createCanvasGraphics: ctx => { 12483 return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { 12484 optionalContentConfig: this.optionalContentConfig, 12485 markedContentStack: this.markedContentStack 12486 }); 12487 } 12488 }; 12489 pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); 12490 } else { 12491 pattern = this._getPattern(IR[1], IR[2]); 12492 } 12493 return pattern; 12494 } 12495 setStrokeColorN() { 12496 this.current.strokeColor = this.getColorN_Pattern(arguments); 12497 } 12498 setFillColorN() { 12499 this.current.fillColor = this.getColorN_Pattern(arguments); 12500 this.current.patternFill = true; 12501 } 12502 setStrokeRGBColor(r, g, b) { 12503 const color = _util.Util.makeHexColor(r, g, b); 12504 this.ctx.strokeStyle = color; 12505 this.current.strokeColor = color; 12506 } 12507 setFillRGBColor(r, g, b) { 12508 const color = _util.Util.makeHexColor(r, g, b); 12509 this.ctx.fillStyle = color; 12510 this.current.fillColor = color; 12511 this.current.patternFill = false; 12512 } 12513 _getPattern(objId) { 12514 let matrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 12515 let pattern; 12516 if (this.cachedPatterns.has(objId)) { 12517 pattern = this.cachedPatterns.get(objId); 12518 } else { 12519 pattern = (0, _pattern_helper.getShadingPattern)(this.getObject(objId)); 12520 this.cachedPatterns.set(objId, pattern); 12521 } 12522 if (matrix) { 12523 pattern.matrix = matrix; 12524 } 12525 return pattern; 12526 } 12527 shadingFill(objId) { 12528 if (!this.contentVisible) { 12529 return; 12530 } 12531 const ctx = this.ctx; 12532 this.save(); 12533 const pattern = this._getPattern(objId); 12534 ctx.fillStyle = pattern.getPattern(ctx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.SHADING); 12535 const inv = (0, _display_utils.getCurrentTransformInverse)(ctx); 12536 if (inv) { 12537 const { 12538 width, 12539 height 12540 } = ctx.canvas; 12541 const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); 12542 this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); 12543 } else { 12544 this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); 12545 } 12546 this.compose(this.current.getClippedPathBoundingBox()); 12547 this.restore(); 12548 } 12549 beginInlineImage() { 12550 (0, _util.unreachable)("Should not call beginInlineImage"); 12551 } 12552 beginImageData() { 12553 (0, _util.unreachable)("Should not call beginImageData"); 12554 } 12555 paintFormXObjectBegin(matrix, bbox) { 12556 if (!this.contentVisible) { 12557 return; 12558 } 12559 this.save(); 12560 this.baseTransformStack.push(this.baseTransform); 12561 if (Array.isArray(matrix) && matrix.length === 6) { 12562 this.transform(...matrix); 12563 } 12564 this.baseTransform = (0, _display_utils.getCurrentTransform)(this.ctx); 12565 if (bbox) { 12566 const width = bbox[2] - bbox[0]; 12567 const height = bbox[3] - bbox[1]; 12568 this.ctx.rect(bbox[0], bbox[1], width, height); 12569 this.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(this.ctx), bbox); 12570 this.clip(); 12571 this.endPath(); 12572 } 12573 } 12574 paintFormXObjectEnd() { 12575 if (!this.contentVisible) { 12576 return; 12577 }
12578 this.restore(); 12579 this.baseTransform = this.baseTransformStack.pop(); 12580 } 12581 beginGroup(group) { 12582 if (!this.contentVisible) { 12583 return; 12584 } 12585 this.save(); 12586 if (this.inSMaskMode) { 12587 this.endSMaskMode(); 12588 this.current.activeSMask = null; 12589 } 12590 const currentCtx = this.ctx; 12591 if (!group.isolated) { 12592 (0, _util.info)("TODO: Support non-isolated groups."); 12593 } 12594 if (group.knockout) { 12595 (0, _util.warn)("Knockout groups not supported."); 12596 } 12597 const currentTransform = (0, _display_utils.getCurrentTransform)(currentCtx); 12598 if (group.matrix) { 12599 currentCtx.transform(...group.matrix); 12600 } 12601 if (!group.bbox) { 12602 throw new Error("Bounding box is required."); 12603 } 12604 let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, (0, _display_utils.getCurrentTransform)(currentCtx)); 12605 const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; 12606 bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; 12607 const offsetX = Math.floor(bounds[0]); 12608 const offsetY = Math.floor(bounds[1]); 12609 let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); 12610 let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); 12611 let scaleX = 1, 12612 scaleY = 1; 12613 if (drawnWidth > MAX_GROUP_SIZE) { 12614 scaleX = drawnWidth / MAX_GROUP_SIZE; 12615 drawnWidth = MAX_GROUP_SIZE; 12616 } 12617 if (drawnHeight > MAX_GROUP_SIZE) { 12618 scaleY = drawnHeight / MAX_GROUP_SIZE; 12619 drawnHeight = MAX_GROUP_SIZE; 12620 } 12621 this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); 12622 let cacheId = "groupAt" + this.groupLevel; 12623 if (group.smask) { 12624 cacheId += "_smask_" + this.smaskCounter++ % 2; 12625 } 12626 const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); 12627 const groupCtx = scratchCanvas.context; 12628 groupCtx.scale(1 / scaleX, 1 / scaleY); 12629 groupCtx.translate(-offsetX, -offsetY); 12630 groupCtx.transform(...currentTransform); 12631 if (group.smask) { 12632 this.smaskStack.push({ 12633 canvas: scratchCanvas.canvas, 12634 context: groupCtx, 12635 offsetX, 12636 offsetY, 12637 scaleX, 12638 scaleY, 12639 subtype: group.smask.subtype, 12640 backdrop: group.smask.backdrop, 12641 transferMap: group.smask.transferMap || null, 12642 startTransformInverse: null 12643 }); 12644 } else { 12645 currentCtx.setTransform(1, 0, 0, 1, 0, 0); 12646 currentCtx.translate(offsetX, offsetY); 12647 currentCtx.scale(scaleX, scaleY); 12648 currentCtx.save(); 12649 } 12650 copyCtxState(currentCtx, groupCtx); 12651 this.ctx = groupCtx; 12652 this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); 12653 this.groupStack.push(currentCtx); 12654 this.groupLevel++; 12655 } 12656 endGroup(group) { 12657 if (!this.contentVisible) { 12658 return; 12659 } 12660 this.groupLevel--; 12661 const groupCtx = this.ctx; 12662 const ctx = this.groupStack.pop(); 12663 this.ctx = ctx; 12664 this.ctx.imageSmoothingEnabled = false; 12665 if (group.smask) { 12666 this.tempSMask = this.smaskStack.pop(); 12667 this.restore(); 12668 } else { 12669 this.ctx.restore(); 12670 const currentMtx = (0, _display_utils.getCurrentTransform)(this.ctx); 12671 this.restore(); 12672 this.ctx.save(); 12673 this.ctx.setTransform(...currentMtx); 12674 const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); 12675 this.ctx.drawImage(groupCtx.canvas, 0, 0); 12676 this.ctx.restore(); 12677 this.compose(dirtyBox); 12678 } 12679 } 12680 beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { 12681 this.#restoreInitialState(); 12682 resetCtxToDefault(this.ctx); 12683 this.ctx.save(); 12684 this.save(); 12685 if (this.baseTransform) { 12686 this.ctx.setTransform(...this.baseTransform); 12687 } 12688 if (Array.isArray(rect) && rect.length === 4) { 12689 const width = rect[2] - rect[0]; 12690 const height = rect[3] - rect[1]; 12691 if (hasOwnCanvas && this.annotationCanvasMap) { 12692 transform = transform.slice(); 12693 transform[4] -= rect[0]; 12694 transform[5] -= rect[1]; 12695 rect = rect.slice(); 12696 rect[0] = rect[1] = 0; 12697 rect[2] = width; 12698 rect[3] = height; 12699 const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(this.ctx)); 12700 const { 12701 viewportScale 12702 } = this; 12703 const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
12704 const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); 12705 this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); 12706 const { 12707 canvas, 12708 context 12709 } = this.annotationCanvas; 12710 this.annotationCanvasMap.set(id, canvas); 12711 this.annotationCanvas.savedCtx = this.ctx; 12712 this.ctx = context; 12713 this.ctx.save(); 12714 this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); 12715 resetCtxToDefault(this.ctx); 12716 } else { 12717 resetCtxToDefault(this.ctx); 12718 this.ctx.rect(rect[0], rect[1], width, height); 12719 this.ctx.clip(); 12720 this.endPath(); 12721 } 12722 } 12723 this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); 12724 this.transform(...transform); 12725 this.transform(...matrix); 12726 } 12727 endAnnotation() { 12728 if (this.annotationCanvas) { 12729 this.ctx.restore(); 12730 this.#drawFilter(); 12731 this.ctx = this.annotationCanvas.savedCtx; 12732 delete this.annotationCanvas.savedCtx; 12733 delete this.annotationCanvas; 12734 } 12735 } 12736 paintImageMaskXObject(img) { 12737 if (!this.contentVisible) { 12738 return; 12739 } 12740 const count = img.count; 12741 img = this.getObject(img.data, img); 12742 img.count = count; 12743 const ctx = this.ctx; 12744 const glyph = this.processingType3; 12745 if (glyph) { 12746 if (glyph.compiled === undefined) { 12747 glyph.compiled = compileType3Glyph(img); 12748 } 12749 if (glyph.compiled) { 12750 glyph.compiled(ctx); 12751 return; 12752 } 12753 } 12754 const mask = this._createMaskCanvas(img); 12755 const maskCanvas = mask.canvas; 12756 ctx.save(); 12757 ctx.setTransform(1, 0, 0, 1, 0, 0); 12758 ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); 12759 ctx.restore(); 12760 this.compose(); 12761 } 12762 paintImageMaskXObjectRepeat(img, scaleX) { 12763 let skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 12764 let skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; 12765 let scaleY = arguments.length > 4 ? arguments[4] : undefined; 12766 let positions = arguments.length > 5 ? arguments[5] : undefined; 12767 if (!this.contentVisible) { 12768 return; 12769 } 12770 img = this.getObject(img.data, img); 12771 const ctx = this.ctx; 12772 ctx.save(); 12773 const currentTransform = (0, _display_utils.getCurrentTransform)(ctx); 12774 ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); 12775 const mask = this._createMaskCanvas(img); 12776 ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); 12777 for (let i = 0, ii = positions.length; i < ii; i += 2) { 12778 const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); 12779 const [x, y] = _util.Util.applyTransform([0, 0], trans); 12780 ctx.drawImage(mask.canvas, x, y); 12781 } 12782 ctx.restore(); 12783 this.compose(); 12784 } 12785 paintImageMaskXObjectGroup(images) { 12786 if (!this.contentVisible) { 12787 return; 12788 } 12789 const ctx = this.ctx; 12790 const fillColor = this.current.fillColor; 12791 const isPatternFill = this.current.patternFill; 12792 for (const image of images) { 12793 const { 12794 data, 12795 width, 12796 height, 12797 transform 12798 } = image; 12799 const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); 12800 const maskCtx = maskCanvas.context; 12801 maskCtx.save(); 12802 const img = this.getObject(data, image); 12803 putBinaryImageMask(maskCtx, img); 12804 maskCtx.globalCompositeOperation = "source-in"; 12805 maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, (0, _display_utils.getCurrentTransformInverse)(ctx), _pattern_helper.PathType.FILL) : fillColor; 12806 maskCtx.fillRect(0, 0, width, height); 12807 maskCtx.restore(); 12808 ctx.save(); 12809 ctx.transform(...transform); 12810 ctx.scale(1, -1); 12811 drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); 12812 ctx.restore(); 12813 } 12814 this.compose(); 12815 } 12816 paintImageXObject(objId) { 12817 if (!this.contentVisible) { 12818 return; 12819 } 12820 const imgData = this.getObject(objId); 12821 if (!imgData) { 12822 (0, _util.warn)("Dependent image isn't ready yet"); 12823 return; 12824 } 12825 this.paintInlineImageXObject(imgData); 12826 } 12827 paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { 12828 if (!this.contentVisible) { 12829 return; 12830 } 12831 const imgData = this.getObject(objId); 12832 if (!imgData) { 12833 (0, _util.warn)("Dependent image isn't ready yet"); 12834 return; 12835 } 12836 const width = imgData.width; 12837 const height = imgData.height; 12838 const map = []; 12839 for (let i = 0, ii = positions.length; i < ii; i += 2) { 12840 map.push({ 12841 transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], 12842 x: 0, 12843 y: 0, 12844 w: width, 12845 h: height 12846 }); 12847 } 12848 this.paintInlineImageXObjectGroup(imgData, map); 12849 } 12850 applyTransferMapsToCanvas(ctx) { 12851 if (this.current.transferMaps !== "none") { 12852 ctx.filter = this.current.transferMaps; 12853 ctx.drawImage(ctx.canvas, 0, 0); 12854 ctx.filter = "none"; 12855 } 12856 return ctx.canvas; 12857 } 12858 applyTransferMapsToBitmap(imgData) { 12859 if (this.current.transferMaps === "none") { 12860 return imgData.bitmap; 12861 } 12862 const { 12863 bitmap, 12864 width, 12865 height 12866 } = imgData; 12867 const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); 12868 const tmpCtx = tmpCanvas.context; 12869 tmpCtx.filter = this.current.transferMaps; 12870 tmpCtx.drawImage(bitmap, 0, 0); 12871 tmpCtx.filter = "none"; 12872 return tmpCanvas.canvas; 12873 } 12874 paintInlineImageXObject(imgData) { 12875 if (!this.contentVisible) { 12876 return; 12877 } 12878 const width = imgData.width; 12879 const height = imgData.height; 12880 const ctx = this.ctx; 12881 this.save(); 12882 if (!_util.isNodeJS) { 12883 const { 12884 filter 12885 } = ctx; 12886 if (filter !== "none" && filter !== "") { 12887 ctx.filter = "none"; 12888 } 12889 } 12890 ctx.scale(1 / width, -1 / height); 12891 let imgToPaint; 12892 if (imgData.bitmap) { 12893 imgToPaint = this.applyTransferMapsToBitmap(imgData); 12894 } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { 12895 imgToPaint = imgData; 12896 } else { 12897 const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); 12898 const tmpCtx = tmpCanvas.context; 12899 putBinaryImageData(tmpCtx, imgData); 12900 imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); 12901 } 12902 const scaled = this._scaleImage(imgToPaint, (0, _display_utils.getCurrentTransformInverse)(ctx)); 12903 ctx.imageSmoothingEnabled = getImageSmoothingEnabled((0, _display_utils.getCurrentTransform)(ctx), imgData.interpolate); 12904 drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); 12905 this.compose();
vendor: 4,375 bytes, lines 12906-13056
12906 this.restore(); 12907 } 12908 paintInlineImageXObjectGroup(imgData, map) { 12909 if (!this.contentVisible) { 12910 return; 12911 } 12912 const ctx = this.ctx; 12913 let imgToPaint; 12914 if (imgData.bitmap) { 12915 imgToPaint = imgData.bitmap; 12916 } else { 12917 const w = imgData.width; 12918 const h = imgData.height; 12919 const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); 12920 const tmpCtx = tmpCanvas.context; 12921 putBinaryImageData(tmpCtx, imgData); 12922 imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); 12923 } 12924 for (const entry of map) { 12925 ctx.save(); 12926 ctx.transform(...entry.transform); 12927 ctx.scale(1, -1); 12928 drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); 12929 ctx.restore(); 12930 } 12931 this.compose(); 12932 } 12933 paintSolidColorImageMask() { 12934 if (!this.contentVisible) { 12935 return; 12936 } 12937 this.ctx.fillRect(0, 0, 1, 1); 12938 this.compose(); 12939 } 12940 markPoint(tag) {} 12941 markPointProps(tag, properties) {} 12942 beginMarkedContent(tag) { 12943 this.markedContentStack.push({ 12944 visible: true 12945 }); 12946 } 12947 beginMarkedContentProps(tag, properties) { 12948 if (tag === "OC") { 12949 this.markedContentStack.push({ 12950 visible: this.optionalContentConfig.isVisible(properties) 12951 }); 12952 } else { 12953 this.markedContentStack.push({ 12954 visible: true 12955 }); 12956 } 12957 this.contentVisible = this.isContentVisible(); 12958 } 12959 endMarkedContent() { 12960 this.markedContentStack.pop(); 12961 this.contentVisible = this.isContentVisible(); 12962 } 12963 beginCompat() {} 12964 endCompat() {} 12965 consumePath(clipBox) { 12966 const isEmpty = this.current.isEmptyClip(); 12967 if (this.pendingClip) { 12968 this.current.updateClipFromPath(); 12969 } 12970 if (!this.pendingClip) { 12971 this.compose(clipBox); 12972 } 12973 const ctx = this.ctx; 12974 if (this.pendingClip) { 12975 if (!isEmpty) { 12976 if (this.pendingClip === EO_CLIP) { 12977 ctx.clip("evenodd"); 12978 } else { 12979 ctx.clip(); 12980 } 12981 } 12982 this.pendingClip = null; 12983 } 12984 this.current.startNewPathAndClipBox(this.current.clipBox); 12985 ctx.beginPath(); 12986 } 12987 getSinglePixelWidth() { 12988 if (!this._cachedGetSinglePixelWidth) { 12989 const m = (0, _display_utils.getCurrentTransform)(this.ctx); 12990 if (m[1] === 0 && m[2] === 0) { 12991 this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); 12992 } else { 12993 const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); 12994 const normX = Math.hypot(m[0], m[2]); 12995 const normY = Math.hypot(m[1], m[3]); 12996 this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; 12997 } 12998 } 12999 return this._cachedGetSinglePixelWidth; 13000 } 13001 getScaleForStroking() { 13002 if (this._cachedScaleForStroking[0] === -1) { 13003 const { 13004 lineWidth 13005 } = this.current; 13006 const { 13007 a, 13008 b, 13009 c, 13010 d 13011 } = this.ctx.getTransform(); 13012 let scaleX, scaleY; 13013 if (b === 0 && c === 0) { 13014 const normX = Math.abs(a); 13015 const normY = Math.abs(d); 13016 if (normX === normY) { 13017 if (lineWidth === 0) { 13018 scaleX = scaleY = 1 / normX; 13019 } else { 13020 const scaledLineWidth = normX * lineWidth; 13021 scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; 13022 } 13023 } else if (lineWidth === 0) { 13024 scaleX = 1 / normX; 13025 scaleY = 1 / normY; 13026 } else { 13027 const scaledXLineWidth = normX * lineWidth; 13028 const scaledYLineWidth = normY * lineWidth; 13029 scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; 13030 scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; 13031 } 13032 } else { 13033 const absDet = Math.abs(a * d - b * c); 13034 const normX = Math.hypot(a, b); 13035 const normY = Math.hypot(c, d); 13036 if (lineWidth === 0) { 13037 scaleX = normY / absDet; 13038 scaleY = normX / absDet; 13039 } else { 13040 const baseArea = lineWidth * absDet; 13041 scaleX = normY > baseArea ? normY / baseArea : 1; 13042 scaleY = normX > baseArea ? normX / baseArea : 1; 13043 } 13044 } 13045 this._cachedScaleForStroking[0] = scaleX; 13046 this._cachedScaleForStroking[1] = scaleY; 13047 } 13048 return this._cachedScaleForStroking; 13049 } 13050 rescaleAndStroke(saveRestore) { 13051 const { 13052 ctx 13053 } = this; 13054 const { 13055 lineWidth 13056 } = this.current;
13057 const [scaleX, scaleY] = this.getScaleForStroking(); 13058 ctx.lineWidth = lineWidth || 1; 13059 if (scaleX === 1 && scaleY === 1) { 13060 ctx.stroke(); 13061 return; 13062 } 13063 const dashes = ctx.getLineDash(); 13064 if (saveRestore) { 13065 ctx.save(); 13066 } 13067 ctx.scale(scaleX, scaleY); 13068 if (dashes.length > 0) { 13069 const scale = Math.max(scaleX, scaleY); 13070 ctx.setLineDash(dashes.map(x => x / scale)); 13071 ctx.lineDashOffset /= scale; 13072 } 13073 ctx.stroke(); 13074 if (saveRestore) { 13075 ctx.restore(); 13076 } 13077 } 13078 isContentVisible() { 13079 for (let i = this.markedContentStack.length - 1; i >= 0; i--) { 13080 if (!this.markedContentStack[i].visible) { 13081 return false; 13082 } 13083 } 13084 return true; 13085 } 13086} 13087exports.CanvasGraphics = CanvasGraphics; 13088for (const op in _util.OPS) { 13089 if (CanvasGraphics.prototype[op] !== undefined) { 13090 CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; 13091 } 13092} 13093 13094/***/ }), 13095/* 174 */ 13096/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 13097 13098 13099 13100Object.defineProperty(exports, "__esModule", ({ 13101 value: true 13102})); 13103exports.TilingPattern = exports.PathType = void 0; 13104exports.getShadingPattern = getShadingPattern; 13105__w_pdfjs_require__(2); 13106var _util = __w_pdfjs_require__(1); 13107var _display_utils = __w_pdfjs_require__(168); 13108const PathType = { 13109 FILL: "Fill", 13110 STROKE: "Stroke", 13111 SHADING: "Shading" 13112}; 13113exports.PathType = PathType; 13114function applyBoundingBox(ctx, bbox) { 13115 if (!bbox) { 13116 return; 13117 } 13118 const width = bbox[2] - bbox[0]; 13119 const height = bbox[3] - bbox[1]; 13120 const region = new Path2D(); 13121 region.rect(bbox[0], bbox[1], width, height); 13122 ctx.clip(region); 13123} 13124class BaseShadingPattern { 13125 constructor() { 13126 if (this.constructor === BaseShadingPattern) { 13127 (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); 13128 } 13129 } 13130 getPattern() { 13131 (0, _util.unreachable)("Abstract method `getPattern` called."); 13132 } 13133} 13134class RadialAxialShadingPattern extends BaseShadingPattern { 13135 constructor(IR) { 13136 super(); 13137 this._type = IR[1]; 13138 this._bbox = IR[2]; 13139 this._colorStops = IR[3]; 13140 this._p0 = IR[4]; 13141 this._p1 = IR[5]; 13142 this._r0 = IR[6]; 13143 this._r1 = IR[7]; 13144 this.matrix = null; 13145 } 13146 _createGradient(ctx) { 13147 let grad; 13148 if (this._type === "axial") { 13149 grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); 13150 } else if (this._type === "radial") { 13151 grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); 13152 } 13153 for (const colorStop of this._colorStops) { 13154 grad.addColorStop(colorStop[0], colorStop[1]); 13155 } 13156 return grad; 13157 } 13158 getPattern(ctx, owner, inverse, pathType) { 13159 let pattern; 13160 if (pathType === PathType.STROKE || pathType === PathType.FILL) { 13161 const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, (0, _display_utils.getCurrentTransform)(ctx)) || [0, 0, 0, 0]; 13162 const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; 13163 const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; 13164 const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); 13165 const tmpCtx = tmpCanvas.context; 13166 tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); 13167 tmpCtx.beginPath(); 13168 tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); 13169 tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); 13170 inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); 13171 tmpCtx.transform(...owner.baseTransform); 13172 if (this.matrix) { 13173 tmpCtx.transform(...this.matrix); 13174 } 13175 applyBoundingBox(tmpCtx, this._bbox); 13176 tmpCtx.fillStyle = this._createGradient(tmpCtx); 13177 tmpCtx.fill(); 13178 pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); 13179 const domMatrix = new DOMMatrix(inverse); 13180 pattern.setTransform(domMatrix); 13181 } else { 13182 applyBoundingBox(ctx, this._bbox); 13183 pattern = this._createGradient(ctx); 13184 } 13185 return pattern; 13186 } 13187} 13188function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { 13189 const coords = context.coords, 13190 colors = context.colors; 13191 const bytes = data.data, 13192 rowSize = data.width * 4; 13193 let tmp; 13194 if (coords[p1 + 1] > coords[p2 + 1]) { 13195 tmp = p1; 13196 p1 = p2; 13197 p2 = tmp; 13198 tmp = c1; 13199 c1 = c2; 13200 c2 = tmp; 13201 } 13202 if (coords[p2 + 1] > coords[p3 + 1]) { 13203 tmp = p2; 13204 p2 = p3; 13205 p3 = tmp; 13206 tmp = c2; 13207 c2 = c3; 13208 c3 = tmp; 13209 } 13210 if (coords[p1 + 1] > coords[p2 + 1]) { 13211 tmp = p1; 13212 p1 = p2; 13213 p2 = tmp; 13214 tmp = c1; 13215 c1 = c2; 13216 c2 = tmp; 13217 } 13218 const x1 = (coords[p1] + context.offsetX) * context.scaleX; 13219 const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; 13220 const x2 = (coords[p2] + context.offsetX) * context.scaleX; 13221 const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; 13222 const x3 = (coords[p3] + context.offsetX) * context.scaleX; 13223 const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; 13224 if (y1 >= y3) { 13225 return; 13226 } 13227 const c1r = colors[c1], 13228 c1g = colors[c1 + 1], 13229 c1b = colors[c1 + 2]; 13230 const c2r = colors[c2], 13231 c2g = colors[c2 + 1], 13232 c2b = colors[c2 + 2]; 13233 const c3r = colors[c3], 13234 c3g = colors[c3 + 1], 13235 c3b = colors[c3 + 2]; 13236 const minY = Math.round(y1), 13237 maxY = Math.round(y3); 13238 let xa, car, cag, cab; 13239 let xb, cbr, cbg, cbb; 13240 for (let y = minY; y <= maxY; y++) { 13241 if (y < y2) {
vendor: 4,267 bytes, lines 13242-13371
13242 const k = y < y1 ? 0 : (y1 - y) / (y1 - y2); 13243 xa = x1 - (x1 - x2) * k; 13244 car = c1r - (c1r - c2r) * k; 13245 cag = c1g - (c1g - c2g) * k; 13246 cab = c1b - (c1b - c2b) * k; 13247 } else { 13248 let k; 13249 if (y > y3) { 13250 k = 1; 13251 } else if (y2 === y3) { 13252 k = 0; 13253 } else { 13254 k = (y2 - y) / (y2 - y3); 13255 } 13256 xa = x2 - (x2 - x3) * k; 13257 car = c2r - (c2r - c3r) * k; 13258 cag = c2g - (c2g - c3g) * k; 13259 cab = c2b - (c2b - c3b) * k; 13260 } 13261 let k; 13262 if (y < y1) { 13263 k = 0; 13264 } else if (y > y3) { 13265 k = 1; 13266 } else { 13267 k = (y1 - y) / (y1 - y3); 13268 } 13269 xb = x1 - (x1 - x3) * k; 13270 cbr = c1r - (c1r - c3r) * k; 13271 cbg = c1g - (c1g - c3g) * k; 13272 cbb = c1b - (c1b - c3b) * k; 13273 const x1_ = Math.round(Math.min(xa, xb)); 13274 const x2_ = Math.round(Math.max(xa, xb)); 13275 let j = rowSize * y + x1_ * 4; 13276 for (let x = x1_; x <= x2_; x++) { 13277 k = (xa - x) / (xa - xb); 13278 if (k < 0) { 13279 k = 0; 13280 } else if (k > 1) { 13281 k = 1; 13282 } 13283 bytes[j++] = car - (car - cbr) * k | 0; 13284 bytes[j++] = cag - (cag - cbg) * k | 0; 13285 bytes[j++] = cab - (cab - cbb) * k | 0; 13286 bytes[j++] = 255; 13287 } 13288 } 13289} 13290function drawFigure(data, figure, context) { 13291 const ps = figure.coords; 13292 const cs = figure.colors; 13293 let i, ii; 13294 switch (figure.type) { 13295 case "lattice": 13296 const verticesPerRow = figure.verticesPerRow; 13297 const rows = Math.floor(ps.length / verticesPerRow) - 1; 13298 const cols = verticesPerRow - 1; 13299 for (i = 0; i < rows; i++) { 13300 let q = i * verticesPerRow; 13301 for (let j = 0; j < cols; j++, q++) { 13302 drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); 13303 drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); 13304 } 13305 } 13306 break; 13307 case "triangles": 13308 for (i = 0, ii = ps.length; i < ii; i += 3) { 13309 drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); 13310 } 13311 break; 13312 default: 13313 throw new Error("illegal figure"); 13314 } 13315} 13316class MeshShadingPattern extends BaseShadingPattern { 13317 constructor(IR) { 13318 super(); 13319 this._coords = IR[2]; 13320 this._colors = IR[3]; 13321 this._figures = IR[4]; 13322 this._bounds = IR[5]; 13323 this._bbox = IR[7]; 13324 this._background = IR[8]; 13325 this.matrix = null; 13326 } 13327 _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { 13328 const EXPECTED_SCALE = 1.1; 13329 const MAX_PATTERN_SIZE = 3000; 13330 const BORDER_SIZE = 2; 13331 const offsetX = Math.floor(this._bounds[0]); 13332 const offsetY = Math.floor(this._bounds[1]); 13333 const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; 13334 const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; 13335 const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); 13336 const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); 13337 const scaleX = boundsWidth / width; 13338 const scaleY = boundsHeight / height; 13339 const context = { 13340 coords: this._coords, 13341 colors: this._colors, 13342 offsetX: -offsetX, 13343 offsetY: -offsetY, 13344 scaleX: 1 / scaleX, 13345 scaleY: 1 / scaleY 13346 }; 13347 const paddedWidth = width + BORDER_SIZE * 2; 13348 const paddedHeight = height + BORDER_SIZE * 2; 13349 const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); 13350 const tmpCtx = tmpCanvas.context; 13351 const data = tmpCtx.createImageData(width, height); 13352 if (backgroundColor) { 13353 const bytes = data.data; 13354 for (let i = 0, ii = bytes.length; i < ii; i += 4) { 13355 bytes[i] = backgroundColor[0]; 13356 bytes[i + 1] = backgroundColor[1]; 13357 bytes[i + 2] = backgroundColor[2]; 13358 bytes[i + 3] = 255; 13359 } 13360 } 13361 for (const figure of this._figures) { 13362 drawFigure(data, figure, context); 13363 } 13364 tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); 13365 const canvas = tmpCanvas.canvas; 13366 return { 13367 canvas, 13368 offsetX: offsetX - BORDER_SIZE * scaleX, 13369 offsetY: offsetY - BORDER_SIZE * scaleY, 13370 scaleX, 13371 scaleY
13372 }; 13373 } 13374 getPattern(ctx, owner, inverse, pathType) { 13375 applyBoundingBox(ctx, this._bbox); 13376 let scale; 13377 if (pathType === PathType.SHADING) { 13378 scale = _util.Util.singularValueDecompose2dScale((0, _display_utils.getCurrentTransform)(ctx)); 13379 } else { 13380 scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); 13381 if (this.matrix) { 13382 const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); 13383 scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; 13384 } 13385 } 13386 const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); 13387 if (pathType !== PathType.SHADING) { 13388 ctx.setTransform(...owner.baseTransform); 13389 if (this.matrix) { 13390 ctx.transform(...this.matrix); 13391 } 13392 } 13393 ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); 13394 ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); 13395 return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); 13396 } 13397} 13398class DummyShadingPattern extends BaseShadingPattern { 13399 getPattern() { 13400 return "hotpink"; 13401 } 13402} 13403function getShadingPattern(IR) { 13404 switch (IR[0]) { 13405 case "RadialAxial": 13406 return new RadialAxialShadingPattern(IR); 13407 case "Mesh": 13408 return new MeshShadingPattern(IR); 13409 case "Dummy": 13410 return new DummyShadingPattern(); 13411 } 13412 throw new Error(`Unknown IR type: ${IR[0]}`); 13413} 13414const PaintType = { 13415 COLORED: 1, 13416 UNCOLORED: 2 13417}; 13418class TilingPattern { 13419 static MAX_PATTERN_SIZE = 3000; 13420 constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { 13421 this.operatorList = IR[2]; 13422 this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; 13423 this.bbox = IR[4]; 13424 this.xstep = IR[5]; 13425 this.ystep = IR[6]; 13426 this.paintType = IR[7]; 13427 this.tilingType = IR[8]; 13428 this.color = color; 13429 this.ctx = ctx; 13430 this.canvasGraphicsFactory = canvasGraphicsFactory; 13431 this.baseTransform = baseTransform; 13432 } 13433 createPatternCanvas(owner) { 13434 const operatorList = this.operatorList; 13435 const bbox = this.bbox; 13436 const xstep = this.xstep; 13437 const ystep = this.ystep; 13438 const paintType = this.paintType; 13439 const tilingType = this.tilingType; 13440 const color = this.color; 13441 const canvasGraphicsFactory = this.canvasGraphicsFactory; 13442 (0, _util.info)("TilingType: " + tilingType); 13443 const x0 = bbox[0], 13444 y0 = bbox[1], 13445 x1 = bbox[2], 13446 y1 = bbox[3]; 13447 const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); 13448 const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); 13449 const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; 13450 const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); 13451 const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); 13452 const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); 13453 const tmpCtx = tmpCanvas.context; 13454 const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); 13455 graphics.groupLevel = owner.groupLevel; 13456 this.setFillAndStrokeStyleToContext(graphics, paintType, color); 13457 let adjustedX0 = x0; 13458 let adjustedY0 = y0; 13459 let adjustedX1 = x1; 13460 let adjustedY1 = y1; 13461 if (x0 < 0) { 13462 adjustedX0 = 0; 13463 adjustedX1 += Math.abs(x0); 13464 } 13465 if (y0 < 0) { 13466 adjustedY0 = 0; 13467 adjustedY1 += Math.abs(y0); 13468 } 13469 tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); 13470 graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); 13471 tmpCtx.save(); 13472 this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); 13473 graphics.baseTransform = (0, _display_utils.getCurrentTransform)(graphics.ctx); 13474 graphics.executeOperatorList(operatorList); 13475 graphics.endDrawing(); 13476 return { 13477 canvas: tmpCanvas.canvas, 13478 scaleX: dimx.scale, 13479 scaleY: dimy.scale, 13480 offsetX: adjustedX0, 13481 offsetY: adjustedY0 13482 }; 13483 } 13484 getSizeAndScale(step, realOutputSize, scale) { 13485 step = Math.abs(step); 13486 const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
13487 let size = Math.ceil(step * scale); 13488 if (size >= maxSize) { 13489 size = maxSize; 13490 } else { 13491 scale = size / step; 13492 } 13493 return { 13494 scale, 13495 size 13496 }; 13497 } 13498 clipBbox(graphics, x0, y0, x1, y1) { 13499 const bboxWidth = x1 - x0; 13500 const bboxHeight = y1 - y0; 13501 graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); 13502 graphics.current.updateRectMinMax((0, _display_utils.getCurrentTransform)(graphics.ctx), [x0, y0, x1, y1]); 13503 graphics.clip(); 13504 graphics.endPath(); 13505 } 13506 setFillAndStrokeStyleToContext(graphics, paintType, color) { 13507 const context = graphics.ctx, 13508 current = graphics.current; 13509 switch (paintType) { 13510 case PaintType.COLORED: 13511 const ctx = this.ctx; 13512 context.fillStyle = ctx.fillStyle; 13513 context.strokeStyle = ctx.strokeStyle; 13514 current.fillColor = ctx.fillStyle; 13515 current.strokeColor = ctx.strokeStyle; 13516 break; 13517 case PaintType.UNCOLORED: 13518 const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); 13519 context.fillStyle = cssColor; 13520 context.strokeStyle = cssColor; 13521 current.fillColor = cssColor; 13522 current.strokeColor = cssColor; 13523 break; 13524 default: 13525 throw new _util.FormatError(`Unsupported paint type: ${paintType}`); 13526 } 13527 } 13528 getPattern(ctx, owner, inverse, pathType) { 13529 let matrix = inverse; 13530 if (pathType !== PathType.SHADING) { 13531 matrix = _util.Util.transform(matrix, owner.baseTransform); 13532 if (this.matrix) { 13533 matrix = _util.Util.transform(matrix, this.matrix); 13534 } 13535 } 13536 const temporaryPatternCanvas = this.createPatternCanvas(owner); 13537 let domMatrix = new DOMMatrix(matrix); 13538 domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); 13539 domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); 13540 const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); 13541 pattern.setTransform(domMatrix); 13542 return pattern; 13543 } 13544} 13545exports.TilingPattern = TilingPattern; 13546 13547/***/ }), 13548/* 175 */ 13549/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 13550 13551 13552 13553Object.defineProperty(exports, "__esModule", ({ 13554 value: true 13555})); 13556exports.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA; 13557exports.convertToRGBA = convertToRGBA; 13558exports.grayToRGBA = grayToRGBA; 13559__w_pdfjs_require__(93); 13560__w_pdfjs_require__(101); 13561__w_pdfjs_require__(102); 13562__w_pdfjs_require__(105); 13563__w_pdfjs_require__(107); 13564__w_pdfjs_require__(109); 13565__w_pdfjs_require__(113); 13566__w_pdfjs_require__(116); 13567__w_pdfjs_require__(123); 13568var _util = __w_pdfjs_require__(1); 13569function convertToRGBA(params) { 13570 switch (params.kind) { 13571 case _util.ImageKind.GRAYSCALE_1BPP: 13572 return convertBlackAndWhiteToRGBA(params); 13573 case _util.ImageKind.RGB_24BPP: 13574 return convertRGBToRGBA(params); 13575 } 13576 return null; 13577} 13578function convertBlackAndWhiteToRGBA(_ref) { 13579 let { 13580 src, 13581 srcPos = 0, 13582 dest, 13583 width, 13584 height, 13585 nonBlackColor = 0xffffffff, 13586 inverseDecode = false 13587 } = _ref; 13588 const black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; 13589 const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; 13590 const widthInSource = width >> 3; 13591 const widthRemainder = width & 7; 13592 const srcLength = src.length; 13593 dest = new Uint32Array(dest.buffer); 13594 let destPos = 0; 13595 for (let i = 0; i < height; i++) { 13596 for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { 13597 const elem = srcPos < srcLength ? src[srcPos] : 255; 13598 dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; 13599 dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; 13600 dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; 13601 dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; 13602 dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; 13603 dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; 13604 dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; 13605 dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; 13606 } 13607 if (widthRemainder === 0) { 13608 continue; 13609 } 13610 const elem = srcPos < srcLength ? src[srcPos++] : 255; 13611 for (let j = 0; j < widthRemainder; j++) { 13612 dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; 13613 } 13614 } 13615 return { 13616 srcPos, 13617 destPos 13618 }; 13619} 13620function convertRGBToRGBA(_ref2) { 13621 let { 13622 src, 13623 srcPos = 0, 13624 dest, 13625 destPos = 0, 13626 width, 13627 height 13628 } = _ref2; 13629 let i = 0; 13630 const len32 = src.length >> 2; 13631 const src32 = new Uint32Array(src.buffer, srcPos, len32); 13632 if (_util.FeatureTest.isLittleEndian) { 13633 for (; i < len32 - 2; i += 3, destPos += 4) { 13634 const s1 = src32[i]; 13635 const s2 = src32[i + 1]; 13636 const s3 = src32[i + 2]; 13637 dest[destPos] = s1 | 0xff000000; 13638 dest[destPos + 1] = s1 >>> 24 | s2 << 8 | 0xff000000; 13639 dest[destPos + 2] = s2 >>> 16 | s3 << 16 | 0xff000000; 13640 dest[destPos + 3] = s3 >>> 8 | 0xff000000; 13641 } 13642 for (let j = i * 4, jj = src.length; j < jj; j += 3) { 13643 dest[destPos++] = src[j] | src[j + 1] << 8 | src[j + 2] << 16 | 0xff000000; 13644 } 13645 } else { 13646 for (; i < len32 - 2; i += 3, destPos += 4) { 13647 const s1 = src32[i]; 13648 const s2 = src32[i + 1]; 13649 const s3 = src32[i + 2]; 13650 dest[destPos] = s1 | 0xff;
13651 dest[destPos + 1] = s1 << 24 | s2 >>> 8 | 0xff; 13652 dest[destPos + 2] = s2 << 16 | s3 >>> 16 | 0xff; 13653 dest[destPos + 3] = s3 << 8 | 0xff; 13654 } 13655 for (let j = i * 4, jj = src.length; j < jj; j += 3) { 13656 dest[destPos++] = src[j] << 24 | src[j + 1] << 16 | src[j + 2] << 8 | 0xff; 13657 } 13658 } 13659 return { 13660 srcPos, 13661 destPos 13662 }; 13663} 13664function grayToRGBA(src, dest) { 13665 if (_util.FeatureTest.isLittleEndian) { 13666 for (let i = 0, ii = src.length; i < ii; i++) { 13667 dest[i] = src[i] * 0x10101 | 0xff000000; 13668 } 13669 } else { 13670 for (let i = 0, ii = src.length; i < ii; i++) { 13671 dest[i] = src[i] * 0x1010100 | 0x000000ff; 13672 } 13673 } 13674} 13675 13676/***/ }), 13677/* 176 */ 13678/***/ ((__unused_webpack_module, exports) => { 13679 13680 13681 13682Object.defineProperty(exports, "__esModule", ({ 13683 value: true 13684})); 13685exports.GlobalWorkerOptions = void 0; 13686const GlobalWorkerOptions = Object.create(null); 13687exports.GlobalWorkerOptions = GlobalWorkerOptions; 13688GlobalWorkerOptions.workerPort = null; 13689GlobalWorkerOptions.workerSrc = ""; 13690 13691/***/ }), 13692/* 177 */ 13693/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 13694 13695 13696 13697Object.defineProperty(exports, "__esModule", ({ 13698 value: true 13699})); 13700exports.MessageHandler = void 0; 13701__w_pdfjs_require__(2); 13702var _util = __w_pdfjs_require__(1); 13703const CallbackKind = { 13704 UNKNOWN: 0, 13705 DATA: 1, 13706 ERROR: 2 13707}; 13708const StreamKind = { 13709 UNKNOWN: 0, 13710 CANCEL: 1, 13711 CANCEL_COMPLETE: 2, 13712 CLOSE: 3, 13713 ENQUEUE: 4, 13714 ERROR: 5, 13715 PULL: 6, 13716 PULL_COMPLETE: 7, 13717 START_COMPLETE: 8 13718}; 13719function wrapReason(reason) { 13720 if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { 13721 (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); 13722 } 13723 switch (reason.name) { 13724 case "AbortException": 13725 return new _util.AbortException(reason.message); 13726 case "MissingPDFException": 13727 return new _util.MissingPDFException(reason.message); 13728 case "PasswordException": 13729 return new _util.PasswordException(reason.message, reason.code); 13730 case "UnexpectedResponseException": 13731 return new _util.UnexpectedResponseException(reason.message, reason.status); 13732 case "UnknownErrorException": 13733 return new _util.UnknownErrorException(reason.message, reason.details); 13734 default: 13735 return new _util.UnknownErrorException(reason.message, reason.toString()); 13736 } 13737} 13738class MessageHandler { 13739 constructor(sourceName, targetName, comObj) { 13740 this.sourceName = sourceName; 13741 this.targetName = targetName; 13742 this.comObj = comObj; 13743 this.callbackId = 1; 13744 this.streamId = 1; 13745 this.streamSinks = Object.create(null); 13746 this.streamControllers = Object.create(null); 13747 this.callbackCapabilities = Object.create(null); 13748 this.actionHandler = Object.create(null); 13749 this._onComObjOnMessage = event => { 13750 const data = event.data; 13751 if (data.targetName !== this.sourceName) { 13752 return; 13753 } 13754 if (data.stream) { 13755 this.#processStreamMessage(data); 13756 return; 13757 } 13758 if (data.callback) { 13759 const callbackId = data.callbackId; 13760 const capability = this.callbackCapabilities[callbackId]; 13761 if (!capability) { 13762 throw new Error(`Cannot resolve callback ${callbackId}`); 13763 } 13764 delete this.callbackCapabilities[callbackId]; 13765 if (data.callback === CallbackKind.DATA) { 13766 capability.resolve(data.data); 13767 } else if (data.callback === CallbackKind.ERROR) { 13768 capability.reject(wrapReason(data.reason)); 13769 } else { 13770 throw new Error("Unexpected callback case"); 13771 } 13772 return; 13773 } 13774 const action = this.actionHandler[data.action]; 13775 if (!action) { 13776 throw new Error(`Unknown action from worker: ${data.action}`); 13777 } 13778 if (data.callbackId) { 13779 const cbSourceName = this.sourceName; 13780 const cbTargetName = data.sourceName; 13781 new Promise(function (resolve) { 13782 resolve(action(data.data)); 13783 }).then(function (result) { 13784 comObj.postMessage({ 13785 sourceName: cbSourceName, 13786 targetName: cbTargetName, 13787 callback: CallbackKind.DATA, 13788 callbackId: data.callbackId, 13789 data: result 13790 }); 13791 }, function (reason) { 13792 comObj.postMessage({ 13793 sourceName: cbSourceName, 13794 targetName: cbTargetName, 13795 callback: CallbackKind.ERROR, 13796 callbackId: data.callbackId, 13797 reason: wrapReason(reason) 13798 }); 13799 }); 13800 return; 13801 } 13802 if (data.streamId) { 13803 this.#createStreamSink(data); 13804 return; 13805 } 13806 action(data.data); 13807 }; 13808 comObj.addEventListener("message", this._onComObjOnMessage); 13809 } 13810 on(actionName, handler) { 13811 const ah = this.actionHandler; 13812 if (ah[actionName]) { 13813 throw new Error(`There is already an actionName called "${actionName}"`); 13814 } 13815 ah[actionName] = handler; 13816 } 13817 send(actionName, data, transfers) { 13818 this.comObj.postMessage({ 13819 sourceName: this.sourceName, 13820 targetName: this.targetName, 13821 action: actionName, 13822 data 13823 }, transfers); 13824 }
13825 sendWithPromise(actionName, data, transfers) { 13826 const callbackId = this.callbackId++; 13827 const capability = new _util.PromiseCapability(); 13828 this.callbackCapabilities[callbackId] = capability; 13829 try { 13830 this.comObj.postMessage({ 13831 sourceName: this.sourceName, 13832 targetName: this.targetName, 13833 action: actionName, 13834 callbackId, 13835 data 13836 }, transfers); 13837 } catch (ex) { 13838 capability.reject(ex); 13839 } 13840 return capability.promise; 13841 } 13842 sendWithStream(actionName, data, queueingStrategy, transfers) { 13843 const streamId = this.streamId++, 13844 sourceName = this.sourceName, 13845 targetName = this.targetName, 13846 comObj = this.comObj; 13847 return new ReadableStream({ 13848 start: controller => { 13849 const startCapability = new _util.PromiseCapability(); 13850 this.streamControllers[streamId] = { 13851 controller, 13852 startCall: startCapability, 13853 pullCall: null, 13854 cancelCall: null, 13855 isClosed: false 13856 }; 13857 comObj.postMessage({ 13858 sourceName, 13859 targetName, 13860 action: actionName, 13861 streamId, 13862 data, 13863 desiredSize: controller.desiredSize 13864 }, transfers); 13865 return startCapability.promise; 13866 }, 13867 pull: controller => { 13868 const pullCapability = new _util.PromiseCapability(); 13869 this.streamControllers[streamId].pullCall = pullCapability; 13870 comObj.postMessage({ 13871 sourceName, 13872 targetName, 13873 stream: StreamKind.PULL, 13874 streamId, 13875 desiredSize: controller.desiredSize 13876 }); 13877 return pullCapability.promise; 13878 }, 13879 cancel: reason => { 13880 (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); 13881 const cancelCapability = new _util.PromiseCapability(); 13882 this.streamControllers[streamId].cancelCall = cancelCapability; 13883 this.streamControllers[streamId].isClosed = true; 13884 comObj.postMessage({ 13885 sourceName, 13886 targetName, 13887 stream: StreamKind.CANCEL, 13888 streamId, 13889 reason: wrapReason(reason) 13890 }); 13891 return cancelCapability.promise; 13892 } 13893 }, queueingStrategy); 13894 } 13895 #createStreamSink(data) { 13896 const streamId = data.streamId, 13897 sourceName = this.sourceName, 13898 targetName = data.sourceName, 13899 comObj = this.comObj; 13900 const self = this, 13901 action = this.actionHandler[data.action]; 13902 const streamSink = { 13903 enqueue(chunk) { 13904 let size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; 13905 let transfers = arguments.length > 2 ? arguments[2] : undefined; 13906 if (this.isCancelled) { 13907 return; 13908 } 13909 const lastDesiredSize = this.desiredSize; 13910 this.desiredSize -= size; 13911 if (lastDesiredSize > 0 && this.desiredSize <= 0) { 13912 this.sinkCapability = new _util.PromiseCapability(); 13913 this.ready = this.sinkCapability.promise; 13914 } 13915 comObj.postMessage({ 13916 sourceName, 13917 targetName, 13918 stream: StreamKind.ENQUEUE, 13919 streamId, 13920 chunk 13921 }, transfers); 13922 }, 13923 close() { 13924 if (this.isCancelled) { 13925 return; 13926 } 13927 this.isCancelled = true; 13928 comObj.postMessage({ 13929 sourceName, 13930 targetName, 13931 stream: StreamKind.CLOSE, 13932 streamId 13933 }); 13934 delete self.streamSinks[streamId]; 13935 }, 13936 error(reason) { 13937 (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); 13938 if (this.isCancelled) { 13939 return; 13940 } 13941 this.isCancelled = true; 13942 comObj.postMessage({ 13943 sourceName, 13944 targetName, 13945 stream: StreamKind.ERROR, 13946 streamId, 13947 reason: wrapReason(reason) 13948 }); 13949 }, 13950 sinkCapability: new _util.PromiseCapability(), 13951 onPull: null, 13952 onCancel: null, 13953 isCancelled: false, 13954 desiredSize: data.desiredSize, 13955 ready: null 13956 }; 13957 streamSink.sinkCapability.resolve(); 13958 streamSink.ready = streamSink.sinkCapability.promise; 13959 this.streamSinks[streamId] = streamSink; 13960 new Promise(function (resolve) { 13961 resolve(action(data.data, streamSink)); 13962 }).then(function () { 13963 comObj.postMessage({ 13964 sourceName, 13965 targetName, 13966 stream: StreamKind.START_COMPLETE, 13967 streamId, 13968 success: true 13969 }); 13970 }, function (reason) { 13971 comObj.postMessage({ 13972 sourceName, 13973 targetName, 13974 stream: StreamKind.START_COMPLETE, 13975 streamId, 13976 reason: wrapReason(reason) 13977 }); 13978 }); 13979 } 13980 #processStreamMessage(data) { 13981 const streamId = data.streamId, 13982 sourceName = this.sourceName, 13983 targetName = data.sourceName, 13984 comObj = this.comObj; 13985 const streamController = this.streamControllers[streamId], 13986 streamSink = this.streamSinks[streamId]; 13987 switch (data.stream) { 13988 case StreamKind.START_COMPLETE: 13989 if (data.success) { 13990 streamController.startCall.resolve(); 13991 } else { 13992 streamController.startCall.reject(wrapReason(data.reason)); 13993 } 13994 break; 13995 case StreamKind.PULL_COMPLETE: 13996 if (data.success) { 13997 streamController.pullCall.resolve(); 13998 } else { 13999 streamController.pullCall.reject(wrapReason(data.reason)); 14000 } 14001 break; 14002 case StreamKind.PULL: 14003 if (!streamSink) { 14004 comObj.postMessage({ 14005 sourceName, 14006 targetName, 14007 stream: StreamKind.PULL_COMPLETE, 14008 streamId, 14009 success: true 14010 }); 14011 break; 14012 } 14013 if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { 14014 streamSink.sinkCapability.resolve(); 14015 } 14016 streamSink.desiredSize = data.desiredSize; 14017 new Promise(function (resolve) { 14018 resolve(streamSink.onPull?.()); 14019 }).then(function () { 14020 comObj.postMessage({ 14021 sourceName, 14022 targetName, 14023 stream: StreamKind.PULL_COMPLETE, 14024 streamId, 14025 success: true 14026 }); 14027 }, function (reason) { 14028 comObj.postMessage({ 14029 sourceName, 14030 targetName, 14031 stream: StreamKind.PULL_COMPLETE, 14032 streamId, 14033 reason: wrapReason(reason) 14034 }); 14035 }); 14036 break; 14037 case StreamKind.ENQUEUE: 14038 (0, _util.assert)(streamController, "enqueue should have stream controller"); 14039 if (streamController.isClosed) { 14040 break; 14041 } 14042 streamController.controller.enqueue(data.chunk); 14043 break; 14044 case StreamKind.CLOSE: 14045 (0, _util.assert)(streamController, "close should have stream controller"); 14046 if (streamController.isClosed) { 14047 break; 14048 } 14049 streamController.isClosed = true; 14050 streamController.controller.close(); 14051 this.#deleteStreamController(streamController, streamId); 14052 break; 14053 case StreamKind.ERROR: 14054 (0, _util.assert)(streamController, "error should have stream controller"); 14055 streamController.controller.error(wrapReason(data.reason)); 14056 this.#deleteStreamController(streamController, streamId); 14057 break; 14058 case StreamKind.CANCEL_COMPLETE: 14059 if (data.success) { 14060 streamController.cancelCall.resolve(); 14061 } else { 14062 streamController.cancelCall.reject(wrapReason(data.reason)); 14063 } 14064 this.#deleteStreamController(streamController, streamId); 14065 break; 14066 case StreamKind.CANCEL: 14067 if (!streamSink) { 14068 break; 14069 } 14070 new Promise(function (resolve) { 14071 resolve(streamSink.onCancel?.(wrapReason(data.reason))); 14072 }).then(function () { 14073 comObj.postMessage({ 14074 sourceName, 14075 targetName, 14076 stream: StreamKind.CANCEL_COMPLETE, 14077 streamId, 14078 success: true 14079 }); 14080 }, function (reason) { 14081 comObj.postMessage({ 14082 sourceName, 14083 targetName, 14084 stream: StreamKind.CANCEL_COMPLETE, 14085 streamId, 14086 reason: wrapReason(reason) 14087 }); 14088 }); 14089 streamSink.sinkCapability.reject(wrapReason(data.reason)); 14090 streamSink.isCancelled = true; 14091 delete this.streamSinks[streamId]; 14092 break; 14093 default: 14094 throw new Error("Unexpected stream case"); 14095 } 14096 } 14097 async #deleteStreamController(streamController, streamId) { 14098 await Promise.allSettled([streamController.startCall?.promise, streamController.pullCall?.promise, streamController.cancelCall?.promise]); 14099 delete this.streamControllers[streamId]; 14100 } 14101 destroy() { 14102 this.comObj.removeEventListener("message", this._onComObjOnMessage); 14103 } 14104} 14105exports.MessageHandler = MessageHandler; 14106 14107/***/ }), 14108/* 178 */ 14109/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14110 14111 14112 14113Object.defineProperty(exports, "__esModule", ({ 14114 value: true 14115})); 14116exports.Metadata = void 0; 14117var _util = __w_pdfjs_require__(1); 14118class Metadata { 14119 #metadataMap; 14120 #data; 14121 constructor(_ref) { 14122 let { 14123 parsedData, 14124 rawData 14125 } = _ref; 14126 this.#metadataMap = parsedData; 14127 this.#data = rawData; 14128 } 14129 getRaw() { 14130 return this.#data; 14131 } 14132 get(name) { 14133 return this.#metadataMap.get(name) ?? null; 14134 } 14135 getAll() { 14136 return (0, _util.objectFromMap)(this.#metadataMap); 14137 } 14138 has(name) { 14139 return this.#metadataMap.has(name); 14140 } 14141} 14142exports.Metadata = Metadata; 14143 14144/***/ }), 14145/* 179 */ 14146/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14147 14148 14149 14150Object.defineProperty(exports, "__esModule", ({ 14151 value: true 14152})); 14153exports.OptionalContentConfig = void 0; 14154var _util = __w_pdfjs_require__(1); 14155var _murmurhash = __w_pdfjs_require__(170); 14156const INTERNAL = Symbol("INTERNAL"); 14157class OptionalContentGroup { 14158 #visible = true; 14159 constructor(name, intent) { 14160 this.name = name; 14161 this.intent = intent; 14162 } 14163 get visible() { 14164 return this.#visible; 14165 } 14166 _setVisible(internal, visible) { 14167 if (internal !== INTERNAL) { 14168 (0, _util.unreachable)("Internal method `_setVisible` called."); 14169 } 14170 this.#visible = visible; 14171 } 14172} 14173class OptionalContentConfig { 14174 #cachedGetHash = null; 14175 #groups = new Map(); 14176 #initialHash = null; 14177 #order = null; 14178 constructor(data) { 14179 this.name = null; 14180 this.creator = null; 14181 if (data === null) { 14182 return; 14183 } 14184 this.name = data.name; 14185 this.creator = data.creator; 14186 this.#order = data.order; 14187 for (const group of data.groups) { 14188 this.#groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); 14189 } 14190 if (data.baseState === "OFF") { 14191 for (const group of this.#groups.values()) { 14192 group._setVisible(INTERNAL, false); 14193 } 14194 } 14195 for (const on of data.on) { 14196 this.#groups.get(on)._setVisible(INTERNAL, true); 14197 } 14198 for (const off of data.off) { 14199 this.#groups.get(off)._setVisible(INTERNAL, false); 14200 } 14201 this.#initialHash = this.getHash(); 14202 } 14203 #evaluateVisibilityExpression(array) { 14204 const length = array.length; 14205 if (length < 2) { 14206 return true; 14207 } 14208 const operator = array[0]; 14209 for (let i = 1; i < length; i++) { 14210 const element = array[i]; 14211 let state; 14212 if (Array.isArray(element)) { 14213 state = this.#evaluateVisibilityExpression(element); 14214 } else if (this.#groups.has(element)) { 14215 state = this.#groups.get(element).visible; 14216 } else { 14217 (0, _util.warn)(`Optional content group not found: ${element}`); 14218 return true; 14219 } 14220 switch (operator) { 14221 case "And": 14222 if (!state) { 14223 return false;
14224 } 14225 break; 14226 case "Or": 14227 if (state) { 14228 return true; 14229 } 14230 break; 14231 case "Not": 14232 return !state; 14233 default: 14234 return true; 14235 } 14236 } 14237 return operator === "And"; 14238 } 14239 isVisible(group) { 14240 if (this.#groups.size === 0) { 14241 return true; 14242 } 14243 if (!group) { 14244 (0, _util.warn)("Optional content group not defined."); 14245 return true; 14246 } 14247 if (group.type === "OCG") { 14248 if (!this.#groups.has(group.id)) { 14249 (0, _util.warn)(`Optional content group not found: ${group.id}`); 14250 return true; 14251 } 14252 return this.#groups.get(group.id).visible; 14253 } else if (group.type === "OCMD") { 14254 if (group.expression) { 14255 return this.#evaluateVisibilityExpression(group.expression); 14256 } 14257 if (!group.policy || group.policy === "AnyOn") { 14258 for (const id of group.ids) { 14259 if (!this.#groups.has(id)) { 14260 (0, _util.warn)(`Optional content group not found: ${id}`); 14261 return true; 14262 } 14263 if (this.#groups.get(id).visible) { 14264 return true; 14265 } 14266 } 14267 return false; 14268 } else if (group.policy === "AllOn") { 14269 for (const id of group.ids) { 14270 if (!this.#groups.has(id)) { 14271 (0, _util.warn)(`Optional content group not found: ${id}`); 14272 return true; 14273 } 14274 if (!this.#groups.get(id).visible) { 14275 return false; 14276 } 14277 } 14278 return true; 14279 } else if (group.policy === "AnyOff") { 14280 for (const id of group.ids) { 14281 if (!this.#groups.has(id)) { 14282 (0, _util.warn)(`Optional content group not found: ${id}`); 14283 return true; 14284 } 14285 if (!this.#groups.get(id).visible) { 14286 return true; 14287 } 14288 } 14289 return false; 14290 } else if (group.policy === "AllOff") { 14291 for (const id of group.ids) { 14292 if (!this.#groups.has(id)) { 14293 (0, _util.warn)(`Optional content group not found: ${id}`); 14294 return true; 14295 } 14296 if (this.#groups.get(id).visible) { 14297 return false; 14298 } 14299 } 14300 return true; 14301 } 14302 (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); 14303 return true; 14304 } 14305 (0, _util.warn)(`Unknown group type ${group.type}.`); 14306 return true; 14307 } 14308 setVisibility(id) { 14309 let visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; 14310 if (!this.#groups.has(id)) { 14311 (0, _util.warn)(`Optional content group not found: ${id}`); 14312 return; 14313 } 14314 this.#groups.get(id)._setVisible(INTERNAL, !!visible); 14315 this.#cachedGetHash = null; 14316 } 14317 get hasInitialVisibility() { 14318 return this.#initialHash === null || this.getHash() === this.#initialHash; 14319 } 14320 getOrder() { 14321 if (!this.#groups.size) { 14322 return null; 14323 } 14324 if (this.#order) { 14325 return this.#order.slice(); 14326 } 14327 return [...this.#groups.keys()]; 14328 } 14329 getGroups() { 14330 return this.#groups.size > 0 ? (0, _util.objectFromMap)(this.#groups) : null; 14331 } 14332 getGroup(id) { 14333 return this.#groups.get(id) || null; 14334 } 14335 getHash() { 14336 if (this.#cachedGetHash !== null) { 14337 return this.#cachedGetHash; 14338 } 14339 const hash = new _murmurhash.MurmurHash3_64(); 14340 for (const [id, group] of this.#groups) { 14341 hash.update(`${id}:${group.visible}`); 14342 } 14343 return this.#cachedGetHash = hash.hexdigest(); 14344 } 14345} 14346exports.OptionalContentConfig = OptionalContentConfig; 14347 14348/***/ }), 14349/* 180 */ 14350/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14351 14352 14353 14354Object.defineProperty(exports, "__esModule", ({ 14355 value: true 14356})); 14357exports.PDFDataTransportStream = void 0; 14358__w_pdfjs_require__(93); 14359__w_pdfjs_require__(101); 14360__w_pdfjs_require__(102); 14361__w_pdfjs_require__(105); 14362__w_pdfjs_require__(107); 14363__w_pdfjs_require__(109); 14364__w_pdfjs_require__(113); 14365__w_pdfjs_require__(116); 14366__w_pdfjs_require__(123); 14367__w_pdfjs_require__(89); 14368var _util = __w_pdfjs_require__(1); 14369var _display_utils = __w_pdfjs_require__(168); 14370class PDFDataTransportStream { 14371 constructor(_ref, pdfDataRangeTransport) { 14372 let { 14373 length, 14374 initialData, 14375 progressiveDone = false, 14376 contentDispositionFilename = null, 14377 disableRange = false, 14378 disableStream = false 14379 } = _ref; 14380 (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); 14381 this._queuedChunks = []; 14382 this._progressiveDone = progressiveDone; 14383 this._contentDispositionFilename = contentDispositionFilename; 14384 if (initialData?.length > 0) { 14385 const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; 14386 this._queuedChunks.push(buffer); 14387 } 14388 this._pdfDataRangeTransport = pdfDataRangeTransport; 14389 this._isStreamingSupported = !disableStream; 14390 this._isRangeSupported = !disableRange; 14391 this._contentLength = length; 14392 this._fullRequestReader = null; 14393 this._rangeReaders = []; 14394 this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { 14395 this._onReceiveData({ 14396 begin, 14397 chunk 14398 }); 14399 }); 14400 this._pdfDataRangeTransport.addProgressListener((loaded, total) => { 14401 this._onProgress({ 14402 loaded, 14403 total 14404 }); 14405 }); 14406 this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { 14407 this._onReceiveData({ 14408 chunk 14409 }); 14410 }); 14411 this._pdfDataRangeTransport.addProgressiveDoneListener(() => { 14412 this._onProgressiveDone(); 14413 }); 14414 this._pdfDataRangeTransport.transportReady(); 14415 } 14416 _onReceiveData(_ref2) { 14417 let { 14418 begin, 14419 chunk 14420 } = _ref2; 14421 const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; 14422 if (begin === undefined) { 14423 if (this._fullRequestReader) { 14424 this._fullRequestReader._enqueue(buffer); 14425 } else { 14426 this._queuedChunks.push(buffer); 14427 } 14428 } else { 14429 const found = this._rangeReaders.some(function (rangeReader) { 14430 if (rangeReader._begin !== begin) { 14431 return false;
14432 } 14433 rangeReader._enqueue(buffer); 14434 return true; 14435 }); 14436 (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); 14437 } 14438 } 14439 get _progressiveDataLength() { 14440 return this._fullRequestReader?._loaded ?? 0; 14441 } 14442 _onProgress(evt) { 14443 if (evt.total === undefined) { 14444 this._rangeReaders[0]?.onProgress?.({ 14445 loaded: evt.loaded 14446 }); 14447 } else { 14448 this._fullRequestReader?.onProgress?.({ 14449 loaded: evt.loaded, 14450 total: evt.total 14451 }); 14452 } 14453 } 14454 _onProgressiveDone() { 14455 this._fullRequestReader?.progressiveDone(); 14456 this._progressiveDone = true; 14457 } 14458 _removeRangeReader(reader) { 14459 const i = this._rangeReaders.indexOf(reader); 14460 if (i >= 0) { 14461 this._rangeReaders.splice(i, 1); 14462 } 14463 } 14464 getFullReader() { 14465 (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); 14466 const queuedChunks = this._queuedChunks; 14467 this._queuedChunks = null; 14468 return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); 14469 } 14470 getRangeReader(begin, end) { 14471 if (end <= this._progressiveDataLength) { 14472 return null; 14473 } 14474 const reader = new PDFDataTransportStreamRangeReader(this, begin, end); 14475 this._pdfDataRangeTransport.requestDataRange(begin, end); 14476 this._rangeReaders.push(reader); 14477 return reader; 14478 } 14479 cancelAllRequests(reason) { 14480 this._fullRequestReader?.cancel(reason); 14481 for (const reader of this._rangeReaders.slice(0)) { 14482 reader.cancel(reason); 14483 } 14484 this._pdfDataRangeTransport.abort(); 14485 } 14486} 14487exports.PDFDataTransportStream = PDFDataTransportStream; 14488class PDFDataTransportStreamReader { 14489 constructor(stream, queuedChunks) { 14490 let progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 14491 let contentDispositionFilename = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 14492 this._stream = stream; 14493 this._done = progressiveDone || false; 14494 this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; 14495 this._queuedChunks = queuedChunks || []; 14496 this._loaded = 0; 14497 for (const chunk of this._queuedChunks) { 14498 this._loaded += chunk.byteLength; 14499 } 14500 this._requests = []; 14501 this._headersReady = Promise.resolve(); 14502 stream._fullRequestReader = this; 14503 this.onProgress = null; 14504 } 14505 _enqueue(chunk) { 14506 if (this._done) { 14507 return; 14508 } 14509 if (this._requests.length > 0) { 14510 const requestCapability = this._requests.shift(); 14511 requestCapability.resolve({ 14512 value: chunk, 14513 done: false 14514 }); 14515 } else { 14516 this._queuedChunks.push(chunk); 14517 } 14518 this._loaded += chunk.byteLength; 14519 } 14520 get headersReady() { 14521 return this._headersReady; 14522 } 14523 get filename() { 14524 return this._filename; 14525 } 14526 get isRangeSupported() { 14527 return this._stream._isRangeSupported; 14528 } 14529 get isStreamingSupported() { 14530 return this._stream._isStreamingSupported; 14531 } 14532 get contentLength() { 14533 return this._stream._contentLength; 14534 } 14535 async read() { 14536 if (this._queuedChunks.length > 0) { 14537 const chunk = this._queuedChunks.shift(); 14538 return { 14539 value: chunk, 14540 done: false 14541 }; 14542 } 14543 if (this._done) { 14544 return { 14545 value: undefined, 14546 done: true 14547 }; 14548 } 14549 const requestCapability = new _util.PromiseCapability(); 14550 this._requests.push(requestCapability); 14551 return requestCapability.promise; 14552 } 14553 cancel(reason) { 14554 this._done = true; 14555 for (const requestCapability of this._requests) { 14556 requestCapability.resolve({ 14557 value: undefined, 14558 done: true 14559 }); 14560 } 14561 this._requests.length = 0; 14562 } 14563 progressiveDone() { 14564 if (this._done) { 14565 return; 14566 } 14567 this._done = true; 14568 } 14569} 14570class PDFDataTransportStreamRangeReader { 14571 constructor(stream, begin, end) { 14572 this._stream = stream; 14573 this._begin = begin; 14574 this._end = end; 14575 this._queuedChunk = null; 14576 this._requests = []; 14577 this._done = false;
14578 this.onProgress = null; 14579 } 14580 _enqueue(chunk) { 14581 if (this._done) { 14582 return; 14583 } 14584 if (this._requests.length === 0) { 14585 this._queuedChunk = chunk; 14586 } else { 14587 const requestsCapability = this._requests.shift(); 14588 requestsCapability.resolve({ 14589 value: chunk, 14590 done: false 14591 }); 14592 for (const requestCapability of this._requests) { 14593 requestCapability.resolve({ 14594 value: undefined, 14595 done: true 14596 }); 14597 } 14598 this._requests.length = 0; 14599 } 14600 this._done = true; 14601 this._stream._removeRangeReader(this); 14602 } 14603 get isStreamingSupported() { 14604 return false; 14605 } 14606 async read() { 14607 if (this._queuedChunk) { 14608 const chunk = this._queuedChunk; 14609 this._queuedChunk = null; 14610 return { 14611 value: chunk, 14612 done: false 14613 }; 14614 } 14615 if (this._done) { 14616 return { 14617 value: undefined, 14618 done: true 14619 }; 14620 } 14621 const requestCapability = new _util.PromiseCapability(); 14622 this._requests.push(requestCapability); 14623 return requestCapability.promise; 14624 } 14625 cancel(reason) { 14626 this._done = true; 14627 for (const requestCapability of this._requests) { 14628 requestCapability.resolve({ 14629 value: undefined, 14630 done: true 14631 }); 14632 } 14633 this._requests.length = 0; 14634 this._stream._removeRangeReader(this); 14635 } 14636} 14637 14638/***/ }), 14639/* 181 */ 14640/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14641 14642 14643 14644Object.defineProperty(exports, "__esModule", ({ 14645 value: true 14646})); 14647exports.PDFFetchStream = void 0; 14648__w_pdfjs_require__(93); 14649__w_pdfjs_require__(101); 14650__w_pdfjs_require__(102); 14651__w_pdfjs_require__(105); 14652__w_pdfjs_require__(107); 14653__w_pdfjs_require__(109); 14654__w_pdfjs_require__(113); 14655__w_pdfjs_require__(116); 14656__w_pdfjs_require__(123); 14657__w_pdfjs_require__(89); 14658var _util = __w_pdfjs_require__(1); 14659var _network_utils = __w_pdfjs_require__(182); 14660; 14661function createFetchOptions(headers, withCredentials, abortController) { 14662 return { 14663 method: "GET", 14664 headers, 14665 signal: abortController.signal, 14666 mode: "cors", 14667 credentials: withCredentials ? "include" : "same-origin", 14668 redirect: "follow" 14669 }; 14670} 14671function createHeaders(httpHeaders) { 14672 const headers = new Headers(); 14673 for (const property in httpHeaders) { 14674 const value = httpHeaders[property]; 14675 if (value === undefined) { 14676 continue; 14677 } 14678 headers.append(property, value); 14679 } 14680 return headers; 14681} 14682function getArrayBuffer(val) { 14683 if (val instanceof Uint8Array) { 14684 return val.buffer; 14685 } 14686 if (val instanceof ArrayBuffer) { 14687 return val; 14688 } 14689 (0, _util.warn)(`getArrayBuffer - unexpected data format: ${val}`); 14690 return new Uint8Array(val).buffer; 14691} 14692class PDFFetchStream { 14693 constructor(source) { 14694 this.source = source; 14695 this.isHttp = /^https?:/i.test(source.url); 14696 this.httpHeaders = this.isHttp && source.httpHeaders || {}; 14697 this._fullRequestReader = null; 14698 this._rangeRequestReaders = []; 14699 } 14700 get _progressiveDataLength() { 14701 return this._fullRequestReader?._loaded ?? 0; 14702 } 14703 getFullReader() { 14704 (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); 14705 this._fullRequestReader = new PDFFetchStreamReader(this); 14706 return this._fullRequestReader; 14707 } 14708 getRangeReader(begin, end) { 14709 if (end <= this._progressiveDataLength) { 14710 return null; 14711 } 14712 const reader = new PDFFetchStreamRangeReader(this, begin, end); 14713 this._rangeRequestReaders.push(reader); 14714 return reader; 14715 } 14716 cancelAllRequests(reason) { 14717 this._fullRequestReader?.cancel(reason); 14718 for (const reader of this._rangeRequestReaders.slice(0)) { 14719 reader.cancel(reason); 14720 } 14721 } 14722} 14723exports.PDFFetchStream = PDFFetchStream; 14724class PDFFetchStreamReader { 14725 constructor(stream) { 14726 this._stream = stream; 14727 this._reader = null; 14728 this._loaded = 0; 14729 this._filename = null; 14730 const source = stream.source; 14731 this._withCredentials = source.withCredentials || false; 14732 this._contentLength = source.length; 14733 this._headersCapability = new _util.PromiseCapability(); 14734 this._disableRange = source.disableRange || false; 14735 this._rangeChunkSize = source.rangeChunkSize; 14736 if (!this._rangeChunkSize && !this._disableRange) { 14737 this._disableRange = true; 14738 } 14739 this._abortController = new AbortController(); 14740 this._isStreamingSupported = !source.disableStream; 14741 this._isRangeSupported = !source.disableRange; 14742 this._headers = createHeaders(this._stream.httpHeaders); 14743 const url = source.url; 14744 fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { 14745 if (!(0, _network_utils.validateResponseStatus)(response.status)) { 14746 throw (0, _network_utils.createResponseStatusError)(response.status, url); 14747 } 14748 this._reader = response.body.getReader(); 14749 this._headersCapability.resolve(); 14750 const getResponseHeader = name => { 14751 return response.headers.get(name); 14752 }; 14753 const { 14754 allowRangeRequests, 14755 suggestedLength 14756 } = (0, _network_utils.validateRangeRequestCapabilities)({ 14757 getResponseHeader, 14758 isHttp: this._stream.isHttp, 14759 rangeChunkSize: this._rangeChunkSize, 14760 disableRange: this._disableRange 14761 }); 14762 this._isRangeSupported = allowRangeRequests; 14763 this._contentLength = suggestedLength || this._contentLength; 14764 this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); 14765 if (!this._isStreamingSupported && this._isRangeSupported) { 14766 this.cancel(new _util.AbortException("Streaming is disabled.")); 14767 } 14768 }).catch(this._headersCapability.reject); 14769 this.onProgress = null; 14770 } 14771 get headersReady() { 14772 return this._headersCapability.promise; 14773 } 14774 get filename() { 14775 return this._filename; 14776 } 14777 get contentLength() { 14778 return this._contentLength; 14779 } 14780 get isRangeSupported() { 14781 return this._isRangeSupported; 14782 } 14783 get isStreamingSupported() { 14784 return this._isStreamingSupported; 14785 } 14786 async read() { 14787 await this._headersCapability.promise; 14788 const { 14789 value, 14790 done 14791 } = await this._reader.read(); 14792 if (done) { 14793 return { 14794 value, 14795 done 14796 }; 14797 } 14798 this._loaded += value.byteLength; 14799 this.onProgress?.({ 14800 loaded: this._loaded, 14801 total: this._contentLength 14802 }); 14803 return { 14804 value: getArrayBuffer(value), 14805 done: false 14806 }; 14807 } 14808 cancel(reason) { 14809 this._reader?.cancel(reason); 14810 this._abortController.abort(); 14811 } 14812} 14813class PDFFetchStreamRangeReader { 14814 constructor(stream, begin, end) { 14815 this._stream = stream; 14816 this._reader = null; 14817 this._loaded = 0; 14818 const source = stream.source; 14819 this._withCredentials = source.withCredentials || false; 14820 this._readCapability = new _util.PromiseCapability(); 14821 this._isStreamingSupported = !source.disableStream; 14822 this._abortController = new AbortController(); 14823 this._headers = createHeaders(this._stream.httpHeaders); 14824 this._headers.append("Range", `bytes=${begin}
14824-${end - 1}`); 14825 const url = source.url; 14826 fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { 14827 if (!(0, _network_utils.validateResponseStatus)(response.status)) { 14828 throw (0, _network_utils.createResponseStatusError)(response.status, url); 14829 } 14830 this._readCapability.resolve(); 14831 this._reader = response.body.getReader(); 14832 }).catch(this._readCapability.reject); 14833 this.onProgress = null; 14834 } 14835 get isStreamingSupported() { 14836 return this._isStreamingSupported; 14837 } 14838 async read() { 14839 await this._readCapability.promise; 14840 const { 14841 value, 14842 done 14843 } = await this._reader.read(); 14844 if (done) { 14845 return { 14846 value, 14847 done 14848 }; 14849 } 14850 this._loaded += value.byteLength; 14851 this.onProgress?.({ 14852 loaded: this._loaded 14853 }); 14854 return { 14855 value: getArrayBuffer(value), 14856 done: false 14857 }; 14858 } 14859 cancel(reason) { 14860 this._reader?.cancel(reason); 14861 this._abortController.abort(); 14862 } 14863} 14864 14865/***/ }), 14866/* 182 */ 14867/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14868 14869 14870 14871Object.defineProperty(exports, "__esModule", ({ 14872 value: true 14873})); 14874exports.createResponseStatusError = createResponseStatusError; 14875exports.extractFilenameFromHeader = extractFilenameFromHeader; 14876exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; 14877exports.validateResponseStatus = validateResponseStatus; 14878var _util = __w_pdfjs_require__(1); 14879var _content_disposition = __w_pdfjs_require__(183); 14880var _display_utils = __w_pdfjs_require__(168); 14881function validateRangeRequestCapabilities(_ref) { 14882 let { 14883 getResponseHeader, 14884 isHttp, 14885 rangeChunkSize, 14886 disableRange 14887 } = _ref; 14888 const returnValues = { 14889 allowRangeRequests: false, 14890 suggestedLength: undefined 14891 }; 14892 const length = parseInt(getResponseHeader("Content-Length"), 10); 14893 if (!Number.isInteger(length)) { 14894 return returnValues; 14895 } 14896 returnValues.suggestedLength = length; 14897 if (length <= 2 * rangeChunkSize) { 14898 return returnValues; 14899 } 14900 if (disableRange || !isHttp) { 14901 return returnValues; 14902 } 14903 if (getResponseHeader("Accept-Ranges") !== "bytes") { 14904 return returnValues; 14905 } 14906 const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; 14907 if (contentEncoding !== "identity") { 14908 return returnValues; 14909 } 14910 returnValues.allowRangeRequests = true; 14911 return returnValues; 14912} 14913function extractFilenameFromHeader(getResponseHeader) { 14914 const contentDisposition = getResponseHeader("Content-Disposition"); 14915 if (contentDisposition) { 14916 let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); 14917 if (filename.includes("%")) { 14918 try { 14919 filename = decodeURIComponent(filename); 14920 } catch {} 14921 } 14922 if ((0, _display_utils.isPdfFile)(filename)) { 14923 return filename; 14924 } 14925 } 14926 return null; 14927} 14928function createResponseStatusError(status, url) { 14929 if (status === 404 || status === 0 && url.startsWith("file:")) { 14930 return new _util.MissingPDFException('Missing PDF "' + url + '".'); 14931 } 14932 return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); 14933} 14934function validateResponseStatus(status) { 14935 return status === 200 || status === 206; 14936} 14937 14938/***/ }), 14939/* 183 */ 14940/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 14941 14942 14943 14944Object.defineProperty(exports, "__esModule", ({ 14945 value: true 14946})); 14947exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; 14948__w_pdfjs_require__(89); 14949__w_pdfjs_require__(149); 14950var _util = __w_pdfjs_require__(1); 14951function getFilenameFromContentDispositionHeader(contentDisposition) { 14952 let needsEncodingFixup = true; 14953 let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); 14954 if (tmp) { 14955 tmp = tmp[1]; 14956 let filename = rfc2616unquote(tmp); 14957 filename = unescape(filename); 14958 filename = rfc5987decode(filename); 14959 filename = rfc2047decode(filename); 14960 return fixupEncoding(filename); 14961 } 14962 tmp = rfc2231getparam(contentDisposition); 14963 if (tmp) { 14964 const filename = rfc2047decode(tmp); 14965 return fixupEncoding(filename); 14966 } 14967 tmp = toParamRegExp("filename", "i").exec(contentDisposition); 14968 if (tmp) { 14969 tmp = tmp[1]; 14970 let filename = rfc2616unquote(tmp); 14971 filename = rfc2047decode(filename); 14972 return fixupEncoding(filename); 14973 } 14974 function toParamRegExp(attributePattern, flags) { 14975 return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); 14976 } 14977 function textdecode(encoding, value) { 14978 if (encoding) { 14979 if (!/^[\x00-\xFF]+$/.test(value)) { 14980 return value; 14981 }
14982 try { 14983 const decoder = new TextDecoder(encoding, { 14984 fatal: true 14985 }); 14986 const buffer = (0, _util.stringToBytes)(value); 14987 value = decoder.decode(buffer); 14988 needsEncodingFixup = false; 14989 } catch {} 14990 } 14991 return value; 14992 } 14993 function fixupEncoding(value) { 14994 if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { 14995 value = textdecode("utf-8", value); 14996 if (needsEncodingFixup) { 14997 value = textdecode("iso-8859-1", value); 14998 } 14999 } 15000 return value; 15001 } 15002 function rfc2231getparam(contentDispositionStr) { 15003 const matches = []; 15004 let match; 15005 const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); 15006 while ((match = iter.exec(contentDispositionStr)) !== null) { 15007 let [, n, quot, part] = match; 15008 n = parseInt(n, 10); 15009 if (n in matches) { 15010 if (n === 0) { 15011 break; 15012 } 15013 continue; 15014 } 15015 matches[n] = [quot, part]; 15016 } 15017 const parts = []; 15018 for (let n = 0; n < matches.length; ++n) { 15019 if (!(n in matches)) { 15020 break; 15021 } 15022 let [quot, part] = matches[n]; 15023 part = rfc2616unquote(part); 15024 if (quot) { 15025 part = unescape(part); 15026 if (n === 0) { 15027 part = rfc5987decode(part); 15028 } 15029 } 15030 parts.push(part); 15031 } 15032 return parts.join(""); 15033 } 15034 function rfc2616unquote(value) { 15035 if (value.startsWith('"')) { 15036 const parts = value.slice(1).split('\\"'); 15037 for (let i = 0; i < parts.length; ++i) { 15038 const quotindex = parts[i].indexOf('"'); 15039 if (quotindex !== -1) { 15040 parts[i] = parts[i].slice(0, quotindex); 15041 parts.length = i + 1; 15042 } 15043 parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); 15044 } 15045 value = parts.join('"'); 15046 } 15047 return value; 15048 } 15049 function rfc5987decode(extvalue) { 15050 const encodingend = extvalue.indexOf("'"); 15051 if (encodingend === -1) { 15052 return extvalue; 15053 } 15054 const encoding = extvalue.slice(0, encodingend); 15055 const langvalue = extvalue.slice(encodingend + 1); 15056 const value = langvalue.replace(/^[^']*'/, ""); 15057 return textdecode(encoding, value); 15058 } 15059 function rfc2047decode(value) { 15060 if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { 15061 return value; 15062 } 15063 return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { 15064 if (encoding === "q" || encoding === "Q") { 15065 text = text.replaceAll("_", " "); 15066 text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function (match, hex) { 15067 return String.fromCharCode(parseInt(hex, 16)); 15068 }); 15069 return textdecode(charset, text); 15070 } 15071 try { 15072 text = atob(text); 15073 } catch {} 15074 return textdecode(charset, text); 15075 }); 15076 } 15077 return ""; 15078} 15079 15080/***/ }), 15081/* 184 */ 15082/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 15083 15084 15085 15086Object.defineProperty(exports, "__esModule", ({ 15087 value: true 15088})); 15089exports.PDFNetworkStream = void 0; 15090__w_pdfjs_require__(89); 15091var _util = __w_pdfjs_require__(1); 15092var _network_utils = __w_pdfjs_require__(182); 15093; 15094const OK_RESPONSE = 200; 15095const PARTIAL_CONTENT_RESPONSE = 206; 15096function getArrayBuffer(xhr) { 15097 const data = xhr.response; 15098 if (typeof data !== "string") { 15099 return data; 15100 } 15101 return (0, _util.stringToBytes)(data).buffer; 15102} 15103class NetworkManager { 15104 constructor(url) { 15105 let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 15106 this.url = url; 15107 this.isHttp = /^https?:/i.test(url); 15108 this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); 15109 this.withCredentials = args.withCredentials || false; 15110 this.currXhrId = 0; 15111 this.pendingRequests = Object.create(null); 15112 } 15113 requestRange(begin, end, listeners) { 15114 const args = { 15115 begin, 15116 end 15117 }; 15118 for (const prop in listeners) { 15119 args[prop] = listeners[prop]; 15120 } 15121 return this.request(args); 15122 } 15123 requestFull(listeners) { 15124 return this.request(listeners); 15125 } 15126 request(args) { 15127 const xhr = new XMLHttpRequest(); 15128 const xhrId = this.currXhrId++; 15129 const pendingRequest = this.pendingRequests[xhrId] = { 15130 xhr 15131 }; 15132 xhr.open("GET", this.url); 15133 xhr.withCredentials = this.withCredentials; 15134 for (const property in this.httpHeaders) { 15135 const value = this.httpHeaders[property]; 15136 if (value === undefined) { 15137 continue; 15138 } 15139 xhr.setRequestHeader(property, value); 15140 } 15141 if (this.isHttp && "begin" in args && "end" in args) { 15142 xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); 15143 pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; 15144 } else { 15145 pendingRequest.expectedStatus = OK_RESPONSE; 15146 } 15147 xhr.responseType = "arraybuffer"; 15148 if (args.onError) { 15149 xhr.onerror = function (evt) { 15150 args.onError(xhr.status); 15151 }; 15152 } 15153 xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); 15154 xhr.onprogress = this.onProgress.bind(this, xhrId); 15155 pendingRequest.onHeadersReceived = args.onHeadersReceived; 15156 pendingRequest.onDone = args.onDone; 15157 pendingRequest.onError = args.onError; 15158 pendingRequest.onProgress = args.onProgress; 15159 xhr.send(null); 15160 return xhrId; 15161 } 15162 onProgress(xhrId, evt) { 15163 const pendingRequest = this.pendingRequests[xhrId]; 15164 if (!pendingRequest) { 15165 return; 15166 } 15167 pendingRequest.onProgress?.(evt); 15168 } 15169 onStateChange(xhrId, evt) { 15170 const pendingRequest = this.pendingRequests[xhrId]; 15171 if (!pendingRequest) { 15172 return; 15173 } 15174 const xhr = pendingRequest.xhr; 15175 if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { 15176 pendingRequest.onHeadersReceived();
15177 delete pendingRequest.onHeadersReceived; 15178 } 15179 if (xhr.readyState !== 4) { 15180 return; 15181 } 15182 if (!(xhrId in this.pendingRequests)) { 15183 return; 15184 } 15185 delete this.pendingRequests[xhrId]; 15186 if (xhr.status === 0 && this.isHttp) { 15187 pendingRequest.onError?.(xhr.status); 15188 return; 15189 } 15190 const xhrStatus = xhr.status || OK_RESPONSE; 15191 const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; 15192 if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { 15193 pendingRequest.onError?.(xhr.status); 15194 return; 15195 } 15196 const chunk = getArrayBuffer(xhr); 15197 if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { 15198 const rangeHeader = xhr.getResponseHeader("Content-Range"); 15199 const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); 15200 pendingRequest.onDone({ 15201 begin: parseInt(matches[1], 10), 15202 chunk 15203 }); 15204 } else if (chunk) { 15205 pendingRequest.onDone({ 15206 begin: 0, 15207 chunk 15208 }); 15209 } else { 15210 pendingRequest.onError?.(xhr.status); 15211 } 15212 } 15213 getRequestXhr(xhrId) { 15214 return this.pendingRequests[xhrId].xhr; 15215 } 15216 isPendingRequest(xhrId) { 15217 return xhrId in this.pendingRequests; 15218 } 15219 abortRequest(xhrId) { 15220 const xhr = this.pendingRequests[xhrId].xhr; 15221 delete this.pendingRequests[xhrId]; 15222 xhr.abort(); 15223 } 15224} 15225class PDFNetworkStream { 15226 constructor(source) { 15227 this._source = source; 15228 this._manager = new NetworkManager(source.url, { 15229 httpHeaders: source.httpHeaders, 15230 withCredentials: source.withCredentials 15231 }); 15232 this._rangeChunkSize = source.rangeChunkSize; 15233 this._fullRequestReader = null; 15234 this._rangeRequestReaders = []; 15235 } 15236 _onRangeRequestReaderClosed(reader) { 15237 const i = this._rangeRequestReaders.indexOf(reader); 15238 if (i >= 0) { 15239 this._rangeRequestReaders.splice(i, 1); 15240 } 15241 } 15242 getFullReader() { 15243 (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); 15244 this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); 15245 return this._fullRequestReader; 15246 } 15247 getRangeReader(begin, end) { 15248 const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); 15249 reader.onClosed = this._onRangeRequestReaderClosed.bind(this); 15250 this._rangeRequestReaders.push(reader); 15251 return reader; 15252 } 15253 cancelAllRequests(reason) { 15254 this._fullRequestReader?.cancel(reason); 15255 for (const reader of this._rangeRequestReaders.slice(0)) { 15256 reader.cancel(reason); 15257 } 15258 } 15259} 15260exports.PDFNetworkStream = PDFNetworkStream; 15261class PDFNetworkStreamFullRequestReader { 15262 constructor(manager, source) { 15263 this._manager = manager; 15264 const args = { 15265 onHeadersReceived: this._onHeadersReceived.bind(this), 15266 onDone: this._onDone.bind(this), 15267 onError: this._onError.bind(this), 15268 onProgress: this._onProgress.bind(this) 15269 }; 15270 this._url = source.url; 15271 this._fullRequestId = manager.requestFull(args); 15272 this._headersReceivedCapability = new _util.PromiseCapability(); 15273 this._disableRange = source.disableRange || false; 15274 this._contentLength = source.length; 15275 this._rangeChunkSize = source.rangeChunkSize; 15276 if (!this._rangeChunkSize && !this._disableRange) { 15277 this._disableRange = true; 15278 } 15279 this._isStreamingSupported = false; 15280 this._isRangeSupported = false; 15281 this._cachedChunks = []; 15282 this._requests = []; 15283 this._done = false; 15284 this._storedError = undefined; 15285 this._filename = null; 15286 this.onProgress = null; 15287 } 15288 _onHeadersReceived() { 15289 const fullRequestXhrId = this._fullRequestId; 15290 const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); 15291 const getResponseHeader = name => { 15292 return fullRequestXhr.getResponseHeader(name); 15293 }; 15294 const { 15295 allowRangeRequests, 15296 suggestedLength 15297 } = (0, _network_utils.validateRangeRequestCapabilities)({ 15298 getResponseHeader, 15299 isHttp: this._manager.isHttp, 15300 rangeChunkSize: this._rangeChunkSize, 15301 disableRange: this._disableRange 15302 }); 15303 if (allowRangeRequests) { 15304 this._isRangeSupported = true; 15305 } 15306 this._contentLength = suggestedLength || this._contentLength; 15307 this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); 15308 if (this._isRangeSupported) {
15309 this._manager.abortRequest(fullRequestXhrId); 15310 } 15311 this._headersReceivedCapability.resolve(); 15312 } 15313 _onDone(data) { 15314 if (data) { 15315 if (this._requests.length > 0) { 15316 const requestCapability = this._requests.shift(); 15317 requestCapability.resolve({ 15318 value: data.chunk, 15319 done: false 15320 }); 15321 } else { 15322 this._cachedChunks.push(data.chunk); 15323 } 15324 } 15325 this._done = true; 15326 if (this._cachedChunks.length > 0) { 15327 return; 15328 } 15329 for (const requestCapability of this._requests) { 15330 requestCapability.resolve({ 15331 value: undefined, 15332 done: true 15333 }); 15334 } 15335 this._requests.length = 0; 15336 } 15337 _onError(status) { 15338 this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); 15339 this._headersReceivedCapability.reject(this._storedError); 15340 for (const requestCapability of this._requests) { 15341 requestCapability.reject(this._storedError); 15342 } 15343 this._requests.length = 0; 15344 this._cachedChunks.length = 0; 15345 } 15346 _onProgress(evt) { 15347 this.onProgress?.({ 15348 loaded: evt.loaded, 15349 total: evt.lengthComputable ? evt.total : this._contentLength 15350 }); 15351 } 15352 get filename() { 15353 return this._filename; 15354 } 15355 get isRangeSupported() { 15356 return this._isRangeSupported; 15357 } 15358 get isStreamingSupported() { 15359 return this._isStreamingSupported; 15360 } 15361 get contentLength() { 15362 return this._contentLength; 15363 } 15364 get headersReady() { 15365 return this._headersReceivedCapability.promise; 15366 } 15367 async read() { 15368 if (this._storedError) { 15369 throw this._storedError; 15370 } 15371 if (this._cachedChunks.length > 0) { 15372 const chunk = this._cachedChunks.shift(); 15373 return { 15374 value: chunk, 15375 done: false 15376 }; 15377 } 15378 if (this._done) { 15379 return { 15380 value: undefined, 15381 done: true 15382 }; 15383 } 15384 const requestCapability = new _util.PromiseCapability(); 15385 this._requests.push(requestCapability); 15386 return requestCapability.promise; 15387 } 15388 cancel(reason) { 15389 this._done = true; 15390 this._headersReceivedCapability.reject(reason); 15391 for (const requestCapability of this._requests) { 15392 requestCapability.resolve({ 15393 value: undefined, 15394 done: true 15395 }); 15396 } 15397 this._requests.length = 0; 15398 if (this._manager.isPendingRequest(this._fullRequestId)) { 15399 this._manager.abortRequest(this._fullRequestId); 15400 } 15401 this._fullRequestReader = null; 15402 } 15403} 15404class PDFNetworkStreamRangeRequestReader { 15405 constructor(manager, begin, end) { 15406 this._manager = manager; 15407 const args = { 15408 onDone: this._onDone.bind(this), 15409 onError: this._onError.bind(this), 15410 onProgress: this._onProgress.bind(this) 15411 }; 15412 this._url = manager.url; 15413 this._requestId = manager.requestRange(begin, end, args); 15414 this._requests = []; 15415 this._queuedChunk = null; 15416 this._done = false; 15417 this._storedError = undefined; 15418 this.onProgress = null; 15419 this.onClosed = null; 15420 } 15421 _close() { 15422 this.onClosed?.(this); 15423 } 15424 _onDone(data) { 15425 const chunk = data.chunk; 15426 if (this._requests.length > 0) { 15427 const requestCapability = this._requests.shift(); 15428 requestCapability.resolve({ 15429 value: chunk, 15430 done: false 15431 }); 15432 } else { 15433 this._queuedChunk = chunk; 15434 } 15435 this._done = true; 15436 for (const requestCapability of this._requests) { 15437 requestCapability.resolve({ 15438 value: undefined, 15439 done: true 15440 }); 15441 } 15442 this._requests.length = 0; 15443 this._close(); 15444 } 15445 _onError(status) { 15446 this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); 15447 for (const requestCapability of this._requests) { 15448 requestCapability.reject(this._storedError); 15449 } 15450 this._requests.length = 0; 15451 this._queuedChunk = null; 15452 } 15453 _onProgress(evt) { 15454 if (!this.isStreamingSupported) { 15455 this.onProgress?.({ 15456 loaded: evt.loaded 15457 }); 15458 } 15459 } 15460 get isStreamingSupported() { 15461 return false; 15462 } 15463 async read() { 15464 if (this._storedError) { 15465 throw this._storedError; 15466 } 15467 if (this._queuedChunk !== null) { 15468 const chunk = this._queuedChunk; 15469 this._queuedChunk = null; 15470 return { 15471 value: chunk, 15472 done: false 15473 }; 15474 } 15475 if (this._done) { 15476 return { 15477 value: undefined, 15478 done: true 15479 }; 15480 } 15481 const requestCapability = new _util.PromiseCapability(); 15482 this._requests.push(requestCapability); 15483 return requestCapability.promise; 15484 } 15485 cancel(reason) { 15486 this._done = true; 15487 for (const requestCapability of this._requests) { 15488 requestCapability.resolve({ 15489 value: undefined, 15490 done: true 15491 }); 15492 } 15493 this._requests.length = 0; 15494 if (this._manager.isPendingRequest(this._requestId)) {
15495 this._manager.abortRequest(this._requestId); 15496 } 15497 this._close(); 15498 } 15499} 15500 15501/***/ }), 15502/* 185 */ 15503/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 15504 15505 15506 15507Object.defineProperty(exports, "__esModule", ({ 15508 value: true 15509})); 15510exports.PDFNodeStream = void 0; 15511__w_pdfjs_require__(89); 15512__w_pdfjs_require__(93); 15513__w_pdfjs_require__(101); 15514__w_pdfjs_require__(102); 15515__w_pdfjs_require__(105); 15516__w_pdfjs_require__(107); 15517__w_pdfjs_require__(109); 15518__w_pdfjs_require__(113); 15519__w_pdfjs_require__(116); 15520__w_pdfjs_require__(123); 15521var _util = __w_pdfjs_require__(1); 15522var _network_utils = __w_pdfjs_require__(182); 15523; 15524const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; 15525function parseUrl(sourceUrl) { 15526 const url = require("url"); 15527 const parsedUrl = url.parse(sourceUrl); 15528 if (parsedUrl.protocol === "file:" || parsedUrl.host) { 15529 return parsedUrl; 15530 } 15531 if (/^[a-z]:[/\\]/i.test(sourceUrl)) { 15532 return url.parse(`file:///${sourceUrl}`); 15533 } 15534 if (!parsedUrl.host) { 15535 parsedUrl.protocol = "file:"; 15536 } 15537 return parsedUrl; 15538} 15539class PDFNodeStream { 15540 constructor(source) { 15541 this.source = source; 15542 this.url = parseUrl(source.url); 15543 this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; 15544 this.isFsUrl = this.url.protocol === "file:"; 15545 this.httpHeaders = this.isHttp && source.httpHeaders || {}; 15546 this._fullRequestReader = null; 15547 this._rangeRequestReaders = []; 15548 } 15549 get _progressiveDataLength() { 15550 return this._fullRequestReader?._loaded ?? 0; 15551 } 15552 getFullReader() { 15553 (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); 15554 this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); 15555 return this._fullRequestReader; 15556 } 15557 getRangeReader(start, end) { 15558 if (end <= this._progressiveDataLength) { 15559 return null; 15560 } 15561 const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); 15562 this._rangeRequestReaders.push(rangeReader); 15563 return rangeReader; 15564 } 15565 cancelAllRequests(reason) { 15566 this._fullRequestReader?.cancel(reason); 15567 for (const reader of this._rangeRequestReaders.slice(0)) { 15568 reader.cancel(reason); 15569 } 15570 } 15571} 15572exports.PDFNodeStream = PDFNodeStream; 15573class BaseFullReader { 15574 constructor(stream) { 15575 this._url = stream.url; 15576 this._done = false; 15577 this._storedError = null; 15578 this.onProgress = null; 15579 const source = stream.source; 15580 this._contentLength = source.length; 15581 this._loaded = 0; 15582 this._filename = null; 15583 this._disableRange = source.disableRange || false; 15584 this._rangeChunkSize = source.rangeChunkSize; 15585 if (!this._rangeChunkSize && !this._disableRange) { 15586 this._disableRange = true; 15587 } 15588 this._isStreamingSupported = !source.disableStream; 15589 this._isRangeSupported = !source.disableRange; 15590 this._readableStream = null; 15591 this._readCapability = new _util.PromiseCapability(); 15592 this._headersCapability = new _util.PromiseCapability(); 15593 } 15594 get headersReady() { 15595 return this._headersCapability.promise; 15596 } 15597 get filename() { 15598 return this._filename; 15599 } 15600 get contentLength() { 15601 return this._contentLength; 15602 } 15603 get isRangeSupported() { 15604 return this._isRangeSupported; 15605 } 15606 get isStreamingSupported() { 15607 return this._isStreamingSupported; 15608 } 15609 async read() { 15610 await this._readCapability.promise; 15611 if (this._done) { 15612 return { 15613 value: undefined, 15614 done: true 15615 }; 15616 } 15617 if (this._storedError) { 15618 throw this._storedError; 15619 } 15620 const chunk = this._readableStream.read(); 15621 if (chunk === null) { 15622 this._readCapability = new _util.PromiseCapability(); 15623 return this.read(); 15624 } 15625 this._loaded += chunk.length; 15626 this.onProgress?.({ 15627 loaded: this._loaded, 15628 total: this._contentLength 15629 }); 15630 const buffer = new Uint8Array(chunk).buffer; 15631 return { 15632 value: buffer, 15633 done: false 15634 }; 15635 } 15636 cancel(reason) { 15637 if (!this._readableStream) { 15638 this._error(reason); 15639 return; 15640 } 15641 this._readableStream.destroy(reason); 15642 } 15643 _error(reason) { 15644 this._storedError = reason; 15645 this._readCapability.resolve(); 15646 } 15647 _setReadableStream(readableStream) { 15648 this._readableStream = readableStream; 15649 readableStream.on("readable", () => { 15650 this._readCapability.resolve(); 15651 }); 15652 readableStream.on("end", () => { 15653 readableStream.destroy(); 15654 this._done = true; 15655 this._readCapability.resolve(); 15656 }); 15657 readableStream.on("error", reason => { 15658 this._error(reason); 15659 }); 15660 if (!this._isStreamingSupported && this._isRangeSupported) { 15661 this._error(new _util.AbortException("streaming is disabled")); 15662 } 15663 if (this._storedError) { 15664 this._readableStream.destroy(this._storedError); 15665 } 15666 } 15667} 15668class BaseRangeReader { 15669 constructor(stream) { 15670 this._url = stream.url; 15671 this._done = false;
15672 this._storedError = null; 15673 this.onProgress = null; 15674 this._loaded = 0; 15675 this._readableStream = null; 15676 this._readCapability = new _util.PromiseCapability(); 15677 const source = stream.source; 15678 this._isStreamingSupported = !source.disableStream; 15679 } 15680 get isStreamingSupported() { 15681 return this._isStreamingSupported; 15682 } 15683 async read() { 15684 await this._readCapability.promise; 15685 if (this._done) { 15686 return { 15687 value: undefined, 15688 done: true 15689 }; 15690 } 15691 if (this._storedError) { 15692 throw this._storedError; 15693 } 15694 const chunk = this._readableStream.read(); 15695 if (chunk === null) { 15696 this._readCapability = new _util.PromiseCapability(); 15697 return this.read(); 15698 } 15699 this._loaded += chunk.length; 15700 this.onProgress?.({ 15701 loaded: this._loaded 15702 }); 15703 const buffer = new Uint8Array(chunk).buffer; 15704 return { 15705 value: buffer, 15706 done: false 15707 }; 15708 } 15709 cancel(reason) { 15710 if (!this._readableStream) { 15711 this._error(reason); 15712 return; 15713 } 15714 this._readableStream.destroy(reason); 15715 } 15716 _error(reason) { 15717 this._storedError = reason; 15718 this._readCapability.resolve(); 15719 } 15720 _setReadableStream(readableStream) { 15721 this._readableStream = readableStream; 15722 readableStream.on("readable", () => { 15723 this._readCapability.resolve(); 15724 }); 15725 readableStream.on("end", () => { 15726 readableStream.destroy(); 15727 this._done = true; 15728 this._readCapability.resolve(); 15729 }); 15730 readableStream.on("error", reason => { 15731 this._error(reason); 15732 }); 15733 if (this._storedError) { 15734 this._readableStream.destroy(this._storedError); 15735 } 15736 } 15737} 15738function createRequestOptions(parsedUrl, headers) { 15739 return { 15740 protocol: parsedUrl.protocol, 15741 auth: parsedUrl.auth, 15742 host: parsedUrl.hostname, 15743 port: parsedUrl.port, 15744 path: parsedUrl.path, 15745 method: "GET", 15746 headers 15747 }; 15748} 15749class PDFNodeStreamFullReader extends BaseFullReader { 15750 constructor(stream) { 15751 super(stream); 15752 const handleResponse = response => { 15753 if (response.statusCode === 404) { 15754 const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); 15755 this._storedError = error; 15756 this._headersCapability.reject(error); 15757 return; 15758 } 15759 this._headersCapability.resolve(); 15760 this._setReadableStream(response); 15761 const getResponseHeader = name => { 15762 return this._readableStream.headers[name.toLowerCase()]; 15763 }; 15764 const { 15765 allowRangeRequests, 15766 suggestedLength 15767 } = (0, _network_utils.validateRangeRequestCapabilities)({ 15768 getResponseHeader, 15769 isHttp: stream.isHttp, 15770 rangeChunkSize: this._rangeChunkSize, 15771 disableRange: this._disableRange 15772 }); 15773 this._isRangeSupported = allowRangeRequests; 15774 this._contentLength = suggestedLength || this._contentLength; 15775 this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); 15776 }; 15777 this._request = null; 15778 if (this._url.protocol === "http:") { 15779 const http = require("http"); 15780 this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); 15781 } else { 15782 const https = require("https"); 15783 this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); 15784 } 15785 this._request.on("error", reason => { 15786 this._storedError = reason; 15787 this._headersCapability.reject(reason); 15788 }); 15789 this._request.end(); 15790 } 15791} 15792class PDFNodeStreamRangeReader extends BaseRangeReader { 15793 constructor(stream, start, end) { 15794 super(stream); 15795 this._httpHeaders = {}; 15796 for (const property in stream.httpHeaders) { 15797 const value = stream.httpHeaders[property]; 15798 if (value === undefined) { 15799 continue; 15800 } 15801 this._httpHeaders[property] = value; 15802 } 15803 this._httpHeaders.Range = `bytes=${start}-${end - 1}`; 15804 const handleResponse = response => { 15805 if (response.statusCode === 404) { 15806 const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); 15807 this._storedError = error; 15808 return; 15809 } 15810 this._setReadableStream(response); 15811 }; 15812 this._request = null; 15813 if (this._url.protocol === "http:") { 15814 const http = require("http"); 15815 this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); 15816 } else { 15817 const https = require("https"); 15818 this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); 15819 } 15820 this._request.on("error", reason => { 15821 this._storedError = reason; 15822 }); 15823 this._request.end(); 15824 } 15825} 15826class PDFNodeStreamFsFullReader extends BaseFullReader { 15827 constructor(stream) { 15828 super(stream); 15829 let path = decodeURIComponent(this._url.path); 15830 if (fileUriRegex.test(this._url.href)) { 15831 path = path.replace(/^\//, ""); 15832 } 15833 const fs = require("fs"); 15834 fs.lstat(path, (error, stat) => { 15835 if (error) { 15836 if (error.code === "ENOENT") { 15837 error = new _util.MissingPDFException(`Missing PDF "${path}".`); 15838 } 15839 this._storedError = error; 15840 this._headersCapability.reject(error); 15841 return; 15842 } 15843 this._contentLength = stat.size; 15844 this._setReadableStream(fs.createReadStream(path)); 15845 this._headersCapability.resolve(); 15846 }); 15847 } 15848} 15849class PDFNodeStreamFsRangeReader extends BaseRangeReader { 15850 constructor(stream, start, end) { 15851 super(stream); 15852 let path = decodeURIComponent(this._url.path); 15853 if (fileUriRegex.test(this._url.href)) { 15854 path = path.replace(/^\//, ""); 15855 } 15856 const fs = require("fs"); 15857 this._setReadableStream(fs.createReadStream(path, { 15858 start, 15859 end: end - 1 15860 })); 15861 } 15862} 15863 15864/***/ }), 15865/* 186 */ 15866/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 15867 15868 15869 15870Object.defineProperty(exports, "__esModule", ({ 15871 value: true 15872})); 15873exports.SVGGraphics = void 0; 15874__w_pdfjs_require__(84); 15875__w_pdfjs_require__(86); 15876__w_pdfjs_require__(87); 15877__w_pdfjs_require__(93); 15878__w_pdfjs_require__(101); 15879__w_pdfjs_require__(102); 15880__w_pdfjs_require__(105); 15881__w_pdfjs_require__(107); 15882__w_pdfjs_require__(109); 15883__w_pdfjs_require__(113); 15884__w_pdfjs_require__(116); 15885__w_pdfjs_require__(123); 15886__w_pdfjs_require__(2); 15887__w_pdfjs_require__(89); 15888__w_pdfjs_require__(187); 15889var _display_utils = __w_pdfjs_require__(168); 15890var _util = __w_pdfjs_require__(1); 15891; 15892const SVG_DEFAULTS = { 15893 fontStyle: "normal", 15894 fontWeight: "normal", 15895 fillColor: "#000000" 15896}; 15897const XML_NS = "http://www.w3.org/XML/1998/namespace"; 15898const XLINK_NS = "http://www.w3.org/1999/xlink"; 15899const LINE_CAP_STYLES = ["butt", "round", "square"]; 15900const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; 15901const createObjectURL = function (data) { 15902 let contentType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ""; 15903 let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
15904 if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { 15905 return URL.createObjectURL(new Blob([data], { 15906 type: contentType 15907 })); 15908 } 15909 const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 15910 let buffer = `data:${contentType};base64,`; 15911 for (let i = 0, ii = data.length; i < ii; i += 3) { 15912 const b1 = data[i] & 0xff; 15913 const b2 = data[i + 1] & 0xff; 15914 const b3 = data[i + 2] & 0xff; 15915 const d1 = b1 >> 2, 15916 d2 = (b1 & 3) << 4 | b2 >> 4; 15917 const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; 15918 const d4 = i + 2 < ii ? b3 & 0x3f : 64; 15919 buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; 15920 } 15921 return buffer; 15922}; 15923const convertImgDataToPng = function () { 15924 const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); 15925 const CHUNK_WRAPPER_SIZE = 12; 15926 const crcTable = new Int32Array(256); 15927 for (let i = 0; i < 256; i++) { 15928 let c = i; 15929 for (let h = 0; h < 8; h++) { 15930 c = c & 1 ? 0xedb88320 ^ c >> 1 & 0x7fffffff : c >> 1 & 0x7fffffff; 15931 } 15932 crcTable[i] = c; 15933 } 15934 function crc32(data, start, end) {
15935 let crc = -1; 15936 for (let i = start; i < end; i++) { 15937 const a = (crc ^ data[i]) & 0xff; 15938 const b = crcTable[a]; 15939 crc = crc >>> 8 ^ b; 15940 } 15941 return crc ^ -1; 15942 } 15943 function writePngChunk(type, body, data, offset) { 15944 let p = offset; 15945 const len = body.length; 15946 data[p] = len >> 24 & 0xff; 15947 data[p + 1] = len >> 16 & 0xff; 15948 data[p + 2] = len >> 8 & 0xff; 15949 data[p + 3] = len & 0xff; 15950 p += 4; 15951 data[p] = type.charCodeAt(0) & 0xff; 15952 data[p + 1] = type.charCodeAt(1) & 0xff; 15953 data[p + 2] = type.charCodeAt(2) & 0xff; 15954 data[p + 3] = type.charCodeAt(3) & 0xff; 15955 p += 4; 15956 data.set(body, p); 15957 p += body.length; 15958 const crc = crc32(data, offset + 4, p); 15959 data[p] = crc >> 24 & 0xff; 15960 data[p + 1] = crc >> 16 & 0xff; 15961 data[p + 2] = crc >> 8 & 0xff; 15962 data[p + 3] = crc & 0xff; 15963 } 15964 function adler32(data, start, end) { 15965 let a = 1; 15966 let b = 0; 15967 for (let i = start; i < end; ++i) { 15968 a = (a + (data[i] & 0xff)) % 65521; 15969 b = (b + a) % 65521; 15970 } 15971 return b << 16 | a; 15972 } 15973 function deflateSync(literals) { 15974 if (!_util.isNodeJS) { 15975 return deflateSyncUncompressed(literals); 15976 } 15977 try { 15978 const input = parseInt(process.versions.node) >= 8 ? literals : Buffer.from(literals); 15979 const output = require("zlib").deflateSync(input, { 15980 level: 9 15981 }); 15982 return output instanceof Uint8Array ? output : new Uint8Array(output); 15983 } catch (e) { 15984 (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); 15985 } 15986 return deflateSyncUncompressed(literals); 15987 } 15988 function deflateSyncUncompressed(literals) { 15989 let len = literals.length; 15990 const maxBlockLength = 0xffff; 15991 const deflateBlocks = Math.ceil(len / maxBlockLength); 15992 const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); 15993 let pi = 0; 15994 idat[pi++] = 0x78; 15995 idat[pi++] = 0x9c; 15996 let pos = 0; 15997 while (len > maxBlockLength) { 15998 idat[pi++] = 0x00; 15999 idat[pi++] = 0xff; 16000 idat[pi++] = 0xff; 16001 idat[pi++] = 0x00; 16002 idat[pi++] = 0x00; 16003 idat.set(literals.subarray(pos, pos + maxBlockLength), pi); 16004 pi += maxBlockLength; 16005 pos += maxBlockLength; 16006 len -= maxBlockLength; 16007 } 16008 idat[pi++] = 0x01; 16009 idat[pi++] = len & 0xff; 16010 idat[pi++] = len >> 8 & 0xff; 16011 idat[pi++] = ~len & 0xffff & 0xff; 16012 idat[pi++] = (~len & 0xffff) >> 8 & 0xff; 16013 idat.set(literals.subarray(pos), pi); 16014 pi += literals.length - pos; 16015 const adler = adler32(literals, 0, literals.length); 16016 idat[pi++] = adler >> 24 & 0xff; 16017 idat[pi++] = adler >> 16 & 0xff; 16018 idat[pi++] = adler >> 8 & 0xff; 16019 idat[pi++] = adler & 0xff; 16020 return idat; 16021 } 16022 function encode(imgData, kind, forceDataSchema, isMask) { 16023 const width = imgData.width; 16024 const height = imgData.height; 16025 let bitDepth, colorType, lineSize; 16026 const bytes = imgData.data; 16027 switch (kind) { 16028 case _util.ImageKind.GRAYSCALE_1BPP: 16029 colorType = 0; 16030 bitDepth = 1; 16031 lineSize = width + 7 >> 3; 16032 break; 16033 case _util.ImageKind.RGB_24BPP: 16034 colorType = 2; 16035 bitDepth = 8; 16036 lineSize = width * 3; 16037 break; 16038 case _util.ImageKind.RGBA_32BPP: 16039 colorType = 6; 16040 bitDepth = 8; 16041 lineSize = width * 4; 16042 break; 16043 default: 16044 throw new Error("invalid format"); 16045 } 16046 const literals = new Uint8Array((1 + lineSize) * height); 16047 let offsetLiterals = 0, 16048 offsetBytes = 0; 16049 for (let y = 0; y < height; ++y) { 16050 literals[offsetLiterals++] = 0; 16051 literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); 16052 offsetBytes += lineSize; 16053 offsetLiterals += lineSize; 16054 } 16055 if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { 16056 offsetLiterals = 0; 16057 for (let y = 0; y < height; y++) { 16058 offsetLiterals++; 16059 for (let i = 0; i < lineSize; i++) { 16060 literals[offsetLiterals++] ^= 0xff; 16061 } 16062 } 16063 } 16064 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]); 16065 const idat = deflateSync(literals); 16066 const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; 16067 const data = new Uint8Array(pngLength); 16068 let offset = 0; 16069 data.set(PNG_HEADER, offset); 16070 offset += PNG_HEADER.length; 16071 writePngChunk("IHDR", ihdr, data, offset); 16072 offset += CHUNK_WRAPPER_SIZE + ihdr.length; 16073 writePngChunk("IDATA", idat, data, offset); 16074 offset += CHUNK_WRAPPER_SIZE + idat.length; 16075 writePngChunk("IEND", new Uint8Array(0), data, offset); 16076 return createObjectURL(data, "image/png", forceDataSchema); 16077 } 16078 return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
16079 const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; 16080 return encode(imgData, kind, forceDataSchema, isMask); 16081 }; 16082}(); 16083class SVGExtraState { 16084 constructor() { 16085 this.fontSizeScale = 1; 16086 this.fontWeight = SVG_DEFAULTS.fontWeight; 16087 this.fontSize = 0; 16088 this.textMatrix = _util.IDENTITY_MATRIX; 16089 this.fontMatrix = _util.FONT_IDENTITY_MATRIX; 16090 this.leading = 0; 16091 this.textRenderingMode = _util.TextRenderingMode.FILL; 16092 this.textMatrixScale = 1; 16093 this.x = 0; 16094 this.y = 0; 16095 this.lineX = 0; 16096 this.lineY = 0; 16097 this.charSpacing = 0; 16098 this.wordSpacing = 0; 16099 this.textHScale = 1; 16100 this.textRise = 0; 16101 this.fillColor = SVG_DEFAULTS.fillColor; 16102 this.strokeColor = "#000000"; 16103 this.fillAlpha = 1; 16104 this.strokeAlpha = 1; 16105 this.lineWidth = 1; 16106 this.lineJoin = ""; 16107 this.lineCap = ""; 16108 this.miterLimit = 0; 16109 this.dashArray = []; 16110 this.dashPhase = 0; 16111 this.dependencies = []; 16112 this.activeClipUrl = null; 16113 this.clipGroup = null; 16114 this.maskId = ""; 16115 } 16116 clone() { 16117 return Object.create(this); 16118 } 16119 setCurrentPoint(x, y) { 16120 this.x = x; 16121 this.y = y; 16122 } 16123} 16124function opListToTree(opList) { 16125 let opTree = []; 16126 const tmp = []; 16127 for (const opListElement of opList) { 16128 if (opListElement.fn === "save") { 16129 opTree.push({ 16130 fnId: 92, 16131 fn: "group", 16132 items: [] 16133 }); 16134 tmp.push(opTree); 16135 opTree = opTree.at(-1).items; 16136 continue; 16137 } 16138 if (opListElement.fn === "restore") { 16139 opTree = tmp.pop(); 16140 } else { 16141 opTree.push(opListElement); 16142 } 16143 } 16144 return opTree; 16145} 16146function pf(value) { 16147 if (Number.isInteger(value)) { 16148 return value.toString(); 16149 } 16150 const s = value.toFixed(10); 16151 let i = s.length - 1; 16152 if (s[i] !== "0") { 16153 return s; 16154 } 16155 do { 16156 i--; 16157 } while (s[i] === "0"); 16158 return s.substring(0, s[i] === "." ? i : i + 1); 16159} 16160function pm(m) { 16161 if (m[4] === 0 && m[5] === 0) { 16162 if (m[1] === 0 && m[2] === 0) { 16163 if (m[0] === 1 && m[3] === 1) { 16164 return ""; 16165 } 16166 return `scale(${pf(m[0])} ${pf(m[3])})`; 16167 } 16168 if (m[0] === m[3] && m[1] === -m[2]) { 16169 const a = Math.acos(m[0]) * 180 / Math.PI; 16170 return `rotate(${pf(a)})`; 16171 } 16172 } else if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { 16173 return `translate(${pf(m[4])} ${pf(m[5])})`; 16174 } 16175 return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; 16176} 16177let clipCount = 0; 16178let maskCount = 0; 16179let shadingCount = 0; 16180class SVGGraphics { 16181 constructor(commonObjs, objs) { 16182 let forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 16183 (0, _display_utils.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."); 16184 this.svgFactory = new _display_utils.DOMSVGFactory(); 16185 this.current = new SVGExtraState(); 16186 this.transformMatrix = _util.IDENTITY_MATRIX; 16187 this.transformStack = []; 16188 this.extraStack = []; 16189 this.commonObjs = commonObjs; 16190 this.objs = objs; 16191 this.pendingClip = null; 16192 this.pendingEOFill = false; 16193 this.embedFonts = false; 16194 this.embeddedFonts = Object.create(null); 16195 this.cssStyle = null; 16196 this.forceDataSchema = !!forceDataSchema; 16197 this._operatorIdMapping = []; 16198 for (const op in _util.OPS) { 16199 this._operatorIdMapping[_util.OPS[op]] = op; 16200 } 16201 } 16202 getObject(data) { 16203 let fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 16204 if (typeof data === "string") { 16205 return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); 16206 } 16207 return fallback; 16208 } 16209 save() { 16210 this.transformStack.push(this.transformMatrix); 16211 const old = this.current; 16212 this.extraStack.push(old); 16213 this.current = old.clone(); 16214 } 16215 restore() { 16216 this.transformMatrix = this.transformStack.pop(); 16217 this.current = this.extraStack.pop(); 16218 this.pendingClip = null; 16219 this.tgrp = null; 16220 } 16221 group(items) { 16222 this.save(); 16223 this.executeOpTree(items); 16224 this.restore(); 16225 } 16226 loadDependencies(operatorList) { 16227 const fnArray = operatorList.fnArray; 16228 const argsArray = operatorList.argsArray; 16229 for (let i = 0, ii = fnArray.length; i < ii; i++) { 16230 if (fnArray[i] !== _util.OPS.dependency) { 16231 continue; 16232 } 16233 for (const obj of argsArray[i]) { 16234 const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; 16235 const promise = new Promise(resolve => { 16236 objsPool.get(obj, resolve); 16237 }); 16238 this.current.dependencies.push(promise); 16239 } 16240 } 16241 return Promise.all(this.current.dependencies); 16242 } 16243 transform(a, b, c, d, e, f) { 16244 const transformMatrix = [a, b, c, d, e, f]; 16245 this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); 16246 this.tgrp = null; 16247 } 16248 getSVG(operatorList, viewport) { 16249 this.viewport = viewport; 16250 const svgElement = this._initialize(viewport); 16251 return this.loadDependencies(operatorList).then(() => { 16252 this.transformMatrix = _util.IDENTITY_MATRIX; 16253 this.executeOpTree(this.convertOpList(operatorList)); 16254 return svgElement; 16255 }); 16256 } 16257 convertOpList(operatorList) { 16258 const operatorIdMapping = this._operatorIdMapping; 16259 const argsArray = operatorList.argsArray; 16260 const fnArray = operatorList.fnArray; 16261 const opList = []; 16262 for (let i = 0, ii = fnArray.length; i < ii; i++) { 16263 const fnId = fnArray[i]; 16264 opList.push({ 16265 fnId, 16266 fn: operatorIdMapping[fnId], 16267 args: argsArray[i] 16268 }); 16269 } 16270 return opListToTree(opList); 16271 } 16272 executeOpTree(opTree) { 16273 for (const opTreeElement of opTree) { 16274 const fn = opTreeElement.fn; 16275 const fnId = opTreeElement.fnId; 16276 const args = opTreeElement.args;
16277 switch (fnId | 0) { 16278 case _util.OPS.beginText: 16279 this.beginText(); 16280 break; 16281 case _util.OPS.dependency: 16282 break; 16283 case _util.OPS.setLeading: 16284 this.setLeading(args); 16285 break; 16286 case _util.OPS.setLeadingMoveText: 16287 this.setLeadingMoveText(args[0], args[1]); 16288 break; 16289 case _util.OPS.setFont: 16290 this.setFont(args); 16291 break; 16292 case _util.OPS.showText: 16293 this.showText(args[0]); 16294 break; 16295 case _util.OPS.showSpacedText: 16296 this.showText(args[0]); 16297 break; 16298 case _util.OPS.endText: 16299 this.endText(); 16300 break; 16301 case _util.OPS.moveText: 16302 this.moveText(args[0], args[1]); 16303 break; 16304 case _util.OPS.setCharSpacing: 16305 this.setCharSpacing(args[0]); 16306 break; 16307 case _util.OPS.setWordSpacing: 16308 this.setWordSpacing(args[0]); 16309 break; 16310 case _util.OPS.setHScale: 16311 this.setHScale(args[0]); 16312 break; 16313 case _util.OPS.setTextMatrix: 16314 this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); 16315 break; 16316 case _util.OPS.setTextRise: 16317 this.setTextRise(args[0]); 16318 break; 16319 case _util.OPS.setTextRenderingMode: 16320 this.setTextRenderingMode(args[0]); 16321 break; 16322 case _util.OPS.setLineWidth: 16323 this.setLineWidth(args[0]); 16324 break; 16325 case _util.OPS.setLineJoin: 16326 this.setLineJoin(args[0]); 16327 break; 16328 case _util.OPS.setLineCap: 16329 this.setLineCap(args[0]); 16330 break; 16331 case _util.OPS.setMiterLimit: 16332 this.setMiterLimit(args[0]); 16333 break; 16334 case _util.OPS.setFillRGBColor: 16335 this.setFillRGBColor(args[0], args[1], args[2]); 16336 break; 16337 case _util.OPS.setStrokeRGBColor: 16338 this.setStrokeRGBColor(args[0], args[1], args[2]); 16339 break; 16340 case _util.OPS.setStrokeColorN: 16341 this.setStrokeColorN(args); 16342 break; 16343 case _util.OPS.setFillColorN: 16344 this.setFillColorN(args); 16345 break; 16346 case _util.OPS.shadingFill: 16347 this.shadingFill(args[0]); 16348 break; 16349 case _util.OPS.setDash: 16350 this.setDash(args[0], args[1]); 16351 break; 16352 case _util.OPS.setRenderingIntent: 16353 this.setRenderingIntent(args[0]); 16354 break; 16355 case _util.OPS.setFlatness: 16356 this.setFlatness(args[0]); 16357 break; 16358 case _util.OPS.setGState: 16359 this.setGState(args[0]); 16360 break; 16361 case _util.OPS.fill: 16362 this.fill(); 16363 break; 16364 case _util.OPS.eoFill: 16365 this.eoFill(); 16366 break; 16367 case _util.OPS.stroke: 16368 this.stroke(); 16369 break; 16370 case _util.OPS.fillStroke: 16371 this.fillStroke(); 16372 break; 16373 case _util.OPS.eoFillStroke: 16374 this.eoFillStroke(); 16375 break; 16376 case _util.OPS.clip: 16377 this.clip("nonzero"); 16378 break; 16379 case _util.OPS.eoClip: 16380 this.clip("evenodd"); 16381 break; 16382 case _util.OPS.paintSolidColorImageMask: 16383 this.paintSolidColorImageMask(); 16384 break; 16385 case _util.OPS.paintImageXObject: 16386 this.paintImageXObject(args[0]); 16387 break; 16388 case _util.OPS.paintInlineImageXObject: 16389 this.paintInlineImageXObject(args[0]); 16390 break; 16391 case _util.OPS.paintImageMaskXObject: 16392 this.paintImageMaskXObject(args[0]); 16393 break; 16394 case _util.OPS.paintFormXObjectBegin: 16395 this.paintFormXObjectBegin(args[0], args[1]); 16396 break; 16397 case _util.OPS.paintFormXObjectEnd: 16398 this.paintFormXObjectEnd(); 16399 break; 16400 case _util.OPS.closePath: 16401 this.closePath(); 16402 break; 16403 case _util.OPS.closeStroke: 16404 this.closeStroke(); 16405 break; 16406 case _util.OPS.closeFillStroke: 16407 this.closeFillStroke(); 16408 break; 16409 case _util.OPS.closeEOFillStroke: 16410 this.closeEOFillStroke(); 16411 break; 16412 case _util.OPS.nextLine: 16413 this.nextLine(); 16414 break; 16415 case _util.OPS.transform: 16416 this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); 16417 break; 16418 case _util.OPS.constructPath: 16419 this.constructPath(args[0], args[1]); 16420 break; 16421 case _util.OPS.endPath: 16422 this.endPath(); 16423 break; 16424 case 92: 16425 this.group(opTreeElement.items); 16426 break; 16427 default: 16428 (0, _util.warn)(`Unimplemented operator ${fn}`); 16429 break; 16430 } 16431 } 16432 } 16433 setWordSpacing(wordSpacing) { 16434 this.current.wordSpacing = wordSpacing; 16435 } 16436 setCharSpacing(charSpacing) { 16437 this.current.charSpacing = charSpacing; 16438 } 16439 nextLine() { 16440 this.moveText(0, this.current.leading); 16441 } 16442 setTextMatrix(a, b, c, d, e, f) { 16443 const current = this.current; 16444 current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; 16445 current.textMatrixScale = Math.hypot(a, b); 16446 current.x = current.lineX = 0; 16447 current.y = current.lineY = 0; 16448 current.xcoords = []; 16449 current.ycoords = []; 16450 current.tspan = this.svgFactory.createElement("svg:tspan"); 16451 current.tspan.setAttributeNS(null, "font-family", current.fontFamily); 16452 current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); 16453 current.tspan.setAttributeNS(null, "y", pf(-current.y)); 16454 current.txtElement = this.svgFactory.createElement("svg:text"); 16455 current.txtElement.append(current.tspan); 16456 } 16457 beginText() { 16458 const current = this.current; 16459 current.x = current.lineX = 0; 16460 current.y = current.lineY = 0; 16461 current.textMatrix = _util.IDENTITY_MATRIX; 16462 current.lineMatrix = _util.IDENTITY_MATRIX; 16463 current.textMatrixScale = 1; 16464 current.tspan = this.svgFactory.createElement("svg:tspan"); 16465 current.txtElement = this.svgFactory.createElement("svg:text"); 16466 current.txtgrp = this.svgFactory.createElement("svg:g"); 16467 current.xcoords = []; 16468 current.ycoords = []; 16469 } 16470 moveText(x, y) { 16471 const current = this.current; 16472 current.x = current.lineX += x; 16473 current.y = current.lineY += y; 16474 current.xcoords = []; 16475 current.ycoords = []; 16476 current.tspan = this.svgFactory.createElement("svg:tspan"); 16477 current.tspan.setAttributeNS(null, "font-family", current.fontFamily); 16478 current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); 16479 current.tspan.setAttributeNS(null, "y", pf(-current.y)); 16480 } 16481 showText(glyphs) { 16482 const current = this.current; 16483 const font = current.font; 16484 const fontSize = current.fontSize; 16485 if (fontSize === 0) { 16486 return; 16487 } 16488 const fontSizeScale = current.fontSizeScale; 16489 const charSpacing = current.charSpacing; 16490 const wordSpacing = current.wordSpacing; 16491 const fontDirection = current.fontDirection; 16492 const textHScale = current.textHScale * fontDirection; 16493 const vertical = font.vertical; 16494 const spacingDir = vertical ? 1 : -1; 16495 const defaultVMetrics = font.defaultVMetrics; 16496 const widthAdvanceScale = fontSize * current.fontMatrix[0]; 16497 let x = 0; 16498 for (const glyph of glyphs) { 16499 if (glyph === null) { 16500 x += fontDirection * wordSpacing; 16501 continue; 16502 }
16502 else if (typeof glyph === "number") { 16503 x += spacingDir * glyph * fontSize / 1000; 16504 continue; 16505 } 16506 const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; 16507 const character = glyph.fontChar; 16508 let scaledX, scaledY; 16509 let width = glyph.width; 16510 if (vertical) { 16511 let vx; 16512 const vmetric = glyph.vmetric || defaultVMetrics; 16513 vx = glyph.vmetric ? vmetric[1] : width * 0.5; 16514 vx = -vx * widthAdvanceScale; 16515 const vy = vmetric[2] * widthAdvanceScale; 16516 width = vmetric ? -vmetric[0] : width; 16517 scaledX = vx / fontSizeScale; 16518 scaledY = (x + vy) / fontSizeScale; 16519 } else { 16520 scaledX = x / fontSizeScale; 16521 scaledY = 0; 16522 } 16523 if (glyph.isInFont || font.missingFile) { 16524 current.xcoords.push(current.x + scaledX); 16525 if (vertical) { 16526 current.ycoords.push(-current.y + scaledY); 16527 } 16528 current.tspan.textContent += character; 16529 } else {} 16530 const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; 16531 x += charWidth; 16532 } 16533 current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); 16534 if (vertical) { 16535 current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); 16536 } else { 16537 current.tspan.setAttributeNS(null, "y", pf(-current.y)); 16538 } 16539 if (vertical) { 16540 current.y -= x; 16541 } else { 16542 current.x += x * textHScale; 16543 } 16544 current.tspan.setAttributeNS(null, "font-family", current.fontFamily); 16545 current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); 16546 if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { 16547 current.tspan.setAttributeNS(null, "font-style", current.fontStyle); 16548 } 16549 if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { 16550 current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); 16551 } 16552 const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; 16553 if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 16554 if (current.fillColor !== SVG_DEFAULTS.fillColor) { 16555 current.tspan.setAttributeNS(null, "fill", current.fillColor); 16556 } 16557 if (current.fillAlpha < 1) { 16558 current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); 16559 } 16560 } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { 16561 current.tspan.setAttributeNS(null, "fill", "transparent"); 16562 } else { 16563 current.tspan.setAttributeNS(null, "fill", "none"); 16564 } 16565 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { 16566 const lineWidthScale = 1 / (current.textMatrixScale || 1); 16567 this._setStrokeAttributes(current.tspan, lineWidthScale); 16568 } 16569 let textMatrix = current.textMatrix; 16570 if (current.textRise !== 0) { 16571 textMatrix = textMatrix.slice(); 16572 textMatrix[5] += current.textRise; 16573 } 16574 current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); 16575 current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); 16576 current.txtElement.append(current.tspan); 16577 current.txtgrp.append(current.txtElement); 16578 this._ensureTransformGroup().append(current.txtElement); 16579 } 16580 setLeadingMoveText(x, y) { 16581 this.setLeading(-y); 16582 this.moveText(x, y); 16583 } 16584 addFontStyle(fontObj) { 16585 if (!fontObj.data) { 16586 throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); 16587 } 16588 if (!this.cssStyle) { 16589 this.cssStyle = this.svgFactory.createElement("svg:style"); 16590 this.cssStyle.setAttributeNS(null, "type", "text/css"); 16591 this.defs.append(this.cssStyle); 16592 } 16593 const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema); 16594 this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; 16595 } 16596 setFont(details) { 16597 const current = this.current; 16598 const fontObj = this.commonObjs.get(details[0]); 16599 let size = details[1]; 16600 current.font = fontObj; 16601 if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { 16602 this.addFontStyle(fontObj); 16603 this.embeddedFonts[fontObj.loadedName] = fontObj; 16604 } 16605 current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; 16606 let bold = "normal"; 16607 if (fontObj.black) { 16608 bold = "900"; 16609 } else if (fontObj.bold) { 16610 bold = "bold"; 16611 } 16612 const italic = fontObj.italic ? "italic" : "normal"; 16613 if (size < 0) { 16614 size = -size; 16615 current.fontDirection = -1; 16616 } else { 16617 current.fontDirection = 1; 16618 } 16619 current.fontSize = size; 16620 current.fontFamily = fontObj.loadedName; 16621 current.fontWeight = bold; 16622 current.fontStyle = italic; 16623 current.tspan = this.svgFactory.createElement("svg:tspan"); 16624 current.tspan.setAttributeNS(null, "y", pf(-current.y)); 16625 current.xcoords = []; 16626 current.ycoords = []; 16627 } 16628 endText() { 16629 const current = this.current; 16630 if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { 16631 current.element = current.txtElement; 16632 this.clip("nonzero"); 16633 this.endPath(); 16634 } 16635 } 16636 setLineWidth(width) { 16637 if (width > 0) { 16638 this.current.lineWidth = width; 16639 } 16640 } 16641 setLineCap(style) { 16642 this.current.lineCap = LINE_CAP_STYLES[style]; 16643 } 16644 setLineJoin(style) { 16645 this.current.lineJoin = LINE_JOIN_STYLES[style]; 16646 } 16647 setMiterLimit(limit) { 16648 this.current.miterLimit = limit; 16649 } 16650 setStrokeAlpha(strokeAlpha) { 16651 this.current.strokeAlpha = strokeAlpha; 16652 } 16653 setStrokeRGBColor(r, g, b) { 16654 this.current.strokeColor = _util.Util.makeHexColor(r, g, b); 16655 } 16656 setFillAlpha(fillAlpha) { 16657 this.current.fillAlpha = fillAlpha; 16658 } 16659 setFillRGBColor(r, g, b) { 16660 this.current.fillColor = _util.Util.makeHexColor(r, g, b); 16661 this.current.tspan = this.svgFactory.createElement("svg:tspan"); 16662 this.current.xcoords = []; 16663 this.current.ycoords = []; 16664 } 16665 setStrokeColorN(args) { 16666 this.current.strokeColor = this._makeColorN_Pattern(args); 16667 } 16668 setFillColorN(args) { 16669 this.current.fillColor = this._makeColorN_Pattern(args); 16670 } 16671 shadingFill(args) { 16672 const { 16673 width, 16674 height 16675 } = this.viewport; 16676 const inv = _util.Util.inverseTransform(this.transformMatrix); 16677 const [x0, y0, x1, y1] = _util.Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); 16678 const rect = this.svgFactory.createElement("svg:rect"); 16679 rect.setAttributeNS(null, "x", x0); 16680 rect.setAttributeNS(null, "y", y0); 16681 rect.setAttributeNS(null, "width", x1 - x0); 16682 rect.setAttributeNS(null, "height", y1 - y0); 16683 rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); 16684 if (this.current.fillAlpha < 1) { 16685 rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); 16686 } 16687 this._ensureTransformGroup().append(rect); 16688 } 16689 _makeColorN_Pattern(args) { 16690 if (args[0] === "TilingPattern") { 16691 return this._makeTilingPattern(args); 16692 } 16693 return this._makeShadingPattern(args); 16694 } 16695 _makeTilingPattern(args) { 16696 const color = args[1]; 16697 const operatorList = args[2]; 16698 const matrix = args[3] || _util.IDENTITY_MATRIX; 16699 const [x0, y0, x1, y1] = args[4]; 16700 const xstep = args[5]; 16701 const ystep = args[6]; 16702 const paintType = args[7]; 16703 const tilingId = `shading${shadingCount++}`; 16704 const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0
16704], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); 16705 const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); 16706 const txstep = xstep * xscale; 16707 const tystep = ystep * yscale; 16708 const tiling = this.svgFactory.createElement("svg:pattern"); 16709 tiling.setAttributeNS(null, "id", tilingId); 16710 tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); 16711 tiling.setAttributeNS(null, "width", txstep); 16712 tiling.setAttributeNS(null, "height", tystep); 16713 tiling.setAttributeNS(null, "x", `${tx0}`); 16714 tiling.setAttributeNS(null, "y", `${ty0}`); 16715 const svg = this.svg; 16716 const transformMatrix = this.transformMatrix; 16717 const fillColor = this.current.fillColor; 16718 const strokeColor = this.current.strokeColor; 16719 const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); 16720 this.svg = bbox; 16721 this.transformMatrix = matrix; 16722 if (paintType === 2) { 16723 const cssColor = _util.Util.makeHexColor(...color); 16724 this.current.fillColor = cssColor; 16725 this.current.strokeColor = cssColor; 16726 } 16727 this.executeOpTree(this.convertOpList(operatorList)); 16728 this.svg = svg; 16729 this.transformMatrix = transformMatrix; 16730 this.current.fillColor = fillColor; 16731 this.current.strokeColor = strokeColor; 16732 tiling.append(bbox.childNodes[0]); 16733 this.defs.append(tiling); 16734 return `url(#${tilingId})`; 16735 } 16736 _makeShadingPattern(args) { 16737 if (typeof args === "string") { 16738 args = this.objs.get(args); 16739 } 16740 switch (args[0]) { 16741 case "RadialAxial": 16742 const shadingId = `shading${shadingCount++}`; 16743 const colorStops = args[3]; 16744 let gradient; 16745 switch (args[1]) { 16746 case "axial": 16747 const point0 = args[4]; 16748 const point1 = args[5]; 16749 gradient = this.svgFactory.createElement("svg:linearGradient"); 16750 gradient.setAttributeNS(null, "id", shadingId); 16751 gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); 16752 gradient.setAttributeNS(null, "x1", point0[0]); 16753 gradient.setAttributeNS(null, "y1", point0[1]); 16754 gradient.setAttributeNS(null, "x2", point1[0]); 16755 gradient.setAttributeNS(null, "y2", point1[1]); 16756 break; 16757 case "radial": 16758 const focalPoint = args[4]; 16759 const circlePoint = args[5]; 16760 const focalRadius = args[6]; 16761 const circleRadius = args[7]; 16762 gradient = this.svgFactory.createElement("svg:radialGradient"); 16763 gradient.setAttributeNS(null, "id", shadingId); 16764 gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); 16765 gradient.setAttributeNS(null, "cx", circlePoint[0]); 16766 gradient.setAttributeNS(null, "cy", circlePoint[1]); 16767 gradient.setAttributeNS(null, "r", circleRadius); 16768 gradient.setAttributeNS(null, "fx", focalPoint[0]); 16769 gradient.setAttributeNS(null, "fy", focalPoint[1]); 16770 gradient.setAttributeNS(null, "fr", focalRadius); 16771 break; 16772 default: 16773 throw new Error(`Unknown RadialAxial type: ${args[1]}`); 16774 } 16775 for (const colorStop of colorStops) { 16776 const stop = this.svgFactory.createElement("svg:stop"); 16777 stop.setAttributeNS(null, "offset", colorStop[0]); 16778 stop.setAttributeNS(null, "stop-color", colorStop[1]); 16779 gradient.append(stop); 16780 } 16781 this.defs.append(gradient); 16782 return `url(#${shadingId})`; 16783 case "Mesh": 16784 (0, _util.warn)("Unimplemented pattern Mesh"); 16785 return null; 16786 case "Dummy": 16787 return "hotpink"; 16788 default: 16789 throw new Error(`Unknown IR type: ${args[0]}`); 16790 } 16791 } 16792 setDash(dashArray, dashPhase) { 16793 this.current.dashArray = dashArray; 16794 this.current.dashPhase = dashPhase; 16795 } 16796 constructPath(ops, args) { 16797 const current = this.current; 16798 let x = current.x, 16799 y = current.y; 16800 let d = []; 16801 let j = 0; 16802 for (const op of ops) { 16803 switch (op | 0) { 16804 case _util.OPS.rectangle: 16805 x = args[j++]; 16806 y = args[j++]; 16807 const width = args[j++]; 16808 const height = args[j++]; 16809 const xw = x + width; 16810 const yh = y + height; 16811 d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); 16812 break; 16813 case _util.OPS.moveTo: 16814 x = args[j++]; 16815 y = args[j++]; 16816 d.push("M", pf(x), pf(y)); 16817 break; 16818 case _util.OPS.lineTo: 16819 x = args[j++]; 16820 y = args[j++]; 16821 d.push("L", pf(x), pf(y)); 16822 break; 16823 case _util.OPS.curveTo: 16824 x = args[j + 4]; 16825 y = args[j + 5]; 16826 d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); 16827 j += 6; 16828 break; 16829 case _util.OPS.curveTo2: 16830 d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); 16831 x = args[j + 2]; 16832 y = args[j + 3]; 16833 j += 4; 16834 break; 16835 case _util.OPS.curveTo3: 16836 x = args[j + 2]; 16837 y = args[j + 3]; 16838 d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); 16839 j += 4; 16840 break; 16841 case _util.OPS.closePath: 16842 d.push("Z"); 16843 break; 16844 } 16845 } 16846 d = d.join(" "); 16847 if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { 16848 d = current.path.getAttributeNS(null, "d") + d; 16849 } else { 16850 current.path = this.svgFactory.createElement("svg:path"); 16851 this._ensureTransformGroup().append(current.path); 16852 } 16853 current.path.setAttributeNS(null, "d", d); 16854 current.path.setAttributeNS(null, "fill", "none"); 16855 current.element = current.path; 16856 current.setCurrentPoint(x, y); 16857 } 16858 endPath() { 16859 const current = this.current; 16860 current.path = null; 16861 if (!this.pendingClip) { 16862 return; 16863 } 16864 if (!current.element) { 16865 this.pendingClip = null; 16866 return; 16867 } 16868 const clipId = `clippath${clipCount++}`; 16869 const clipPath = this.svgFactory.createElement("svg:clipPath"); 16870 clipPath.setAttributeNS(null, "id", clipId); 16871 clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); 16872 const clipElement = current.element.cloneNode(true); 16873 if (this.pendingClip === "evenodd") { 16874 clipElement.setAttributeNS(null, "clip-rule", "evenodd"); 16875 } else { 16876 clipElement.setAttributeNS(null, "clip-rule", "nonzero"); 16877 } 16878 this.pendingClip = null; 16879 clipPath.append(clipElement); 16880 this.defs.append(clipPath); 16881 if (current.activeClipUrl) { 16882 current.clipGroup = null; 16883 for (const prev of this.extraStack) { 16884 prev.clipGroup = null; 16885 } 16886 clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); 16887 } 16888 current.activeClipUrl = `url(#${clipId})`; 16889 this.tgrp = null; 16890 } 16891 clip(type) { 16892 this.pendingClip = type; 16893 } 16894 closePath() { 16895 const current = this.current; 16896 if (current.path) { 16897 const d = `${current.path.getAttributeNS(null, "d")}Z`; 16898 current.path.setAttributeNS(null, "d", d); 16899 } 16900 } 16901 setLeading(leading) { 16902 this.current.leading = -leading; 16903 } 16904 setTextRise(textRise) { 16905 this.current.textRise = textRise; 16906 } 16907 setTextRenderingMode(textRenderingMode) { 16908 this.current.textRenderingMode = textRenderingMode; 16909 } 16910 setHScale(scale) { 16911 this.current.textHScale = scale / 100; 16912 }
16913 setRenderingIntent(intent) {} 16914 setFlatness(flatness) {} 16915 setGState(states) { 16916 for (const [key, value] of states) { 16917 switch (key) { 16918 case "LW": 16919 this.setLineWidth(value); 16920 break; 16921 case "LC": 16922 this.setLineCap(value); 16923 break; 16924 case "LJ": 16925 this.setLineJoin(value); 16926 break; 16927 case "ML": 16928 this.setMiterLimit(value); 16929 break; 16930 case "D": 16931 this.setDash(value[0], value[1]); 16932 break; 16933 case "RI": 16934 this.setRenderingIntent(value); 16935 break; 16936 case "FL": 16937 this.setFlatness(value); 16938 break; 16939 case "Font": 16940 this.setFont(value); 16941 break; 16942 case "CA": 16943 this.setStrokeAlpha(value); 16944 break; 16945 case "ca": 16946 this.setFillAlpha(value); 16947 break; 16948 default: 16949 (0, _util.warn)(`Unimplemented graphic state operator ${key}`); 16950 break; 16951 } 16952 } 16953 } 16954 fill() { 16955 const current = this.current; 16956 if (current.element) { 16957 current.element.setAttributeNS(null, "fill", current.fillColor); 16958 current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); 16959 this.endPath(); 16960 } 16961 } 16962 stroke() { 16963 const current = this.current; 16964 if (current.element) { 16965 this._setStrokeAttributes(current.element); 16966 current.element.setAttributeNS(null, "fill", "none"); 16967 this.endPath(); 16968 } 16969 } 16970 _setStrokeAttributes(element) { 16971 let lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; 16972 const current = this.current; 16973 let dashArray = current.dashArray; 16974 if (lineWidthScale !== 1 && dashArray.length > 0) { 16975 dashArray = dashArray.map(function (value) { 16976 return lineWidthScale * value; 16977 }); 16978 } 16979 element.setAttributeNS(null, "stroke", current.strokeColor); 16980 element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); 16981 element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); 16982 element.setAttributeNS(null, "stroke-linecap", current.lineCap); 16983 element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); 16984 element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); 16985 element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); 16986 element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); 16987 } 16988 eoFill() { 16989 this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); 16990 this.fill(); 16991 } 16992 fillStroke() { 16993 this.stroke(); 16994 this.fill(); 16995 } 16996 eoFillStroke() { 16997 this.current.element?.setAttributeNS(null, "fill-rule", "evenodd"); 16998 this.fillStroke(); 16999 } 17000 closeStroke() { 17001 this.closePath(); 17002 this.stroke(); 17003 } 17004 closeFillStroke() { 17005 this.closePath(); 17006 this.fillStroke(); 17007 } 17008 closeEOFillStroke() { 17009 this.closePath(); 17010 this.eoFillStroke(); 17011 } 17012 paintSolidColorImageMask() { 17013 const rect = this.svgFactory.createElement("svg:rect"); 17014 rect.setAttributeNS(null, "x", "0"); 17015 rect.setAttributeNS(null, "y", "0"); 17016 rect.setAttributeNS(null, "width", "1px"); 17017 rect.setAttributeNS(null, "height", "1px"); 17018 rect.setAttributeNS(null, "fill", this.current.fillColor); 17019 this._ensureTransformGroup().append(rect); 17020 } 17021 paintImageXObject(objId) { 17022 const imgData = this.getObject(objId); 17023 if (!imgData) { 17024 (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); 17025 return; 17026 } 17027 this.paintInlineImageXObject(imgData); 17028 } 17029 paintInlineImageXObject(imgData, mask) { 17030 const width = imgData.width; 17031 const height = imgData.height; 17032 const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); 17033 const cliprect = this.svgFactory.createElement("svg:rect"); 17034 cliprect.setAttributeNS(null, "x", "0"); 17035 cliprect.setAttributeNS(null, "y", "0"); 17036 cliprect.setAttributeNS(null, "width", pf(width)); 17037 cliprect.setAttributeNS(null, "height", pf(height)); 17038 this.current.element = cliprect; 17039 this.clip("nonzero"); 17040 const imgEl = this.svgFactory.createElement("svg:image"); 17041 imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); 17042 imgEl.setAttributeNS(null, "x", "0"); 17043 imgEl.setAttributeNS(null, "y", pf(-height)); 17044 imgEl.setAttributeNS(null, "width", pf(width) + "px"); 17045 imgEl.setAttributeNS(null, "height", pf(height) + "px"); 17046 imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); 17047 if (mask) { 17048 mask.append(imgEl); 17049 } else { 17050 this._ensureTransformGroup().append(imgEl); 17051 } 17052 } 17053 paintImageMaskXObject(img) { 17054 const imgData = this.getObject(img.data, img); 17055 if (imgData.bitmap) { 17056 (0, _util.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, " + "ensure that the `isOffscreenCanvasSupported` API parameter is disabled."); 17057 return; 17058 } 17059 const current = this.current; 17060 const width = imgData.width; 17061 const height = imgData.height; 17062 const fillColor = current.fillColor; 17063 current.maskId = `mask${maskCount++}`; 17064 const mask = this.svgFactory.createElement("svg:mask"); 17065 mask.setAttributeNS(null, "id", current.maskId); 17066 const rect = this.svgFactory.createElement("svg:rect"); 17067 rect.setAttributeNS(null, "x", "0"); 17068 rect.setAttributeNS(null, "y", "0"); 17069 rect.setAttributeNS(null, "width", pf(width)); 17070 rect.setAttributeNS(null, "height", pf(height)); 17071 rect.setAttributeNS(null, "fill", fillColor); 17072 rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); 17073 this.defs.append(mask); 17074 this._ensureTransformGroup().append(rect); 17075 this.paintInlineImageXObject(imgData, mask); 17076 } 17077 paintFormXObjectBegin(matrix, bbox) { 17078 if (Array.isArray(matrix) && matrix.length === 6) {
17079 this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); 17080 } 17081 if (bbox) { 17082 const width = bbox[2] - bbox[0]; 17083 const height = bbox[3] - bbox[1]; 17084 const cliprect = this.svgFactory.createElement("svg:rect"); 17085 cliprect.setAttributeNS(null, "x", bbox[0]); 17086 cliprect.setAttributeNS(null, "y", bbox[1]); 17087 cliprect.setAttributeNS(null, "width", pf(width)); 17088 cliprect.setAttributeNS(null, "height", pf(height)); 17089 this.current.element = cliprect; 17090 this.clip("nonzero"); 17091 this.endPath(); 17092 } 17093 } 17094 paintFormXObjectEnd() {} 17095 _initialize(viewport) { 17096 const svg = this.svgFactory.create(viewport.width, viewport.height); 17097 const definitions = this.svgFactory.createElement("svg:defs"); 17098 svg.append(definitions); 17099 this.defs = definitions; 17100 const rootGroup = this.svgFactory.createElement("svg:g"); 17101 rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); 17102 svg.append(rootGroup); 17103 this.svg = rootGroup; 17104 return svg; 17105 } 17106 _ensureClipGroup() { 17107 if (!this.current.clipGroup) { 17108 const clipGroup = this.svgFactory.createElement("svg:g"); 17109 clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); 17110 this.svg.append(clipGroup); 17111 this.current.clipGroup = clipGroup; 17112 } 17113 return this.current.clipGroup; 17114 } 17115 _ensureTransformGroup() { 17116 if (!this.tgrp) { 17117 this.tgrp = this.svgFactory.createElement("svg:g"); 17118 this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); 17119 if (this.current.activeClipUrl) { 17120 this._ensureClipGroup().append(this.tgrp); 17121 } else { 17122 this.svg.append(this.tgrp); 17123 } 17124 } 17125 return this.tgrp; 17126 } 17127} 17128exports.SVGGraphics = SVGGraphics; 17129 17130/***/ }), 17131/* 187 */ 17132/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { 17133 17134 17135var $ = __w_pdfjs_require__(3); 17136var $group = __w_pdfjs_require__(188); 17137var addToUnscopables = __w_pdfjs_require__(193); 17138$({ 17139 target: 'Array', 17140 proto: true 17141}, { 17142 group: function group(callbackfn) { 17143 var thisArg = arguments.length > 1 ? arguments[1] : undefined; 17144 return $group(this, callbackfn, thisArg); 17145 } 17146}); 17147addToUnscopables('group'); 17148 17149/***/ }), 17150/* 188 */ 17151/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 17152 17153 17154var bind = __w_pdfjs_require__(99); 17155var uncurryThis = __w_pdfjs_require__(14); 17156var IndexedObject = __w_pdfjs_require__(13); 17157var toObject = __w_pdfjs_require__(40); 17158var toPropertyKey = __w_pdfjs_require__(18); 17159var lengthOfArrayLike = __w_pdfjs_require__(64); 17160var objectCreate = __w_pdfjs_require__(189); 17161var arrayFromConstructorAndList = __w_pdfjs_require__(108); 17162var $Array = Array; 17163var push = uncurryThis([].push); 17164module.exports = function ($this, callbackfn, that, specificConstructor) { 17165 var O = toObject($this); 17166 var self = IndexedObject(O); 17167 var boundFunction = bind(callbackfn, that); 17168 var target = objectCreate(null); 17169 var length = lengthOfArrayLike(self); 17170 var index = 0; 17171 var Constructor, key, value; 17172 for (; length > index; index++) { 17173 value = self[index]; 17174 key = toPropertyKey(boundFunction(value, index, O)); 17175 if (key in target) 17176 push(target[key], value); 17177 else 17178 target[key] = [value]; 17179 } 17180 if (specificConstructor) { 17181 Constructor = specificConstructor(O); 17182 if (Constructor !== $Array) { 17183 for (key in target) 17184 target[key] = arrayFromConstructorAndList(Constructor, target[key]); 17185 } 17186 } 17187 return target; 17188}; 17189 17190/***/ }), 17191/* 189 */ 17192/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 17193 17194 17195var anObject = __w_pdfjs_require__(47); 17196var definePropertiesModule = __w_pdfjs_require__(190); 17197var enumBugKeys = __w_pdfjs_require__(66); 17198var hiddenKeys = __w_pdfjs_require__(55); 17199var html = __w_pdfjs_require__(192); 17200var documentCreateElement = __w_pdfjs_require__(43); 17201var sharedKey = __w_pdfjs_require__(54); 17202var GT = '>'; 17203var LT = '<'; 17204var PROTOTYPE = 'prototype'; 17205var SCRIPT = 'script'; 17206var IE_PROTO = sharedKey('IE_PROTO'); 17207var EmptyConstructor = function () { 17208}; 17209var scriptTag = function (content) { 17210 return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; 17211}; 17212var NullProtoObjectViaActiveX = function (activeXDocument) { 17213 activeXDocument.write(scriptTag('')); 17214 activeXDocument.close(); 17215 var temp = activeXDocument.parentWindow.Object; 17216 activeXDocument = null; 17217 return temp; 17218}; 17219var NullProtoObjectViaIFrame = function () { 17220 var iframe = documentCreateElement('iframe'); 17221 var JS = 'java' + SCRIPT + ':'; 17222 var iframeDocument;
17223 iframe.style.display = 'none'; 17224 html.appendChild(iframe); 17225 iframe.src = String(JS); 17226 iframeDocument = iframe.contentWindow.document; 17227 iframeDocument.open(); 17228 iframeDocument.write(scriptTag('document.F=Object')); 17229 iframeDocument.close(); 17230 return iframeDocument.F; 17231}; 17232var activeXDocument; 17233var NullProtoObject = function () { 17234 try { 17235 activeXDocument = new ActiveXObject('htmlfile'); 17236 } catch (error) { 17237 } 17238 NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); 17239 var length = enumBugKeys.length; 17240 while (length--) 17241 delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; 17242 return NullProtoObject(); 17243}; 17244hiddenKeys[IE_PROTO] = true; 17245module.exports = Object.create || function create(O, Properties) { 17246 var result; 17247 if (O !== null) { 17248 EmptyConstructor[PROTOTYPE] = anObject(O); 17249 result = new EmptyConstructor(); 17250 EmptyConstructor[PROTOTYPE] = null; 17251 result[IE_PROTO] = O; 17252 } else 17253 result = NullProtoObject(); 17254 return Properties === undefined ? result : definePropertiesModule.f(result, Properties); 17255}; 17256 17257/***/ }), 17258/* 190 */ 17259/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 17260 17261 17262var DESCRIPTORS = __w_pdfjs_require__(6); 17263var V8_PROTOTYPE_DEFINE_BUG = __w_pdfjs_require__(46); 17264var definePropertyModule = __w_pdfjs_require__(45); 17265var anObject = __w_pdfjs_require__(47); 17266var toIndexedObject = __w_pdfjs_require__(12); 17267var objectKeys = __w_pdfjs_require__(191); 17268exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { 17269 anObject(O); 17270 var props = toIndexedObject(Properties); 17271 var keys = objectKeys(Properties); 17272 var length = keys.length; 17273 var index = 0; 17274 var key; 17275 while (length > index) 17276 definePropertyModule.f(O, key = keys[index++], props[key]); 17277 return O; 17278}; 17279 17280/***/ }), 17281/* 191 */ 17282/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 17283 17284 17285var internalObjectKeys = __w_pdfjs_require__(59); 17286var enumBugKeys = __w_pdfjs_require__(66); 17287module.exports = Object.keys || function keys(O) { 17288 return internalObjectKeys(O, enumBugKeys); 17289}; 17290 17291/***/ }), 17292/* 192 */ 17293/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 17294 17295 17296var getBuiltIn = __w_pdfjs_require__(24); 17297module.exports = getBuiltIn('document', 'documentElement'); 17298 17299/***/ }), 17300/* 193 */ 17301/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => { 17302 17303 17304var wellKnownSymbol = __w_pdfjs_require__(34); 17305var create = __w_pdfjs_require__(189); 17306var defineProperty = (__w_pdfjs_require__(45).f); 17307var UNSCOPABLES = wellKnownSymbol('unscopables'); 17308var ArrayPrototype = Array.prototype; 17309if (ArrayPrototype[UNSCOPABLES] === undefined) { 17310 defineProperty(ArrayPrototype, UNSCOPABLES, { 17311 configurable: true, 17312 value: create(null) 17313 }); 17314} 17315module.exports = function (key) { 17316 ArrayPrototype[UNSCOPABLES][key] = true; 17317}; 17318 17319/***/ }), 17320/* 194 */ 17321/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 17322 17323 17324 17325Object.defineProperty(exports, "__esModule", ({ 17326 value: true 17327})); 17328exports.XfaText = void 0; 17329__w_pdfjs_require__(89); 17330class XfaText { 17331 static textContent(xfa) { 17332 const items = []; 17333 const output = { 17334 items, 17335 styles: Object.create(null) 17336 }; 17337 function walk(node) { 17338 if (!node) { 17339 return; 17340 } 17341 let str = null; 17342 const name = node.name; 17343 if (name === "#text") { 17344 str = node.value; 17345 } else if (!XfaText.shouldBuildText(name)) { 17346 return; 17347 } else if (node?.attributes?.textContent) { 17348 str = node.attributes.textContent; 17349 } else if (node.value) { 17350 str = node.value; 17351 } 17352 if (str !== null) { 17353 items.push({ 17354 str 17355 }); 17356 } 17357 if (!node.children) { 17358 return; 17359 } 17360 for (const child of node.children) { 17361 walk(child); 17362 } 17363 } 17364 walk(xfa); 17365 return output; 17366 } 17367 static shouldBuildText(name) { 17368 return !(name === "textarea" || name === "input" || name === "option" || name === "select"); 17369 } 17370} 17371exports.XfaText = XfaText; 17372 17373/***/ }), 17374/* 195 */ 17375/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 17376 17377 17378 17379Object.defineProperty(exports, "__esModule", ({ 17380 value: true 17381})); 17382exports.TextLayerRenderTask = void 0; 17383exports.renderTextLayer = renderTextLayer; 17384exports.updateTextLayer = updateTextLayer; 17385__w_pdfjs_require__(89); 17386__w_pdfjs_require__(2); 17387var _util = __w_pdfjs_require__(1); 17388var _display_utils = __w_pdfjs_require__(168); 17389const MAX_TEXT_DIVS_TO_RENDER = 100000; 17390const DEFAULT_FONT_SIZE = 30; 17391const DEFAULT_FONT_ASCENT = 0.8; 17392const ascentCache = new Map(); 17393function getCtx(size, isOffscreenCanvasSupported) { 17394 let ctx; 17395 if (isOffscreenCanvasSupported && _util.FeatureTest.isOffscreenCanvasSupported) { 17396 ctx = new OffscreenCanvas(size, size).getContext("2d", { 17397 alpha: false 17398 }); 17399 } else { 17400 const canvas = document.createElement("canvas"); 17401 canvas.width = canvas.height = size; 17402 ctx = canvas.getContext("2d", { 17403 alpha: false 17404 }); 17405 } 17406 return ctx; 17407} 17408function getAscent(fontFamily, isOffscreenCanvasSupported) { 17409 const cachedAscent = ascentCache.get(fontFamily); 17410 if (cachedAscent) { 17411 return cachedAscent; 17412 } 17413 const ctx = getCtx(DEFAULT_FONT_SIZE, isOffscreenCanvasSupported); 17414 ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; 17415 const metrics = ctx.measureText(""); 17416 let ascent = metrics.fontBoundingBoxAscent; 17417 let descent = Math.abs(metrics.fontBoundingBoxDescent); 17418 if (ascent) { 17419 const ratio = ascent / (ascent + descent); 17420 ascentCache.set(fontFamily, ratio); 17421 ctx.canvas.width = ctx.canvas.height = 0; 17422 return ratio; 17423 } 17424 ctx.strokeStyle = "red"; 17425 ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); 17426 ctx.strokeText("g", 0, 0); 17427 let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; 17428 descent = 0; 17429 for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { 17430 if (pixels[i] > 0) {
17431 descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); 17432 break; 17433 } 17434 } 17435 ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); 17436 ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); 17437 pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; 17438 ascent = 0; 17439 for (let i = 0, ii = pixels.length; i < ii; i += 4) { 17440 if (pixels[i] > 0) { 17441 ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); 17442 break; 17443 } 17444 } 17445 ctx.canvas.width = ctx.canvas.height = 0; 17446 if (ascent) { 17447 const ratio = ascent / (ascent + descent); 17448 ascentCache.set(fontFamily, ratio); 17449 return ratio; 17450 } 17451 ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); 17452 return DEFAULT_FONT_ASCENT; 17453} 17454function appendText(task, geom, styles) { 17455 const textDiv = document.createElement("span"); 17456 const textDivProperties = { 17457 angle: 0, 17458 canvasWidth: 0, 17459 hasText: geom.str !== "", 17460 hasEOL: geom.hasEOL, 17461 fontSize: 0 17462 }; 17463 task._textDivs.push(textDiv); 17464 const tx = _util.Util.transform(task._transform, geom.transform); 17465 let angle = Math.atan2(tx[1], tx[0]); 17466 const style = styles[geom.fontName]; 17467 if (style.vertical) { 17468 angle += Math.PI / 2; 17469 } 17470 const fontHeight = Math.hypot(tx[2], tx[3]); 17471 const fontAscent = fontHeight * getAscent(style.fontFamily, task._isOffscreenCanvasSupported); 17472 let left, top; 17473 if (angle === 0) { 17474 left = tx[4]; 17475 top = tx[5] - fontAscent; 17476 } else { 17477 left = tx[4] + fontAscent * Math.sin(angle); 17478 top = tx[5] - fontAscent * Math.cos(angle); 17479 } 17480 const scaleFactorStr = "calc(var(--scale-factor)*"; 17481 const divStyle = textDiv.style; 17482 if (task._container === task._rootContainer) { 17483 divStyle.left = `${(100 * left / task._pageWidth).toFixed(2)}%`; 17484 divStyle.top = `${(100 * top / task._pageHeight).toFixed(2)}%`; 17485 } else { 17486 divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; 17487 divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; 17488 } 17489 divStyle.fontSize = `${scaleFactorStr}${fontHeight.toFixed(2)}px)`; 17490 divStyle.fontFamily = style.fontFamily; 17491 textDivProperties.fontSize = fontHeight; 17492 textDiv.setAttribute("role", "presentation"); 17493 textDiv.textContent = geom.str; 17494 textDiv.dir = geom.dir; 17495 if (task._fontInspectorEnabled) { 17496 textDiv.dataset.fontName = geom.fontName; 17497 } 17498 if (angle !== 0) { 17499 textDivProperties.angle = angle * (180 / Math.PI); 17500 } 17501 let shouldScaleText = false; 17502 if (geom.str.length > 1) { 17503 shouldScaleText = true; 17504 } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { 17505 const absScaleX = Math.abs(geom.transform[0]), 17506 absScaleY = Math.abs(geom.transform[3]); 17507 if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { 17508 shouldScaleText = true; 17509 } 17510 } 17511 if (shouldScaleText) { 17512 textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; 17513 } 17514 task._textDivProperties.set(textDiv, textDivProperties); 17515 if (task._isReadableStream) { 17516 task._layoutText(textDiv); 17517 } 17518} 17519function layout(params) { 17520 const { 17521 div, 17522 scale, 17523 properties, 17524 ctx, 17525 prevFontSize, 17526 prevFontFamily 17527 } = params; 17528 const { 17529 style 17530 } = div; 17531 let transform = ""; 17532 if (properties.canvasWidth !== 0 && properties.hasText) { 17533 const { 17534 fontFamily 17535 } = style; 17536 const { 17537 canvasWidth, 17538 fontSize 17539 } = properties; 17540 if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { 17541 ctx.font = `${fontSize * scale}px ${fontFamily}`; 17542 params.prevFontSize = fontSize; 17543 params.prevFontFamily = fontFamily; 17544 } 17545 const { 17546 width 17547 } = ctx.measureText(div.textContent); 17548 if (width > 0) { 17549 transform = `scaleX(${canvasWidth * scale / width})`; 17550 } 17551 } 17552 if (properties.angle !== 0) { 17553 transform = `rotate(${properties.angle}deg) ${transform}`; 17554 } 17555 if (transform.length > 0) { 17556 style.transform = transform; 17557 } 17558} 17559function render(task) { 17560 if (task._canceled) { 17561 return; 17562 } 17563 const textDivs = task._textDivs; 17564 const capability = task._capability; 17565 const textDivsLength = textDivs.length; 17566 if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { 17567 capability.resolve(); 17568 return; 17569 } 17570 if (!task._isReadableStream) { 17571 for (const textDiv of textDivs) { 17572 task._layoutText(textDiv); 17573 } 17574 } 17575 capability.resolve(); 17576} 17577class TextLayerRenderTask { 17578 constructor(_ref) { 17579 let { 17580 textContentSource, 17581 container, 17582 viewport, 17583 textDivs, 17584 textDivProperties, 17585 textContentItemsStr, 17586 isOffscreenCanvasSupported 17587 } = _ref; 17588 this._textContentSource = textContentSource; 17589 this._isReadableStream = textContentSource instanceof ReadableStream; 17590 this._container = this._rootContainer = container; 17591 this._textDivs = textDivs || []; 17592 this._textContentItemsStr = textContentItemsStr || []; 17593 this._isOffscreenCanvasSupported = isOffscreenCanvasSupported; 17594 this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; 17595 this._reader = null; 17596 this._textDivProperties = textDivProperties || new WeakMap(); 17597 this._canceled = false;
17598 this._capability = new _util.PromiseCapability(); 17599 this._layoutTextParams = { 17600 prevFontSize: null, 17601 prevFontFamily: null, 17602 div: null, 17603 scale: viewport.scale * (globalThis.devicePixelRatio || 1), 17604 properties: null, 17605 ctx: getCtx(0, isOffscreenCanvasSupported) 17606 }; 17607 const { 17608 pageWidth, 17609 pageHeight, 17610 pageX, 17611 pageY 17612 } = viewport.rawDims; 17613 this._transform = [1, 0, 0, -1, -pageX, pageY + pageHeight]; 17614 this._pageWidth = pageWidth; 17615 this._pageHeight = pageHeight; 17616 (0, _display_utils.setLayerDimensions)(container, viewport); 17617 this._capability.promise.finally(() => { 17618 this._layoutTextParams = null; 17619 }).catch(() => {}); 17620 } 17621 get promise() { 17622 return this._capability.promise; 17623 } 17624 cancel() { 17625 this._canceled = true; 17626 if (this._reader) { 17627 this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {}); 17628 this._reader = null; 17629 } 17630 this._capability.reject(new _util.AbortException("TextLayer task cancelled.")); 17631 } 17632 _processItems(items, styleCache) { 17633 for (const item of items) { 17634 if (item.str === undefined) { 17635 if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { 17636 const parent = this._container; 17637 this._container = document.createElement("span"); 17638 this._container.classList.add("markedContent"); 17639 if (item.id !== null) { 17640 this._container.setAttribute("id", `${item.id}`); 17641 } 17642 parent.append(this._container); 17643 } else if (item.type === "endMarkedContent") { 17644 this._container = this._container.parentNode; 17645 } 17646 continue; 17647 } 17648 this._textContentItemsStr.push(item.str); 17649 appendText(this, item, styleCache); 17650 } 17651 } 17652 _layoutText(textDiv) { 17653 const textDivProperties = this._layoutTextParams.properties = this._textDivProperties.get(textDiv); 17654 this._layoutTextParams.div = textDiv; 17655 layout(this._layoutTextParams); 17656 if (textDivProperties.hasText) { 17657 this._container.append(textDiv); 17658 } 17659 if (textDivProperties.hasEOL) { 17660 const br = document.createElement("br"); 17661 br.setAttribute("role", "presentation"); 17662 this._container.append(br); 17663 } 17664 } 17665 _render() { 17666 const capability = new _util.PromiseCapability(); 17667 let styleCache = Object.create(null); 17668 if (this._isReadableStream) { 17669 const pump = () => { 17670 this._reader.read().then(_ref2 => { 17671 let { 17672 value, 17673 done 17674 } = _ref2; 17675 if (done) { 17676 capability.resolve(); 17677 return; 17678 } 17679 Object.assign(styleCache, value.styles); 17680 this._processItems(value.items, styleCache); 17681 pump(); 17682 }, capability.reject); 17683 }; 17684 this._reader = this._textContentSource.getReader(); 17685 pump(); 17686 } else if (this._textContentSource) { 17687 const { 17688 items, 17689 styles 17690 } = this._textContentSource; 17691 this._processItems(items, styles); 17692 capability.resolve(); 17693 } else { 17694 throw new Error('No "textContentSource" parameter specified.'); 17695 } 17696 capability.promise.then(() => { 17697 styleCache = null; 17698 render(this); 17699 }, this._capability.reject); 17700 } 17701} 17702exports.TextLayerRenderTask = TextLayerRenderTask; 17703function renderTextLayer(params) { 17704 if (!params.textContentSource && (params.textContent || params.textContentStream)) { 17705 (0, _display_utils.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters " + "will be removed in the future, please use `textContentSource` instead."); 17706 params.textContentSource = params.textContent || params.textContentStream; 17707 } 17708 const { 17709 container, 17710 viewport 17711 }
17711 = params; 17712 const style = getComputedStyle(container); 17713 const visibility = style.getPropertyValue("visibility"); 17714 const scaleFactor = parseFloat(style.getPropertyValue("--scale-factor")); 17715 if (visibility === "visible" && (!scaleFactor || Math.abs(scaleFactor - viewport.scale) > 1e-5)) { 17716 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."); 17717 } 17718 const task = new TextLayerRenderTask(params); 17719 task._render(); 17720 return task; 17721} 17722function updateTextLayer(_ref3) { 17723 let { 17724 container, 17725 viewport, 17726 textDivs, 17727 textDivProperties, 17728 isOffscreenCanvasSupported, 17729 mustRotate = true, 17730 mustRescale = true 17731 } = _ref3; 17732 if (mustRotate) { 17733 (0, _display_utils.setLayerDimensions)(container, { 17734 rotation: viewport.rotation 17735 }); 17736 } 17737 if (mustRescale) { 17738 const ctx = getCtx(0, isOffscreenCanvasSupported); 17739 const scale = viewport.scale * (globalThis.devicePixelRatio || 1); 17740 const params = { 17741 prevFontSize: null, 17742 prevFontFamily: null, 17743 div: null, 17744 scale, 17745 properties: null, 17746 ctx 17747 }; 17748 for (const div of textDivs) { 17749 params.properties = textDivProperties.get(div); 17750 params.div = div; 17751 layout(params); 17752 } 17753 } 17754} 17755 17756/***/ }), 17757/* 196 */ 17758/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 17759 17760 17761 17762Object.defineProperty(exports, "__esModule", ({ 17763 value: true 17764})); 17765exports.AnnotationEditorLayer = void 0; 17766__w_pdfjs_require__(125); 17767__w_pdfjs_require__(136); 17768__w_pdfjs_require__(138); 17769__w_pdfjs_require__(141); 17770__w_pdfjs_require__(143); 17771__w_pdfjs_require__(145); 17772__w_pdfjs_require__(147); 17773var _util = __w_pdfjs_require__(1); 17774var _editor = __w_pdfjs_require__(164); 17775var _freetext = __w_pdfjs_require__(197); 17776var _ink = __w_pdfjs_require__(202); 17777var _display_utils = __w_pdfjs_require__(168); 17778var _stamp = __w_pdfjs_require__(203); 17779class AnnotationEditorLayer { 17780 #accessibilityManager; 17781 #allowClick = false; 17782 #annotationLayer = null; 17783 #boundPointerup = this.pointerup.bind(this); 17784 #boundPointerdown = this.pointerdown.bind(this); 17785 #editors = new Map(); 17786 #hadPointerDown = false; 17787 #isCleaningUp = false; 17788 #isDisabling = false; 17789 #uiManager; 17790 static _initialized = false; 17791 constructor(_ref) { 17792 let { 17793 uiManager, 17794 pageIndex, 17795 div, 17796 accessibilityManager, 17797 annotationLayer, 17798 viewport, 17799 l10n 17800 } = _ref; 17801 const editorTypes = [_freetext.FreeTextEditor, _ink.InkEditor, _stamp.StampEditor]; 17802 if (!AnnotationEditorLayer._initialized) { 17803 AnnotationEditorLayer._initialized = true; 17804 for (const editorType of editorTypes) { 17805 editorType.initialize(l10n); 17806 } 17807 } 17808 uiManager.registerEditorTypes(editorTypes); 17809 this.#uiManager = uiManager; 17810 this.pageIndex = pageIndex; 17811 this.div = div; 17812 this.#accessibilityManager = accessibilityManager; 17813 this.#annotationLayer = annotationLayer; 17814 this.viewport = viewport; 17815 this.#uiManager.addLayer(this); 17816 } 17817 get isEmpty() { 17818 return this.#editors.size === 0; 17819 } 17820 updateToolbar(mode) { 17821 this.#uiManager.updateToolbar(mode); 17822 } 17823 updateMode() { 17824 let mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.#uiManager.getMode(); 17825 this.#cleanup(); 17826 if (mode === _util.AnnotationEditorType.INK) { 17827 this.addInkEditorIfNeeded(false); 17828 this.disableClick(); 17829 } else { 17830 this.enableClick(); 17831 } 17832 if (mode !== _util.AnnotationEditorType.NONE) { 17833 this.div.classList.toggle("freeTextEditing", mode === _util.AnnotationEditorType.FREETEXT); 17834 this.div.classList.toggle("inkEditing", mode === _util.AnnotationEditorType.INK); 17835 this.div.classList.toggle("stampEditing", mode === _util.AnnotationEditorType.STAMP); 17836 this.div.hidden = false; 17837 } 17838 } 17839 addInkEditorIfNeeded(isCommitting) { 17840 if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) { 17841 return; 17842 } 17843 if (!isCommitting) { 17844 for (const editor of this.#editors.values()) { 17845 if (editor.isEmpty()) {
17846 editor.setInBackground(); 17847 return; 17848 } 17849 } 17850 } 17851 const editor = this.#createAndAddNewEditor({ 17852 offsetX: 0, 17853 offsetY: 0 17854 }, false); 17855 editor.setInBackground(); 17856 } 17857 setEditingState(isEditing) { 17858 this.#uiManager.setEditingState(isEditing); 17859 } 17860 addCommands(params) { 17861 this.#uiManager.addCommands(params); 17862 } 17863 enable() { 17864 this.div.style.pointerEvents = "auto"; 17865 const annotationElementIds = new Set(); 17866 for (const editor of this.#editors.values()) { 17867 editor.enableEditing(); 17868 if (editor.annotationElementId) { 17869 annotationElementIds.add(editor.annotationElementId); 17870 } 17871 } 17872 if (!this.#annotationLayer) { 17873 return; 17874 } 17875 const editables = this.#annotationLayer.getEditableAnnotations(); 17876 for (const editable of editables) { 17877 editable.hide(); 17878 if (this.#uiManager.isDeletedAnnotationElement(editable.data.id)) { 17879 continue; 17880 } 17881 if (annotationElementIds.has(editable.data.id)) { 17882 continue; 17883 } 17884 const editor = this.deserialize(editable); 17885 if (!editor) { 17886 continue; 17887 } 17888 this.addOrRebuild(editor); 17889 editor.enableEditing(); 17890 } 17891 } 17892 disable() { 17893 this.#isDisabling = true; 17894 this.div.style.pointerEvents = "none"; 17895 const hiddenAnnotationIds = new Set(); 17896 for (const editor of this.#editors.values()) { 17897 editor.disableEditing(); 17898 if (!editor.annotationElementId || editor.serialize() !== null) { 17899 hiddenAnnotationIds.add(editor.annotationElementId); 17900 continue; 17901 } 17902 this.getEditableAnnotation(editor.annotationElementId)?.show(); 17903 editor.remove(); 17904 } 17905 if (this.#annotationLayer) { 17906 const editables = this.#annotationLayer.getEditableAnnotations(); 17907 for (const editable of editables) { 17908 const { 17909 id 17910 } = editable.data; 17911 if (hiddenAnnotationIds.has(id) || this.#uiManager.isDeletedAnnotationElement(id)) { 17912 continue; 17913 } 17914 editable.show(); 17915 } 17916 } 17917 this.#cleanup(); 17918 if (this.isEmpty) { 17919 this.div.hidden = true; 17920 } 17921 this.#isDisabling = false; 17922 } 17923 getEditableAnnotation(id) { 17924 return this.#annotationLayer?.getEditableAnnotation(id) || null; 17925 } 17926 setActiveEditor(editor) { 17927 const currentActive = this.#uiManager.getActive(); 17928 if (currentActive === editor) { 17929 return; 17930 } 17931 this.#uiManager.setActiveEditor(editor); 17932 } 17933 enableClick() { 17934 this.div.addEventListener("pointerdown", this.#boundPointerdown); 17935 this.div.addEventListener("pointerup", this.#boundPointerup); 17936 } 17937 disableClick() { 17938 this.div.removeEventListener("pointerdown", this.#boundPointerdown); 17939 this.div.removeEventListener("pointerup", this.#boundPointerup); 17940 } 17941 attach(editor) { 17942 this.#editors.set(editor.id, editor); 17943 const { 17944 annotationElementId 17945 } = editor; 17946 if (annotationElementId && this.#uiManager.isDeletedAnnotationElement(annotationElementId)) { 17947 this.#uiManager.removeDeletedAnnotationElement(editor); 17948 } 17949 } 17950 detach(editor) { 17951 this.#editors.delete(editor.id); 17952 this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); 17953 if (!this.#isDisabling && editor.annotationElementId) { 17954 this.#uiManager.addDeletedAnnotationElement(editor); 17955 } 17956 } 17957 remove(editor) { 17958 this.detach(editor); 17959 this.#uiManager.removeEditor(editor); 17960 if (editor.div.contains(document.activeElement)) { 17961 setTimeout(() => { 17962 this.#uiManager.focusMainContainer(); 17963 }, 0); 17964 } 17965 editor.div.remove(); 17966 editor.isAttachedToDOM = false; 17967 if (!this.#isCleaningUp) { 17968 this.addInkEditorIfNeeded(false); 17969 } 17970 } 17971 changeParent(editor) { 17972 if (editor.parent === this) { 17973 return; 17974 } 17975 if (editor.annotationElementId) { 17976 this.#uiManager.addDeletedAnnotationElement(editor.annotationElementId); 17977 _editor.AnnotationEditor.deleteAnnotationElement(editor); 17978 editor.annotationElementId = null; 17979 } 17980 this.attach(editor); 17981 editor.parent?.detach(editor); 17982 editor.setParent(this); 17983 if (editor.div && editor.isAttachedToDOM) { 17984 editor.div.remove(); 17985 this.div.append(editor.div); 17986 } 17987 } 17988 add(editor) { 17989 this.changeParent(editor); 17990 this.#uiManager.addEditor(editor); 17991 this.attach(editor); 17992 if (!editor.isAttachedToDOM) { 17993 const div = editor.render(); 17994 this.div.append(div); 17995 editor.isAttachedToDOM = true; 17996 } 17997 editor.fixAndSetPosition(); 17998 editor.onceAdded(); 17999 this.#uiManager.addToAnnotationStorage(editor); 18000 } 18001 moveEditorInDOM(editor) { 18002 if (!editor.isAttachedToDOM) { 18003 return; 18004 } 18005 const { 18006 activeElement 18007 } = document; 18008 if (editor.div.contains(activeElement)) { 18009 editor._focusEventsAllowed = false;
18010 setTimeout(() => { 18011 if (!editor.div.contains(document.activeElement)) { 18012 editor.div.addEventListener("focusin", () => { 18013 editor._focusEventsAllowed = true; 18014 }, { 18015 once: true 18016 }); 18017 activeElement.focus(); 18018 } else { 18019 editor._focusEventsAllowed = true; 18020 } 18021 }, 0); 18022 } 18023 editor._structTreeParentId = this.#accessibilityManager?.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); 18024 } 18025 addOrRebuild(editor) { 18026 if (editor.needsToBeRebuilt()) { 18027 editor.rebuild(); 18028 } else { 18029 this.add(editor); 18030 } 18031 } 18032 addUndoableEditor(editor) { 18033 const cmd = () => editor._uiManager.rebuild(editor); 18034 const undo = () => { 18035 editor.remove(); 18036 }; 18037 this.addCommands({ 18038 cmd, 18039 undo, 18040 mustExec: false 18041 }); 18042 } 18043 getNextId() { 18044 return this.#uiManager.getId(); 18045 } 18046 #createNewEditor(params) { 18047 switch (this.#uiManager.getMode()) { 18048 case _util.AnnotationEditorType.FREETEXT: 18049 return new _freetext.FreeTextEditor(params); 18050 case _util.AnnotationEditorType.INK: 18051 return new _ink.InkEditor(params); 18052 case _util.AnnotationEditorType.STAMP: 18053 return new _stamp.StampEditor(params); 18054 } 18055 return null; 18056 } 18057 pasteEditor(mode, params) { 18058 this.#uiManager.updateToolbar(mode); 18059 this.#uiManager.updateMode(mode); 18060 const { 18061 offsetX, 18062 offsetY 18063 } = this.#getCenterPoint(); 18064 const id = this.getNextId(); 18065 const editor = this.#createNewEditor({ 18066 parent: this, 18067 id, 18068 x: offsetX, 18069 y: offsetY, 18070 uiManager: this.#uiManager, 18071 isCentered: true, 18072 ...params 18073 }); 18074 if (editor) { 18075 this.add(editor); 18076 } 18077 } 18078 deserialize(data) { 18079 switch (data.annotationType ?? data.annotationEditorType) { 18080 case _util.AnnotationEditorType.FREETEXT: 18081 return _freetext.FreeTextEditor.deserialize(data, this, this.#uiManager); 18082 case _util.AnnotationEditorType.INK: 18083 return _ink.InkEditor.deserialize(data, this, this.#uiManager); 18084 case _util.AnnotationEditorType.STAMP: 18085 return _stamp.StampEditor.deserialize(data, this, this.#uiManager); 18086 } 18087 return null; 18088 } 18089 #createAndAddNewEditor(event, isCentered) { 18090 const id = this.getNextId(); 18091 const editor = this.#createNewEditor({ 18092 parent: this, 18093 id, 18094 x: event.offsetX, 18095 y: event.offsetY, 18096 uiManager: this.#uiManager, 18097 isCentered 18098 }); 18099 if (editor) { 18100 this.add(editor); 18101 } 18102 return editor; 18103 } 18104 #getCenterPoint() { 18105 const { 18106 x, 18107 y, 18108 width, 18109 height 18110 } = this.div.getBoundingClientRect(); 18111 const tlX = Math.max(0, x); 18112 const tlY = Math.max(0, y); 18113 const brX = Math.min(window.innerWidth, x + width); 18114 const brY = Math.min(window.innerHeight, y + height); 18115 const centerX = (tlX + brX) / 2 - x; 18116 const centerY = (tlY + brY) / 2 - y; 18117 const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; 18118 return { 18119 offsetX, 18120 offsetY 18121 }; 18122 } 18123 addNewEditor() { 18124 this.#createAndAddNewEditor(this.#getCenterPoint(), true); 18125 } 18126 setSelected(editor) { 18127 this.#uiManager.setSelected(editor); 18128 } 18129 toggleSelected(editor) { 18130 this.#uiManager.toggleSelected(editor); 18131 } 18132 isSelected(editor) { 18133 return this.#uiManager.isSelected(editor); 18134 } 18135 unselect(editor) { 18136 this.#uiManager.unselect(editor); 18137 } 18138 pointerup(event) { 18139 const { 18140 isMac 18141 } = _util.FeatureTest.platform; 18142 if (event.button !== 0 || event.ctrlKey && isMac) { 18143 return; 18144 } 18145 if (event.target !== this.div) { 18146 return; 18147 } 18148 if (!this.#hadPointerDown) { 18149 return; 18150 } 18151 this.#hadPointerDown = false; 18152 if (!this.#allowClick) { 18153 this.#allowClick = true; 18154 return; 18155 } 18156 if (this.#uiManager.getMode() === _util.AnnotationEditorType.STAMP) { 18157 this.#uiManager.unselectAll(); 18158 return; 18159 } 18160 this.#createAndAddNewEditor(event, false); 18161 } 18162 pointerdown(event) { 18163 if (this.#hadPointerDown) { 18164 this.#hadPointerDown = false;
18165 return; 18166 } 18167 const { 18168 isMac 18169 } = _util.FeatureTest.platform; 18170 if (event.button !== 0 || event.ctrlKey && isMac) { 18171 return; 18172 } 18173 if (event.target !== this.div) { 18174 return; 18175 } 18176 this.#hadPointerDown = true; 18177 const editor = this.#uiManager.getActive(); 18178 this.#allowClick = !editor || editor.isEmpty(); 18179 } 18180 findNewParent(editor, x, y) { 18181 const layer = this.#uiManager.findParent(x, y); 18182 if (layer === null || layer === this) { 18183 return false; 18184 } 18185 layer.changeParent(editor); 18186 return true; 18187 } 18188 destroy() { 18189 if (this.#uiManager.getActive()?.parent === this) { 18190 this.#uiManager.commitOrRemove(); 18191 this.#uiManager.setActiveEditor(null); 18192 } 18193 for (const editor of this.#editors.values()) { 18194 this.#accessibilityManager?.removePointerInTextLayer(editor.contentDiv); 18195 editor.setParent(null); 18196 editor.isAttachedToDOM = false; 18197 editor.div.remove(); 18198 } 18199 this.div = null; 18200 this.#editors.clear(); 18201 this.#uiManager.removeLayer(this); 18202 } 18203 #cleanup() { 18204 this.#isCleaningUp = true; 18205 for (const editor of this.#editors.values()) { 18206 if (editor.isEmpty()) { 18207 editor.remove(); 18208 } 18209 } 18210 this.#isCleaningUp = false; 18211 } 18212 render(_ref2) { 18213 let { 18214 viewport 18215 } = _ref2; 18216 this.viewport = viewport; 18217 (0, _display_utils.setLayerDimensions)(this.div, viewport); 18218 for (const editor of this.#uiManager.getEditors(this.pageIndex)) { 18219 this.add(editor); 18220 } 18221 this.updateMode(); 18222 } 18223 update(_ref3) { 18224 let { 18225 viewport 18226 } = _ref3; 18227 this.#uiManager.commitOrRemove(); 18228 this.viewport = viewport; 18229 (0, _display_utils.setLayerDimensions)(this.div, { 18230 rotation: viewport.rotation 18231 }); 18232 this.updateMode(); 18233 } 18234 get pageDimensions() { 18235 const { 18236 pageWidth, 18237 pageHeight 18238 } = this.viewport.rawDims; 18239 return [pageWidth, pageHeight]; 18240 } 18241} 18242exports.AnnotationEditorLayer = AnnotationEditorLayer; 18243 18244/***/ }), 18245/* 197 */ 18246/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 18247 18248 18249 18250Object.defineProperty(exports, "__esModule", ({ 18251 value: true 18252})); 18253exports.FreeTextEditor = void 0; 18254__w_pdfjs_require__(89); 18255var _util = __w_pdfjs_require__(1); 18256var _tools = __w_pdfjs_require__(165); 18257var _editor = __w_pdfjs_require__(164); 18258var _annotation_layer = __w_pdfjs_require__(198); 18259class FreeTextEditor extends _editor.AnnotationEditor { 18260 #boundEditorDivBlur = this.editorDivBlur.bind(this); 18261 #boundEditorDivFocus = this.editorDivFocus.bind(this); 18262 #boundEditorDivInput = this.editorDivInput.bind(this); 18263 #boundEditorDivKeydown = this.editorDivKeydown.bind(this); 18264 #color; 18265 #content = ""; 18266 #editorDivId = `${this.id}-editor`; 18267 #fontSize; 18268 #initialData = null; 18269 static _freeTextDefaultContent = ""; 18270 static _internalPadding = 0; 18271 static _defaultColor = null; 18272 static _defaultFontSize = 10; 18273 static get _keyboardManager() { 18274 const proto = FreeTextEditor.prototype; 18275 const arrowChecker = self => self.isEmpty(); 18276 const small = _tools.AnnotationEditorUIManager.TRANSLATE_SMALL; 18277 const big = _tools.AnnotationEditorUIManager.TRANSLATE_BIG; 18278 return (0, _util.shadow)(this, "_keyboardManager", new _tools.KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { 18279 bubbles: true 18280 }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { 18281 args: [-small, 0], 18282 checker: arrowChecker 18283 }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { 18284 args: [-big, 0], 18285 checker: arrowChecker 18286 }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { 18287 args: [small, 0], 18288 checker: arrowChecker 18289 }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { 18290 args: [big, 0], 18291 checker: arrowChecker 18292 }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { 18293 args: [0, -small], 18294 checker: arrowChecker 18295 }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { 18296 args: [0, -big], 18297 checker: arrowChecker 18298 }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { 18299 args: [0, small], 18300 checker: arrowChecker 18301 }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { 18302 args: [0, big], 18303 checker: arrowChecker 18304 }]])); 18305 } 18306 static _type = "freetext"; 18307 constructor(params) { 18308 super({ 18309 ...params, 18310 name: "freeTextEditor" 18311 }); 18312 this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; 18313 this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; 18314 } 18315 static initialize(l10n) { 18316 _editor.AnnotationEditor.initialize(l10n, {
18317 strings: ["free_text2_default_content", "editor_free_text2_aria_label"] 18318 }); 18319 const style = getComputedStyle(document.documentElement); 18320 this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); 18321 } 18322 static updateDefaultParams(type, value) { 18323 switch (type) { 18324 case _util.AnnotationEditorParamsType.FREETEXT_SIZE: 18325 FreeTextEditor._defaultFontSize = value; 18326 break; 18327 case _util.AnnotationEditorParamsType.FREETEXT_COLOR: 18328 FreeTextEditor._defaultColor = value; 18329 break; 18330 } 18331 } 18332 updateParams(type, value) { 18333 switch (type) { 18334 case _util.AnnotationEditorParamsType.FREETEXT_SIZE: 18335 this.#updateFontSize(value); 18336 break; 18337 case _util.AnnotationEditorParamsType.FREETEXT_COLOR: 18338 this.#updateColor(value); 18339 break; 18340 } 18341 } 18342 static get defaultPropertiesToUpdate() { 18343 return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; 18344 } 18345 get propertiesToUpdate() { 18346 return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; 18347 } 18348 #updateFontSize(fontSize) { 18349 const setFontsize = size => { 18350 this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; 18351 this.translate(0, -(size - this.#fontSize) * this.parentScale); 18352 this.#fontSize = size; 18353 this.#setEditorDimensions(); 18354 }; 18355 const savedFontsize = this.#fontSize; 18356 this.addCommands({ 18357 cmd: () => { 18358 setFontsize(fontSize); 18359 }, 18360 undo: () => { 18361 setFontsize(savedFontsize); 18362 }, 18363 mustExec: true, 18364 type: _util.AnnotationEditorParamsType.FREETEXT_SIZE, 18365 overwriteIfSameType: true, 18366 keepUndo: true 18367 }); 18368 } 18369 #updateColor(color) { 18370 const savedColor = this.#color; 18371 this.addCommands({ 18372 cmd: () => { 18373 this.#color = this.editorDiv.style.color = color; 18374 }, 18375 undo: () => { 18376 this.#color = this.editorDiv.style.color = savedColor; 18377 }, 18378 mustExec: true, 18379 type: _util.AnnotationEditorParamsType.FREETEXT_COLOR, 18380 overwriteIfSameType: true, 18381 keepUndo: true 18382 }); 18383 } 18384 _translateEmpty(x, y) { 18385 this._uiManager.translateSelectedEditors(x, y, true); 18386 } 18387 getInitialTranslation() { 18388 const scale = this.parentScale; 18389 return [-FreeTextEditor._internalPadding * scale, -(FreeTextEditor._internalPadding + this.#fontSize) * scale]; 18390 } 18391 rebuild() { 18392 if (!this.parent) { 18393 return; 18394 } 18395 super.rebuild(); 18396 if (this.div === null) { 18397 return; 18398 } 18399 if (!this.isAttachedToDOM) { 18400 this.parent.add(this); 18401 } 18402 } 18403 enableEditMode() { 18404 if (this.isInEditMode()) { 18405 return; 18406 } 18407 this.parent.setEditingState(false); 18408 this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT); 18409 super.enableEditMode(); 18410 this.overlayDiv.classList.remove("enabled"); 18411 this.editorDiv.contentEditable = true; 18412 this._isDraggable = false; 18413 this.div.removeAttribute("aria-activedescendant"); 18414 this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); 18415 this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); 18416 this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); 18417 this.editorDiv.addEventListener("input", this.#boundEditorDivInput); 18418 } 18419 disableEditMode() { 18420 if (!this.isInEditMode()) { 18421 return; 18422 } 18423 this.parent.setEditingState(true); 18424 super.disableEditMode(); 18425 this.overlayDiv.classList.add("enabled"); 18426 this.editorDiv.contentEditable = false; 18427 this.div.setAttribute("aria-activedescendant", this.#editorDivId); 18428 this._isDraggable = true; 18429 this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); 18430 this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); 18431 this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); 18432 this.editorDiv.removeEventListener("input", this.#boundEditorDivInput); 18433 this.div.focus({ 18434 preventScroll: true 18435 }); 18436 this.isEditing = false;
18437 this.parent.div.classList.add("freeTextEditing"); 18438 } 18439 focusin(event) { 18440 if (!this._focusEventsAllowed) { 18441 return; 18442 } 18443 super.focusin(event); 18444 if (event.target !== this.editorDiv) { 18445 this.editorDiv.focus(); 18446 } 18447 } 18448 onceAdded() { 18449 if (this.width) { 18450 this.#cheatInitialRect(); 18451 return; 18452 } 18453 this.enableEditMode(); 18454 this.editorDiv.focus(); 18455 if (this._initialOptions?.isCentered) { 18456 this.center(); 18457 } 18458 this._initialOptions = null; 18459 } 18460 isEmpty() { 18461 return !this.editorDiv || this.editorDiv.innerText.trim() === ""; 18462 } 18463 remove() { 18464 this.isEditing = false; 18465 if (this.parent) { 18466 this.parent.setEditingState(true); 18467 this.parent.div.classList.add("freeTextEditing"); 18468 } 18469 super.remove(); 18470 } 18471 #extractText() { 18472 const divs = this.editorDiv.getElementsByTagName("div"); 18473 if (divs.length === 0) { 18474 return this.editorDiv.innerText; 18475 } 18476 const buffer = []; 18477 for (const div of divs) { 18478 buffer.push(div.innerText.replace(/\r\n?|\n/, "")); 18479 } 18480 return buffer.join("\n"); 18481 } 18482 #setEditorDimensions() { 18483 const [parentWidth, parentHeight] = this.parentDimensions; 18484 let rect; 18485 if (this.isAttachedToDOM) { 18486 rect = this.div.getBoundingClientRect(); 18487 } else { 18488 const { 18489 currentLayer, 18490 div 18491 } = this; 18492 const savedDisplay = div.style.display; 18493 div.style.display = "hidden"; 18494 currentLayer.div.append(this.div); 18495 rect = div.getBoundingClientRect(); 18496 div.remove(); 18497 div.style.display = savedDisplay; 18498 } 18499 if (this.rotation % 180 === this.parentRotation % 180) { 18500 this.width = rect.width / parentWidth; 18501 this.height = rect.height / parentHeight; 18502 } else { 18503 this.width = rect.height / parentWidth; 18504 this.height = rect.width / parentHeight; 18505 } 18506 this.fixAndSetPosition(); 18507 } 18508 commit() { 18509 if (!this.isInEditMode()) { 18510 return; 18511 } 18512 super.commit(); 18513 this.disableEditMode(); 18514 const savedText = this.#content; 18515 const newText = this.#content = this.#extractText().trimEnd(); 18516 if (savedText === newText) { 18517 return; 18518 } 18519 const setText = text => { 18520 this.#content = text; 18521 if (!text) { 18522 this.remove(); 18523 return; 18524 } 18525 this.#setContent(); 18526 this._uiManager.rebuild(this); 18527 this.#setEditorDimensions(); 18528 }; 18529 this.addCommands({ 18530 cmd: () => { 18531 setText(newText); 18532 }, 18533 undo: () => { 18534 setText(savedText); 18535 }, 18536 mustExec: false 18537 }); 18538 this.#setEditorDimensions(); 18539 } 18540 shouldGetKeyboardEvents() { 18541 return this.isInEditMode(); 18542 } 18543 enterInEditMode() { 18544 this.enableEditMode(); 18545 this.editorDiv.focus(); 18546 } 18547 dblclick(event) { 18548 this.enterInEditMode(); 18549 } 18550 keydown(event) { 18551 if (event.target === this.div && event.key === "Enter") { 18552 this.enterInEditMode(); 18553 event.preventDefault(); 18554 } 18555 } 18556 editorDivKeydown(event) { 18557 FreeTextEditor._keyboardManager.exec(this, event); 18558 } 18559 editorDivFocus(event) { 18560 this.isEditing = true; 18561 } 18562 editorDivBlur(event) { 18563 this.isEditing = false; 18564 } 18565 editorDivInput(event) { 18566 this.parent.div.classList.toggle("freeTextEditing", this.isEmpty()); 18567 } 18568 disableEditing() { 18569 this.editorDiv.setAttribute("role", "comment"); 18570 this.editorDiv.removeAttribute("aria-multiline"); 18571 } 18572 enableEditing() { 18573 this.editorDiv.setAttribute("role", "textbox"); 18574 this.editorDiv.setAttribute("aria-multiline", true); 18575 } 18576 render() { 18577 if (this.div) { 18578 return this.div; 18579 } 18580 let baseX, baseY; 18581 if (this.width) { 18582 baseX = this.x; 18583 baseY = this.y; 18584 } 18585 super.render(); 18586 this.editorDiv = document.createElement("div"); 18587 this.editorDiv.className = "internal"; 18588 this.editorDiv.setAttribute("id", this.#editorDivId); 18589 this.enableEditing(); 18590 _editor.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg)); 18591 _editor.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); 18592 this.editorDiv.contentEditable = true; 18593 const { 18594 style 18595 } = this.editorDiv; 18596 style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; 18597 style.color = this.#color; 18598 this.div.append(this.editorDiv); 18599 this.overlayDiv = document.createElement("div"); 18600 this.overlayDiv.classList.add("overlay", "enabled"); 18601 this.div.append(this.overlayDiv); 18602 (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); 18603 if (this.width) { 18604 const [parentWidth, parentHeight] = this.parentDimensions; 18605 if (this.annotationElementId) { 18606 const { 18607 position 18608 } = this.#initialData; 18609 let [tx, ty] = this.getInitialTranslation(); 18610 [tx, ty] = this.pageTranslationToScreen(tx, ty); 18611 const [pageWidth, pageHeight] = this.pageDimensions; 18612 const [pageX, pageY] = this.pageTranslation; 18613 let posX, posY; 18614 switch (this.rotation) { 18615 case 0: 18616 posX = baseX + (position[0] - pageX) / pageWidth; 18617 posY = baseY + this.height - (position[1] - pageY) / pageHeight; 18618 break; 18619 case 90: 18620 posX = baseX + (position[0] - pageX) / pageWidth; 18621 posY = baseY - (position[1] - pageY) / pageHeight; 18622 [tx, ty] = [ty, -tx]; 18623 break; 18624 case 180: 18625 posX = baseX - this.width + (position[0] - pageX) / pageWidth; 18626 posY = baseY - (position[1] - pageY) / pageHeight; 18627 [tx, ty] = [-tx, -ty]; 18628 break; 18629 case 270: 18630 posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; 18631 posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; 18632 [tx, ty] = [-ty, tx]; 18633 break; 18634 } 18635 this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); 18636 } else { 18637 this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); 18638 } 18639 this.#setContent(); 18640 this._isDraggable = true; 18641 this.editorDiv.contentEditable = false;
18642 } else { 18643 this._isDraggable = false; 18644 this.editorDiv.contentEditable = true; 18645 } 18646 return this.div; 18647 } 18648 #setContent() { 18649 this.editorDiv.replaceChildren(); 18650 if (!this.#content) { 18651 return; 18652 } 18653 for (const line of this.#content.split("\n")) { 18654 const div = document.createElement("div"); 18655 div.append(line ? document.createTextNode(line) : document.createElement("br")); 18656 this.editorDiv.append(div); 18657 } 18658 } 18659 get contentDiv() { 18660 return this.editorDiv; 18661 } 18662 static deserialize(data, parent, uiManager) { 18663 let initialData = null; 18664 if (data instanceof _annotation_layer.FreeTextAnnotationElement) { 18665 const { 18666 data: { 18667 defaultAppearanceData: { 18668 fontSize, 18669 fontColor 18670 }, 18671 rect, 18672 rotation, 18673 id 18674 }, 18675 textContent, 18676 textPosition, 18677 parent: { 18678 page: { 18679 pageNumber 18680 } 18681 } 18682 } = data; 18683 if (!textContent || textContent.length === 0) { 18684 return null; 18685 } 18686 initialData = data = { 18687 annotationType: _util.AnnotationEditorType.FREETEXT, 18688 color: Array.from(fontColor), 18689 fontSize, 18690 value: textContent.join("\n"), 18691 position: textPosition, 18692 pageIndex: pageNumber - 1, 18693 rect, 18694 rotation, 18695 id, 18696 deleted: false 18697 }; 18698 } 18699 const editor = super.deserialize(data, parent, uiManager); 18700 editor.#fontSize = data.fontSize; 18701 editor.#color = _util.Util.makeHexColor(...data.color); 18702 editor.#content = data.value; 18703 editor.annotationElementId = data.id || null; 18704 editor.#initialData = initialData; 18705 return editor; 18706 } 18707 serialize() { 18708 let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 18709 if (this.isEmpty()) { 18710 return null; 18711 } 18712 if (this.deleted) { 18713 return { 18714 pageIndex: this.pageIndex, 18715 id: this.annotationElementId, 18716 deleted: true 18717 }; 18718 } 18719 const padding = FreeTextEditor._internalPadding * this.parentScale; 18720 const rect = this.getRect(padding, padding); 18721 const color = _editor.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : this.#color); 18722 const serialized = { 18723 annotationType: _util.AnnotationEditorType.FREETEXT, 18724 color, 18725 fontSize: this.#fontSize, 18726 value: this.#content, 18727 pageIndex: this.pageIndex, 18728 rect, 18729 rotation: this.rotation, 18730 structTreeParentId: this._structTreeParentId 18731 }; 18732 if (isForCopying) { 18733 return serialized; 18734 } 18735 if (this.annotationElementId && !this.#hasElementChanged(serialized)) { 18736 return null; 18737 } 18738 serialized.id = this.annotationElementId; 18739 return serialized; 18740 } 18741 #hasElementChanged(serialized) { 18742 const { 18743 value, 18744 fontSize, 18745 color, 18746 rect, 18747 pageIndex 18748 } = this.#initialData; 18749 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; 18750 } 18751 #cheatInitialRect() { 18752 let delayed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 18753 if (!this.annotationElementId) { 18754 return; 18755 } 18756 this.#setEditorDimensions(); 18757 if (!delayed && (this.width === 0 || this.height === 0)) { 18758 setTimeout(() => this.#cheatInitialRect(true), 0); 18759 return; 18760 } 18761 const padding = FreeTextEditor._internalPadding * this.parentScale; 18762 this.#initialData.rect = this.getRect(padding, padding); 18763 } 18764} 18765exports.FreeTextEditor = FreeTextEditor; 18766 18767/***/ }), 18768/* 198 */ 18769/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 18770 18771 18772 18773Object.defineProperty(exports, "__esModule", ({ 18774 value: true 18775})); 18776exports.StampAnnotationElement = exports.InkAnnotationElement = exports.FreeTextAnnotationElement = exports.AnnotationLayer = void 0; 18777__w_pdfjs_require__(89); 18778__w_pdfjs_require__(125); 18779__w_pdfjs_require__(136); 18780__w_pdfjs_require__(138); 18781__w_pdfjs_require__(141); 18782__w_pdfjs_require__(143); 18783__w_pdfjs_require__(145); 18784__w_pdfjs_require__(147); 18785var _util = __w_pdfjs_require__(1); 18786var _display_utils = __w_pdfjs_require__(168); 18787var _annotation_storage = __w_pdfjs_require__(163); 18788var _scripting_utils = __w_pdfjs_require__(199); 18789var _displayL10n_utils = __w_pdfjs_require__(200); 18790var _xfa_layer = __w_pdfjs_require__(201); 18791const DEFAULT_TAB_INDEX = 1000; 18792const DEFAULT_FONT_SIZE = 9; 18793const GetElementsByNameSet = new WeakSet(); 18794function getRectDims(rect) { 18795 return { 18796 width: rect[2] - rect[0], 18797 height: rect[3] - rect[1] 18798 }; 18799} 18800class AnnotationElementFactory { 18801 static create(parameters) { 18802 const subtype = parameters.data.annotationType; 18803 switch (subtype) { 18804 case _util.AnnotationType.LINK: 18805 return new LinkAnnotationElement(parameters); 18806 case _util.AnnotationType.TEXT: 18807 return new TextAnnotationElement(parameters); 18808 case _util.AnnotationType.WIDGET: 18809 const fieldType = parameters.data.fieldType; 18810 switch (fieldType) { 18811 case "Tx": 18812 return new TextWidgetAnnotationElement(parameters); 18813 case "Btn": 18814 if (parameters.data.radioButton) { 18815 return new RadioButtonWidgetAnnotationElement(parameters); 18816 } else if (parameters.data.checkBox) { 18817 return new CheckboxWidgetAnnotationElement(parameters); 18818 } 18819 return new PushButtonWidgetAnnotationElement(parameters); 18820 case "Ch": 18821 return new ChoiceWidgetAnnotationElement(parameters); 18822 case "Sig": 18823 return new SignatureWidgetAnnotationElement(parameters); 18824 } 18825 return new WidgetAnnotationElement(parameters); 18826 case _util.AnnotationType.POPUP: 18827 return new PopupAnnotationElement(parameters); 18828 case _util.AnnotationType.FREETEXT: 18829 return new FreeTextAnnotationElement(parameters); 18830 case _util.AnnotationType.LINE: 18831 return new LineAnnotationElement(parameters); 18832 case _util.AnnotationType.SQUARE: 18833 return new SquareAnnotationElement(parameters); 18834 case _util.AnnotationType.CIRCLE: 18835 return new CircleAnnotationElement(parameters); 18836 case _util.AnnotationType.POLYLINE: 18837 return new PolylineAnnotationElement(parameters); 18838 case _util.AnnotationType.CARET: 18839 return new CaretAnnotationElement(parameters); 18840 case _util.AnnotationType.INK: 18841 return new InkAnnotationElement(parameters); 18842 case _util.AnnotationType.POLYGON: 18843 return new PolygonAnnotationElement(parameters); 18844 case _util.AnnotationType.HIGHLIGHT: 18845 return new HighlightAnnotationElement(parameters); 18846 case _util.AnnotationType.UNDERLINE: 18847 return new UnderlineAnnotationElement(parameters); 18848 case _util.AnnotationType.SQUIGGLY: 18849 return new SquigglyAnnotationElement(parameters); 18850 case _util.AnnotationType.STRIKEOUT: 18851 return new StrikeOutAnnotationElement(parameters); 18852 case _util.AnnotationType.STAMP: 18853 return new StampAnnotationElement(parameters); 18854 case _util.AnnotationType.FILEATTACHMENT: 18855 return new FileAttachmentAnnotationElement(parameters); 18856 default: 18857 return new AnnotationElement(parameters); 18858 } 18859 } 18860} 18861class AnnotationElement { 18862 #hasBorder = false;
18863 constructor(parameters) { 18864 let { 18865 isRenderable = false, 18866 ignoreBorder = false, 18867 createQuadrilaterals = false 18868 } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 18869 this.isRenderable = isRenderable; 18870 this.data = parameters.data; 18871 this.layer = parameters.layer; 18872 this.linkService = parameters.linkService; 18873 this.downloadManager = parameters.downloadManager; 18874 this.imageResourcesPath = parameters.imageResourcesPath; 18875 this.renderForms = parameters.renderForms; 18876 this.svgFactory = parameters.svgFactory; 18877 this.annotationStorage = parameters.annotationStorage; 18878 this.enableScripting = parameters.enableScripting; 18879 this.hasJSActions = parameters.hasJSActions; 18880 this._fieldObjects = parameters.fieldObjects; 18881 this.parent = parameters.parent; 18882 if (isRenderable) { 18883 this.container = this._createContainer(ignoreBorder); 18884 } 18885 if (createQuadrilaterals) { 18886 this._createQuadrilaterals(); 18887 } 18888 } 18889 static _hasPopupData(_ref) { 18890 let { 18891 titleObj, 18892 contentsObj, 18893 richText 18894 } = _ref; 18895 return !!(titleObj?.str || contentsObj?.str || richText?.str); 18896 } 18897 get hasPopupData() { 18898 return AnnotationElement._hasPopupData(this.data); 18899 } 18900 _createContainer(ignoreBorder) { 18901 const { 18902 data, 18903 parent: { 18904 page, 18905 viewport 18906 } 18907 } = this; 18908 const container = document.createElement("section"); 18909 container.setAttribute("data-annotation-id", data.id); 18910 if (!(this instanceof WidgetAnnotationElement)) { 18911 container.tabIndex = DEFAULT_TAB_INDEX; 18912 } 18913 container.style.zIndex = this.parent.zIndex++; 18914 if (this.data.popupRef) { 18915 container.setAttribute("aria-haspopup", "dialog"); 18916 } 18917 if (data.noRotate) { 18918 container.classList.add("norotate"); 18919 } 18920 const { 18921 pageWidth, 18922 pageHeight, 18923 pageX, 18924 pageY 18925 } = viewport.rawDims; 18926 if (!data.rect || this instanceof PopupAnnotationElement) { 18927 const { 18928 rotation 18929 } = data; 18930 if (!data.hasOwnCanvas && rotation !== 0) { 18931 this.setRotation(rotation, container); 18932 } 18933 return container; 18934 } 18935 const { 18936 width, 18937 height 18938 } = getRectDims(data.rect); 18939 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]]); 18940 if (!ignoreBorder && data.borderStyle.width > 0) { 18941 container.style.borderWidth = `${data.borderStyle.width}px`; 18942 const horizontalRadius = data.borderStyle.horizontalCornerRadius; 18943 const verticalRadius = data.borderStyle.verticalCornerRadius; 18944 if (horizontalRadius > 0 || verticalRadius > 0) { 18945 const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; 18946 container.style.borderRadius = radius; 18947 } else if (this instanceof RadioButtonWidgetAnnotationElement) { 18948 const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; 18949 container.style.borderRadius = radius; 18950 } 18951 switch (data.borderStyle.style) { 18952 case _util.AnnotationBorderStyleType.SOLID: 18953 container.style.borderStyle = "solid"; 18954 break; 18955 case _util.AnnotationBorderStyleType.DASHED: 18956 container.style.borderStyle = "dashed"; 18957 break; 18958 case _util.AnnotationBorderStyleType.BEVELED: 18959 (0, _util.warn)("Unimplemented border style: beveled"); 18960 break; 18961 case _util.AnnotationBorderStyleType.INSET: 18962 (0, _util.warn)("Unimplemented border style: inset"); 18963 break; 18964 case _util.AnnotationBorderStyleType.UNDERLINE: 18965 container.style.borderBottomStyle = "solid"; 18966 break; 18967 default: 18968 break; 18969 } 18970 const borderColor = data.borderColor || null; 18971 if (borderColor) { 18972 this.#hasBorder = true; 18973 container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); 18974 } else { 18975 container.style.borderWidth = 0; 18976 } 18977 } 18978 container.style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; 18979 container.style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; 18980 const { 18981 rotation 18982 } = data; 18983 if (data.hasOwnCanvas || rotation === 0) { 18984 container.style.width = `${100 * width / pageWidth}%`; 18985 container.style.height = `${100 * height / pageHeight}%`; 18986 } else { 18987 this.setRotation(rotation, container); 18988 } 18989 return container; 18990 } 18991 setRotation(angle) {
18992 let container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.container; 18993 if (!this.data.rect) { 18994 return; 18995 } 18996 const { 18997 pageWidth, 18998 pageHeight 18999 } = this.parent.viewport.rawDims; 19000 const { 19001 width, 19002 height 19003 } = getRectDims(this.data.rect); 19004 let elementWidth, elementHeight; 19005 if (angle % 180 === 0) { 19006 elementWidth = 100 * width / pageWidth; 19007 elementHeight = 100 * height / pageHeight; 19008 } else { 19009 elementWidth = 100 * height / pageWidth; 19010 elementHeight = 100 * width / pageHeight; 19011 } 19012 container.style.width = `${elementWidth}%`; 19013 container.style.height = `${elementHeight}%`; 19014 container.setAttribute("data-main-rotation", (360 - angle) % 360); 19015 } 19016 get _commonActions() { 19017 const setColor = (jsName, styleName, event) => { 19018 const color = event.detail[jsName]; 19019 const colorType = color[0]; 19020 const colorArray = color.slice(1); 19021 event.target.style[styleName] = _scripting_utils.ColorConverters[`${colorType}_HTML`](colorArray); 19022 this.annotationStorage.setValue(this.data.id, { 19023 [styleName]: _scripting_utils.ColorConverters[`${colorType}_rgb`](colorArray) 19024 }); 19025 }; 19026 return (0, _util.shadow)(this, "_commonActions", { 19027 display: event => { 19028 const { 19029 display 19030 } = event.detail; 19031 const hidden = display % 2 === 1; 19032 this.container.style.visibility = hidden ? "hidden" : "visible"; 19033 this.annotationStorage.setValue(this.data.id, { 19034 noView: hidden, 19035 noPrint: display === 1 || display === 2 19036 }); 19037 }, 19038 print: event => { 19039 this.annotationStorage.setValue(this.data.id, { 19040 noPrint: !event.detail.print 19041 }); 19042 }, 19043 hidden: event => { 19044 const { 19045 hidden 19046 } = event.detail; 19047 this.container.style.visibility = hidden ? "hidden" : "visible"; 19048 this.annotationStorage.setValue(this.data.id, { 19049 noPrint: hidden, 19050 noView: hidden 19051 }); 19052 }, 19053 focus: event => { 19054 setTimeout(() => event.target.focus({ 19055 preventScroll: false 19056 }), 0); 19057 }, 19058 userName: event => { 19059 event.target.title = event.detail.userName; 19060 }, 19061 readonly: event => { 19062 event.target.disabled = event.detail.readonly; 19063 }, 19064 required: event => { 19065 this._setRequired(event.target, event.detail.required); 19066 }, 19067 bgColor: event => { 19068 setColor("bgColor", "backgroundColor", event); 19069 }, 19070 fillColor: event => { 19071 setColor("fillColor", "backgroundColor", event); 19072 }, 19073 fgColor: event => { 19074 setColor("fgColor", "color", event); 19075 }, 19076 textColor: event => { 19077 setColor("textColor", "color", event); 19078 }, 19079 borderColor: event => { 19080 setColor("borderColor", "borderColor", event); 19081 }, 19082 strokeColor: event => { 19083 setColor("strokeColor", "borderColor", event); 19084 }, 19085 rotation: event => { 19086 const angle = event.detail.rotation; 19087 this.setRotation(angle); 19088 this.annotationStorage.setValue(this.data.id, { 19089 rotation: angle 19090 }); 19091 } 19092 }); 19093 } 19094 _dispatchEventFromSandbox(actions, jsEvent) { 19095 const commonActions = this._commonActions; 19096 for (const name of Object.keys(jsEvent.detail)) { 19097 const action = actions[name] || commonActions[name]; 19098 action?.(jsEvent); 19099 } 19100 } 19101 _setDefaultPropertiesFromJS(element) { 19102 if (!this.enableScripting) { 19103 return; 19104 } 19105 const storedData = this.annotationStorage.getRawValue(this.data.id); 19106 if (!storedData) { 19107 return; 19108 } 19109 const commonActions = this._commonActions; 19110 for (const [actionName, detail] of Object.entries(storedData)) { 19111 const action = commonActions[actionName]; 19112 if (action) { 19113 const eventProxy = { 19114 detail: { 19115 [actionName]: detail 19116 }, 19117 target: element 19118 }; 19119 action(eventProxy); 19120 delete storedData[actionName]; 19121 } 19122 } 19123 } 19124 _createQuadrilaterals() { 19125 if (!this.container) { 19126 return; 19127 } 19128 const { 19129 quadPoints 19130 } = this.data; 19131 if (!quadPoints) { 19132 return; 19133 } 19134 const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect; 19135 if (quadPoints.length === 1) { 19136 const [, { 19137 x: trX, 19138 y: trY 19139 }, { 19140 x: blX, 19141 y: blY 19142 }] = quadPoints[0]; 19143 if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { 19144 return; 19145 } 19146 } 19147 const { 19148 style 19149 } = this.container; 19150 let svgBuffer; 19151 if (this.#hasBorder) { 19152 const { 19153 borderColor, 19154 borderWidth 19155 } = style; 19156 style.borderWidth = 0; 19157 svgBuffer = ["url('data:image/svg+xml;utf8,", `<svg xmlns="http://www.w3.org/2000/svg"`, ` preserveAspectRatio="none" viewBox="0 0 1 1">`, `<g fill="transparent" stroke="${borderColor}" stroke-width="${borderWidth}">`]; 19158 this.container.classList.add("hasBorder"); 19159 } 19160 const width = rectTrX - rectBlX; 19161 const height = rectTrY - rectBlY; 19162 const { 19163 svgFactory 19164 } = this; 19165 const svg = svgFactory.createElement("svg"); 19166 svg.classList.add("quadrilateralsContainer"); 19167 svg.setAttribute("width", 0); 19168 svg.setAttribute("height", 0); 19169 const defs = svgFactory.createElement("defs"); 19170 svg.append(defs); 19171 const clipPath = svgFactory.createElement("clipPath"); 19172 const id = `clippath_${this.data.id}`; 19173 clipPath.setAttribute("id", id); 19174 clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); 19175 defs.append(clipPath); 19176 for (const [, { 19177 x: trX, 19178 y: trY 19179 }, {
19180 x: blX, 19181 y: blY 19182 }] of quadPoints) { 19183 const rect = svgFactory.createElement("rect"); 19184 const x = (blX - rectBlX) / width; 19185 const y = (rectTrY - trY) / height; 19186 const rectWidth = (trX - blX) / width; 19187 const rectHeight = (trY - blY) / height; 19188 rect.setAttribute("x", x); 19189 rect.setAttribute("y", y); 19190 rect.setAttribute("width", rectWidth); 19191 rect.setAttribute("height", rectHeight); 19192 clipPath.append(rect); 19193 svgBuffer?.push(`<rect vector-effect="non-scaling-stroke" x="${x}" y="${y}" width="${rectWidth}" height="${rectHeight}"/>`); 19194 } 19195 if (this.#hasBorder) { 19196 svgBuffer.push(`</g></svg>')`); 19197 style.backgroundImage = svgBuffer.join(""); 19198 } 19199 this.container.append(svg); 19200 this.container.style.clipPath = `url(#${id})`; 19201 } 19202 _createPopup() { 19203 const { 19204 container, 19205 data 19206 } = this; 19207 container.setAttribute("aria-haspopup", "dialog"); 19208 const popup = new PopupAnnotationElement({ 19209 data: { 19210 color: data.color, 19211 titleObj: data.titleObj, 19212 modificationDate: data.modificationDate, 19213 contentsObj: data.contentsObj, 19214 richText: data.richText, 19215 parentRect: data.rect, 19216 borderStyle: 0, 19217 id: `popup_${data.id}`, 19218 rotation: data.rotation 19219 }, 19220 parent: this.parent, 19221 elements: [this] 19222 }); 19223 this.parent.div.append(popup.render()); 19224 } 19225 render() { 19226 (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); 19227 } 19228 _getElementsByName(name) { 19229 let skipId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 19230 const fields = []; 19231 if (this._fieldObjects) { 19232 const fieldObj = this._fieldObjects[name]; 19233 if (fieldObj) { 19234 for (const { 19235 page, 19236 id, 19237 exportValues 19238 } of fieldObj) { 19239 if (page === -1) { 19240 continue; 19241 } 19242 if (id === skipId) { 19243 continue; 19244 } 19245 const exportValue = typeof exportValues === "string" ? exportValues : null; 19246 const domElement = document.querySelector(`[data-element-id="${id}"]`); 19247 if (domElement && !GetElementsByNameSet.has(domElement)) { 19248 (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); 19249 continue; 19250 } 19251 fields.push({ 19252 id, 19253 exportValue, 19254 domElement 19255 }); 19256 } 19257 } 19258 return fields; 19259 } 19260 for (const domElement of document.getElementsByName(name)) { 19261 const { 19262 exportValue 19263 } = domElement; 19264 const id = domElement.getAttribute("data-element-id"); 19265 if (id === skipId) { 19266 continue; 19267 } 19268 if (!GetElementsByNameSet.has(domElement)) { 19269 continue; 19270 } 19271 fields.push({ 19272 id, 19273 exportValue, 19274 domElement 19275 }); 19276 } 19277 return fields; 19278 } 19279 show() { 19280 if (this.container) { 19281 this.container.hidden = false; 19282 } 19283 this.popup?.maybeShow(); 19284 } 19285 hide() { 19286 if (this.container) { 19287 this.container.hidden = true; 19288 } 19289 this.popup?.forceHide(); 19290 } 19291 getElementsToTriggerPopup() { 19292 return this.container; 19293 } 19294 addHighlightArea() { 19295 const triggers = this.getElementsToTriggerPopup(); 19296 if (Array.isArray(triggers)) { 19297 for (const element of triggers) { 19298 element.classList.add("highlightArea"); 19299 } 19300 } else { 19301 triggers.classList.add("highlightArea"); 19302 } 19303 } 19304 _editOnDoubleClick() { 19305 const { 19306 annotationEditorType: mode, 19307 data: { 19308 id: editId 19309 } 19310 } = this; 19311 this.container.addEventListener("dblclick", () => { 19312 this.linkService.eventBus?.dispatch("switchannotationeditormode", { 19313 source: this, 19314 mode, 19315 editId 19316 }); 19317 }); 19318 } 19319} 19320class LinkAnnotationElement extends AnnotationElement { 19321 constructor(parameters) { 19322 let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 19323 super(parameters, { 19324 isRenderable: true, 19325 ignoreBorder: !!options?.ignoreBorder, 19326 createQuadrilaterals: true 19327 }); 19328 this.isTooltipOnly = parameters.data.isTooltipOnly; 19329 } 19330 render() { 19331 const { 19332 data, 19333 linkService 19334 } = this; 19335 const link = document.createElement("a"); 19336 link.setAttribute("data-element-id", data.id); 19337 let isBound = false;
vendor: 5,924 bytes, lines 19338-19534
19338 if (data.url) { 19339 linkService.addLinkAttributes(link, data.url, data.newWindow); 19340 isBound = true; 19341 } else if (data.action) { 19342 this._bindNamedAction(link, data.action); 19343 isBound = true; 19344 } else if (data.attachment) { 19345 this._bindAttachment(link, data.attachment); 19346 isBound = true; 19347 } else if (data.setOCGState) { 19348 this.#bindSetOCGState(link, data.setOCGState); 19349 isBound = true; 19350 } else if (data.dest) { 19351 this._bindLink(link, data.dest); 19352 isBound = true; 19353 } else { 19354 if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { 19355 this._bindJSAction(link, data); 19356 isBound = true; 19357 } 19358 if (data.resetForm) { 19359 this._bindResetFormAction(link, data.resetForm); 19360 isBound = true; 19361 } else if (this.isTooltipOnly && !isBound) { 19362 this._bindLink(link, ""); 19363 isBound = true; 19364 } 19365 } 19366 this.container.classList.add("linkAnnotation"); 19367 if (isBound) { 19368 this.container.append(link); 19369 } 19370 return this.container; 19371 } 19372 #setInternalLink() { 19373 this.container.setAttribute("data-internal-link", ""); 19374 } 19375 _bindLink(link, destination) { 19376 link.href = this.linkService.getDestinationHash(destination); 19377 link.onclick = () => { 19378 if (destination) { 19379 this.linkService.goToDestination(destination); 19380 } 19381 return false; 19382 }; 19383 if (destination || destination === "") { 19384 this.#setInternalLink(); 19385 } 19386 } 19387 _bindNamedAction(link, action) { 19388 link.href = this.linkService.getAnchorUrl(""); 19389 link.onclick = () => { 19390 this.linkService.executeNamedAction(action); 19391 return false; 19392 }; 19393 this.#setInternalLink(); 19394 } 19395 _bindAttachment(link, attachment) { 19396 link.href = this.linkService.getAnchorUrl(""); 19397 link.onclick = () => { 19398 this.downloadManager?.openOrDownloadData(this.container, attachment.content, attachment.filename); 19399 return false; 19400 }; 19401 this.#setInternalLink(); 19402 } 19403 #bindSetOCGState(link, action) { 19404 link.href = this.linkService.getAnchorUrl(""); 19405 link.onclick = () => { 19406 this.linkService.executeSetOCGState(action); 19407 return false; 19408 }; 19409 this.#setInternalLink(); 19410 } 19411 _bindJSAction(link, data) { 19412 link.href = this.linkService.getAnchorUrl(""); 19413 const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); 19414 for (const name of Object.keys(data.actions)) { 19415 const jsName = map.get(name); 19416 if (!jsName) { 19417 continue; 19418 } 19419 link[jsName] = () => { 19420 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19421 source: this, 19422 detail: { 19423 id: data.id, 19424 name 19425 } 19426 }); 19427 return false; 19428 }; 19429 } 19430 if (!link.onclick) { 19431 link.onclick = () => false; 19432 } 19433 this.#setInternalLink(); 19434 } 19435 _bindResetFormAction(link, resetForm) { 19436 const otherClickAction = link.onclick; 19437 if (!otherClickAction) { 19438 link.href = this.linkService.getAnchorUrl(""); 19439 } 19440 this.#setInternalLink(); 19441 if (!this._fieldObjects) { 19442 (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); 19443 if (!otherClickAction) { 19444 link.onclick = () => false; 19445 } 19446 return; 19447 } 19448 link.onclick = () => { 19449 otherClickAction?.(); 19450 const { 19451 fields: resetFormFields, 19452 refs: resetFormRefs, 19453 include 19454 } = resetForm; 19455 const allFields = []; 19456 if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { 19457 const fieldIds = new Set(resetFormRefs); 19458 for (const fieldName of resetFormFields) { 19459 const fields = this._fieldObjects[fieldName] || []; 19460 for (const { 19461 id 19462 } of fields) { 19463 fieldIds.add(id); 19464 } 19465 } 19466 for (const fields of Object.values(this._fieldObjects)) { 19467 for (const field of fields) { 19468 if (fieldIds.has(field.id) === include) { 19469 allFields.push(field); 19470 } 19471 } 19472 } 19473 } else { 19474 for (const fields of Object.values(this._fieldObjects)) { 19475 allFields.push(...fields); 19476 } 19477 } 19478 const storage = this.annotationStorage; 19479 const allIds = []; 19480 for (const field of allFields) { 19481 const { 19482 id 19483 } = field; 19484 allIds.push(id); 19485 switch (field.type) { 19486 case "text": 19487 { 19488 const value = field.defaultValue || ""; 19489 storage.setValue(id, { 19490 value 19491 }); 19492 break; 19493 } 19494 case "checkbox": 19495 case "radiobutton": 19496 { 19497 const value = field.defaultValue === field.exportValues; 19498 storage.setValue(id, { 19499 value 19500 }); 19501 break; 19502 } 19503 case "combobox": 19504 case "listbox": 19505 { 19506 const value = field.defaultValue || ""; 19507 storage.setValue(id, { 19508 value 19509 }); 19510 break; 19511 } 19512 default: 19513 continue; 19514 } 19515 const domElement = document.querySelector(`[data-element-id="${id}"]`); 19516 if (!domElement) { 19517 continue; 19518 } else if (!GetElementsByNameSet.has(domElement)) { 19519 (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`); 19520 continue; 19521 } 19522 domElement.dispatchEvent(new Event("resetform")); 19523 } 19524 if (this.enableScripting) { 19525 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19526 source: this, 19527 detail: { 19528 id: "app", 19529 ids: allIds, 19530 name: "ResetForm" 19531 } 19532 }); 19533 } 19534 return false;
19535 }; 19536 } 19537} 19538class TextAnnotationElement extends AnnotationElement { 19539 constructor(parameters) { 19540 super(parameters, { 19541 isRenderable: true 19542 }); 19543 } 19544 render() { 19545 this.container.classList.add("textAnnotation"); 19546 const image = document.createElement("img"); 19547 image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; 19548 image.alt = "[{{type}} Annotation]"; 19549 image.dataset.l10nId = "text_annotation_type"; 19550 image.dataset.l10nArgs = JSON.stringify({ 19551 type: this.data.name 19552 }); 19553 if (!this.data.popupRef && this.hasPopupData) { 19554 this._createPopup(); 19555 } 19556 this.container.append(image); 19557 return this.container; 19558 } 19559} 19560class WidgetAnnotationElement extends AnnotationElement { 19561 render() { 19562 if (this.data.alternativeText) { 19563 this.container.title = this.data.alternativeText; 19564 } 19565 return this.container; 19566 } 19567 showElementAndHideCanvas(element) { 19568 if (this.data.hasOwnCanvas) { 19569 if (element.previousSibling?.nodeName === "CANVAS") { 19570 element.previousSibling.hidden = true; 19571 } 19572 element.hidden = false; 19573 } 19574 } 19575 _getKeyModifier(event) { 19576 const { 19577 isWin, 19578 isMac 19579 } = _util.FeatureTest.platform; 19580 return isWin && event.ctrlKey || isMac && event.metaKey; 19581 } 19582 _setEventListener(element, elementData, baseName, eventName, valueGetter) { 19583 if (baseName.includes("mouse")) { 19584 element.addEventListener(baseName, event => { 19585 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19586 source: this, 19587 detail: { 19588 id: this.data.id, 19589 name: eventName, 19590 value: valueGetter(event), 19591 shift: event.shiftKey, 19592 modifier: this._getKeyModifier(event) 19593 } 19594 }); 19595 }); 19596 } else { 19597 element.addEventListener(baseName, event => { 19598 if (baseName === "blur") { 19599 if (!elementData.focused || !event.relatedTarget) { 19600 return; 19601 } 19602 elementData.focused = false; 19603 } else if (baseName === "focus") { 19604 if (elementData.focused) { 19605 return; 19606 } 19607 elementData.focused = true; 19608 } 19609 if (!valueGetter) { 19610 return; 19611 } 19612 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19613 source: this, 19614 detail: { 19615 id: this.data.id, 19616 name: eventName, 19617 value: valueGetter(event) 19618 } 19619 }); 19620 }); 19621 } 19622 } 19623 _setEventListeners(element, elementData, names, getter) { 19624 for (const [baseName, eventName] of names) { 19625 if (eventName === "Action" || this.data.actions?.[eventName]) { 19626 if (eventName === "Focus" || eventName === "Blur") { 19627 elementData ||= { 19628 focused: false 19629 }; 19630 } 19631 this._setEventListener(element, elementData, baseName, eventName, getter); 19632 if (eventName === "Focus" && !this.data.actions?.Blur) { 19633 this._setEventListener(element, elementData, "blur", "Blur", null); 19634 } else if (eventName === "Blur" && !this.data.actions?.Focus) { 19635 this._setEventListener(element, elementData, "focus", "Focus", null); 19636 } 19637 } 19638 } 19639 } 19640 _setBackgroundColor(element) { 19641 const color = this.data.backgroundColor || null; 19642 element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); 19643 } 19644 _setTextStyle(element) { 19645 const TEXT_ALIGNMENT = ["left", "center", "right"]; 19646 const { 19647 fontColor 19648 } = this.data.defaultAppearanceData; 19649 const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; 19650 const style = element.style;
vendor: 26,111 bytes, lines 19651-20383
19651 let computedFontSize; 19652 const BORDER_SIZE = 2; 19653 const roundToOneDecimal = x => Math.round(10 * x) / 10; 19654 if (this.data.multiLine) { 19655 const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); 19656 const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1; 19657 const lineHeight = height / numberOfLines; 19658 computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / _util.LINE_FACTOR)); 19659 } else { 19660 const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); 19661 computedFontSize = Math.min(fontSize, roundToOneDecimal(height / _util.LINE_FACTOR)); 19662 } 19663 style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; 19664 style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); 19665 if (this.data.textAlignment !== null) { 19666 style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; 19667 } 19668 } 19669 _setRequired(element, isRequired) { 19670 if (isRequired) { 19671 element.setAttribute("required", true); 19672 } else { 19673 element.removeAttribute("required"); 19674 } 19675 element.setAttribute("aria-required", isRequired); 19676 } 19677} 19678class TextWidgetAnnotationElement extends WidgetAnnotationElement { 19679 constructor(parameters) { 19680 const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; 19681 super(parameters, { 19682 isRenderable 19683 }); 19684 } 19685 setPropertyOnSiblings(base, key, value, keyInStorage) { 19686 const storage = this.annotationStorage; 19687 for (const element of this._getElementsByName(base.name, base.id)) { 19688 if (element.domElement) { 19689 element.domElement[key] = value; 19690 } 19691 storage.setValue(element.id, { 19692 [keyInStorage]: value 19693 }); 19694 } 19695 } 19696 render() { 19697 const storage = this.annotationStorage; 19698 const id = this.data.id; 19699 this.container.classList.add("textWidgetAnnotation"); 19700 let element = null; 19701 if (this.renderForms) { 19702 const storedData = storage.getValue(id, { 19703 value: this.data.fieldValue 19704 }); 19705 let textContent = storedData.value || ""; 19706 const maxLen = storage.getValue(id, { 19707 charLimit: this.data.maxLen 19708 }).charLimit; 19709 if (maxLen && textContent.length > maxLen) { 19710 textContent = textContent.slice(0, maxLen); 19711 } 19712 let fieldFormattedValues = storedData.formattedValue || this.data.textContent?.join("\n") || null; 19713 if (fieldFormattedValues && this.data.comb) { 19714 fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); 19715 } 19716 const elementData = { 19717 userValue: textContent, 19718 formattedValue: fieldFormattedValues, 19719 lastCommittedValue: null, 19720 commitKey: 1, 19721 focused: false 19722 }; 19723 if (this.data.multiLine) { 19724 element = document.createElement("textarea"); 19725 element.textContent = fieldFormattedValues ?? textContent; 19726 if (this.data.doNotScroll) { 19727 element.style.overflowY = "hidden"; 19728 } 19729 } else { 19730 element = document.createElement("input"); 19731 element.type = "text"; 19732 element.setAttribute("value", fieldFormattedValues ?? textContent); 19733 if (this.data.doNotScroll) { 19734 element.style.overflowX = "hidden"; 19735 } 19736 } 19737 if (this.data.hasOwnCanvas) { 19738 element.hidden = true; 19739 } 19740 GetElementsByNameSet.add(element); 19741 element.setAttribute("data-element-id", id); 19742 element.disabled = this.data.readOnly; 19743 element.name = this.data.fieldName; 19744 element.tabIndex = DEFAULT_TAB_INDEX; 19745 this._setRequired(element, this.data.required); 19746 if (maxLen) { 19747 element.maxLength = maxLen; 19748 } 19749 element.addEventListener("input", event => { 19750 storage.setValue(id, { 19751 value: event.target.value 19752 }); 19753 this.setPropertyOnSiblings(element, "value", event.target.value, "value"); 19754 elementData.formattedValue = null; 19755 }); 19756 element.addEventListener("resetform", event => { 19757 const defaultValue = this.data.defaultFieldValue ?? ""; 19758 element.value = elementData.userValue = defaultValue; 19759 elementData.formattedValue = null; 19760 }); 19761 let blurListener = event => { 19762 const { 19763 formattedValue 19764 } = elementData; 19765 if (formattedValue !== null && formattedValue !== undefined) { 19766 event.target.value = formattedValue; 19767 } 19768 event.target.scrollLeft = 0; 19769 }; 19770 if (this.enableScripting && this.hasJSActions) { 19771 element.addEventListener("focus", event => { 19772 if (elementData.focused) { 19773 return; 19774 } 19775 const { 19776 target 19777 } = event; 19778 if (elementData.userValue) { 19779 target.value = elementData.userValue; 19780 } 19781 elementData.lastCommittedValue = target.value; 19782 elementData.commitKey = 1; 19783 elementData.focused = true; 19784 }); 19785 element.addEventListener("updatefromsandbox", jsEvent => { 19786 this.showElementAndHideCanvas(jsEvent.target); 19787 const actions = { 19788 value(event) { 19789 elementData.userValue = event.detail.value ?? ""; 19790 storage.setValue(id, { 19791 value: elementData.userValue.toString() 19792 }); 19793 event.target.value = elementData.userValue; 19794 }, 19795 formattedValue(event) { 19796 const { 19797 formattedValue 19798 } = event.detail; 19799 elementData.formattedValue = formattedValue; 19800 if (formattedValue !== null && formattedValue !== undefined && event.target !== document.activeElement) { 19801 event.target.value = formattedValue; 19802 } 19803 storage.setValue(id, { 19804 formattedValue 19805 }); 19806 }, 19807 selRange(event) { 19808 event.target.setSelectionRange(...event.detail.selRange); 19809 }, 19810 charLimit: event => { 19811 const { 19812 charLimit 19813 } = event.detail; 19814 const { 19815 target 19816 } = event; 19817 if (charLimit === 0) { 19818 target.removeAttribute("maxLength"); 19819 return; 19820 } 19821 target.setAttribute("maxLength", charLimit); 19822 let value = elementData.userValue; 19823 if (!value || value.length <= charLimit) { 19824 return; 19825 } 19826 value = value.slice(0, charLimit); 19827 target.value = elementData.userValue = value; 19828 storage.setValue(id, { 19829 value 19830 }); 19831 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19832 source: this, 19833 detail: { 19834 id, 19835 name: "Keystroke", 19836 value, 19837 willCommit: true, 19838 commitKey: 1, 19839 selStart: target.selectionStart, 19840 selEnd: target.selectionEnd 19841 } 19842 }); 19843 } 19844 }; 19845 this._dispatchEventFromSandbox(actions, jsEvent); 19846 }); 19847 element.addEventListener("keydown", event => { 19848 elementData.commitKey = 1; 19849 let commitKey = -1; 19850 if (event.key === "Escape") { 19851 commitKey = 0; 19852 } else if (event.key === "Enter" && !this.data.multiLine) { 19853 commitKey = 2; 19854 } else if (event.key === "Tab") { 19855 elementData.commitKey = 3; 19856 } 19857 if (commitKey === -1) { 19858 return; 19859 } 19860 const { 19861 value 19862 } = event.target; 19863 if (elementData.lastCommittedValue === value) { 19864 return; 19865 } 19866 elementData.lastCommittedValue = value; 19867 elementData.userValue = value; 19868 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19869 source: this, 19870 detail: { 19871 id, 19872 name: "Keystroke", 19873 value, 19874 willCommit: true, 19875 commitKey, 19876 selStart: event.target.selectionStart, 19877 selEnd: event.target.selectionEnd 19878 } 19879 }); 19880 }); 19881 const _blurListener = blurListener; 19882 blurListener = null; 19883 element.addEventListener("blur", event => { 19884 if (!elementData.focused || !event.relatedTarget) { 19885 return; 19886 } 19887 elementData.focused = false; 19888 const { 19889 value 19890 } = event.target; 19891 elementData.userValue = value; 19892 if (elementData.lastCommittedValue !== value) { 19893 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19894 source: this, 19895 detail: { 19896 id, 19897 name: "Keystroke", 19898 value, 19899 willCommit: true, 19900 commitKey: elementData.commitKey, 19901 selStart: event.target.selectionStart, 19902 selEnd: event.target.selectionEnd 19903 } 19904 }); 19905 } 19906 _blurListener(event); 19907 }); 19908 if (this.data.actions?.Keystroke) { 19909 element.addEventListener("beforeinput", event => { 19910 elementData.lastCommittedValue = null; 19911 const { 19912 data, 19913 target 19914 } = event; 19915 const { 19916 value, 19917 selectionStart, 19918 selectionEnd 19919 } = target; 19920 let selStart = selectionStart, 19921 selEnd = selectionEnd; 19922 switch (event.inputType) { 19923 case "deleteWordBackward": 19924 { 19925 const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); 19926 if (match) { 19927 selStart -= match[0].length; 19928 } 19929 break; 19930 } 19931 case "deleteWordForward": 19932 { 19933 const match = value.substring(selectionStart).match(/^[^\w]*\w*/); 19934 if (match) { 19935 selEnd += match[0].length; 19936 } 19937 break; 19938 } 19939 case "deleteContentBackward": 19940 if (selectionStart === selectionEnd) { 19941 selStart -= 1; 19942 } 19943 break; 19944 case "deleteContentForward": 19945 if (selectionStart === selectionEnd) { 19946 selEnd += 1; 19947 } 19948 break; 19949 } 19950 event.preventDefault(); 19951 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 19952 source: this, 19953 detail: { 19954 id, 19955 name: "Keystroke", 19956 value, 19957 change: data || "", 19958 willCommit: false, 19959 selStart, 19960 selEnd 19961 } 19962 }); 19963 }); 19964 } 19965 this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); 19966 } 19967 if (blurListener) { 19968 element.addEventListener("blur", blurListener); 19969 } 19970 if (this.data.comb) { 19971 const fieldWidth = this.data.rect[2] - this.data.rect[0]; 19972 const combWidth = fieldWidth / maxLen; 19973 element.classList.add("comb"); 19974 element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; 19975 } 19976 } else { 19977 element = document.createElement("div"); 19978 element.textContent = this.data.fieldValue; 19979 element.style.verticalAlign = "middle"; 19980 element.style.display = "table-cell"; 19981 } 19982 this._setTextStyle(element); 19983 this._setBackgroundColor(element); 19984 this._setDefaultPropertiesFromJS(element); 19985 this.container.append(element); 19986 return this.container; 19987 } 19988} 19989class SignatureWidgetAnnotationElement extends WidgetAnnotationElement { 19990 constructor(parameters) { 19991 super(parameters, { 19992 isRenderable: !!parameters.data.hasOwnCanvas 19993 }); 19994 } 19995} 19996class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { 19997 constructor(parameters) { 19998 super(parameters, { 19999 isRenderable: parameters.renderForms 20000 }); 20001 } 20002 render() { 20003 const storage = this.annotationStorage; 20004 const data = this.data; 20005 const id = data.id; 20006 let value = storage.getValue(id, { 20007 value: data.exportValue === data.fieldValue 20008 }).value; 20009 if (typeof value === "string") { 20010 value = value !== "Off"; 20011 storage.setValue(id, { 20012 value 20013 }); 20014 } 20015 this.container.classList.add("buttonWidgetAnnotation", "checkBox"); 20016 const element = document.createElement("input"); 20017 GetElementsByNameSet.add(element); 20018 element.setAttribute("data-element-id", id); 20019 element.disabled = data.readOnly; 20020 this._setRequired(element, this.data.required); 20021 element.type = "checkbox"; 20022 element.name = data.fieldName; 20023 if (value) { 20024 element.setAttribute("checked", true); 20025 } 20026 element.setAttribute("exportValue", data.exportValue); 20027 element.tabIndex = DEFAULT_TAB_INDEX; 20028 element.addEventListener("change", event => { 20029 const { 20030 name, 20031 checked 20032 } = event.target; 20033 for (const checkbox of this._getElementsByName(name, id)) { 20034 const curChecked = checked && checkbox.exportValue === data.exportValue; 20035 if (checkbox.domElement) { 20036 checkbox.domElement.checked = curChecked; 20037 } 20038 storage.setValue(checkbox.id, { 20039 value: curChecked 20040 }); 20041 } 20042 storage.setValue(id, { 20043 value: checked 20044 }); 20045 }); 20046 element.addEventListener("resetform", event => { 20047 const defaultValue = data.defaultFieldValue || "Off"; 20048 event.target.checked = defaultValue === data.exportValue; 20049 }); 20050 if (this.enableScripting && this.hasJSActions) { 20051 element.addEventListener("updatefromsandbox", jsEvent => { 20052 const actions = { 20053 value(event) { 20054 event.target.checked = event.detail.value !== "Off"; 20055 storage.setValue(id, { 20056 value: event.target.checked 20057 }); 20058 } 20059 }; 20060 this._dispatchEventFromSandbox(actions, jsEvent); 20061 }); 20062 this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); 20063 } 20064 this._setBackgroundColor(element); 20065 this._setDefaultPropertiesFromJS(element); 20066 this.container.append(element); 20067 return this.container; 20068 } 20069} 20070class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { 20071 constructor(parameters) { 20072 super(parameters, { 20073 isRenderable: parameters.renderForms 20074 }); 20075 } 20076 render() { 20077 this.container.classList.add("buttonWidgetAnnotation", "radioButton"); 20078 const storage = this.annotationStorage; 20079 const data = this.data; 20080 const id = data.id; 20081 let value = storage.getValue(id, { 20082 value: data.fieldValue === data.buttonValue 20083 }).value; 20084 if (typeof value === "string") { 20085 value = value !== data.buttonValue; 20086 storage.setValue(id, { 20087 value 20088 }); 20089 } 20090 const element = document.createElement("input"); 20091 GetElementsByNameSet.add(element); 20092 element.setAttribute("data-element-id", id); 20093 element.disabled = data.readOnly; 20094 this._setRequired(element, this.data.required); 20095 element.type = "radio"; 20096 element.name = data.fieldName; 20097 if (value) { 20098 element.setAttribute("checked", true); 20099 } 20100 element.tabIndex = DEFAULT_TAB_INDEX; 20101 element.addEventListener("change", event => { 20102 const { 20103 name, 20104 checked 20105 } = event.target; 20106 for (const radio of this._getElementsByName(name, id)) { 20107 storage.setValue(radio.id, { 20108 value: false 20109 }); 20110 } 20111 storage.setValue(id, { 20112 value: checked 20113 }); 20114 }); 20115 element.addEventListener("resetform", event => { 20116 const defaultValue = data.defaultFieldValue; 20117 event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; 20118 }); 20119 if (this.enableScripting && this.hasJSActions) { 20120 const pdfButtonValue = data.buttonValue; 20121 element.addEventListener("updatefromsandbox", jsEvent => { 20122 const actions = { 20123 value: event => { 20124 const checked = pdfButtonValue === event.detail.value; 20125 for (const radio of this._getElementsByName(event.target.name)) { 20126 const curChecked = checked && radio.id === id; 20127 if (radio.domElement) { 20128 radio.domElement.checked = curChecked; 20129 } 20130 storage.setValue(radio.id, { 20131 value: curChecked 20132 }); 20133 } 20134 } 20135 }; 20136 this._dispatchEventFromSandbox(actions, jsEvent); 20137 }); 20138 this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); 20139 } 20140 this._setBackgroundColor(element); 20141 this._setDefaultPropertiesFromJS(element); 20142 this.container.append(element); 20143 return this.container; 20144 } 20145} 20146class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { 20147 constructor(parameters) { 20148 super(parameters, { 20149 ignoreBorder: parameters.data.hasAppearance 20150 }); 20151 } 20152 render() { 20153 const container = super.render(); 20154 container.classList.add("buttonWidgetAnnotation", "pushButton"); 20155 if (this.data.alternativeText) { 20156 container.title = this.data.alternativeText; 20157 } 20158 const linkElement = container.lastChild; 20159 if (this.enableScripting && this.hasJSActions && linkElement) { 20160 this._setDefaultPropertiesFromJS(linkElement); 20161 linkElement.addEventListener("updatefromsandbox", jsEvent => { 20162 this._dispatchEventFromSandbox({}, jsEvent); 20163 }); 20164 } 20165 return container; 20166 } 20167} 20168class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { 20169 constructor(parameters) { 20170 super(parameters, { 20171 isRenderable: parameters.renderForms 20172 }); 20173 } 20174 render() { 20175 this.container.classList.add("choiceWidgetAnnotation"); 20176 const storage = this.annotationStorage; 20177 const id = this.data.id; 20178 const storedData = storage.getValue(id, { 20179 value: this.data.fieldValue 20180 }); 20181 const selectElement = document.createElement("select"); 20182 GetElementsByNameSet.add(selectElement); 20183 selectElement.setAttribute("data-element-id", id); 20184 selectElement.disabled = this.data.readOnly; 20185 this._setRequired(selectElement, this.data.required); 20186 selectElement.name = this.data.fieldName; 20187 selectElement.tabIndex = DEFAULT_TAB_INDEX; 20188 let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; 20189 if (!this.data.combo) { 20190 selectElement.size = this.data.options.length; 20191 if (this.data.multiSelect) { 20192 selectElement.multiple = true; 20193 } 20194 } 20195 selectElement.addEventListener("resetform", event => { 20196 const defaultValue = this.data.defaultFieldValue; 20197 for (const option of selectElement.options) { 20198 option.selected = option.value === defaultValue; 20199 } 20200 }); 20201 for (const option of this.data.options) { 20202 const optionElement = document.createElement("option"); 20203 optionElement.textContent = option.displayValue; 20204 optionElement.value = option.exportValue; 20205 if (storedData.value.includes(option.exportValue)) { 20206 optionElement.setAttribute("selected", true); 20207 addAnEmptyEntry = false; 20208 } 20209 selectElement.append(optionElement); 20210 } 20211 let removeEmptyEntry = null; 20212 if (addAnEmptyEntry) { 20213 const noneOptionElement = document.createElement("option"); 20214 noneOptionElement.value = " "; 20215 noneOptionElement.setAttribute("hidden", true); 20216 noneOptionElement.setAttribute("selected", true); 20217 selectElement.prepend(noneOptionElement); 20218 removeEmptyEntry = () => { 20219 noneOptionElement.remove(); 20220 selectElement.removeEventListener("input", removeEmptyEntry); 20221 removeEmptyEntry = null; 20222 }; 20223 selectElement.addEventListener("input", removeEmptyEntry); 20224 } 20225 const getValue = isExport => { 20226 const name = isExport ? "value" : "textContent"; 20227 const { 20228 options, 20229 multiple 20230 } = selectElement; 20231 if (!multiple) { 20232 return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; 20233 } 20234 return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); 20235 }; 20236 let selectedValues = getValue(false); 20237 const getItems = event => { 20238 const options = event.target.options; 20239 return Array.prototype.map.call(options, option => { 20240 return { 20241 displayValue: option.textContent, 20242 exportValue: option.value 20243 }; 20244 }); 20245 }; 20246 if (this.enableScripting && this.hasJSActions) { 20247 selectElement.addEventListener("updatefromsandbox", jsEvent => { 20248 const actions = { 20249 value(event) { 20250 removeEmptyEntry?.(); 20251 const value = event.detail.value; 20252 const values = new Set(Array.isArray(value) ? value : [value]); 20253 for (const option of selectElement.options) { 20254 option.selected = values.has(option.value); 20255 } 20256 storage.setValue(id, { 20257 value: getValue(true) 20258 }); 20259 selectedValues = getValue(false); 20260 }, 20261 multipleSelection(event) { 20262 selectElement.multiple = true; 20263 }, 20264 remove(event) { 20265 const options = selectElement.options; 20266 const index = event.detail.remove; 20267 options[index].selected = false; 20268 selectElement.remove(index); 20269 if (options.length > 0) { 20270 const i = Array.prototype.findIndex.call(options, option => option.selected); 20271 if (i === -1) { 20272 options[0].selected = true; 20273 } 20274 } 20275 storage.setValue(id, { 20276 value: getValue(true), 20277 items: getItems(event) 20278 }); 20279 selectedValues = getValue(false); 20280 }, 20281 clear(event) { 20282 while (selectElement.length !== 0) { 20283 selectElement.remove(0); 20284 } 20285 storage.setValue(id, { 20286 value: null, 20287 items: [] 20288 }); 20289 selectedValues = getValue(false); 20290 }, 20291 insert(event) { 20292 const { 20293 index, 20294 displayValue, 20295 exportValue 20296 } = event.detail.insert; 20297 const selectChild = selectElement.children[index]; 20298 const optionElement = document.createElement("option"); 20299 optionElement.textContent = displayValue; 20300 optionElement.value = exportValue; 20301 if (selectChild) { 20302 selectChild.before(optionElement); 20303 } else { 20304 selectElement.append(optionElement); 20305 } 20306 storage.setValue(id, { 20307 value: getValue(true), 20308 items: getItems(event) 20309 }); 20310 selectedValues = getValue(false); 20311 }, 20312 items(event) { 20313 const { 20314 items 20315 } = event.detail; 20316 while (selectElement.length !== 0) { 20317 selectElement.remove(0); 20318 } 20319 for (const item of items) { 20320 const { 20321 displayValue, 20322 exportValue 20323 } = item; 20324 const optionElement = document.createElement("option"); 20325 optionElement.textContent = displayValue; 20326 optionElement.value = exportValue; 20327 selectElement.append(optionElement); 20328 } 20329 if (selectElement.options.length > 0) { 20330 selectElement.options[0].selected = true; 20331 } 20332 storage.setValue(id, { 20333 value: getValue(true), 20334 items: getItems(event) 20335 }); 20336 selectedValues = getValue(false); 20337 }, 20338 indices(event) { 20339 const indices = new Set(event.detail.indices); 20340 for (const option of event.target.options) { 20341 option.selected = indices.has(option.index); 20342 } 20343 storage.setValue(id, { 20344 value: getValue(true) 20345 }); 20346 selectedValues = getValue(false); 20347 }, 20348 editable(event) { 20349 event.target.disabled = !event.detail.editable; 20350 } 20351 }; 20352 this._dispatchEventFromSandbox(actions, jsEvent); 20353 }); 20354 selectElement.addEventListener("input", event => { 20355 const exportValue = getValue(true); 20356 storage.setValue(id, { 20357 value: exportValue 20358 }); 20359 event.preventDefault(); 20360 this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { 20361 source: this, 20362 detail: { 20363 id, 20364 name: "Keystroke", 20365 value: selectedValues, 20366 changeEx: exportValue, 20367 willCommit: false, 20368 commitKey: 1, 20369 keyDown: false 20370 } 20371 }); 20372 }); 20373 this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], event => event.target.value); 20374 } else { 20375 selectElement.addEventListener("input", function (event) { 20376 storage.setValue(id, { 20377 value: getValue(true) 20378 }); 20379 }); 20380 } 20381 if (this.data.combo) { 20382 this._setTextStyle(selectElement); 20383 } else {}
20384 this._setBackgroundColor(selectElement); 20385 this._setDefaultPropertiesFromJS(selectElement); 20386 this.container.append(selectElement); 20387 return this.container; 20388 } 20389} 20390class PopupAnnotationElement extends AnnotationElement { 20391 constructor(parameters) { 20392 const { 20393 data, 20394 elements 20395 } = parameters; 20396 super(parameters, { 20397 isRenderable: AnnotationElement._hasPopupData(data) 20398 }); 20399 this.elements = elements; 20400 } 20401 render() { 20402 this.container.classList.add("popupAnnotation"); 20403 const popup = new PopupElement({ 20404 container: this.container, 20405 color: this.data.color, 20406 titleObj: this.data.titleObj, 20407 modificationDate: this.data.modificationDate, 20408 contentsObj: this.data.contentsObj, 20409 richText: this.data.richText, 20410 rect: this.data.rect, 20411 parentRect: this.data.parentRect || null, 20412 parent: this.parent, 20413 elements: this.elements, 20414 open: this.data.open 20415 }); 20416 const elementIds = []; 20417 for (const element of this.elements) { 20418 element.popup = popup; 20419 elementIds.push(element.data.id); 20420 element.addHighlightArea(); 20421 } 20422 this.container.setAttribute("aria-controls", elementIds.map(id => `${_util.AnnotationPrefix}${id}`).join(",")); 20423 return this.container; 20424 } 20425} 20426class PopupElement { 20427 #dateTimePromise = null; 20428 #boundKeyDown = this.#keyDown.bind(this); 20429 #boundHide = this.#hide.bind(this); 20430 #boundShow = this.#show.bind(this); 20431 #boundToggle = this.#toggle.bind(this); 20432 #color = null; 20433 #container = null; 20434 #contentsObj = null; 20435 #elements = null; 20436 #parent = null; 20437 #parentRect = null; 20438 #pinned = false; 20439 #popup = null; 20440 #rect = null; 20441 #richText = null; 20442 #titleObj = null; 20443 #wasVisible = false; 20444 constructor(_ref2) { 20445 let { 20446 container, 20447 color, 20448 elements, 20449 titleObj, 20450 modificationDate, 20451 contentsObj, 20452 richText, 20453 parent, 20454 rect, 20455 parentRect, 20456 open 20457 } = _ref2; 20458 this.#container = container; 20459 this.#titleObj = titleObj; 20460 this.#contentsObj = contentsObj; 20461 this.#richText = richText; 20462 this.#parent = parent; 20463 this.#color = color; 20464 this.#rect = rect; 20465 this.#parentRect = parentRect; 20466 this.#elements = elements; 20467 const dateObject = _display_utils.PDFDateString.toDateObject(modificationDate); 20468 if (dateObject) { 20469 this.#dateTimePromise = parent.l10n.get("annotation_date_string", { 20470 date: dateObject.toLocaleDateString(), 20471 time: dateObject.toLocaleTimeString() 20472 }); 20473 } 20474 this.trigger = elements.flatMap(e => e.getElementsToTriggerPopup()); 20475 for (const element of this.trigger) { 20476 element.addEventListener("click", this.#boundToggle); 20477 element.addEventListener("mouseenter", this.#boundShow); 20478 element.addEventListener("mouseleave", this.#boundHide); 20479 element.classList.add("popupTriggerArea"); 20480 } 20481 for (const element of elements) { 20482 element.container?.addEventListener("keydown", this.#boundKeyDown); 20483 } 20484 this.#container.hidden = true; 20485 if (open) { 20486 this.#toggle(); 20487 } 20488 } 20489 render() { 20490 if (this.#popup) { 20491 return; 20492 } 20493 const { 20494 page: { 20495 view 20496 }, 20497 viewport: { 20498 rawDims: { 20499 pageWidth, 20500 pageHeight, 20501 pageX, 20502 pageY 20503 } 20504 } 20505 } = this.#parent; 20506 const popup = this.#popup = document.createElement("div"); 20507 popup.className = "popup"; 20508 if (this.#color) { 20509 const baseColor = popup.style.outlineColor = _util.Util.makeHexColor(...this.#color); 20510 if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { 20511 popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; 20512 } else { 20513 const BACKGROUND_ENLIGHT = 0.7; 20514 popup.style.backgroundColor = _util.Util.makeHexColor(...this.#color.map(c => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); 20515 } 20516 } 20517 const header = document.createElement("span"); 20518 header.className = "header"; 20519 const title = document.createElement("h1"); 20520 header.append(title); 20521 ({ 20522 dir: title.dir, 20523 str: title.textContent 20524 } = this.#titleObj); 20525 popup.append(header); 20526 if (this.#dateTimePromise) { 20527 const modificationDate = document.createElement("span"); 20528 modificationDate.classList.add("popupDate"); 20529 this.#dateTimePromise.then(localized => { 20530 modificationDate.textContent = localized; 20531 }); 20532 header.append(modificationDate); 20533 } 20534 const contentsObj = this.#contentsObj; 20535 const richText = this.#richText; 20536 if (richText?.str && (!contentsObj?.str || contentsObj.str === richText.str)) { 20537 _xfa_layer.XfaLayer.render({ 20538 xfaHtml: richText.html, 20539 intent: "richText", 20540 div: popup 20541 }); 20542 popup.lastChild.classList.add("richText", "popupContent"); 20543 } else { 20544 const contents = this._formatContents(contentsObj); 20545 popup.append(contents); 20546 } 20547 let useParentRect = !!this.#parentRect; 20548 let rect = useParentRect ? this.#parentRect : this.#rect; 20549 for (const element of this.#elements) { 20550 if (!rect || _util.Util.intersect(element.data.rect, rect) !== null) { 20551 rect = element.data.rect; 20552 useParentRect = true; 20553 break; 20554 } 20555 } 20556 const normalizedRect = _util.Util.normalizeRect([rect[0], view[3] - rect[1] + view[
vendor: 7,809 bytes, lines 20556-20810
205561], rect[2], view[3] - rect[3] + view[1]]); 20557 const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; 20558 const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; 20559 const popupLeft = normalizedRect[0] + parentWidth; 20560 const popupTop = normalizedRect[1]; 20561 const { 20562 style 20563 } = this.#container; 20564 style.left = `${100 * (popupLeft - pageX) / pageWidth}%`; 20565 style.top = `${100 * (popupTop - pageY) / pageHeight}%`; 20566 this.#container.append(popup); 20567 } 20568 _formatContents(_ref3) { 20569 let { 20570 str, 20571 dir 20572 } = _ref3; 20573 const p = document.createElement("p"); 20574 p.classList.add("popupContent"); 20575 p.dir = dir; 20576 const lines = str.split(/(?:\r\n?|\n)/); 20577 for (let i = 0, ii = lines.length; i < ii; ++i) { 20578 const line = lines[i]; 20579 p.append(document.createTextNode(line)); 20580 if (i < ii - 1) { 20581 p.append(document.createElement("br")); 20582 } 20583 } 20584 return p; 20585 } 20586 #keyDown(event) { 20587 if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { 20588 return; 20589 } 20590 if (event.key === "Enter" || event.key === "Escape" && this.#pinned) { 20591 this.#toggle(); 20592 } 20593 } 20594 #toggle() { 20595 this.#pinned = !this.#pinned; 20596 if (this.#pinned) { 20597 this.#show(); 20598 this.#container.addEventListener("click", this.#boundToggle); 20599 this.#container.addEventListener("keydown", this.#boundKeyDown); 20600 } else { 20601 this.#hide(); 20602 this.#container.removeEventListener("click", this.#boundToggle); 20603 this.#container.removeEventListener("keydown", this.#boundKeyDown); 20604 } 20605 } 20606 #show() { 20607 if (!this.#popup) { 20608 this.render(); 20609 } 20610 if (!this.isVisible) { 20611 this.#container.hidden = false; 20612 this.#container.style.zIndex = parseInt(this.#container.style.zIndex) + 1000; 20613 } else if (this.#pinned) { 20614 this.#container.classList.add("focused"); 20615 } 20616 } 20617 #hide() { 20618 this.#container.classList.remove("focused"); 20619 if (this.#pinned || !this.isVisible) { 20620 return; 20621 } 20622 this.#container.hidden = true; 20623 this.#container.style.zIndex = parseInt(this.#container.style.zIndex) - 1000; 20624 } 20625 forceHide() { 20626 this.#wasVisible = this.isVisible; 20627 if (!this.#wasVisible) { 20628 return; 20629 } 20630 this.#container.hidden = true; 20631 } 20632 maybeShow() { 20633 if (!this.#wasVisible) { 20634 return; 20635 } 20636 this.#wasVisible = false; 20637 this.#container.hidden = false; 20638 } 20639 get isVisible() { 20640 return this.#container.hidden === false; 20641 } 20642} 20643class FreeTextAnnotationElement extends AnnotationElement { 20644 constructor(parameters) { 20645 super(parameters, { 20646 isRenderable: true, 20647 ignoreBorder: true 20648 }); 20649 this.textContent = parameters.data.textContent; 20650 this.textPosition = parameters.data.textPosition; 20651 this.annotationEditorType = _util.AnnotationEditorType.FREETEXT; 20652 } 20653 render() { 20654 this.container.classList.add("freeTextAnnotation"); 20655 if (this.textContent) { 20656 const content = document.createElement("div"); 20657 content.classList.add("annotationTextContent"); 20658 content.setAttribute("role", "comment"); 20659 for (const line of this.textContent) { 20660 const lineSpan = document.createElement("span"); 20661 lineSpan.textContent = line; 20662 content.append(lineSpan); 20663 } 20664 this.container.append(content); 20665 } 20666 if (!this.data.popupRef && this.hasPopupData) { 20667 this._createPopup(); 20668 } 20669 this._editOnDoubleClick(); 20670 return this.container; 20671 } 20672} 20673exports.FreeTextAnnotationElement = FreeTextAnnotationElement; 20674class LineAnnotationElement extends AnnotationElement { 20675 #line = null; 20676 constructor(parameters) { 20677 super(parameters, { 20678 isRenderable: true, 20679 ignoreBorder: true 20680 }); 20681 } 20682 render() { 20683 this.container.classList.add("lineAnnotation"); 20684 const data = this.data; 20685 const { 20686 width, 20687 height 20688 } = getRectDims(data.rect); 20689 const svg = this.svgFactory.create(width, height, true); 20690 const line = this.#line = this.svgFactory.createElement("svg:line"); 20691 line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); 20692 line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); 20693 line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); 20694 line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); 20695 line.setAttribute("stroke-width", data.borderStyle.width || 1); 20696 line.setAttribute("stroke", "transparent"); 20697 line.setAttribute("fill", "transparent"); 20698 svg.append(line); 20699 this.container.append(svg); 20700 if (!data.popupRef && this.hasPopupData) { 20701 this._createPopup(); 20702 } 20703 return this.container; 20704 } 20705 getElementsToTriggerPopup() { 20706 return this.#line; 20707 } 20708 addHighlightArea() { 20709 this.container.classList.add("highlightArea"); 20710 } 20711} 20712class SquareAnnotationElement extends AnnotationElement { 20713 #square = null; 20714 constructor(parameters) { 20715 super(parameters, { 20716 isRenderable: true, 20717 ignoreBorder: true 20718 }); 20719 } 20720 render() { 20721 this.container.classList.add("squareAnnotation"); 20722 const data = this.data; 20723 const { 20724 width, 20725 height 20726 } = getRectDims(data.rect); 20727 const svg = this.svgFactory.create(width, height, true); 20728 const borderWidth = data.borderStyle.width; 20729 const square = this.#square = this.svgFactory.createElement("svg:rect"); 20730 square.setAttribute("x", borderWidth / 2); 20731 square.setAttribute("y", borderWidth / 2); 20732 square.setAttribute("width", width - borderWidth); 20733 square.setAttribute("height", height - borderWidth); 20734 square.setAttribute("stroke-width", borderWidth || 1); 20735 square.setAttribute("stroke", "transparent"); 20736 square.setAttribute("fill", "transparent"); 20737 svg.append(square); 20738 this.container.append(svg); 20739 if (!data.popupRef && this.hasPopupData) { 20740 this._createPopup(); 20741 } 20742 return this.container; 20743 } 20744 getElementsToTriggerPopup() { 20745 return this.#square; 20746 } 20747 addHighlightArea() { 20748 this.container.classList.add("highlightArea"); 20749 } 20750} 20751class CircleAnnotationElement extends AnnotationElement { 20752 #circle = null; 20753 constructor(parameters) { 20754 super(parameters, { 20755 isRenderable: true, 20756 ignoreBorder: true 20757 }); 20758 } 20759 render() { 20760 this.container.classList.add("circleAnnotation"); 20761 const data = this.data; 20762 const { 20763 width, 20764 height 20765 } = getRectDims(data.rect); 20766 const svg = this.svgFactory.create(width, height, true); 20767 const borderWidth = data.borderStyle.width; 20768 const circle = this.#circle = this.svgFactory.createElement("svg:ellipse"); 20769 circle.setAttribute("cx", width / 2); 20770 circle.setAttribute("cy", height / 2); 20771 circle.setAttribute("rx", width / 2 - borderWidth / 2); 20772 circle.setAttribute("ry", height / 2 - borderWidth / 2); 20773 circle.setAttribute("stroke-width", borderWidth || 1); 20774 circle.setAttribute("stroke", "transparent"); 20775 circle.setAttribute("fill", "transparent"); 20776 svg.append(circle); 20777 this.container.append(svg); 20778 if (!data.popupRef && this.hasPopupData) { 20779 this._createPopup(); 20780 } 20781 return this.container; 20782 } 20783 getElementsToTriggerPopup() { 20784 return this.#circle; 20785 } 20786 addHighlightArea() { 20787 this.container.classList.add("highlightArea"); 20788 } 20789} 20790class PolylineAnnotationElement extends AnnotationElement { 20791 #polyline = null; 20792 constructor(parameters) { 20793 super(parameters, { 20794 isRenderable: true, 20795 ignoreBorder: true 20796 }); 20797 this.containerClassName = "polylineAnnotation"; 20798 this.svgElementName = "svg:polyline"; 20799 } 20800 render() { 20801 this.container.classList.add(this.containerClassName); 20802 const data = this.data; 20803 const { 20804 width, 20805 height 20806 } = getRectDims(data.rect); 20807 const svg = this.svgFactory.create(width, height, true); 20808 let points = []; 20809 for (const coordinate of data.vertices) { 20810 const x = coordinate.x - data.rect[0];
20811 const y = data.rect[3] - coordinate.y; 20812 points.push(x + "," + y); 20813 } 20814 points = points.join(" "); 20815 const polyline = this.#polyline = this.svgFactory.createElement(this.svgElementName); 20816 polyline.setAttribute("points", points); 20817 polyline.setAttribute("stroke-width", data.borderStyle.width || 1); 20818 polyline.setAttribute("stroke", "transparent"); 20819 polyline.setAttribute("fill", "transparent"); 20820 svg.append(polyline); 20821 this.container.append(svg); 20822 if (!data.popupRef && this.hasPopupData) { 20823 this._createPopup(); 20824 } 20825 return this.container; 20826 } 20827 getElementsToTriggerPopup() { 20828 return this.#polyline; 20829 } 20830 addHighlightArea() { 20831 this.container.classList.add("highlightArea"); 20832 } 20833} 20834class PolygonAnnotationElement extends PolylineAnnotationElement { 20835 constructor(parameters) { 20836 super(parameters); 20837 this.containerClassName = "polygonAnnotation"; 20838 this.svgElementName = "svg:polygon"; 20839 } 20840} 20841class CaretAnnotationElement extends AnnotationElement { 20842 constructor(parameters) { 20843 super(parameters, { 20844 isRenderable: true, 20845 ignoreBorder: true 20846 }); 20847 } 20848 render() { 20849 this.container.classList.add("caretAnnotation"); 20850 if (!this.data.popupRef && this.hasPopupData) { 20851 this._createPopup(); 20852 } 20853 return this.container; 20854 } 20855} 20856class InkAnnotationElement extends AnnotationElement { 20857 #polylines = []; 20858 constructor(parameters) { 20859 super(parameters, { 20860 isRenderable: true, 20861 ignoreBorder: true 20862 }); 20863 this.containerClassName = "inkAnnotation"; 20864 this.svgElementName = "svg:polyline"; 20865 this.annotationEditorType = _util.AnnotationEditorType.INK; 20866 } 20867 render() { 20868 this.container.classList.add(this.containerClassName); 20869 const data = this.data; 20870 const { 20871 width, 20872 height 20873 } = getRectDims(data.rect); 20874 const svg = this.svgFactory.create(width, height, true); 20875 for (const inkList of data.inkLists) { 20876 let points = []; 20877 for (const coordinate of inkList) { 20878 const x = coordinate.x - data.rect[0]; 20879 const y = data.rect[3] - coordinate.y; 20880 points.push(`${x},${y}`); 20881 } 20882 points = points.join(" "); 20883 const polyline = this.svgFactory.createElement(this.svgElementName); 20884 this.#polylines.push(polyline); 20885 polyline.setAttribute("points", points); 20886 polyline.setAttribute("stroke-width", data.borderStyle.width || 1); 20887 polyline.setAttribute("stroke", "transparent"); 20888 polyline.setAttribute("fill", "transparent"); 20889 if (!data.popupRef && this.hasPopupData) { 20890 this._createPopup(); 20891 } 20892 svg.append(polyline); 20893 } 20894 this.container.append(svg); 20895 return this.container; 20896 } 20897 getElementsToTriggerPopup() { 20898 return this.#polylines; 20899 } 20900 addHighlightArea() { 20901 this.container.classList.add("highlightArea"); 20902 } 20903} 20904exports.InkAnnotationElement = InkAnnotationElement; 20905class HighlightAnnotationElement extends AnnotationElement { 20906 constructor(parameters) { 20907 super(parameters, { 20908 isRenderable: true, 20909 ignoreBorder: true, 20910 createQuadrilaterals: true 20911 }); 20912 } 20913 render() { 20914 if (!this.data.popupRef && this.hasPopupData) { 20915 this._createPopup(); 20916 } 20917 this.container.classList.add("highlightAnnotation"); 20918 return this.container; 20919 } 20920} 20921class UnderlineAnnotationElement extends AnnotationElement { 20922 constructor(parameters) { 20923 super(parameters, { 20924 isRenderable: true, 20925 ignoreBorder: true, 20926 createQuadrilaterals: true 20927 }); 20928 } 20929 render() { 20930 if (!this.data.popupRef && this.hasPopupData) { 20931 this._createPopup(); 20932 } 20933 this.container.classList.add("underlineAnnotation"); 20934 return this.container; 20935 } 20936} 20937class SquigglyAnnotationElement extends AnnotationElement { 20938 constructor(parameters) { 20939 super(parameters, { 20940 isRenderable: true, 20941 ignoreBorder: true, 20942 createQuadrilaterals: true 20943 }); 20944 } 20945 render() { 20946 if (!this.data.popupRef && this.hasPopupData) { 20947 this._createPopup(); 20948 } 20949 this.container.classList.add("squigglyAnnotation"); 20950 return this.container; 20951 } 20952} 20953class StrikeOutAnnotationElement extends AnnotationElement { 20954 constructor(parameters) { 20955 super(parameters, { 20956 isRenderable: true, 20957 ignoreBorder: true, 20958 createQuadrilaterals: true 20959 }); 20960 } 20961 render() { 20962 if (!this.data.popupRef && this.hasPopupData) { 20963 this._createPopup(); 20964 }
20965 this.container.classList.add("strikeoutAnnotation"); 20966 return this.container; 20967 } 20968} 20969class StampAnnotationElement extends AnnotationElement { 20970 constructor(parameters) { 20971 super(parameters, { 20972 isRenderable: true, 20973 ignoreBorder: true 20974 }); 20975 } 20976 render() { 20977 this.container.classList.add("stampAnnotation"); 20978 if (!this.data.popupRef && this.hasPopupData) { 20979 this._createPopup(); 20980 } 20981 return this.container; 20982 } 20983} 20984exports.StampAnnotationElement = StampAnnotationElement; 20985class FileAttachmentAnnotationElement extends AnnotationElement { 20986 #trigger = null; 20987 constructor(parameters) { 20988 super(parameters, { 20989 isRenderable: true 20990 }); 20991 const { 20992 filename, 20993 content 20994 } = this.data.file; 20995 this.filename = (0, _display_utils.getFilenameFromUrl)(filename, true); 20996 this.content = content; 20997 this.linkService.eventBus?.dispatch("fileattachmentannotation", { 20998 source: this, 20999 filename, 21000 content 21001 }); 21002 } 21003 render() { 21004 this.container.classList.add("fileAttachmentAnnotation"); 21005 const { 21006 container, 21007 data 21008 } = this; 21009 let trigger; 21010 if (data.hasAppearance || data.fillAlpha === 0) { 21011 trigger = document.createElement("div"); 21012 } else { 21013 trigger = document.createElement("img"); 21014 trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; 21015 if (data.fillAlpha && data.fillAlpha < 1) { 21016 trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; 21017 } 21018 } 21019 trigger.addEventListener("dblclick", this.#download.bind(this)); 21020 this.#trigger = trigger; 21021 const { 21022 isMac 21023 } = _util.FeatureTest.platform; 21024 container.addEventListener("keydown", evt => { 21025 if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { 21026 this.#download(); 21027 } 21028 }); 21029 if (!data.popupRef && this.hasPopupData) { 21030 this._createPopup(); 21031 } else { 21032 trigger.classList.add("popupTriggerArea"); 21033 } 21034 container.append(trigger); 21035 return container; 21036 } 21037 getElementsToTriggerPopup() { 21038 return this.#trigger; 21039 } 21040 addHighlightArea() { 21041 this.container.classList.add("highlightArea"); 21042 } 21043 #download() { 21044 this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename); 21045 } 21046} 21047class AnnotationLayer { 21048 #accessibilityManager = null; 21049 #annotationCanvasMap = null; 21050 #editableAnnotations = new Map(); 21051 constructor(_ref4) { 21052 let { 21053 div, 21054 accessibilityManager, 21055 annotationCanvasMap, 21056 l10n, 21057 page, 21058 viewport 21059 } = _ref4; 21060 this.div = div; 21061 this.#accessibilityManager = accessibilityManager; 21062 this.#annotationCanvasMap = annotationCanvasMap; 21063 this.l10n = l10n; 21064 this.page = page; 21065 this.viewport = viewport; 21066 this.zIndex = 0; 21067 this.l10n ||= _displayL10n_utils.NullL10n; 21068 } 21069 #appendElement(element, id) { 21070 const contentElement = element.firstChild || element; 21071 contentElement.id = `${_util.AnnotationPrefix}${id}`; 21072 this.div.append(element); 21073 this.#accessibilityManager?.moveElementInDOM(this.div, element, contentElement, false); 21074 } 21075 async render(params) { 21076 const { 21077 annotations 21078 } = params; 21079 const layer = this.div; 21080 (0, _display_utils.setLayerDimensions)(layer, this.viewport); 21081 const popupToElements = new Map();
21082 const elementParams = { 21083 data: null, 21084 layer, 21085 linkService: params.linkService, 21086 downloadManager: params.downloadManager, 21087 imageResourcesPath: params.imageResourcesPath || "", 21088 renderForms: params.renderForms !== false, 21089 svgFactory: new _display_utils.DOMSVGFactory(), 21090 annotationStorage: params.annotationStorage || new _annotation_storage.AnnotationStorage(), 21091 enableScripting: params.enableScripting === true, 21092 hasJSActions: params.hasJSActions, 21093 fieldObjects: params.fieldObjects, 21094 parent: this, 21095 elements: null 21096 }; 21097 for (const data of annotations) { 21098 if (data.noHTML) { 21099 continue; 21100 } 21101 const isPopupAnnotation = data.annotationType === _util.AnnotationType.POPUP; 21102 if (!isPopupAnnotation) { 21103 const { 21104 width, 21105 height 21106 } = getRectDims(data.rect); 21107 if (width <= 0 || height <= 0) { 21108 continue; 21109 } 21110 } else { 21111 const elements = popupToElements.get(data.id); 21112 if (!elements) { 21113 continue; 21114 }
21115 elementParams.elements = elements; 21116 } 21117 elementParams.data = data; 21118 const element = AnnotationElementFactory.create(elementParams); 21119 if (!element.isRenderable) { 21120 continue; 21121 } 21122 if (!isPopupAnnotation && data.popupRef) { 21123 const elements = popupToElements.get(data.popupRef); 21124 if (!elements) { 21125 popupToElements.set(data.popupRef, [element]); 21126 } else { 21127 elements.push(element); 21128 } 21129 } 21130 if (element.annotationEditorType > 0) { 21131 this.#editableAnnotations.set(element.data.id, element); 21132 } 21133 const rendered = element.render(); 21134 if (data.hidden) { 21135 rendered.style.visibility = "hidden"; 21136 } 21137 this.#appendElement(rendered, data.id); 21138 } 21139 this.#setAnnotationCanvasMap(); 21140 await this.l10n.translate(layer); 21141 } 21142 update(_ref5) { 21143 let { 21144 viewport 21145 } = _ref5; 21146 const layer = this.div; 21147 this.viewport = viewport; 21148 (0, _display_utils.setLayerDimensions)(layer, { 21149 rotation: viewport.rotation 21150 }); 21151 this.#setAnnotationCanvasMap(); 21152 layer.hidden = false; 21153 } 21154 #setAnnotationCanvasMap() { 21155 if (!this.#annotationCanvasMap) { 21156 return; 21157 } 21158 const layer = this.div; 21159 for (const [id, canvas] of this.#annotationCanvasMap) { 21160 const element = layer.querySelector(`[data-annotation-id="${id}"]`); 21161 if (!element) { 21162 continue; 21163 } 21164 const { 21165 firstChild 21166 } = element; 21167 if (!firstChild) { 21168 element.append(canvas); 21169 } else if (firstChild.nodeName === "CANVAS") { 21170 firstChild.replaceWith(canvas); 21171 } else { 21172 firstChild.before(canvas); 21173 } 21174 } 21175 this.#annotationCanvasMap.clear(); 21176 } 21177 getEditableAnnotations() { 21178 return Array.from(this.#editableAnnotations.values()); 21179 } 21180 getEditableAnnotation(id) { 21181 return this.#editableAnnotations.get(id); 21182 } 21183} 21184exports.AnnotationLayer = AnnotationLayer; 21185 21186/***/ }), 21187/* 199 */ 21188/***/ ((__unused_webpack_module, exports) => { 21189 21190 21191 21192Object.defineProperty(exports, "__esModule", ({ 21193 value: true 21194})); 21195exports.ColorConverters = void 0; 21196function makeColorComp(n) { 21197 return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); 21198} 21199function scaleAndClamp(x) { 21200 return Math.max(0, Math.min(255, 255 * x)); 21201} 21202class ColorConverters { 21203 static CMYK_G(_ref) { 21204 let [c, y, m, k] = _ref; 21205 return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; 21206 } 21207 static G_CMYK(_ref2) { 21208 let [g] = _ref2; 21209 return ["CMYK", 0, 0, 0, 1 - g]; 21210 } 21211 static G_RGB(_ref3) { 21212 let [g] = _ref3; 21213 return ["RGB", g, g, g]; 21214 } 21215 static G_rgb(_ref4) { 21216 let [g] = _ref4; 21217 g = scaleAndClamp(g); 21218 return [g, g, g]; 21219 } 21220 static G_HTML(_ref5) { 21221 let [g] = _ref5; 21222 const G = makeColorComp(g); 21223 return `#${G}${G}${G}`; 21224 } 21225 static RGB_G(_ref6) { 21226 let [r, g, b] = _ref6; 21227 return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; 21228 } 21229 static RGB_rgb(color) { 21230 return color.map(scaleAndClamp); 21231 } 21232 static RGB_HTML(color) { 21233 return `#${color.map(makeColorComp).join("")}`; 21234 } 21235 static T_HTML() { 21236 return "#00000000"; 21237 } 21238 static T_rgb() { 21239 return [null]; 21240 } 21241 static CMYK_RGB(_ref7) { 21242 let [c, y, m, k] = _ref7; 21243 return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; 21244 } 21245 static CMYK_rgb(_ref8) { 21246 let [c, y, m, k] = _ref8; 21247 return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; 21248 } 21249 static CMYK_HTML(components) { 21250 const rgb = this.CMYK_RGB(components).slice(1); 21251 return this.RGB_HTML(rgb); 21252 } 21253 static RGB_CMYK(_ref9) { 21254 let [r, g, b] = _ref9; 21255 const c = 1 - r; 21256 const m = 1 - g; 21257 const y = 1 - b; 21258 const k = Math.min(c, m, y); 21259 return ["CMYK", c, m, y, k]; 21260 } 21261} 21262exports.ColorConverters = ColorConverters; 21263 21264/***/ }), 21265/* 200 */ 21266/***/ ((__unused_webpack_module, exports) => { 21267 21268 21269 21270Object.defineProperty(exports, "__esModule", ({ 21271 value: true 21272})); 21273exports.NullL10n = void 0; 21274exports.getL10nFallback = getL10nFallback; 21275const DEFAULT_L10N_STRINGS = { 21276 of_pages: "of {{pagesCount}}", 21277 page_of_pages: "({{pageNumber}} of {{pagesCount}})", 21278 document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)", 21279 document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)", 21280 document_properties_date_string: "{{date}}, {{time}}", 21281 document_properties_page_size_unit_inches: "in", 21282 document_properties_page_size_unit_millimeters: "mm", 21283 document_properties_page_size_orientation_portrait: "portrait", 21284 document_properties_page_size_orientation_landscape: "landscape", 21285 document_properties_page_size_name_a3: "A3", 21286 document_properties_page_size_name_a4: "A4", 21287 document_properties_page_size_name_letter: "Letter", 21288 document_properties_page_size_name_legal: "Legal", 21289 document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})", 21290 document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})", 21291 document_properties_linearized_yes: "Yes", 21292 document_properties_linearized_no: "No", 21293 additional_layers: "Additional Layers", 21294 page_landmark: "Page {{page}}", 21295 thumb_page_title: "Page {{page}}", 21296 thumb_page_canvas: "Thumbnail of Page {{page}}", 21297 find_reached_top: "Reached top of document, continued from bottom", 21298 find_reached_bottom: "Reached end of document, continued from top", 21299 "find_match_count[one]": "{{current}} of {{total}} match", 21300 "find_match_count[other]": "{{current}} of {{total}} matches", 21301 "find_match_count_limit[one]": "More than {{limit}} match", 21302 "find_match_count_limit[other]": "More than {{limit}} matches", 21303 find_not_found: "Phrase not found", 21304 page_scale_width: "Page Width", 21305 page_scale_fit: "Page Fit", 21306 page_scale_auto: "Automatic Zoom", 21307 page_scale_actual: "Actual Size", 21308 page_scale_percent: "{{scale}}%", 21309 loading_error: "An error occurred while loading the PDF.", 21310 invalid_file_error: "Invalid or corrupted PDF file.", 21311 missing_file_error: "Missing PDF file.", 21312 unexpected_response_error: "Unexpected server response.", 21313 rendering_error: "An error occurred while rendering the page.", 21314 annotation_date_string: "{{date}}, {{time}}", 21315 printing_not_supported: "Warning: Printing is not fully supported by this browser.", 21316 printing_not_ready: "Warning: The PDF is not fully loaded for printing.", 21317 web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.",
21318 free_text2_default_content: "Start typing…", 21319 editor_free_text2_aria_label: "Text Editor", 21320 editor_ink2_aria_label: "Draw Editor", 21321 editor_ink_canvas_aria_label: "User-created image", 21322 editor_alt_text_button_label: "Alt text", 21323 editor_alt_text_edit_button_label: "Edit alt text", 21324 editor_alt_text_decorative_tooltip: "Marked as decorative" 21325}; 21326{ 21327 DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%"; 21328} 21329function getL10nFallback(key, args) { 21330 switch (key) { 21331 case "find_match_count": 21332 key = `find_match_count[${args.total === 1 ? "one" : "other"}]`; 21333 break; 21334 case "find_match_count_limit": 21335 key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`; 21336 break; 21337 } 21338 return DEFAULT_L10N_STRINGS[key] || ""; 21339} 21340function formatL10nValue(text, args) { 21341 if (!args) { 21342 return text; 21343 } 21344 return text.replaceAll(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => { 21345 return name in args ? args[name] : "{{" + name + "}}"; 21346 }); 21347} 21348const NullL10n = { 21349 async getLanguage() { 21350 return "en-us"; 21351 }, 21352 async getDirection() { 21353 return "ltr"; 21354 }, 21355 async get(key) { 21356 let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 21357 let fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getL10nFallback(key, args); 21358 return formatL10nValue(fallback, args); 21359 }, 21360 async translate(element) {} 21361}; 21362exports.NullL10n = NullL10n; 21363 21364/***/ }), 21365/* 201 */ 21366/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 21367 21368 21369 21370Object.defineProperty(exports, "__esModule", ({ 21371 value: true 21372})); 21373exports.XfaLayer = void 0; 21374__w_pdfjs_require__(89); 21375var _xfa_text = __w_pdfjs_require__(194); 21376class XfaLayer { 21377 static setupStorage(html, id, element, storage, intent) { 21378 const storedData = storage.getValue(id, { 21379 value: null 21380 }); 21381 switch (element.name) { 21382 case "textarea": 21383 if (storedData.value !== null) { 21384 html.textContent = storedData.value; 21385 } 21386 if (intent === "print") { 21387 break; 21388 } 21389 html.addEventListener("input", event => { 21390 storage.setValue(id, { 21391 value: event.target.value 21392 }); 21393 }); 21394 break; 21395 case "input": 21396 if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { 21397 if (storedData.value === element.attributes.xfaOn) { 21398 html.setAttribute("checked", true); 21399 } else if (storedData.value === element.attributes.xfaOff) { 21400 html.removeAttribute("checked"); 21401 } 21402 if (intent === "print") { 21403 break; 21404 } 21405 html.addEventListener("change", event => { 21406 storage.setValue(id, { 21407 value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") 21408 }); 21409 }); 21410 } else { 21411 if (storedData.value !== null) { 21412 html.setAttribute("value", storedData.value); 21413 } 21414 if (intent === "print") { 21415 break; 21416 } 21417 html.addEventListener("input", event => { 21418 storage.setValue(id, { 21419 value: event.target.value 21420 }); 21421 }); 21422 } 21423 break; 21424 case "select": 21425 if (storedData.value !== null) { 21426 html.setAttribute("value", storedData.value); 21427 for (const option of element.children) { 21428 if (option.attributes.value === storedData.value) { 21429 option.attributes.selected = true; 21430 } else if (option.attributes.hasOwnProperty("selected")) { 21431 delete option.attributes.selected; 21432 } 21433 } 21434 } 21435 html.addEventListener("input", event => { 21436 const options = event.target.options; 21437 const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; 21438 storage.setValue(id, { 21439 value 21440 }); 21441 }); 21442 break; 21443 } 21444 } 21445 static setAttributes(_ref) { 21446 let { 21447 html, 21448 element, 21449 storage = null, 21450 intent, 21451 linkService 21452 } = _ref; 21453 const { 21454 attributes 21455 } = element; 21456 const isHTMLAnchorElement = html instanceof HTMLAnchorElement; 21457 if (attributes.type === "radio") { 21458 attributes.name = `${attributes.name}-${intent}`; 21459 } 21460 for (const [key, value] of Object.entries(attributes)) { 21461 if (value === null || value === undefined) { 21462 continue; 21463 } 21464 switch (key) { 21465 case "class": 21466 if (value.length) { 21467 html.setAttribute(key, value.join(" ")); 21468 } 21469 break; 21470 case "dataId": 21471 break; 21472 case "id": 21473 html.setAttribute("data-element-id", value); 21474 break; 21475 case "style": 21476 Object.assign(html.style, value); 21477 break; 21478 case "textContent": 21479 html.textContent = value; 21480 break; 21481 default: 21482 if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { 21483 html.setAttribute(key, value); 21484 } 21485 } 21486 } 21487 if (isHTMLAnchorElement) { 21488 linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); 21489 } 21490 if (storage && attributes.dataId) { 21491 this.setupStorage(html, attributes.dataId, element, storage); 21492 } 21493 } 21494 static render(parameters) { 21495 const storage = parameters.annotationStorage; 21496 const linkService = parameters.linkService; 21497 const root = parameters.xfaHtml; 21498 const intent = parameters.intent || "display"; 21499 const rootHtml = document.createElement(root.name); 21500 if (root.attributes) { 21501 this.setAttributes({ 21502 html: rootHtml, 21503 element: root, 21504 intent, 21505 linkService 21506 }); 21507 } 21508 const stack = [[root, -1, rootHtml]]; 21509 const rootDiv = parameters.div; 21510 rootDiv.append(rootHtml); 21511 if (parameters.viewport) { 21512 const transform = `matrix(${parameters.viewport.transform.join(",")})`; 21513 rootDiv.style.transform = transform; 21514 } 21515 if (intent !== "richText") { 21516 rootDiv.setAttribute("class", "xfaLayer xfaFont"); 21517 } 21518 const textDivs = []; 21519 while (stack.length > 0) { 21520 const [parent, i, html] = stack.at(-1); 21521 if (i + 1 === parent.children.length) { 21522 stack.pop(); 21523 continue; 21524 } 21525 const child = parent.children[++stack.at(-1)[1]]; 21526 if (child === null) { 21527 continue; 21528 } 21529 const { 21530 name 21531 } = child; 21532 if (name === "#text") { 21533 const node = document.createTextNode(child.value); 21534 textDivs.push(node); 21535 html.append(node); 21536 continue; 21537 } 21538 const childHtml = child?.attributes?.xmlns ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); 21539 html.append(childHtml); 21540 if (child.attributes) { 21541 this.setAttributes({ 21542 html: childHtml, 21543 element: child, 21544 storage, 21545 intent, 21546 linkService 21547 }); 21548 } 21549 if (child.children && child.children.length > 0) { 21550 stack.push([child, -1, childHtml]); 21551 } else if (child.value) { 21552 const node = document.createTextNode(child.value); 21553 if (_xfa_text.XfaText.shouldBuildText(name)) { 21554 textDivs.push(node); 21555 } 21556 childHtml.append(node); 21557 } 21558 } 21559 for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { 21560 el.setAttribute("readOnly", true); 21561 } 21562 return { 21563 textDivs 21564 }; 21565 } 21566 static update(parameters) { 21567 const transform = `matrix(${parameters.viewport.transform.join(",")})`; 21568 parameters.div.style.transform = transform; 21569 parameters.div.hidden = false;
21570 } 21571} 21572exports.XfaLayer = XfaLayer; 21573 21574/***/ }), 21575/* 202 */ 21576/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 21577 21578 21579 21580Object.defineProperty(exports, "__esModule", ({ 21581 value: true 21582})); 21583exports.InkEditor = void 0; 21584__w_pdfjs_require__(89); 21585__w_pdfjs_require__(2); 21586var _util = __w_pdfjs_require__(1); 21587var _editor = __w_pdfjs_require__(164); 21588var _annotation_layer = __w_pdfjs_require__(198); 21589var _display_utils = __w_pdfjs_require__(168); 21590var _tools = __w_pdfjs_require__(165); 21591class InkEditor extends _editor.AnnotationEditor { 21592 #baseHeight = 0; 21593 #baseWidth = 0; 21594 #boundCanvasPointermove = this.canvasPointermove.bind(this); 21595 #boundCanvasPointerleave = this.canvasPointerleave.bind(this); 21596 #boundCanvasPointerup = this.canvasPointerup.bind(this); 21597 #boundCanvasPointerdown = this.canvasPointerdown.bind(this); 21598 #currentPath2D = new Path2D(); 21599 #disableEditing = false; 21600 #hasSomethingToDraw = false; 21601 #isCanvasInitialized = false; 21602 #observer = null; 21603 #realWidth = 0; 21604 #realHeight = 0; 21605 #requestFrameCallback = null; 21606 static _defaultColor = null; 21607 static _defaultOpacity = 1; 21608 static _defaultThickness = 1; 21609 static _type = "ink"; 21610 constructor(params) { 21611 super({ 21612 ...params, 21613 name: "inkEditor" 21614 }); 21615 this.color = params.color || null; 21616 this.thickness = params.thickness || null; 21617 this.opacity = params.opacity || null; 21618 this.paths = []; 21619 this.bezierPath2D = []; 21620 this.allRawPaths = []; 21621 this.currentPath = []; 21622 this.scaleFactor = 1; 21623 this.translationX = this.translationY = 0; 21624 this.x = 0; 21625 this.y = 0; 21626 this._willKeepAspectRatio = true; 21627 } 21628 static initialize(l10n) { 21629 _editor.AnnotationEditor.initialize(l10n, { 21630 strings: ["editor_ink_canvas_aria_label", "editor_ink2_aria_label"] 21631 }); 21632 } 21633 static updateDefaultParams(type, value) { 21634 switch (type) { 21635 case _util.AnnotationEditorParamsType.INK_THICKNESS: 21636 InkEditor._defaultThickness = value; 21637 break; 21638 case _util.AnnotationEditorParamsType.INK_COLOR: 21639 InkEditor._defaultColor = value; 21640 break; 21641 case _util.AnnotationEditorParamsType.INK_OPACITY: 21642 InkEditor._defaultOpacity = value / 100; 21643 break; 21644 } 21645 } 21646 updateParams(type, value) { 21647 switch (type) { 21648 case _util.AnnotationEditorParamsType.INK_THICKNESS: 21649 this.#updateThickness(value); 21650 break; 21651 case _util.AnnotationEditorParamsType.INK_COLOR: 21652 this.#updateColor(value); 21653 break; 21654 case _util.AnnotationEditorParamsType.INK_OPACITY: 21655 this.#updateOpacity(value); 21656 break; 21657 } 21658 } 21659 static get defaultPropertiesToUpdate() { 21660 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)]]; 21661 } 21662 get propertiesToUpdate() { 21663 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))]]; 21664 } 21665 #updateThickness(thickness) { 21666 const savedThickness = this.thickness; 21667 this.addCommands({ 21668 cmd: () => { 21669 this.thickness = thickness; 21670 this.#fitToContent(); 21671 }, 21672 undo: () => { 21673 this.thickness = savedThickness; 21674 this.#fitToContent(); 21675 }, 21676 mustExec: true, 21677 type: _util.AnnotationEditorParamsType.INK_THICKNESS, 21678 overwriteIfSameType: true, 21679 keepUndo: true 21680 }); 21681 } 21682 #updateColor(color) { 21683 const savedColor = this.color; 21684 this.addCommands({ 21685 cmd: () => { 21686 this.color = color; 21687 this.#redraw(); 21688 }, 21689 undo: () => { 21690 this.color = savedColor; 21691 this.#redraw(); 21692 }, 21693 mustExec: true, 21694 type: _util.AnnotationEditorParamsType.INK_COLOR,
21695 overwriteIfSameType: true, 21696 keepUndo: true 21697 }); 21698 } 21699 #updateOpacity(opacity) { 21700 opacity /= 100; 21701 const savedOpacity = this.opacity; 21702 this.addCommands({ 21703 cmd: () => { 21704 this.opacity = opacity; 21705 this.#redraw(); 21706 }, 21707 undo: () => { 21708 this.opacity = savedOpacity; 21709 this.#redraw(); 21710 }, 21711 mustExec: true, 21712 type: _util.AnnotationEditorParamsType.INK_OPACITY, 21713 overwriteIfSameType: true, 21714 keepUndo: true 21715 }); 21716 } 21717 rebuild() { 21718 if (!this.parent) { 21719 return; 21720 } 21721 super.rebuild(); 21722 if (this.div === null) { 21723 return; 21724 } 21725 if (!this.canvas) { 21726 this.#createCanvas(); 21727 this.#createObserver(); 21728 } 21729 if (!this.isAttachedToDOM) { 21730 this.parent.add(this); 21731 this.#setCanvasDims(); 21732 } 21733 this.#fitToContent(); 21734 } 21735 remove() { 21736 if (this.canvas === null) { 21737 return; 21738 } 21739 if (!this.isEmpty()) { 21740 this.commit(); 21741 } 21742 this.canvas.width = this.canvas.height = 0; 21743 this.canvas.remove(); 21744 this.canvas = null; 21745 this.#observer.disconnect(); 21746 this.#observer = null; 21747 super.remove(); 21748 } 21749 setParent(parent) { 21750 if (!this.parent && parent) { 21751 this._uiManager.removeShouldRescale(this); 21752 } else if (this.parent && parent === null) { 21753 this._uiManager.addShouldRescale(this); 21754 } 21755 super.setParent(parent); 21756 } 21757 onScaleChanging() { 21758 const [parentWidth, parentHeight] = this.parentDimensions; 21759 const width = this.width * parentWidth; 21760 const height = this.height * parentHeight; 21761 this.setDimensions(width, height); 21762 } 21763 enableEditMode() { 21764 if (this.#disableEditing || this.canvas === null) { 21765 return; 21766 } 21767 super.enableEditMode(); 21768 this._isDraggable = false; 21769 this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); 21770 } 21771 disableEditMode() { 21772 if (!this.isInEditMode() || this.canvas === null) { 21773 return; 21774 } 21775 super.disableEditMode(); 21776 this._isDraggable = !this.isEmpty(); 21777 this.div.classList.remove("editing"); 21778 this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); 21779 } 21780 onceAdded() { 21781 this._isDraggable = !this.isEmpty(); 21782 } 21783 isEmpty() { 21784 return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; 21785 } 21786 #getInitialBBox() { 21787 const { 21788 parentRotation, 21789 parentDimensions: [width, height] 21790 } = this; 21791 switch (parentRotation) { 21792 case 90: 21793 return [0, height, height, width]; 21794 case 180: 21795 return [width, height, width, height]; 21796 case 270: 21797 return [width, 0, height, width]; 21798 default: 21799 return [0, 0, width, height]; 21800 } 21801 } 21802 #setStroke() { 21803 const { 21804 ctx, 21805 color, 21806 opacity, 21807 thickness, 21808 parentScale, 21809 scaleFactor 21810 } = this; 21811 ctx.lineWidth = thickness * parentScale / scaleFactor; 21812 ctx.lineCap = "round"; 21813 ctx.lineJoin = "round"; 21814 ctx.miterLimit = 10; 21815 ctx.strokeStyle = `${color}${(0, _tools.opacityToHex)(opacity)}`; 21816 } 21817 #startDrawing(x, y) { 21818 this.canvas.addEventListener("contextmenu", _display_utils.noContextMenu); 21819 this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); 21820 this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); 21821 this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); 21822 this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); 21823 this.isEditing = true; 21824 if (!this.#isCanvasInitialized) { 21825 this.#isCanvasInitialized = true; 21826 this.#setCanvasDims(); 21827 this.thickness ||= InkEditor._defaultThickness; 21828 this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; 21829 this.opacity ??= InkEditor._defaultOpacity; 21830 } 21831 this.currentPath.push([x, y]); 21832 this.#hasSomethingToDraw = false; 21833 this.#setStroke(); 21834 this.#requestFrameCallback = () => { 21835 this.#drawPoints(); 21836 if (this.#requestFrameCallback) { 21837 window.requestAnimationFrame(this.#requestFrameCallback); 21838 } 21839 }; 21840 window.requestAnimationFrame(this.#requestFrameCallback); 21841 } 21842 #draw(x, y) { 21843 const [lastX, lastY] = this.currentPath.at(-1); 21844 if (this.currentPath.length > 1 && x === lastX && y === lastY) { 21845 return; 21846 } 21847 const currentPath = this.currentPath; 21848 let path2D = this.#currentPath2D; 21849 currentPath.push([x, y]); 21850 this.#hasSomethingToDraw = true; 21851 if (currentPath.length <= 2) { 21852 path2D.moveTo(...currentPath[0]); 21853 path2D.lineTo(x, y); 21854 return; 21855 } 21856 if (currentPath.length === 3) { 21857 this.#currentPath2D = path2D = new Path2D(); 21858 path2D.moveTo(...currentPath[0]); 21859 } 21860 this.#makeBezierCurve(path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); 21861 } 21862 #endPath() { 21863 if (this.currentPath.length === 0) { 21864 return; 21865 } 21866 const lastPoint = this.currentPath.at(-1); 21867 this.#currentPath2D.lineTo(...lastPoint); 21868 } 21869 #stopDrawing(x, y) { 21870 this.#requestFrameCallback = null; 21871 x = Math.min(Math.max(x, 0), this.canvas.width); 21872 y = Math.min(Math.max(y, 0), this.canvas.height); 21873 this.#draw(x, y); 21874 this.#endPath(); 21875 let bezier; 21876 if (this.currentPath.length !== 1) { 21877 bezier = this.#generateBezierPoints(); 21878 } else { 21879 const xy = [x, y]; 21880 bezier = [[xy, xy.slice(), xy.slice(), xy]]; 21881 } 21882 const path2D = this.#currentPath2D; 21883 const currentPath = this.currentPath; 21884 this.currentPath = []; 21885 this.#currentPath2D = new Path2D(); 21886 const cmd = () => { 21887 this.allRawPaths.push(currentPath); 21888 this.paths.push(bezier); 21889 this.bezierPath2D.push(path2D); 21890 this.rebuild(); 21891 }; 21892 const undo = () => { 21893 this.allRawPaths.pop(); 21894 this.paths.pop(); 21895 this.bezierPath2D.pop(); 21896 if (this.paths.length === 0) { 21897 this.remove(); 21898 } else { 21899 if (!this.canvas) { 21900 this.#createCanvas(); 21901 this.#createObserver(); 21902 } 21903 this.#fitToContent(); 21904 } 21905 }; 21906 this.addCommands({ 21907 cmd, 21908 undo, 21909 mustExec: true 21910 }); 21911 } 21912 #drawPoints() { 21913 if (!this.#hasSomethingToDraw) { 21914 return; 21915 } 21916 this.#hasSomethingToDraw = false;
21917 const thickness = Math.ceil(this.thickness * this.parentScale); 21918 const lastPoints = this.currentPath.slice(-3); 21919 const x = lastPoints.map(xy => xy[0]); 21920 const y = lastPoints.map(xy => xy[1]); 21921 const xMin = Math.min(...x) - thickness; 21922 const xMax = Math.max(...x) + thickness; 21923 const yMin = Math.min(...y) - thickness; 21924 const yMax = Math.max(...y) + thickness; 21925 const { 21926 ctx 21927 } = this; 21928 ctx.save(); 21929 ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); 21930 for (const path of this.bezierPath2D) { 21931 ctx.stroke(path); 21932 } 21933 ctx.stroke(this.#currentPath2D); 21934 ctx.restore(); 21935 } 21936 #makeBezierCurve(path2D, x0, y0, x1, y1, x2, y2) { 21937 const prevX = (x0 + x1) / 2; 21938 const prevY = (y0 + y1) / 2; 21939 const x3 = (x1 + x2) / 2; 21940 const y3 = (y1 + y2) / 2; 21941 path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); 21942 } 21943 #generateBezierPoints() { 21944 const path = this.currentPath; 21945 if (path.length <= 2) { 21946 return [[path[0], path[0], path.at(-1), path.at(-1)]]; 21947 } 21948 const bezierPoints = []; 21949 let i; 21950 let [x0, y0] = path[0]; 21951 for (i = 1; i < path.length - 2; i++) { 21952 const [x1, y1] = path[i]; 21953 const [x2, y2] = path[i + 1]; 21954 const x3 = (x1 + x2) / 2; 21955 const y3 = (y1 + y2) / 2; 21956 const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; 21957 const control2 = [x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3]; 21958 bezierPoints.push([[x0, y0], control1, control2, [x3, y3]]); 21959 [x0, y0] = [x3, y3]; 21960 } 21961 const [x1, y1] = path[i]; 21962 const [x2, y2] = path[i + 1]; 21963 const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; 21964 const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; 21965 bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); 21966 return bezierPoints; 21967 } 21968 #redraw() { 21969 if (this.isEmpty()) { 21970 this.#updateTransform(); 21971 return; 21972 } 21973 this.#setStroke(); 21974 const { 21975 canvas, 21976 ctx 21977 } = this; 21978 ctx.setTransform(1, 0, 0, 1, 0, 0); 21979 ctx.clearRect(0, 0, canvas.width, canvas.height); 21980 this.#updateTransform(); 21981 for (const path of this.bezierPath2D) { 21982 ctx.stroke(path); 21983 } 21984 } 21985 commit() { 21986 if (this.#disableEditing) { 21987 return; 21988 } 21989 super.commit(); 21990 this.isEditing = false; 21991 this.disableEditMode(); 21992 this.setInForeground(); 21993 this.#disableEditing = true; 21994 this.div.classList.add("disabled"); 21995 this.#fitToContent(true); 21996 this.makeResizable(); 21997 this.parent.addInkEditorIfNeeded(true); 21998 this.moveInDOM(); 21999 this.div.focus({ 22000 preventScroll: true 22001 }); 22002 } 22003 focusin(event) { 22004 if (!this._focusEventsAllowed) { 22005 return; 22006 } 22007 super.focusin(event); 22008 this.enableEditMode(); 22009 } 22010 canvasPointerdown(event) { 22011 if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { 22012 return; 22013 } 22014 this.setInForeground(); 22015 event.preventDefault(); 22016 if (event.type !== "mouse") { 22017 this.div.focus(); 22018 } 22019 this.#startDrawing(event.offsetX, event.offsetY); 22020 } 22021 canvasPointermove(event) { 22022 event.preventDefault(); 22023 this.#draw(event.offsetX, event.offsetY); 22024 } 22025 canvasPointerup(event) { 22026 event.preventDefault(); 22027 this.#endDrawing(event); 22028 } 22029 canvasPointerleave(event) { 22030 this.#endDrawing(event); 22031 } 22032 #endDrawing(event) { 22033 this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); 22034 this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); 22035 this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); 22036 this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); 22037 setTimeout(() => { 22038 this.canvas.removeEventListener("contextmenu", _display_utils.noContextMenu); 22039 }, 10); 22040 this.#stopDrawing(event.offsetX, event.offsetY); 22041 this.addToAnnotationStorage(); 22042 this.setInBackground(); 22043 } 22044 #createCanvas() { 22045 this.canvas = document.createElement("canvas"); 22046 this.canvas.width = this.canvas.height = 0; 22047 this.canvas.className = "inkEditorCanvas"; 22048 _editor.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg)); 22049 this.div.append(this.canvas); 22050 this.ctx = this.canvas.getContext("2d"); 22051 } 22052 #createObserver() { 22053 this.#observer = new ResizeObserver(entries => {
22054 const rect = entries[0].contentRect; 22055 if (rect.width && rect.height) { 22056 this.setDimensions(rect.width, rect.height); 22057 } 22058 }); 22059 this.#observer.observe(this.div); 22060 } 22061 get isResizable() { 22062 return !this.isEmpty() && this.#disableEditing; 22063 } 22064 render() { 22065 if (this.div) { 22066 return this.div; 22067 } 22068 let baseX, baseY; 22069 if (this.width) { 22070 baseX = this.x; 22071 baseY = this.y; 22072 } 22073 super.render(); 22074 _editor.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(msg => this.div?.setAttribute("aria-label", msg)); 22075 const [x, y, w, h] = this.#getInitialBBox(); 22076 this.setAt(x, y, 0, 0); 22077 this.setDims(w, h); 22078 this.#createCanvas(); 22079 if (this.width) { 22080 const [parentWidth, parentHeight] = this.parentDimensions; 22081 this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); 22082 this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); 22083 this.#isCanvasInitialized = true; 22084 this.#setCanvasDims(); 22085 this.setDims(this.width * parentWidth, this.height * parentHeight); 22086 this.#redraw(); 22087 this.div.classList.add("disabled"); 22088 } else { 22089 this.div.classList.add("editing"); 22090 this.enableEditMode(); 22091 } 22092 this.#createObserver(); 22093 return this.div; 22094 } 22095 #setCanvasDims() { 22096 if (!this.#isCanvasInitialized) { 22097 return; 22098 } 22099 const [parentWidth, parentHeight] = this.parentDimensions; 22100 this.canvas.width = Math.ceil(this.width * parentWidth); 22101 this.canvas.height = Math.ceil(this.height * parentHeight); 22102 this.#updateTransform(); 22103 } 22104 setDimensions(width, height) { 22105 const roundedWidth = Math.round(width); 22106 const roundedHeight = Math.round(height); 22107 if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { 22108 return; 22109 } 22110 this.#realWidth = roundedWidth; 22111 this.#realHeight = roundedHeight; 22112 this.canvas.style.visibility = "hidden"; 22113 const [parentWidth, parentHeight] = this.parentDimensions; 22114 this.width = width / parentWidth; 22115 this.height = height / parentHeight; 22116 this.fixAndSetPosition(); 22117 if (this.#disableEditing) { 22118 this.#setScaleFactor(width, height); 22119 } 22120 this.#setCanvasDims(); 22121 this.#redraw(); 22122 this.canvas.style.visibility = "visible"; 22123 this.fixDims(); 22124 } 22125 #setScaleFactor(width, height) { 22126 const padding = this.#getPadding(); 22127 const scaleFactorW = (width - padding) / this.#baseWidth; 22128 const scaleFactorH = (height - padding) / this.#baseHeight; 22129 this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); 22130 } 22131 #updateTransform() { 22132 const padding = this.#getPadding() / 2; 22133 this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); 22134 } 22135 static #buildPath2D(bezier) { 22136 const path2D = new Path2D(); 22137 for (let i = 0, ii = bezier.length; i < ii; i++) { 22138 const [first, control1, control2, second] = bezier[i]; 22139 if (i === 0) { 22140 path2D.moveTo(...first); 22141 } 22142 path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); 22143 } 22144 return path2D; 22145 } 22146 static #toPDFCoordinates(points, rect, rotation) { 22147 const [blX, blY, trX, trY] = rect; 22148 switch (rotation) { 22149 case 0: 22150 for (let i = 0, ii = points.length; i < ii; i += 2) { 22151 points[i] += blX; 22152 points[i + 1] = trY - points[i + 1]; 22153 } 22154 break; 22155 case 90: 22156 for (let i = 0, ii = points.length; i < ii; i += 2) { 22157 const x = points[i]; 22158 points[i] = points[i + 1] + blX; 22159 points[i + 1] = x + blY; 22160 } 22161 break; 22162 case 180: 22163 for (let i = 0, ii = points.length; i < ii; i += 2) { 22164 points[i] = trX - points[i]; 22165 points[i + 1] += blY; 22166 } 22167 break; 22168 case 270: 22169 for (let i = 0, ii = points.length; i < ii; i += 2) { 22170 const x = points[i]; 22171 points[i] = trX - points[i + 1]; 22172 points[i + 1] = trY - x; 22173 } 22174 break; 22175 default: 22176 throw new Error("Invalid rotation"); 22177 } 22178 return points; 22179 } 22180 static #fromPDFCoordinates(points, rect, rotation) { 22181 const [blX, blY, trX, trY] = rect; 22182 switch (rotation) { 22183 case 0: 22184 for (let i = 0, ii = points.length; i < ii; i += 2) { 22185 points[i] -= blX; 22186 points[i + 1] = trY - points[i + 1]; 22187 } 22188 break; 22189 case 90: 22190 for (let i = 0, ii = points.length; i < ii; i += 2) { 22191 const x = points[i]; 22192 points[i] = points[i + 1] - blY; 22193 points[i + 1] = x - blX; 22194 } 22195 break; 22196 case 180: 22197 for (let i = 0, ii = points.length; i < ii; i += 2) { 22198 points[i] = trX - points[i]; 22199 points[i + 1] -= blY; 22200 } 22201 break; 22202 case 270: 22203 for (let i = 0, ii = points.length; i < ii; i += 2) { 22204 const x = points[i]; 22205 points[i] = trY - points[i + 1]; 22206 points[i + 1] = trX - x; 22207 } 22208 break; 22209 default: 22210 throw new Error("Invalid rotation"); 22211 } 22212 return points; 22213 } 22214 #serializePaths(s, tx, ty, rect) { 22215 const paths = []; 22216 const padding = this.thickness / 2; 22217 const shiftX = s * tx + padding; 22218 const shiftY = s * ty + padding; 22219 for (const bezier of this.paths) { 22220 const buffer = []; 22221 const points = []; 22222 for (let j = 0, jj = bezier.length; j < jj; j++) { 22223 const [first, control1, control2, second] = bezier[j]; 22224 const p10 = s * first[0] + shiftX; 22225 const p11 = s * first[1] + shiftY; 22226 const p20 = s * control1[0] + shiftX; 22227 const p21 = s * control1[1] + shiftY; 22228 const p30 = s * control2[0] + shiftX; 22229 const p31 = s * control2[1] + shiftY; 22230 const p40 = s * second[0] + shiftX; 22231 const p41 = s * second[1] + shiftY; 22232 if (j === 0) { 22233 buffer.push(p10, p11); 22234 points.push(p10, p11); 22235 } 22236 buffer.push(p20, p21, p30, p31, p40, p41); 22237 points.push(p20, p21); 22238 if (j === jj - 1) { 22239 points.push(p40, p41); 22240 } 22241 } 22242 paths.push({ 22243 bezier: InkEditor.#toPDFCoordinates(buffer, rect, this.rotation), 22244 points: InkEditor.#toPDFCoordinates(points, rect, this.rotation) 22245 }); 22246 } 22247 return paths; 22248 } 22249 #getBbox() { 22250 let xMin = Infinity; 22251 let xMax = -Infinity; 22252 let yMin = Infinity; 22253 let yMax = -Infinity; 22254 for (const path of this.paths) { 22255 for (const [first, control1, control2, second] of path) { 22256 const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); 22257 xMin = Math.min(xMin, bbox[0]); 22258 yMin = Math.min(yMin, bbox[1]); 22259 xMax = Math.max(xMax, bbox[2]); 22260 yMax = Math.max(yMax, bbox[3]); 22261 } 22262 } 22263 return [xMin, yMin, xMax, yMax]; 22264 } 22265 #getPadding() { 22266 return this.#disableEditing ? Math.ceil(this.thickness * this.parentScale) : 0; 22267 } 22268 #fitToContent() { 22269 let firstTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
22270 if (this.isEmpty()) { 22271 return; 22272 } 22273 if (!this.#disableEditing) { 22274 this.#redraw(); 22275 return; 22276 } 22277 const bbox = this.#getBbox(); 22278 const padding = this.#getPadding(); 22279 this.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); 22280 this.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); 22281 const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); 22282 const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); 22283 const [parentWidth, parentHeight] = this.parentDimensions; 22284 this.width = width / parentWidth; 22285 this.height = height / parentHeight; 22286 this.setAspectRatio(width, height); 22287 const prevTranslationX = this.translationX; 22288 const prevTranslationY = this.translationY; 22289 this.translationX = -bbox[0]; 22290 this.translationY = -bbox[1]; 22291 this.#setCanvasDims(); 22292 this.#redraw(); 22293 this.#realWidth = width; 22294 this.#realHeight = height; 22295 this.setDims(width, height); 22296 const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; 22297 this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); 22298 } 22299 static deserialize(data, parent, uiManager) { 22300 if (data instanceof _annotation_layer.InkAnnotationElement) { 22301 return null; 22302 } 22303 const editor = super.deserialize(data, parent, uiManager); 22304 editor.thickness = data.thickness; 22305 editor.color = _util.Util.makeHexColor(...data.color); 22306 editor.opacity = data.opacity; 22307 const [pageWidth, pageHeight] = editor.pageDimensions; 22308 const width = editor.width * pageWidth; 22309 const height = editor.height * pageHeight; 22310 const scaleFactor = editor.parentScale; 22311 const padding = data.thickness / 2; 22312 editor.#disableEditing = true; 22313 editor.#realWidth = Math.round(width); 22314 editor.#realHeight = Math.round(height); 22315 const { 22316 paths, 22317 rect, 22318 rotation 22319 } = data; 22320 for (let { 22321 bezier 22322 } of paths) { 22323 bezier = InkEditor.#fromPDFCoordinates(bezier, rect, rotation); 22324 const path = []; 22325 editor.paths.push(path); 22326 let p0 = scaleFactor * (bezier[0] - padding); 22327 let p1 = scaleFactor * (bezier[1] - padding); 22328 for (let i = 2, ii = bezier.length; i < ii; i += 6) { 22329 const p10 = scaleFactor * (bezier[i] - padding); 22330 const p11 = scaleFactor * (bezier[i + 1] - padding); 22331 const p20 = scaleFactor * (bezier[i + 2] - padding); 22332 const p21 = scaleFactor * (bezier[i + 3] - padding); 22333 const p30 = scaleFactor * (bezier[i + 4] - padding); 22334 const p31 = scaleFactor * (bezier[i + 5] - padding); 22335 path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); 22336 p0 = p30; 22337 p1 = p31; 22338 } 22339 const path2D = this.#buildPath2D(path); 22340 editor.bezierPath2D.push(path2D); 22341 } 22342 const bbox = editor.#getBbox(); 22343 editor.#baseWidth = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0]); 22344 editor.#baseHeight = Math.max(_editor.AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1]); 22345 editor.#setScaleFactor(width, height); 22346 return editor; 22347 } 22348 serialize() { 22349 if (this.isEmpty()) { 22350 return null; 22351 } 22352 const rect = this.getRect(0, 0); 22353 const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); 22354 return { 22355 annotationType: _util.AnnotationEditorType.INK, 22356 color, 22357 thickness: this.thickness, 22358 opacity: this.opacity, 22359 paths: this.#serializePaths(this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), 22360 pageIndex: this.pageIndex, 22361 rect, 22362 rotation: this.rotation, 22363 structTreeParentId: this._structTreeParentId 22364 }; 22365 } 22366} 22367exports.InkEditor = InkEditor; 22368 22369/***/ }), 22370/* 203 */ 22371/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { 22372 22373 22374 22375Object.defineProperty(exports, "__esModule", ({ 22376 value: true 22377})); 22378exports.StampEditor = void 0; 22379__w_pdfjs_require__(149); 22380__w_pdfjs_require__(152); 22381var _util = __w_pdfjs_require__(1); 22382var _editor = __w_pdfjs_require__(164); 22383var _display_utils = __w_pdfjs_require__(168); 22384var _annotation_layer = __w_pdfjs_require__(198); 22385class StampEditor extends _editor.AnnotationEditor { 22386 #bitmap = null; 22387 #bitmapId = null; 22388 #bitmapPromise = null; 22389 #bitmapUrl = null; 22390 #bitmapFile = null; 22391 #canvas = null; 22392 #observer = null; 22393 #resizeTimeoutId = null; 22394 #isSvg = false;
22395 #hasBeenAddedInUndoStack = false; 22396 static _type = "stamp"; 22397 constructor(params) { 22398 super({ 22399 ...params, 22400 name: "stampEditor" 22401 }); 22402 this.#bitmapUrl = params.bitmapUrl; 22403 this.#bitmapFile = params.bitmapFile; 22404 } 22405 static initialize(l10n) { 22406 _editor.AnnotationEditor.initialize(l10n); 22407 } 22408 static get supportedTypes() { 22409 const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; 22410 return (0, _util.shadow)(this, "supportedTypes", types.map(type => `image/${type}`)); 22411 } 22412 static get supportedTypesStr() { 22413 return (0, _util.shadow)(this, "supportedTypesStr", this.supportedTypes.join(",")); 22414 } 22415 static isHandlingMimeForPasting(mime) { 22416 return this.supportedTypes.includes(mime); 22417 } 22418 static paste(item, parent) { 22419 parent.pasteEditor(_util.AnnotationEditorType.STAMP, { 22420 bitmapFile: item.getAsFile() 22421 }); 22422 } 22423 #getBitmapFetched(data) { 22424 let fromId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 22425 if (!data) { 22426 this.remove(); 22427 return; 22428 } 22429 this.#bitmap = data.bitmap; 22430 if (!fromId) { 22431 this.#bitmapId = data.id; 22432 this.#isSvg = data.isSvg; 22433 } 22434 this.#createCanvas(); 22435 } 22436 #getBitmapDone() { 22437 this.#bitmapPromise = null; 22438 this._uiManager.enableWaiting(false); 22439 if (this.#canvas) { 22440 this.div.focus(); 22441 } 22442 } 22443 #getBitmap() { 22444 if (this.#bitmapId) { 22445 this._uiManager.enableWaiting(true); 22446 this._uiManager.imageManager.getFromId(this.#bitmapId).then(data => this.#getBitmapFetched(data, true)).finally(() => this.#getBitmapDone()); 22447 return; 22448 } 22449 if (this.#bitmapUrl) { 22450 const url = this.#bitmapUrl; 22451 this.#bitmapUrl = null; 22452 this._uiManager.enableWaiting(true); 22453 this.#bitmapPromise = this._uiManager.imageManager.getFromUrl(url).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); 22454 return; 22455 } 22456 if (this.#bitmapFile) { 22457 const file = this.#bitmapFile; 22458 this.#bitmapFile = null; 22459 this._uiManager.enableWaiting(true); 22460 this.#bitmapPromise = this._uiManager.imageManager.getFromFile(file).then(data => this.#getBitmapFetched(data)).finally(() => this.#getBitmapDone()); 22461 return; 22462 } 22463 const input = document.createElement("input"); 22464 input.type = "file"; 22465 input.accept = StampEditor.supportedTypesStr; 22466 this.#bitmapPromise = new Promise(resolve => { 22467 input.addEventListener("change", async () => { 22468 if (!input.files || input.files.length === 0) { 22469 this.remove(); 22470 } else { 22471 this._uiManager.enableWaiting(true); 22472 const data = await this._uiManager.imageManager.getFromFile(input.files[0]); 22473 this.#getBitmapFetched(data); 22474 } 22475 resolve(); 22476 }); 22477 input.addEventListener("cancel", () => { 22478 this.remove(); 22479 resolve(); 22480 }); 22481 }).finally(() => this.#getBitmapDone()); 22482 input.click(); 22483 } 22484 remove() { 22485 if (this.#bitmapId) { 22486 this.#bitmap = null; 22487 this._uiManager.imageManager.deleteId(this.#bitmapId); 22488 this.#canvas?.remove(); 22489 this.#canvas = null; 22490 this.#observer?.disconnect(); 22491 this.#observer = null; 22492 } 22493 super.remove(); 22494 } 22495 rebuild() { 22496 if (!this.parent) { 22497 if (this.#bitmapId) { 22498 this.#getBitmap(); 22499 } 22500 return; 22501 } 22502 super.rebuild(); 22503 if (this.div === null) { 22504 return; 22505 } 22506 if (this.#bitmapId) { 22507 this.#getBitmap(); 22508 } 22509 if (!this.isAttachedToDOM) { 22510 this.parent.add(this); 22511 } 22512 } 22513 onceAdded() { 22514 this._isDraggable = true; 22515 this.div.focus(); 22516 } 22517 isEmpty() { 22518 return !(this.#bitmapPromise || this.#bitmap || this.#bitmapUrl || this.#bitmapFile); 22519 } 22520 get isResizable() { 22521 return true; 22522 } 22523 render() { 22524 if (this.div) { 22525 return this.div; 22526 } 22527 let baseX, baseY; 22528 if (this.width) { 22529 baseX = this.x; 22530 baseY = this.y; 22531 } 22532 super.render(); 22533 this.div.hidden = true; 22534 if (this.#bitmap) { 22535 this.#createCanvas(); 22536 } else { 22537 this.#getBitmap(); 22538 } 22539 if (this.width) { 22540 const [parentWidth, parentHeight] = this.parentDimensions; 22541 this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); 22542 } 22543 return this.div; 22544 } 22545 #createCanvas() { 22546 const { 22547 div 22548 } = this; 22549 let { 22550 width, 22551 height 22552 } = this.#bitmap; 22553 const [pageWidth, pageHeight] = this.pageDimensions; 22554 const MAX_RATIO = 0.75; 22555 if (this.width) { 22556 width = this.width * pageWidth; 22557 height = this.height * pageHeight; 22558 } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { 22559 const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); 22560 width *= factor; 22561 height *= factor; 22562 } 22563 const [parentWidth, parentHeight] = this.parentDimensions; 22564 this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); 22565 this._uiManager.enableWaiting(false); 22566 const canvas = this.#canvas = document.createElement("canvas"); 22567 div.append(canvas); 22568 div.hidden = false;
22569 this.#drawBitmap(width, height); 22570 this.#createObserver(); 22571 if (!this.#hasBeenAddedInUndoStack) { 22572 this.parent.addUndoableEditor(this); 22573 this.#hasBeenAddedInUndoStack = true; 22574 } 22575 this._uiManager._eventBus.dispatch("reporttelemetry", { 22576 source: this, 22577 details: { 22578 type: "editing", 22579 subtype: this.editorType, 22580 data: { 22581 action: "inserted_image" 22582 } 22583 } 22584 }); 22585 this.addAltTextButton(); 22586 } 22587 #setDimensions(width, height) { 22588 const [parentWidth, parentHeight] = this.parentDimensions; 22589 this.width = width / parentWidth; 22590 this.height = height / parentHeight; 22591 this.setDims(width, height); 22592 if (this._initialOptions?.isCentered) { 22593 this.center(); 22594 } else { 22595 this.fixAndSetPosition(); 22596 } 22597 this._initialOptions = null; 22598 if (this.#resizeTimeoutId !== null) { 22599 clearTimeout(this.#resizeTimeoutId); 22600 } 22601 const TIME_TO_WAIT = 200; 22602 this.#resizeTimeoutId = setTimeout(() => { 22603 this.#resizeTimeoutId = null; 22604 this.#drawBitmap(width, height); 22605 }, TIME_TO_WAIT); 22606 } 22607 #scaleBitmap(width, height) { 22608 const { 22609 width: bitmapWidth, 22610 height: bitmapHeight 22611 } = this.#bitmap; 22612 let newWidth = bitmapWidth; 22613 let newHeight = bitmapHeight; 22614 let bitmap = this.#bitmap; 22615 while (newWidth > 2 * width || newHeight > 2 * height) { 22616 const prevWidth = newWidth; 22617 const prevHeight = newHeight; 22618 if (newWidth > 2 * width) { 22619 newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); 22620 } 22621 if (newHeight > 2 * height) { 22622 newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); 22623 } 22624 const offscreen = new OffscreenCanvas(newWidth, newHeight); 22625 const ctx = offscreen.getContext("2d"); 22626 ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); 22627 bitmap = offscreen.transferToImageBitmap(); 22628 } 22629 return bitmap; 22630 } 22631 #drawBitmap(width, height) { 22632 width = Math.ceil(width); 22633 height = Math.ceil(height); 22634 const canvas = this.#canvas; 22635 if (!canvas || canvas.width === width && canvas.height === height) { 22636 return; 22637 } 22638 canvas.width = width; 22639 canvas.height = height; 22640 const bitmap = this.#isSvg ? this.#bitmap : this.#scaleBitmap(width, height); 22641 const ctx = canvas.getContext("2d"); 22642 ctx.filter = this._uiManager.hcmFilter; 22643 ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); 22644 } 22645 #serializeBitmap(toUrl) { 22646 if (toUrl) { 22647 if (this.#isSvg) { 22648 const url = this._uiManager.imageManager.getSvgUrl(this.#bitmapId); 22649 if (url) { 22650 return url; 22651 } 22652 } 22653 const canvas = document.createElement("canvas"); 22654 ({ 22655 width: canvas.width, 22656 height: canvas.height 22657 } = this.#bitmap); 22658 const ctx = canvas.getContext("2d"); 22659 ctx.drawImage(this.#bitmap, 0, 0); 22660 return canvas.toDataURL(); 22661 } 22662 if (this.#isSvg) { 22663 const [pageWidth, pageHeight] = this.pageDimensions; 22664 const width = Math.round(this.width * pageWidth * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); 22665 const height = Math.round(this.height * pageHeight * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); 22666 const offscreen = new OffscreenCanvas(width, height); 22667 const ctx = offscreen.getContext("2d"); 22668 ctx.drawImage(this.#bitmap, 0, 0, this.#bitmap.width, this.#bitmap.height, 0, 0, width, height); 22669 return offscreen.transferToImageBitmap(); 22670 } 22671 return structuredClone(this.#bitmap); 22672 } 22673 #createObserver() { 22674 this.#observer = new ResizeObserver(entries => { 22675 const rect = entries[0].contentRect; 22676 if (rect.width && rect.height) { 22677 this.#setDimensions(rect.width, rect.height); 22678 } 22679 }); 22680 this.#observer.observe(this.div); 22681 } 22682 static deserialize(data, parent, uiManager) { 22683 if (data instanceof _annotation_layer.StampAnnotationElement) { 22684 return null; 22685 } 22686 const editor = super.deserialize(data, parent, uiManager); 22687 const { 22688 rect, 22689 bitmapUrl, 22690 bitmapId, 22691 isSvg, 22692 accessibilityData 22693 } = data; 22694 if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { 22695 editor.#bitmapId = bitmapId; 22696 } else { 22697 editor.#bitmapUrl = bitmapUrl; 22698 } 22699 editor.#isSvg = isSvg; 22700 const [parentWidth, parentHeight] = editor.pageDimensions; 22701 editor.width = (rect[2] - rect[0]) / parentWidth; 22702 editor.height = (rect[3] - rect[1]) / parentHeight; 22703 if (accessibilityData) { 22704 editor.altTextData = accessibilityData; 22705 } 22706 return editor; 22707 } 22708 serialize() { 22709 let isForCopying = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
22710 let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 22711 if (this.isEmpty()) { 22712 return null; 22713 } 22714 const serialized = { 22715 annotationType: _util.AnnotationEditorType.STAMP, 22716 bitmapId: this.#bitmapId, 22717 pageIndex: this.pageIndex, 22718 rect: this.getRect(0, 0), 22719 rotation: this.rotation, 22720 isSvg: this.#isSvg, 22721 structTreeParentId: this._structTreeParentId 22722 }; 22723 if (isForCopying) { 22724 serialized.bitmapUrl = this.#serializeBitmap(true); 22725 serialized.accessibilityData = this.altTextData; 22726 return serialized; 22727 } 22728 const { 22729 decorative, 22730 altText 22731 } = this.altTextData; 22732 if (!decorative && altText) { 22733 serialized.accessibilityData = { 22734 type: "Figure", 22735 alt: altText 22736 }; 22737 } 22738 if (context === null) { 22739 return serialized; 22740 } 22741 context.stamps ||= new Map(); 22742 const area = this.#isSvg ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; 22743 if (!context.stamps.has(this.#bitmapId)) { 22744 context.stamps.set(this.#bitmapId, { 22745 area, 22746 serialized 22747 }); 22748 serialized.bitmap = this.#serializeBitmap(false); 22749 } else if (this.#isSvg) { 22750 const prevData = context.stamps.get(this.#bitmapId); 22751 if (area > prevData.area) { 22752 prevData.area = area; 22753 prevData.serialized.bitmap.close(); 22754 prevData.serialized.bitmap = this.#serializeBitmap(false); 22755 } 22756 } 22757 return serialized; 22758 } 22759} 22760exports.StampEditor = StampEditor; 22761 22762/***/ }) 22763/******/ ]); 22764 22765 22766/************************************************************************/ 22767/******/ // The module cache 22768/******/ var __webpack_module_cache__ = {}; 22769/******/ 22770/******/ // The require function 22771/******/ function __w_pdfjs_require__(moduleId) { 22772/******/ // Check if module is in cache 22773/******/ var cachedModule = __webpack_module_cache__[moduleId]; 22774/******/ if (cachedModule !== undefined) { 22775/******/ return cachedModule.exports; 22776/******/ } 22777/******/ // Create a new module (and put it into the cache) 22778/******/ var module = __webpack_module_cache__[moduleId] = { 22779/******/ // no module.id needed 22780/******/ // no module.loaded needed 22781/******/ exports: {} 22782/******/ }; 22783/******/ 22784/******/ // Execute the module function 22785/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__); 22786/******/ 22787/******/ // Return the exports of the module 22788/******/ return module.exports; 22789/******/ } 22790/******/ 22791/************************************************************************/ 22792var __webpack_exports__ = {}; 22793// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 22794(() => { 22795var exports = __webpack_exports__; 22796 22797 22798Object.defineProperty(exports, "__esModule", ({ 22799 value: true 22800})); 22801Object.defineProperty(exports, "AbortException", ({ 22802 enumerable: true, 22803 get: function () { 22804 return _util.AbortException; 22805 } 22806})); 22807Object.defineProperty(exports, "AnnotationEditorLayer", ({ 22808 enumerable: true, 22809 get: function () { 22810 return _annotation_editor_layer.AnnotationEditorLayer; 22811 } 22812})); 22813Object.defineProperty(exports, "AnnotationEditorParamsType", ({ 22814 enumerable: true, 22815 get: function () { 22816 return _util.AnnotationEditorParamsType; 22817 } 22818})); 22819Object.defineProperty(exports, "AnnotationEditorType", ({ 22820 enumerable: true, 22821 get: function () { 22822 return _util.AnnotationEditorType; 22823 } 22824})); 22825Object.defineProperty(exports, "AnnotationEditorUIManager", ({ 22826 enumerable: true, 22827 get: function () { 22828 return _tools.AnnotationEditorUIManager; 22829 } 22830})); 22831Object.defineProperty(exports, "AnnotationLayer", ({ 22832 enumerable: true, 22833 get: function () { 22834 return _annotation_layer.AnnotationLayer; 22835 } 22836})); 22837Object.defineProperty(exports, "AnnotationMode", ({ 22838 enumerable: true, 22839 get: function () { 22840 return _util.AnnotationMode; 22841 } 22842})); 22843Object.defineProperty(exports, "CMapCompressionType", ({ 22844 enumerable: true, 22845 get: function () { 22846 return _util.CMapCompressionType; 22847 } 22848})); 22849Object.defineProperty(exports, "DOMSVGFactory", ({ 22850 enumerable: true, 22851 get: function () { 22852 return _display_utils.DOMSVGFactory; 22853 } 22854})); 22855Object.defineProperty(exports, "FeatureTest", ({ 22856 enumerable: true, 22857 get: function () { 22858 return _util.FeatureTest; 22859 } 22860})); 22861Object.defineProperty(exports, "GlobalWorkerOptions", ({ 22862 enumerable: true, 22863 get: function () { 22864 return _worker_options.GlobalWorkerOptions; 22865 } 22866})); 22867Object.defineProperty(exports, "ImageKind", ({ 22868 enumerable: true, 22869 get: function () { 22870 return _util.ImageKind; 22871 } 22872})); 22873Object.defineProperty(exports, "InvalidPDFException", ({ 22874 enumerable: true, 22875 get: function () { 22876 return _util.InvalidPDFException; 22877 } 22878})); 22879Object.defineProperty(exports, "MissingPDFException", ({ 22880 enumerable: true, 22881 get: function () { 22882 return _util.MissingPDFException; 22883 } 22884})); 22885Object.defineProperty(exports, "OPS", ({ 22886 enumerable: true, 22887 get: function () { 22888 return _util.OPS; 22889 } 22890})); 22891Object.defineProperty(exports, "PDFDataRangeTransport", ({ 22892 enumerable: true, 22893 get: function () { 22894 return _api.PDFDataRangeTransport; 22895 } 22896})); 22897Object.defineProperty(exports, "PDFDateString", ({ 22898 enumerable: true, 22899 get: function () { 22900 return _display_utils.PDFDateString; 22901 } 22902})); 22903Object.defineProperty(exports, "PDFWorker", ({ 22904 enumerable: true, 22905 get: function () { 22906 return _api.PDFWorker; 22907 } 22908})); 22909Object.defineProperty(exports, "PasswordResponses", ({ 22910 enumerable: true, 22911 get: function () { 22912 return _util.PasswordResponses; 22913 } 22914})); 22915Object.defineProperty(exports, "PermissionFlag", ({ 22916 enumerable: true, 22917 get: function () { 22918 return _util.PermissionFlag; 22919 } 22920})); 22921Object.defineProperty(exports, "PixelsPerInch", ({ 22922 enumerable: true, 22923 get: function () { 22924 return _display_utils.PixelsPerInch; 22925 } 22926})); 22927Object.defineProperty(exports, "PromiseCapability", ({ 22928 enumerable: true, 22929 get: function () { 22930 return _util.PromiseCapability; 22931 } 22932})); 22933Object.defineProperty(exports, "RenderingCancelledException", ({ 22934 enumerable: true, 22935 get: function () { 22936 return _display_utils.RenderingCancelledException; 22937 } 22938})); 22939Object.defineProperty(exports, "SVGGraphics", ({ 22940 enumerable: true, 22941 get: function () { 22942 return _api.SVGGraphics; 22943 } 22944})); 22945Object.defineProperty(exports, "UnexpectedResponseException", ({ 22946 enumerable: true, 22947 get: function () { 22948 return _util.UnexpectedResponseException; 22949 } 22950})); 22951Object.defineProperty(exports, "Util", ({ 22952 enumerable: true, 22953 get: function () { 22954 return _util.Util; 22955 } 22956})); 22957Object.defineProperty(exports, "VerbosityLevel", ({ 22958 enumerable: true, 22959 get: function () { 22960 return _util.VerbosityLevel; 22961 } 22962})); 22963Object.defineProperty(exports, "XfaLayer", ({ 22964 enumerable: true, 22965 get: function () { 22966 return _xfa_layer.XfaLayer; 22967 } 22968}));
22969Object.defineProperty(exports, "build", ({ 22970 enumerable: true, 22971 get: function () { 22972 return _api.build; 22973 } 22974})); 22975Object.defineProperty(exports, "createValidAbsoluteUrl", ({ 22976 enumerable: true, 22977 get: function () { 22978 return _util.createValidAbsoluteUrl; 22979 } 22980})); 22981Object.defineProperty(exports, "getDocument", ({ 22982 enumerable: true, 22983 get: function () { 22984 return _api.getDocument; 22985 } 22986})); 22987Object.defineProperty(exports, "getFilenameFromUrl", ({ 22988 enumerable: true, 22989 get: function () { 22990 return _display_utils.getFilenameFromUrl; 22991 } 22992})); 22993Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ 22994 enumerable: true, 22995 get: function () { 22996 return _display_utils.getPdfFilenameFromUrl; 22997 } 22998})); 22999Object.defineProperty(exports, "getXfaPageViewport", ({ 23000 enumerable: true, 23001 get: function () { 23002 return _display_utils.getXfaPageViewport; 23003 } 23004})); 23005Object.defineProperty(exports, "isDataScheme", ({ 23006 enumerable: true, 23007 get: function () { 23008 return _display_utils.isDataScheme; 23009 } 23010})); 23011Object.defineProperty(exports, "isPdfFile", ({ 23012 enumerable: true, 23013 get: function () { 23014 return _display_utils.isPdfFile; 23015 } 23016})); 23017Object.defineProperty(exports, "loadScript", ({ 23018 enumerable: true, 23019 get: function () { 23020 return _display_utils.loadScript; 23021 } 23022})); 23023Object.defineProperty(exports, "noContextMenu", ({ 23024 enumerable: true, 23025 get: function () { 23026 return _display_utils.noContextMenu; 23027 } 23028})); 23029Object.defineProperty(exports, "normalizeUnicode", ({ 23030 enumerable: true, 23031 get: function () { 23032 return _util.normalizeUnicode; 23033 } 23034})); 23035Object.defineProperty(exports, "renderTextLayer", ({ 23036 enumerable: true, 23037 get: function () { 23038 return _text_layer.renderTextLayer; 23039 } 23040})); 23041Object.defineProperty(exports, "setLayerDimensions", ({ 23042 enumerable: true, 23043 get: function () { 23044 return _display_utils.setLayerDimensions; 23045 } 23046})); 23047Object.defineProperty(exports, "shadow", ({ 23048 enumerable: true, 23049 get: function () { 23050 return _util.shadow; 23051 } 23052})); 23053Object.defineProperty(exports, "updateTextLayer", ({ 23054 enumerable: true, 23055 get: function () { 23056 return _text_layer.updateTextLayer; 23057 } 23058})); 23059Object.defineProperty(exports, "version", ({ 23060 enumerable: true, 23061 get: function () { 23062 return _api.version; 23063 } 23064})); 23065var _util = __w_pdfjs_require__(1); 23066var _api = __w_pdfjs_require__(124); 23067var _display_utils = __w_pdfjs_require__(168); 23068var _text_layer = __w_pdfjs_require__(195); 23069var _annotation_editor_layer = __w_pdfjs_require__(196); 23070var _tools = __w_pdfjs_require__(165); 23071var _annotation_layer = __w_pdfjs_require__(198); 23072var _worker_options = __w_pdfjs_require__(176); 23073var _xfa_layer = __w_pdfjs_require__(201); 23074const pdfjsVersion = '3.11.174'; 23075const pdfjsBuild = 'ce8716743'; 23076})(); 23077 23078/******/ return __webpack_exports__; 23079/******/ })() 23080; 23081}); 23082//# sourceMappingURL=pdf.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.