pdfjs-dist 2.0.943 → 2.4.456
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8286 -14230
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +25500 -26628
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +2887 -4094
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +855 -778
- package/lib/core/arithmetic_decoder.js +325 -311
- package/lib/core/bidi.js +117 -50
- package/lib/core/ccitt.js +251 -89
- package/lib/core/ccitt_stream.js +26 -16
- package/lib/core/cff_parser.js +525 -197
- package/lib/core/charsets.js +6 -5
- package/lib/core/chunked_stream.js +541 -406
- package/lib/core/cmap.js +368 -253
- package/lib/core/colorspace.js +781 -800
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +609 -422
- package/lib/core/document.js +649 -481
- package/lib/core/encodings.js +33 -24
- package/lib/core/evaluator.js +1471 -736
- package/lib/core/font_renderer.js +289 -149
- package/lib/core/fonts.js +1067 -413
- package/lib/core/function.js +517 -287
- package/lib/core/glyphlist.js +4529 -4527
- package/lib/core/image.js +232 -114
- package/lib/core/image_utils.js +94 -0
- package/lib/core/jbig2.js +711 -342
- package/lib/core/jbig2_stream.js +31 -19
- package/lib/core/jpeg_stream.js +151 -26
- package/lib/core/jpg.js +433 -181
- package/lib/core/jpx.js +551 -143
- package/lib/core/jpx_stream.js +40 -28
- package/lib/core/metrics.js +2931 -2931
- package/lib/core/murmurhash3.js +104 -97
- package/lib/core/obj.js +1561 -1053
- package/lib/core/operator_list.js +192 -64
- package/lib/core/parser.js +1162 -864
- package/lib/core/pattern.js +224 -75
- package/lib/core/pdf_manager.js +154 -285
- package/lib/core/primitives.js +145 -69
- package/lib/core/ps_parser.js +212 -162
- package/lib/core/standard_fonts.js +245 -244
- package/lib/core/stream.js +353 -81
- package/lib/core/type1_parser.js +218 -68
- package/lib/core/unicode.js +1682 -1655
- package/lib/core/worker.js +233 -302
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +808 -862
- package/lib/display/api.js +1778 -1462
- package/lib/display/api_compatibility.js +14 -9
- package/lib/display/canvas.js +463 -140
- package/lib/display/content_disposition.js +86 -58
- package/lib/display/display_utils.js +524 -0
- package/lib/display/fetch_stream.js +202 -274
- package/lib/display/font_loader.js +311 -333
- package/lib/display/metadata.js +98 -88
- package/lib/display/network.js +343 -347
- package/lib/display/network_utils.js +46 -26
- package/lib/display/node_stream.js +326 -404
- package/lib/display/pattern_helper.js +168 -69
- package/lib/display/svg.js +1296 -885
- package/lib/display/text_layer.js +229 -103
- package/lib/display/transport_stream.js +290 -250
- package/lib/display/webgl.js +116 -83
- package/lib/display/worker_options.js +6 -5
- package/lib/display/xml_parser.js +358 -337
- package/lib/examples/node/domstubs.js +95 -39
- package/lib/pdf.js +49 -31
- package/lib/pdf.worker.js +7 -5
- package/lib/shared/compatibility.js +3 -145
- package/lib/shared/is_node.js +8 -7
- package/lib/shared/message_handler.js +367 -314
- package/lib/shared/util.js +421 -415
- package/lib/test/unit/annotation_spec.js +1570 -690
- package/lib/test/unit/api_spec.js +855 -493
- package/lib/test/unit/bidi_spec.js +12 -12
- package/lib/test/unit/cff_parser_spec.js +88 -61
- package/lib/test/unit/clitests_helper.js +9 -12
- package/lib/test/unit/cmap_spec.js +140 -88
- package/lib/test/unit/colorspace_spec.js +204 -152
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +194 -182
- package/lib/test/unit/custom_spec.js +50 -64
- package/lib/test/unit/display_svg_spec.js +53 -38
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +17 -22
- package/lib/test/unit/encodings_spec.js +15 -57
- package/lib/test/unit/evaluator_spec.js +90 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +219 -205
- package/lib/test/unit/jasmine-boot.js +68 -39
- package/lib/test/unit/message_handler_spec.js +187 -160
- package/lib/test/unit/metadata_spec.js +87 -34
- package/lib/test/unit/murmurhash3_spec.js +13 -13
- package/lib/test/unit/network_spec.js +26 -59
- package/lib/test/unit/network_utils_spec.js +187 -121
- package/lib/test/unit/node_stream_spec.js +98 -90
- package/lib/test/unit/parser_spec.js +173 -131
- package/lib/test/unit/pdf_find_controller_spec.js +148 -67
- package/lib/test/unit/pdf_find_utils_spec.js +35 -34
- package/lib/test/unit/pdf_history_spec.js +45 -33
- package/lib/test/unit/primitives_spec.js +161 -126
- package/lib/test/unit/stream_spec.js +22 -15
- package/lib/test/unit/test_utils.js +149 -98
- package/lib/test/unit/testreporter.js +36 -18
- package/lib/test/unit/type1_parser_spec.js +46 -44
- package/lib/test/unit/ui_utils_spec.js +388 -372
- package/lib/test/unit/unicode_spec.js +49 -46
- package/lib/test/unit/util_spec.js +144 -248
- package/lib/web/annotation_layer_builder.js +75 -95
- package/lib/web/app.js +1538 -1147
- package/lib/web/app_options.js +116 -104
- package/lib/web/base_viewer.js +950 -775
- package/lib/web/chromecom.js +217 -225
- package/lib/web/debugger.js +236 -148
- package/lib/web/download_manager.js +50 -50
- package/lib/web/firefox_print_service.js +51 -33
- package/lib/web/firefoxcom.js +225 -352
- package/lib/web/genericcom.js +30 -93
- package/lib/web/genericl10n.js +26 -143
- package/lib/web/grab_to_pan.js +57 -33
- package/lib/web/interfaces.js +105 -232
- package/lib/web/overlay_manager.js +73 -227
- package/lib/web/password_prompt.js +44 -62
- package/lib/web/pdf_attachment_viewer.js +118 -123
- package/lib/web/pdf_cursor_tools.js +89 -93
- package/lib/web/pdf_document_properties.js +242 -281
- package/lib/web/pdf_find_bar.js +157 -163
- package/lib/web/pdf_find_controller.js +598 -454
- package/lib/web/pdf_find_utils.js +32 -16
- package/lib/web/pdf_history.js +481 -355
- package/lib/web/pdf_link_service.js +355 -323
- package/lib/web/pdf_outline_viewer.js +167 -152
- package/lib/web/pdf_page_view.js +511 -457
- package/lib/web/pdf_presentation_mode.js +347 -335
- package/lib/web/pdf_print_service.js +133 -103
- package/lib/web/pdf_rendering_queue.js +98 -100
- package/lib/web/pdf_sidebar.js +323 -299
- package/lib/web/pdf_sidebar_resizer.js +107 -108
- package/lib/web/pdf_single_page_viewer.js +94 -146
- package/lib/web/pdf_thumbnail_view.js +319 -269
- package/lib/web/pdf_thumbnail_viewer.js +219 -199
- package/lib/web/pdf_viewer.component.js +111 -32
- package/lib/web/pdf_viewer.js +61 -101
- package/lib/web/preferences.js +87 -272
- package/lib/web/secondary_toolbar.js +207 -220
- package/lib/web/text_layer_builder.js +322 -322
- package/lib/web/toolbar.js +227 -180
- package/lib/web/ui_utils.js +476 -421
- package/lib/web/view_history.js +59 -208
- package/lib/web/viewer_compatibility.js +9 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +36 -22
- package/web/pdf_viewer.js +4407 -4516
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -441
- package/lib/shared/streams_polyfill.js +0 -39
- package/lib/shared/url_polyfill.js +0 -50
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/web/dom_events.js +0 -140
package/lib/display/api.js
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -19,206 +19,173 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
32
|
-
|
33
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
34
|
-
|
35
|
-
var _util = require('../shared/util');
|
36
|
-
|
37
|
-
var _dom_utils = require('./dom_utils');
|
38
|
-
|
39
|
-
var _font_loader = require('./font_loader');
|
27
|
+
exports.getDocument = getDocument;
|
28
|
+
exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
|
29
|
+
exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
|
40
30
|
|
41
|
-
var
|
31
|
+
var _util = require("../shared/util.js");
|
42
32
|
|
43
|
-
var
|
33
|
+
var _display_utils = require("./display_utils.js");
|
44
34
|
|
45
|
-
var
|
35
|
+
var _font_loader = require("./font_loader.js");
|
46
36
|
|
47
|
-
var
|
37
|
+
var _api_compatibility = require("./api_compatibility.js");
|
48
38
|
|
49
|
-
var
|
39
|
+
var _canvas = require("./canvas.js");
|
50
40
|
|
51
|
-
var
|
41
|
+
var _worker_options = require("./worker_options.js");
|
52
42
|
|
53
|
-
var
|
43
|
+
var _is_node = require("../shared/is_node.js");
|
54
44
|
|
55
|
-
var
|
45
|
+
var _message_handler = require("../shared/message_handler.js");
|
56
46
|
|
57
|
-
var
|
47
|
+
var _metadata = require("./metadata.js");
|
58
48
|
|
59
|
-
|
49
|
+
var _transport_stream = require("./transport_stream.js");
|
60
50
|
|
61
|
-
|
51
|
+
var _webgl = require("./webgl.js");
|
62
52
|
|
63
|
-
|
53
|
+
const DEFAULT_RANGE_CHUNK_SIZE = 65536;
|
54
|
+
const RENDERING_CANCELLED_TIMEOUT = 100;
|
55
|
+
let createPDFNetworkStream;
|
64
56
|
|
65
|
-
var DEFAULT_RANGE_CHUNK_SIZE = 65536;
|
66
|
-
var isWorkerDisabled = false;
|
67
|
-
var fallbackWorkerSrc = void 0;
|
68
|
-
var fakeWorkerFilesLoader = null;
|
69
|
-
{
|
70
|
-
var useRequireEnsure = false;
|
71
|
-
if (typeof window === 'undefined') {
|
72
|
-
isWorkerDisabled = true;
|
73
|
-
if (typeof require.ensure === 'undefined') {
|
74
|
-
require.ensure = require('node-ensure');
|
75
|
-
}
|
76
|
-
useRequireEnsure = true;
|
77
|
-
} else if (typeof require !== 'undefined' && typeof require.ensure === 'function') {
|
78
|
-
useRequireEnsure = true;
|
79
|
-
}
|
80
|
-
if (typeof requirejs !== 'undefined' && requirejs.toUrl) {
|
81
|
-
fallbackWorkerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js');
|
82
|
-
}
|
83
|
-
var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load;
|
84
|
-
fakeWorkerFilesLoader = useRequireEnsure ? function () {
|
85
|
-
return new Promise(function (resolve, reject) {
|
86
|
-
require.ensure([], function () {
|
87
|
-
try {
|
88
|
-
var worker = void 0;
|
89
|
-
worker = require('../pdf.worker.js');
|
90
|
-
resolve(worker.WorkerMessageHandler);
|
91
|
-
} catch (ex) {
|
92
|
-
reject(ex);
|
93
|
-
}
|
94
|
-
}, reject, 'pdfjsWorker');
|
95
|
-
});
|
96
|
-
} : dynamicLoaderSupported ? function () {
|
97
|
-
return new Promise(function (resolve, reject) {
|
98
|
-
requirejs(['pdfjs-dist/build/pdf.worker'], function (worker) {
|
99
|
-
try {
|
100
|
-
resolve(worker.WorkerMessageHandler);
|
101
|
-
} catch (ex) {
|
102
|
-
reject(ex);
|
103
|
-
}
|
104
|
-
}, reject);
|
105
|
-
});
|
106
|
-
} : null;
|
107
|
-
if (!fallbackWorkerSrc && typeof document !== 'undefined') {
|
108
|
-
var pdfjsFilePath = document.currentScript && document.currentScript.src;
|
109
|
-
if (pdfjsFilePath) {
|
110
|
-
fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2');
|
111
|
-
}
|
112
|
-
}
|
113
|
-
}
|
114
|
-
var createPDFNetworkStream;
|
115
57
|
function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
|
116
58
|
createPDFNetworkStream = pdfNetworkStreamFactory;
|
117
59
|
}
|
60
|
+
|
118
61
|
function getDocument(src) {
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
62
|
+
const task = new PDFDocumentLoadingTask();
|
63
|
+
let source;
|
64
|
+
|
65
|
+
if (typeof src === "string") {
|
66
|
+
source = {
|
67
|
+
url: src
|
68
|
+
};
|
123
69
|
} else if ((0, _util.isArrayBuffer)(src)) {
|
124
|
-
source = {
|
70
|
+
source = {
|
71
|
+
data: src
|
72
|
+
};
|
125
73
|
} else if (src instanceof PDFDataRangeTransport) {
|
126
|
-
source = {
|
74
|
+
source = {
|
75
|
+
range: src
|
76
|
+
};
|
127
77
|
} else {
|
128
|
-
if (
|
129
|
-
throw new Error(
|
78
|
+
if (typeof src !== "object") {
|
79
|
+
throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object");
|
130
80
|
}
|
81
|
+
|
131
82
|
if (!src.url && !src.data && !src.range) {
|
132
|
-
throw new Error(
|
83
|
+
throw new Error("Invalid parameter object: need either .data, .range or .url");
|
133
84
|
}
|
85
|
+
|
134
86
|
source = src;
|
135
87
|
}
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
88
|
+
|
89
|
+
const params = Object.create(null);
|
90
|
+
let rangeTransport = null,
|
91
|
+
worker = null;
|
92
|
+
|
93
|
+
for (const key in source) {
|
94
|
+
if (key === "url" && typeof window !== "undefined") {
|
95
|
+
params[key] = new URL(source[key], window.location).href;
|
142
96
|
continue;
|
143
|
-
} else if (key ===
|
97
|
+
} else if (key === "range") {
|
144
98
|
rangeTransport = source[key];
|
145
99
|
continue;
|
146
|
-
} else if (key ===
|
100
|
+
} else if (key === "worker") {
|
147
101
|
worker = source[key];
|
148
102
|
continue;
|
149
|
-
} else if (key ===
|
150
|
-
|
151
|
-
|
103
|
+
} else if (key === "data" && !(source[key] instanceof Uint8Array)) {
|
104
|
+
const pdfBytes = source[key];
|
105
|
+
|
106
|
+
if (typeof pdfBytes === "string") {
|
152
107
|
params[key] = (0, _util.stringToBytes)(pdfBytes);
|
153
|
-
} else if (
|
108
|
+
} else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
|
154
109
|
params[key] = new Uint8Array(pdfBytes);
|
155
110
|
} else if ((0, _util.isArrayBuffer)(pdfBytes)) {
|
156
111
|
params[key] = new Uint8Array(pdfBytes);
|
157
112
|
} else {
|
158
|
-
throw new Error(
|
113
|
+
throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property.");
|
159
114
|
}
|
115
|
+
|
160
116
|
continue;
|
161
117
|
}
|
118
|
+
|
162
119
|
params[key] = source[key];
|
163
120
|
}
|
121
|
+
|
164
122
|
params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
|
165
|
-
params.CMapReaderFactory = params.CMapReaderFactory ||
|
123
|
+
params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
|
166
124
|
params.ignoreErrors = params.stopAtErrors !== true;
|
167
125
|
params.pdfBug = params.pdfBug === true;
|
168
|
-
|
126
|
+
const NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
|
127
|
+
|
169
128
|
if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
|
170
129
|
params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE;
|
171
130
|
}
|
131
|
+
|
172
132
|
if (!Number.isInteger(params.maxImageSize)) {
|
173
133
|
params.maxImageSize = -1;
|
174
134
|
}
|
175
|
-
|
135
|
+
|
136
|
+
if (typeof params.isEvalSupported !== "boolean") {
|
176
137
|
params.isEvalSupported = true;
|
177
138
|
}
|
178
|
-
|
139
|
+
|
140
|
+
if (typeof params.disableFontFace !== "boolean") {
|
179
141
|
params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
|
180
142
|
}
|
181
|
-
|
143
|
+
|
144
|
+
if (typeof params.disableRange !== "boolean") {
|
182
145
|
params.disableRange = false;
|
183
146
|
}
|
184
|
-
|
147
|
+
|
148
|
+
if (typeof params.disableStream !== "boolean") {
|
185
149
|
params.disableStream = false;
|
186
150
|
}
|
187
|
-
|
151
|
+
|
152
|
+
if (typeof params.disableAutoFetch !== "boolean") {
|
188
153
|
params.disableAutoFetch = false;
|
189
154
|
}
|
190
|
-
|
155
|
+
|
156
|
+
if (typeof params.disableCreateObjectURL !== "boolean") {
|
191
157
|
params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
|
192
158
|
}
|
159
|
+
|
193
160
|
(0, _util.setVerbosityLevel)(params.verbosity);
|
161
|
+
|
194
162
|
if (!worker) {
|
195
|
-
|
196
|
-
|
197
|
-
|
163
|
+
const workerParams = {
|
164
|
+
verbosity: params.verbosity,
|
165
|
+
port: _worker_options.GlobalWorkerOptions.workerPort
|
198
166
|
};
|
199
|
-
|
200
|
-
if (workerPort) {
|
201
|
-
workerParams.port = workerPort;
|
202
|
-
worker = PDFWorker.fromPort(workerParams);
|
203
|
-
} else {
|
204
|
-
worker = new PDFWorker(workerParams);
|
205
|
-
}
|
167
|
+
worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
|
206
168
|
task._worker = worker;
|
207
169
|
}
|
208
|
-
|
170
|
+
|
171
|
+
const docId = task.docId;
|
209
172
|
worker.promise.then(function () {
|
210
173
|
if (task.destroyed) {
|
211
|
-
throw new Error(
|
174
|
+
throw new Error("Loading aborted");
|
212
175
|
}
|
176
|
+
|
213
177
|
return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) {
|
214
178
|
if (task.destroyed) {
|
215
|
-
throw new Error(
|
179
|
+
throw new Error("Loading aborted");
|
216
180
|
}
|
217
|
-
|
181
|
+
|
182
|
+
let networkStream;
|
183
|
+
|
218
184
|
if (rangeTransport) {
|
219
185
|
networkStream = new _transport_stream.PDFDataTransportStream({
|
220
186
|
length: params.length,
|
221
187
|
initialData: params.initialData,
|
188
|
+
progressiveDone: params.progressiveDone,
|
222
189
|
disableRange: params.disableRange,
|
223
190
|
disableStream: params.disableStream
|
224
191
|
}, rangeTransport);
|
@@ -233,26 +200,31 @@ function getDocument(src) {
|
|
233
200
|
disableStream: params.disableStream
|
234
201
|
});
|
235
202
|
}
|
236
|
-
|
203
|
+
|
204
|
+
const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
|
237
205
|
messageHandler.postMessageTransfers = worker.postMessageTransfers;
|
238
|
-
|
206
|
+
const transport = new WorkerTransport(messageHandler, task, networkStream, params);
|
239
207
|
task._transport = transport;
|
240
|
-
messageHandler.send(
|
208
|
+
messageHandler.send("Ready", null);
|
241
209
|
});
|
242
210
|
}).catch(task._capability.reject);
|
243
211
|
return task;
|
244
212
|
}
|
213
|
+
|
245
214
|
function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
|
246
215
|
if (worker.destroyed) {
|
247
|
-
return Promise.reject(new Error(
|
216
|
+
return Promise.reject(new Error("Worker was destroyed"));
|
248
217
|
}
|
218
|
+
|
249
219
|
if (pdfDataRangeTransport) {
|
250
220
|
source.length = pdfDataRangeTransport.length;
|
251
221
|
source.initialData = pdfDataRangeTransport.initialData;
|
222
|
+
source.progressiveDone = pdfDataRangeTransport.progressiveDone;
|
252
223
|
}
|
253
|
-
|
254
|
-
|
255
|
-
|
224
|
+
|
225
|
+
return worker.messageHandler.sendWithPromise("GetDocRequest", {
|
226
|
+
docId,
|
227
|
+
apiVersion: '2.4.456',
|
256
228
|
source: {
|
257
229
|
data: source.data,
|
258
230
|
url: source.url,
|
@@ -271,302 +243,242 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
|
|
271
243
|
isEvalSupported: source.isEvalSupported
|
272
244
|
}).then(function (workerId) {
|
273
245
|
if (worker.destroyed) {
|
274
|
-
throw new Error(
|
246
|
+
throw new Error("Worker was destroyed");
|
275
247
|
}
|
248
|
+
|
276
249
|
return workerId;
|
277
250
|
});
|
278
251
|
}
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
252
|
+
|
253
|
+
const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
|
254
|
+
let nextDocumentId = 0;
|
255
|
+
|
256
|
+
class PDFDocumentLoadingTask {
|
257
|
+
constructor() {
|
258
|
+
this._capability = (0, _util.createPromiseCapability)();
|
259
|
+
this._transport = null;
|
260
|
+
this._worker = null;
|
261
|
+
this.docId = "d" + nextDocumentId++;
|
262
|
+
this.destroyed = false;
|
263
|
+
this.onPassword = null;
|
264
|
+
this.onProgress = null;
|
265
|
+
this.onUnsupportedFeature = null;
|
266
|
+
}
|
267
|
+
|
292
268
|
get promise() {
|
293
269
|
return this._capability.promise;
|
294
|
-
}
|
295
|
-
destroy: function destroy() {
|
296
|
-
var _this = this;
|
270
|
+
}
|
297
271
|
|
272
|
+
destroy() {
|
298
273
|
this.destroyed = true;
|
299
|
-
|
300
|
-
return transportDestroyed.then(
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
274
|
+
const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
|
275
|
+
return transportDestroyed.then(() => {
|
276
|
+
this._transport = null;
|
277
|
+
|
278
|
+
if (this._worker) {
|
279
|
+
this._worker.destroy();
|
280
|
+
|
281
|
+
this._worker = null;
|
305
282
|
}
|
306
283
|
});
|
307
|
-
}
|
284
|
+
}
|
308
285
|
|
309
|
-
then
|
310
|
-
|
286
|
+
then(onFulfilled, onRejected) {
|
287
|
+
throw new Error("Removed API method: " + "PDFDocumentLoadingTask.then, use the `promise` getter instead.");
|
311
288
|
}
|
312
|
-
|
289
|
+
|
290
|
+
}
|
291
|
+
|
313
292
|
return PDFDocumentLoadingTask;
|
314
293
|
}();
|
315
294
|
|
316
|
-
|
317
|
-
|
318
|
-
_classCallCheck(this, PDFDataRangeTransport);
|
319
|
-
|
295
|
+
class PDFDataRangeTransport {
|
296
|
+
constructor(length, initialData, progressiveDone = false) {
|
320
297
|
this.length = length;
|
321
298
|
this.initialData = initialData;
|
299
|
+
this.progressiveDone = progressiveDone;
|
322
300
|
this._rangeListeners = [];
|
323
301
|
this._progressListeners = [];
|
324
302
|
this._progressiveReadListeners = [];
|
303
|
+
this._progressiveDoneListeners = [];
|
325
304
|
this._readyCapability = (0, _util.createPromiseCapability)();
|
326
305
|
}
|
327
306
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
value: function addProgressListener(listener) {
|
336
|
-
this._progressListeners.push(listener);
|
337
|
-
}
|
338
|
-
}, {
|
339
|
-
key: 'addProgressiveReadListener',
|
340
|
-
value: function addProgressiveReadListener(listener) {
|
341
|
-
this._progressiveReadListeners.push(listener);
|
342
|
-
}
|
343
|
-
}, {
|
344
|
-
key: 'onDataRange',
|
345
|
-
value: function onDataRange(begin, chunk) {
|
346
|
-
var _iteratorNormalCompletion = true;
|
347
|
-
var _didIteratorError = false;
|
348
|
-
var _iteratorError = undefined;
|
307
|
+
addRangeListener(listener) {
|
308
|
+
this._rangeListeners.push(listener);
|
309
|
+
}
|
310
|
+
|
311
|
+
addProgressListener(listener) {
|
312
|
+
this._progressListeners.push(listener);
|
313
|
+
}
|
349
314
|
|
350
|
-
|
351
|
-
|
352
|
-
|
315
|
+
addProgressiveReadListener(listener) {
|
316
|
+
this._progressiveReadListeners.push(listener);
|
317
|
+
}
|
353
318
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
if (!_iteratorNormalCompletion && _iterator.return) {
|
362
|
-
_iterator.return();
|
363
|
-
}
|
364
|
-
} finally {
|
365
|
-
if (_didIteratorError) {
|
366
|
-
throw _iteratorError;
|
367
|
-
}
|
368
|
-
}
|
369
|
-
}
|
319
|
+
addProgressiveDoneListener(listener) {
|
320
|
+
this._progressiveDoneListeners.push(listener);
|
321
|
+
}
|
322
|
+
|
323
|
+
onDataRange(begin, chunk) {
|
324
|
+
for (const listener of this._rangeListeners) {
|
325
|
+
listener(begin, chunk);
|
370
326
|
}
|
371
|
-
}
|
372
|
-
key: 'onDataProgress',
|
373
|
-
value: function onDataProgress(loaded) {
|
374
|
-
var _this2 = this;
|
327
|
+
}
|
375
328
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
329
|
+
onDataProgress(loaded, total) {
|
330
|
+
this._readyCapability.promise.then(() => {
|
331
|
+
for (const listener of this._progressListeners) {
|
332
|
+
listener(loaded, total);
|
333
|
+
}
|
334
|
+
});
|
335
|
+
}
|
380
336
|
|
381
|
-
|
382
|
-
|
383
|
-
|
337
|
+
onDataProgressiveRead(chunk) {
|
338
|
+
this._readyCapability.promise.then(() => {
|
339
|
+
for (const listener of this._progressiveReadListeners) {
|
340
|
+
listener(chunk);
|
341
|
+
}
|
342
|
+
});
|
343
|
+
}
|
384
344
|
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
393
|
-
_iterator2.return();
|
394
|
-
}
|
395
|
-
} finally {
|
396
|
-
if (_didIteratorError2) {
|
397
|
-
throw _iteratorError2;
|
398
|
-
}
|
399
|
-
}
|
400
|
-
}
|
401
|
-
});
|
402
|
-
}
|
403
|
-
}, {
|
404
|
-
key: 'onDataProgressiveRead',
|
405
|
-
value: function onDataProgressiveRead(chunk) {
|
406
|
-
var _this3 = this;
|
345
|
+
onDataProgressiveDone() {
|
346
|
+
this._readyCapability.promise.then(() => {
|
347
|
+
for (const listener of this._progressiveDoneListeners) {
|
348
|
+
listener();
|
349
|
+
}
|
350
|
+
});
|
351
|
+
}
|
407
352
|
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
var _iteratorError3 = undefined;
|
353
|
+
transportReady() {
|
354
|
+
this._readyCapability.resolve();
|
355
|
+
}
|
412
356
|
|
413
|
-
|
414
|
-
|
415
|
-
|
357
|
+
requestDataRange(begin, end) {
|
358
|
+
(0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
|
359
|
+
}
|
416
360
|
|
417
|
-
|
418
|
-
}
|
419
|
-
} catch (err) {
|
420
|
-
_didIteratorError3 = true;
|
421
|
-
_iteratorError3 = err;
|
422
|
-
} finally {
|
423
|
-
try {
|
424
|
-
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
425
|
-
_iterator3.return();
|
426
|
-
}
|
427
|
-
} finally {
|
428
|
-
if (_didIteratorError3) {
|
429
|
-
throw _iteratorError3;
|
430
|
-
}
|
431
|
-
}
|
432
|
-
}
|
433
|
-
});
|
434
|
-
}
|
435
|
-
}, {
|
436
|
-
key: 'transportReady',
|
437
|
-
value: function transportReady() {
|
438
|
-
this._readyCapability.resolve();
|
439
|
-
}
|
440
|
-
}, {
|
441
|
-
key: 'requestDataRange',
|
442
|
-
value: function requestDataRange(begin, end) {
|
443
|
-
(0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange');
|
444
|
-
}
|
445
|
-
}, {
|
446
|
-
key: 'abort',
|
447
|
-
value: function abort() {}
|
448
|
-
}]);
|
361
|
+
abort() {}
|
449
362
|
|
450
|
-
|
451
|
-
}();
|
363
|
+
}
|
452
364
|
|
453
|
-
|
454
|
-
function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
|
455
|
-
_classCallCheck(this, PDFDocumentProxy);
|
365
|
+
exports.PDFDataRangeTransport = PDFDataRangeTransport;
|
456
366
|
|
457
|
-
|
367
|
+
class PDFDocumentProxy {
|
368
|
+
constructor(pdfInfo, transport) {
|
458
369
|
this._pdfInfo = pdfInfo;
|
459
370
|
this._transport = transport;
|
460
371
|
}
|
461
372
|
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
}
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
}
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
}
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
}, {
|
533
|
-
key: 'cleanup',
|
534
|
-
value: function cleanup() {
|
535
|
-
this._transport.startCleanup();
|
536
|
-
}
|
537
|
-
}, {
|
538
|
-
key: 'destroy',
|
539
|
-
value: function destroy() {
|
540
|
-
return this.loadingTask.destroy();
|
541
|
-
}
|
542
|
-
}, {
|
543
|
-
key: 'numPages',
|
544
|
-
get: function get() {
|
545
|
-
return this._pdfInfo.numPages;
|
546
|
-
}
|
547
|
-
}, {
|
548
|
-
key: 'fingerprint',
|
549
|
-
get: function get() {
|
550
|
-
return this._pdfInfo.fingerprint;
|
551
|
-
}
|
552
|
-
}, {
|
553
|
-
key: 'loadingParams',
|
554
|
-
get: function get() {
|
555
|
-
return this._transport.loadingParams;
|
556
|
-
}
|
557
|
-
}]);
|
558
|
-
|
559
|
-
return PDFDocumentProxy;
|
560
|
-
}();
|
373
|
+
get numPages() {
|
374
|
+
return this._pdfInfo.numPages;
|
375
|
+
}
|
376
|
+
|
377
|
+
get fingerprint() {
|
378
|
+
return this._pdfInfo.fingerprint;
|
379
|
+
}
|
380
|
+
|
381
|
+
getPage(pageNumber) {
|
382
|
+
return this._transport.getPage(pageNumber);
|
383
|
+
}
|
384
|
+
|
385
|
+
getPageIndex(ref) {
|
386
|
+
return this._transport.getPageIndex(ref);
|
387
|
+
}
|
388
|
+
|
389
|
+
getDestinations() {
|
390
|
+
return this._transport.getDestinations();
|
391
|
+
}
|
392
|
+
|
393
|
+
getDestination(id) {
|
394
|
+
return this._transport.getDestination(id);
|
395
|
+
}
|
396
|
+
|
397
|
+
getPageLabels() {
|
398
|
+
return this._transport.getPageLabels();
|
399
|
+
}
|
400
|
+
|
401
|
+
getPageLayout() {
|
402
|
+
return this._transport.getPageLayout();
|
403
|
+
}
|
404
|
+
|
405
|
+
getPageMode() {
|
406
|
+
return this._transport.getPageMode();
|
407
|
+
}
|
408
|
+
|
409
|
+
getViewerPreferences() {
|
410
|
+
return this._transport.getViewerPreferences();
|
411
|
+
}
|
412
|
+
|
413
|
+
getOpenAction() {
|
414
|
+
return this._transport.getOpenAction();
|
415
|
+
}
|
416
|
+
|
417
|
+
getOpenActionDestination() {
|
418
|
+
(0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
|
419
|
+
return this.getOpenAction().then(function (openAction) {
|
420
|
+
return openAction && openAction.dest ? openAction.dest : null;
|
421
|
+
});
|
422
|
+
}
|
423
|
+
|
424
|
+
getAttachments() {
|
425
|
+
return this._transport.getAttachments();
|
426
|
+
}
|
427
|
+
|
428
|
+
getJavaScript() {
|
429
|
+
return this._transport.getJavaScript();
|
430
|
+
}
|
431
|
+
|
432
|
+
getOutline() {
|
433
|
+
return this._transport.getOutline();
|
434
|
+
}
|
435
|
+
|
436
|
+
getPermissions() {
|
437
|
+
return this._transport.getPermissions();
|
438
|
+
}
|
439
|
+
|
440
|
+
getMetadata() {
|
441
|
+
return this._transport.getMetadata();
|
442
|
+
}
|
561
443
|
|
562
|
-
|
563
|
-
|
564
|
-
|
444
|
+
getData() {
|
445
|
+
return this._transport.getData();
|
446
|
+
}
|
447
|
+
|
448
|
+
getDownloadInfo() {
|
449
|
+
return this._transport.downloadInfoCapability.promise;
|
450
|
+
}
|
451
|
+
|
452
|
+
getStats() {
|
453
|
+
return this._transport.getStats();
|
454
|
+
}
|
455
|
+
|
456
|
+
cleanup() {
|
457
|
+
return this._transport.startCleanup();
|
458
|
+
}
|
459
|
+
|
460
|
+
destroy() {
|
461
|
+
return this.loadingTask.destroy();
|
462
|
+
}
|
463
|
+
|
464
|
+
get loadingParams() {
|
465
|
+
return this._transport.loadingParams;
|
466
|
+
}
|
467
|
+
|
468
|
+
get loadingTask() {
|
469
|
+
return this._transport.loadingTask;
|
470
|
+
}
|
471
|
+
|
472
|
+
}
|
473
|
+
|
474
|
+
exports.PDFDocumentProxy = PDFDocumentProxy;
|
565
475
|
|
566
|
-
|
476
|
+
class PDFPageProxy {
|
477
|
+
constructor(pageIndex, pageInfo, transport, pdfBug = false) {
|
478
|
+
this._pageIndex = pageIndex;
|
567
479
|
this._pageInfo = pageInfo;
|
568
|
-
this.
|
569
|
-
this._stats = pdfBug ? new
|
480
|
+
this._transport = transport;
|
481
|
+
this._stats = pdfBug ? new _display_utils.StatTimer() : null;
|
570
482
|
this._pdfBug = pdfBug;
|
571
483
|
this.commonObjs = transport.commonObjs;
|
572
484
|
this.objs = new PDFObjects();
|
@@ -575,574 +487,885 @@ var PDFPageProxy = function PDFPageProxyClosure() {
|
|
575
487
|
this.intentStates = Object.create(null);
|
576
488
|
this.destroyed = false;
|
577
489
|
}
|
578
|
-
PDFPageProxy.prototype = {
|
579
|
-
get pageNumber() {
|
580
|
-
return this.pageIndex + 1;
|
581
|
-
},
|
582
|
-
get rotate() {
|
583
|
-
return this._pageInfo.rotate;
|
584
|
-
},
|
585
|
-
get ref() {
|
586
|
-
return this._pageInfo.ref;
|
587
|
-
},
|
588
|
-
get userUnit() {
|
589
|
-
return this._pageInfo.userUnit;
|
590
|
-
},
|
591
|
-
get view() {
|
592
|
-
return this._pageInfo.view;
|
593
|
-
},
|
594
|
-
getViewport: function getViewport(scale) {
|
595
|
-
var rotate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.rotate;
|
596
|
-
var dontFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
597
|
-
|
598
|
-
return new _dom_utils.PageViewport({
|
599
|
-
viewBox: this.view,
|
600
|
-
scale: scale,
|
601
|
-
rotation: rotate,
|
602
|
-
dontFlip: dontFlip
|
603
|
-
});
|
604
|
-
},
|
605
490
|
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent);
|
610
|
-
this.annotationsIntent = intent;
|
611
|
-
}
|
612
|
-
return this.annotationsPromise;
|
613
|
-
},
|
614
|
-
render: function PDFPageProxy_render(params) {
|
615
|
-
var _this4 = this;
|
616
|
-
|
617
|
-
var stats = this._stats;
|
618
|
-
stats.time('Overall');
|
619
|
-
this.pendingCleanup = false;
|
620
|
-
var renderingIntent = params.intent === 'print' ? 'print' : 'display';
|
621
|
-
var canvasFactory = params.canvasFactory || new _dom_utils.DOMCanvasFactory();
|
622
|
-
var webGLContext = new _webgl.WebGLContext({ enable: params.enableWebGL });
|
623
|
-
if (!this.intentStates[renderingIntent]) {
|
624
|
-
this.intentStates[renderingIntent] = Object.create(null);
|
625
|
-
}
|
626
|
-
var intentState = this.intentStates[renderingIntent];
|
627
|
-
if (!intentState.displayReadyCapability) {
|
628
|
-
intentState.receivingOperatorList = true;
|
629
|
-
intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
|
630
|
-
intentState.operatorList = {
|
631
|
-
fnArray: [],
|
632
|
-
argsArray: [],
|
633
|
-
lastChunk: false
|
634
|
-
};
|
635
|
-
stats.time('Page Request');
|
636
|
-
this.transport.messageHandler.send('RenderPageRequest', {
|
637
|
-
pageIndex: this.pageNumber - 1,
|
638
|
-
intent: renderingIntent,
|
639
|
-
renderInteractiveForms: params.renderInteractiveForms === true
|
640
|
-
});
|
641
|
-
}
|
642
|
-
var complete = function complete(error) {
|
643
|
-
var i = intentState.renderTasks.indexOf(internalRenderTask);
|
644
|
-
if (i >= 0) {
|
645
|
-
intentState.renderTasks.splice(i, 1);
|
646
|
-
}
|
647
|
-
if (_this4.cleanupAfterRender) {
|
648
|
-
_this4.pendingCleanup = true;
|
649
|
-
}
|
650
|
-
_this4._tryCleanup();
|
651
|
-
if (error) {
|
652
|
-
internalRenderTask.capability.reject(error);
|
653
|
-
} else {
|
654
|
-
internalRenderTask.capability.resolve();
|
655
|
-
}
|
656
|
-
stats.timeEnd('Rendering');
|
657
|
-
stats.timeEnd('Overall');
|
658
|
-
};
|
659
|
-
var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext, this._pdfBug);
|
660
|
-
internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
|
661
|
-
if (!intentState.renderTasks) {
|
662
|
-
intentState.renderTasks = [];
|
663
|
-
}
|
664
|
-
intentState.renderTasks.push(internalRenderTask);
|
665
|
-
var renderTask = internalRenderTask.task;
|
666
|
-
intentState.displayReadyCapability.promise.then(function (transparency) {
|
667
|
-
if (_this4.pendingCleanup) {
|
668
|
-
complete();
|
669
|
-
return;
|
670
|
-
}
|
671
|
-
stats.time('Rendering');
|
672
|
-
internalRenderTask.initializeGraphics(transparency);
|
673
|
-
internalRenderTask.operatorListChanged();
|
674
|
-
}).catch(complete);
|
675
|
-
return renderTask;
|
676
|
-
},
|
677
|
-
getOperatorList: function PDFPageProxy_getOperatorList() {
|
678
|
-
function operatorListChanged() {
|
679
|
-
if (intentState.operatorList.lastChunk) {
|
680
|
-
intentState.opListReadCapability.resolve(intentState.operatorList);
|
681
|
-
var i = intentState.renderTasks.indexOf(opListTask);
|
682
|
-
if (i >= 0) {
|
683
|
-
intentState.renderTasks.splice(i, 1);
|
684
|
-
}
|
685
|
-
}
|
686
|
-
}
|
687
|
-
var renderingIntent = 'oplist';
|
688
|
-
if (!this.intentStates[renderingIntent]) {
|
689
|
-
this.intentStates[renderingIntent] = Object.create(null);
|
690
|
-
}
|
691
|
-
var intentState = this.intentStates[renderingIntent];
|
692
|
-
var opListTask;
|
693
|
-
if (!intentState.opListReadCapability) {
|
694
|
-
opListTask = {};
|
695
|
-
opListTask.operatorListChanged = operatorListChanged;
|
696
|
-
intentState.receivingOperatorList = true;
|
697
|
-
intentState.opListReadCapability = (0, _util.createPromiseCapability)();
|
698
|
-
intentState.renderTasks = [];
|
699
|
-
intentState.renderTasks.push(opListTask);
|
700
|
-
intentState.operatorList = {
|
701
|
-
fnArray: [],
|
702
|
-
argsArray: [],
|
703
|
-
lastChunk: false
|
704
|
-
};
|
705
|
-
this._stats.time('Page Request');
|
706
|
-
this.transport.messageHandler.send('RenderPageRequest', {
|
707
|
-
pageIndex: this.pageIndex,
|
708
|
-
intent: renderingIntent
|
709
|
-
});
|
710
|
-
}
|
711
|
-
return intentState.opListReadCapability.promise;
|
712
|
-
},
|
713
|
-
streamTextContent: function streamTextContent() {
|
714
|
-
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
715
|
-
|
716
|
-
var TEXT_CONTENT_CHUNK_SIZE = 100;
|
717
|
-
return this.transport.messageHandler.sendWithStream('GetTextContent', {
|
718
|
-
pageIndex: this.pageNumber - 1,
|
719
|
-
normalizeWhitespace: params.normalizeWhitespace === true,
|
720
|
-
combineTextItems: params.disableCombineTextItems !== true
|
721
|
-
}, {
|
722
|
-
highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
|
723
|
-
size: function size(textContent) {
|
724
|
-
return textContent.items.length;
|
725
|
-
}
|
726
|
-
});
|
727
|
-
},
|
491
|
+
get pageNumber() {
|
492
|
+
return this._pageIndex + 1;
|
493
|
+
}
|
728
494
|
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
return new Promise(function (resolve, reject) {
|
733
|
-
function pump() {
|
734
|
-
reader.read().then(function (_ref) {
|
735
|
-
var _textContent$items;
|
495
|
+
get rotate() {
|
496
|
+
return this._pageInfo.rotate;
|
497
|
+
}
|
736
498
|
|
737
|
-
|
738
|
-
|
499
|
+
get ref() {
|
500
|
+
return this._pageInfo.ref;
|
501
|
+
}
|
739
502
|
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
}
|
744
|
-
Object.assign(textContent.styles, value.styles);
|
745
|
-
(_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));
|
746
|
-
pump();
|
747
|
-
}, reject);
|
748
|
-
}
|
749
|
-
var reader = readableStream.getReader();
|
750
|
-
var textContent = {
|
751
|
-
items: [],
|
752
|
-
styles: Object.create(null)
|
753
|
-
};
|
754
|
-
pump();
|
755
|
-
});
|
756
|
-
},
|
757
|
-
_destroy: function PDFPageProxy_destroy() {
|
758
|
-
this.destroyed = true;
|
759
|
-
this.transport.pageCache[this.pageIndex] = null;
|
760
|
-
var waitOn = [];
|
761
|
-
Object.keys(this.intentStates).forEach(function (intent) {
|
762
|
-
if (intent === 'oplist') {
|
763
|
-
return;
|
764
|
-
}
|
765
|
-
var intentState = this.intentStates[intent];
|
766
|
-
intentState.renderTasks.forEach(function (renderTask) {
|
767
|
-
var renderCompleted = renderTask.capability.promise.catch(function () {});
|
768
|
-
waitOn.push(renderCompleted);
|
769
|
-
renderTask.cancel();
|
770
|
-
});
|
771
|
-
}, this);
|
772
|
-
this.objs.clear();
|
773
|
-
this.annotationsPromise = null;
|
774
|
-
this.pendingCleanup = false;
|
775
|
-
return Promise.all(waitOn);
|
776
|
-
},
|
777
|
-
cleanup: function cleanup() {
|
778
|
-
var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
503
|
+
get userUnit() {
|
504
|
+
return this._pageInfo.userUnit;
|
505
|
+
}
|
779
506
|
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
_tryCleanup: function _tryCleanup() {
|
784
|
-
var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
507
|
+
get view() {
|
508
|
+
return this._pageInfo.view;
|
509
|
+
}
|
785
510
|
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
511
|
+
getViewport({
|
512
|
+
scale,
|
513
|
+
rotation = this.rotate,
|
514
|
+
offsetX = 0,
|
515
|
+
offsetY = 0,
|
516
|
+
dontFlip = false
|
517
|
+
} = {}) {
|
518
|
+
if (arguments.length > 1 || typeof arguments[0] === "number") {
|
519
|
+
throw new Error("PDFPageProxy.getViewport is called with obsolete arguments.");
|
520
|
+
}
|
521
|
+
|
522
|
+
return new _display_utils.PageViewport({
|
523
|
+
viewBox: this.view,
|
524
|
+
scale,
|
525
|
+
rotation,
|
526
|
+
offsetX,
|
527
|
+
offsetY,
|
528
|
+
dontFlip
|
529
|
+
});
|
530
|
+
}
|
802
531
|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
_renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) {
|
810
|
-
var intentState = this.intentStates[intent];
|
811
|
-
var i, ii;
|
812
|
-
for (i = 0, ii = operatorListChunk.length; i < ii; i++) {
|
813
|
-
intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
|
814
|
-
intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
|
815
|
-
}
|
816
|
-
intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
|
817
|
-
for (i = 0; i < intentState.renderTasks.length; i++) {
|
818
|
-
intentState.renderTasks[i].operatorListChanged();
|
819
|
-
}
|
820
|
-
if (operatorListChunk.lastChunk) {
|
821
|
-
intentState.receivingOperatorList = false;
|
822
|
-
this._tryCleanup();
|
823
|
-
}
|
824
|
-
},
|
825
|
-
get stats() {
|
826
|
-
return this._stats instanceof _dom_utils.StatTimer ? this._stats : null;
|
532
|
+
getAnnotations({
|
533
|
+
intent = null
|
534
|
+
} = {}) {
|
535
|
+
if (!this.annotationsPromise || this.annotationsIntent !== intent) {
|
536
|
+
this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
|
537
|
+
this.annotationsIntent = intent;
|
827
538
|
}
|
828
|
-
};
|
829
|
-
return PDFPageProxy;
|
830
|
-
}();
|
831
539
|
|
832
|
-
|
833
|
-
|
834
|
-
var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
540
|
+
return this.annotationsPromise;
|
541
|
+
}
|
835
542
|
|
836
|
-
|
543
|
+
render({
|
544
|
+
canvasContext,
|
545
|
+
viewport,
|
546
|
+
intent = "display",
|
547
|
+
enableWebGL = false,
|
548
|
+
renderInteractiveForms = false,
|
549
|
+
transform = null,
|
550
|
+
imageLayer = null,
|
551
|
+
canvasFactory = null,
|
552
|
+
background = null
|
553
|
+
}) {
|
554
|
+
if (this._stats) {
|
555
|
+
this._stats.time("Overall");
|
556
|
+
}
|
557
|
+
|
558
|
+
const renderingIntent = intent === "print" ? "print" : "display";
|
559
|
+
this.pendingCleanup = false;
|
837
560
|
|
838
|
-
this.
|
839
|
-
|
840
|
-
|
841
|
-
}
|
561
|
+
if (!this.intentStates[renderingIntent]) {
|
562
|
+
this.intentStates[renderingIntent] = Object.create(null);
|
563
|
+
}
|
842
564
|
|
843
|
-
|
844
|
-
key: 'postMessage',
|
845
|
-
value: function postMessage(obj, transfers) {
|
846
|
-
var _this5 = this;
|
565
|
+
const intentState = this.intentStates[renderingIntent];
|
847
566
|
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
567
|
+
if (intentState.streamReaderCancelTimeout) {
|
568
|
+
clearTimeout(intentState.streamReaderCancelTimeout);
|
569
|
+
intentState.streamReaderCancelTimeout = null;
|
570
|
+
}
|
571
|
+
|
572
|
+
const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
|
573
|
+
const webGLContext = new _webgl.WebGLContext({
|
574
|
+
enable: enableWebGL
|
575
|
+
});
|
576
|
+
|
577
|
+
if (!intentState.displayReadyCapability) {
|
578
|
+
intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
|
579
|
+
intentState.operatorList = {
|
580
|
+
fnArray: [],
|
581
|
+
argsArray: [],
|
582
|
+
lastChunk: false
|
583
|
+
};
|
584
|
+
|
585
|
+
if (this._stats) {
|
586
|
+
this._stats.time("Page Request");
|
587
|
+
}
|
588
|
+
|
589
|
+
this._pumpOperatorList({
|
590
|
+
pageIndex: this._pageIndex,
|
591
|
+
intent: renderingIntent,
|
592
|
+
renderInteractiveForms: renderInteractiveForms === true
|
593
|
+
});
|
594
|
+
}
|
595
|
+
|
596
|
+
const complete = error => {
|
597
|
+
const i = intentState.renderTasks.indexOf(internalRenderTask);
|
598
|
+
|
599
|
+
if (i >= 0) {
|
600
|
+
intentState.renderTasks.splice(i, 1);
|
601
|
+
}
|
602
|
+
|
603
|
+
if (this.cleanupAfterRender || renderingIntent === "print") {
|
604
|
+
this.pendingCleanup = true;
|
605
|
+
}
|
606
|
+
|
607
|
+
this._tryCleanup();
|
608
|
+
|
609
|
+
if (error) {
|
610
|
+
internalRenderTask.capability.reject(error);
|
611
|
+
|
612
|
+
this._abortOperatorList({
|
613
|
+
intentState,
|
614
|
+
reason: error
|
615
|
+
});
|
616
|
+
} else {
|
617
|
+
internalRenderTask.capability.resolve();
|
618
|
+
}
|
619
|
+
|
620
|
+
if (this._stats) {
|
621
|
+
this._stats.timeEnd("Rendering");
|
622
|
+
|
623
|
+
this._stats.timeEnd("Overall");
|
624
|
+
}
|
625
|
+
};
|
626
|
+
|
627
|
+
const internalRenderTask = new InternalRenderTask({
|
628
|
+
callback: complete,
|
629
|
+
params: {
|
630
|
+
canvasContext,
|
631
|
+
viewport,
|
632
|
+
transform,
|
633
|
+
imageLayer,
|
634
|
+
background
|
635
|
+
},
|
636
|
+
objs: this.objs,
|
637
|
+
commonObjs: this.commonObjs,
|
638
|
+
operatorList: intentState.operatorList,
|
639
|
+
pageIndex: this._pageIndex,
|
640
|
+
canvasFactory: canvasFactoryInstance,
|
641
|
+
webGLContext,
|
642
|
+
useRequestAnimationFrame: renderingIntent !== "print",
|
643
|
+
pdfBug: this._pdfBug
|
644
|
+
});
|
645
|
+
|
646
|
+
if (!intentState.renderTasks) {
|
647
|
+
intentState.renderTasks = [];
|
648
|
+
}
|
649
|
+
|
650
|
+
intentState.renderTasks.push(internalRenderTask);
|
651
|
+
const renderTask = internalRenderTask.task;
|
652
|
+
intentState.displayReadyCapability.promise.then(transparency => {
|
653
|
+
if (this.pendingCleanup) {
|
654
|
+
complete();
|
655
|
+
return;
|
656
|
+
}
|
657
|
+
|
658
|
+
if (this._stats) {
|
659
|
+
this._stats.time("Rendering");
|
660
|
+
}
|
661
|
+
|
662
|
+
internalRenderTask.initializeGraphics(transparency);
|
663
|
+
internalRenderTask.operatorListChanged();
|
664
|
+
}).catch(complete);
|
665
|
+
return renderTask;
|
666
|
+
}
|
667
|
+
|
668
|
+
getOperatorList() {
|
669
|
+
function operatorListChanged() {
|
670
|
+
if (intentState.operatorList.lastChunk) {
|
671
|
+
intentState.opListReadCapability.resolve(intentState.operatorList);
|
672
|
+
const i = intentState.renderTasks.indexOf(opListTask);
|
673
|
+
|
674
|
+
if (i >= 0) {
|
675
|
+
intentState.renderTasks.splice(i, 1);
|
881
676
|
}
|
882
|
-
return result;
|
883
677
|
}
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
678
|
+
}
|
679
|
+
|
680
|
+
const renderingIntent = "oplist";
|
681
|
+
|
682
|
+
if (!this.intentStates[renderingIntent]) {
|
683
|
+
this.intentStates[renderingIntent] = Object.create(null);
|
684
|
+
}
|
685
|
+
|
686
|
+
const intentState = this.intentStates[renderingIntent];
|
687
|
+
let opListTask;
|
688
|
+
|
689
|
+
if (!intentState.opListReadCapability) {
|
690
|
+
opListTask = {};
|
691
|
+
opListTask.operatorListChanged = operatorListChanged;
|
692
|
+
intentState.opListReadCapability = (0, _util.createPromiseCapability)();
|
693
|
+
intentState.renderTasks = [];
|
694
|
+
intentState.renderTasks.push(opListTask);
|
695
|
+
intentState.operatorList = {
|
696
|
+
fnArray: [],
|
697
|
+
argsArray: [],
|
698
|
+
lastChunk: false
|
699
|
+
};
|
700
|
+
|
701
|
+
if (this._stats) {
|
702
|
+
this._stats.time("Page Request");
|
703
|
+
}
|
704
|
+
|
705
|
+
this._pumpOperatorList({
|
706
|
+
pageIndex: this._pageIndex,
|
707
|
+
intent: renderingIntent
|
708
|
+
});
|
709
|
+
}
|
710
|
+
|
711
|
+
return intentState.opListReadCapability.promise;
|
712
|
+
}
|
713
|
+
|
714
|
+
streamTextContent({
|
715
|
+
normalizeWhitespace = false,
|
716
|
+
disableCombineTextItems = false
|
717
|
+
} = {}) {
|
718
|
+
const TEXT_CONTENT_CHUNK_SIZE = 100;
|
719
|
+
return this._transport.messageHandler.sendWithStream("GetTextContent", {
|
720
|
+
pageIndex: this._pageIndex,
|
721
|
+
normalizeWhitespace: normalizeWhitespace === true,
|
722
|
+
combineTextItems: disableCombineTextItems !== true
|
723
|
+
}, {
|
724
|
+
highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
|
725
|
+
|
726
|
+
size(textContent) {
|
727
|
+
return textContent.items.length;
|
728
|
+
}
|
729
|
+
|
730
|
+
});
|
731
|
+
}
|
732
|
+
|
733
|
+
getTextContent(params = {}) {
|
734
|
+
const readableStream = this.streamTextContent(params);
|
735
|
+
return new Promise(function (resolve, reject) {
|
736
|
+
function pump() {
|
737
|
+
reader.read().then(function ({
|
738
|
+
value,
|
739
|
+
done
|
740
|
+
}) {
|
741
|
+
if (done) {
|
742
|
+
resolve(textContent);
|
743
|
+
return;
|
744
|
+
}
|
745
|
+
|
746
|
+
Object.assign(textContent.styles, value.styles);
|
747
|
+
textContent.items.push(...value.items);
|
748
|
+
pump();
|
749
|
+
}, reject);
|
750
|
+
}
|
751
|
+
|
752
|
+
const reader = readableStream.getReader();
|
753
|
+
const textContent = {
|
754
|
+
items: [],
|
755
|
+
styles: Object.create(null)
|
756
|
+
};
|
757
|
+
pump();
|
758
|
+
});
|
759
|
+
}
|
760
|
+
|
761
|
+
_destroy() {
|
762
|
+
this.destroyed = true;
|
763
|
+
this._transport.pageCache[this._pageIndex] = null;
|
764
|
+
const waitOn = [];
|
765
|
+
Object.keys(this.intentStates).forEach(intent => {
|
766
|
+
const intentState = this.intentStates[intent];
|
767
|
+
|
768
|
+
this._abortOperatorList({
|
769
|
+
intentState,
|
770
|
+
reason: new Error("Page was destroyed."),
|
771
|
+
force: true
|
772
|
+
});
|
773
|
+
|
774
|
+
if (intent === "oplist") {
|
888
775
|
return;
|
889
776
|
}
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
}, _this5);
|
777
|
+
|
778
|
+
intentState.renderTasks.forEach(function (renderTask) {
|
779
|
+
const renderCompleted = renderTask.capability.promise.catch(function () {});
|
780
|
+
waitOn.push(renderCompleted);
|
781
|
+
renderTask.cancel();
|
896
782
|
});
|
783
|
+
});
|
784
|
+
this.objs.clear();
|
785
|
+
this.annotationsPromise = null;
|
786
|
+
this.pendingCleanup = false;
|
787
|
+
return Promise.all(waitOn);
|
788
|
+
}
|
789
|
+
|
790
|
+
cleanup(resetStats = false) {
|
791
|
+
this.pendingCleanup = true;
|
792
|
+
return this._tryCleanup(resetStats);
|
793
|
+
}
|
794
|
+
|
795
|
+
_tryCleanup(resetStats = false) {
|
796
|
+
if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {
|
797
|
+
const intentState = this.intentStates[intent];
|
798
|
+
return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
|
799
|
+
})) {
|
800
|
+
return false;
|
897
801
|
}
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
802
|
+
|
803
|
+
Object.keys(this.intentStates).forEach(intent => {
|
804
|
+
delete this.intentStates[intent];
|
805
|
+
});
|
806
|
+
this.objs.clear();
|
807
|
+
this.annotationsPromise = null;
|
808
|
+
|
809
|
+
if (resetStats && this._stats) {
|
810
|
+
this._stats = new _display_utils.StatTimer();
|
902
811
|
}
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
812
|
+
|
813
|
+
this.pendingCleanup = false;
|
814
|
+
return true;
|
815
|
+
}
|
816
|
+
|
817
|
+
_startRenderPage(transparency, intent) {
|
818
|
+
const intentState = this.intentStates[intent];
|
819
|
+
|
820
|
+
if (!intentState) {
|
821
|
+
return;
|
908
822
|
}
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
this._listeners = [];
|
823
|
+
|
824
|
+
if (this._stats) {
|
825
|
+
this._stats.timeEnd("Page Request");
|
913
826
|
}
|
914
|
-
}]);
|
915
827
|
|
916
|
-
|
917
|
-
|
828
|
+
if (intentState.displayReadyCapability) {
|
829
|
+
intentState.displayReadyCapability.resolve(transparency);
|
830
|
+
}
|
831
|
+
}
|
832
|
+
|
833
|
+
_renderPageChunk(operatorListChunk, intentState) {
|
834
|
+
for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
|
835
|
+
intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
|
836
|
+
intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
|
837
|
+
}
|
838
|
+
|
839
|
+
intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
|
840
|
+
|
841
|
+
for (let i = 0; i < intentState.renderTasks.length; i++) {
|
842
|
+
intentState.renderTasks[i].operatorListChanged();
|
843
|
+
}
|
844
|
+
|
845
|
+
if (operatorListChunk.lastChunk) {
|
846
|
+
this._tryCleanup();
|
847
|
+
}
|
848
|
+
}
|
849
|
+
|
850
|
+
_pumpOperatorList(args) {
|
851
|
+
(0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.');
|
852
|
+
|
853
|
+
const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args);
|
854
|
+
|
855
|
+
const reader = readableStream.getReader();
|
856
|
+
const intentState = this.intentStates[args.intent];
|
857
|
+
intentState.streamReader = reader;
|
858
|
+
|
859
|
+
const pump = () => {
|
860
|
+
reader.read().then(({
|
861
|
+
value,
|
862
|
+
done
|
863
|
+
}) => {
|
864
|
+
if (done) {
|
865
|
+
intentState.streamReader = null;
|
866
|
+
return;
|
867
|
+
}
|
868
|
+
|
869
|
+
if (this._transport.destroyed) {
|
870
|
+
return;
|
871
|
+
}
|
872
|
+
|
873
|
+
this._renderPageChunk(value, intentState);
|
874
|
+
|
875
|
+
pump();
|
876
|
+
}, reason => {
|
877
|
+
intentState.streamReader = null;
|
878
|
+
|
879
|
+
if (this._transport.destroyed) {
|
880
|
+
return;
|
881
|
+
}
|
882
|
+
|
883
|
+
if (intentState.operatorList) {
|
884
|
+
intentState.operatorList.lastChunk = true;
|
885
|
+
|
886
|
+
for (let i = 0; i < intentState.renderTasks.length; i++) {
|
887
|
+
intentState.renderTasks[i].operatorListChanged();
|
888
|
+
}
|
889
|
+
|
890
|
+
this._tryCleanup();
|
891
|
+
}
|
892
|
+
|
893
|
+
if (intentState.displayReadyCapability) {
|
894
|
+
intentState.displayReadyCapability.reject(reason);
|
895
|
+
} else if (intentState.opListReadCapability) {
|
896
|
+
intentState.opListReadCapability.reject(reason);
|
897
|
+
} else {
|
898
|
+
throw reason;
|
899
|
+
}
|
900
|
+
});
|
901
|
+
};
|
902
|
+
|
903
|
+
pump();
|
904
|
+
}
|
905
|
+
|
906
|
+
_abortOperatorList({
|
907
|
+
intentState,
|
908
|
+
reason,
|
909
|
+
force = false
|
910
|
+
}) {
|
911
|
+
(0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.');
|
912
|
+
|
913
|
+
if (!intentState.streamReader) {
|
914
|
+
return;
|
915
|
+
}
|
916
|
+
|
917
|
+
if (!force) {
|
918
|
+
if (intentState.renderTasks.length !== 0) {
|
919
|
+
return;
|
920
|
+
}
|
921
|
+
|
922
|
+
if (reason instanceof _display_utils.RenderingCancelledException) {
|
923
|
+
intentState.streamReaderCancelTimeout = setTimeout(() => {
|
924
|
+
this._abortOperatorList({
|
925
|
+
intentState,
|
926
|
+
reason,
|
927
|
+
force: true
|
928
|
+
});
|
929
|
+
|
930
|
+
intentState.streamReaderCancelTimeout = null;
|
931
|
+
}, RENDERING_CANCELLED_TIMEOUT);
|
932
|
+
return;
|
933
|
+
}
|
934
|
+
}
|
935
|
+
|
936
|
+
intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
|
937
|
+
intentState.streamReader = null;
|
938
|
+
|
939
|
+
if (this._transport.destroyed) {
|
940
|
+
return;
|
941
|
+
}
|
942
|
+
|
943
|
+
Object.keys(this.intentStates).some(intent => {
|
944
|
+
if (this.intentStates[intent] === intentState) {
|
945
|
+
delete this.intentStates[intent];
|
946
|
+
return true;
|
947
|
+
}
|
948
|
+
|
949
|
+
return false;
|
950
|
+
});
|
951
|
+
this.cleanup();
|
952
|
+
}
|
953
|
+
|
954
|
+
get stats() {
|
955
|
+
return this._stats;
|
956
|
+
}
|
957
|
+
|
958
|
+
}
|
959
|
+
|
960
|
+
exports.PDFPageProxy = PDFPageProxy;
|
961
|
+
|
962
|
+
class LoopbackPort {
|
963
|
+
constructor(defer = true) {
|
964
|
+
this._listeners = [];
|
965
|
+
this._defer = defer;
|
966
|
+
this._deferred = Promise.resolve(undefined);
|
967
|
+
}
|
968
|
+
|
969
|
+
postMessage(obj, transfers) {
|
970
|
+
function cloneValue(value) {
|
971
|
+
if (typeof value !== "object" || value === null) {
|
972
|
+
return value;
|
973
|
+
}
|
974
|
+
|
975
|
+
if (cloned.has(value)) {
|
976
|
+
return cloned.get(value);
|
977
|
+
}
|
978
|
+
|
979
|
+
let buffer, result;
|
980
|
+
|
981
|
+
if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
|
982
|
+
const transferable = transfers && transfers.includes(buffer);
|
983
|
+
|
984
|
+
if (transferable) {
|
985
|
+
result = new value.constructor(buffer, value.byteOffset, value.byteLength);
|
986
|
+
} else {
|
987
|
+
result = new value.constructor(value);
|
988
|
+
}
|
989
|
+
|
990
|
+
cloned.set(value, result);
|
991
|
+
return result;
|
992
|
+
}
|
993
|
+
|
994
|
+
result = Array.isArray(value) ? [] : {};
|
995
|
+
cloned.set(value, result);
|
996
|
+
|
997
|
+
for (const i in value) {
|
998
|
+
let desc,
|
999
|
+
p = value;
|
1000
|
+
|
1001
|
+
while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
|
1002
|
+
p = Object.getPrototypeOf(p);
|
1003
|
+
}
|
1004
|
+
|
1005
|
+
if (typeof desc.value === "undefined") {
|
1006
|
+
continue;
|
1007
|
+
}
|
1008
|
+
|
1009
|
+
if (typeof desc.value === "function") {
|
1010
|
+
if (value.hasOwnProperty && value.hasOwnProperty(i)) {
|
1011
|
+
throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
|
1012
|
+
}
|
1013
|
+
|
1014
|
+
continue;
|
1015
|
+
}
|
1016
|
+
|
1017
|
+
result[i] = cloneValue(desc.value);
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
return result;
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
if (!this._defer) {
|
1024
|
+
this._listeners.forEach(listener => {
|
1025
|
+
listener.call(this, {
|
1026
|
+
data: obj
|
1027
|
+
});
|
1028
|
+
});
|
1029
|
+
|
1030
|
+
return;
|
1031
|
+
}
|
1032
|
+
|
1033
|
+
const cloned = new WeakMap();
|
1034
|
+
const e = {
|
1035
|
+
data: cloneValue(obj)
|
1036
|
+
};
|
1037
|
+
|
1038
|
+
this._deferred.then(() => {
|
1039
|
+
this._listeners.forEach(listener => {
|
1040
|
+
listener.call(this, e);
|
1041
|
+
});
|
1042
|
+
});
|
1043
|
+
}
|
1044
|
+
|
1045
|
+
addEventListener(name, listener) {
|
1046
|
+
this._listeners.push(listener);
|
1047
|
+
}
|
1048
|
+
|
1049
|
+
removeEventListener(name, listener) {
|
1050
|
+
const i = this._listeners.indexOf(listener);
|
1051
|
+
|
1052
|
+
this._listeners.splice(i, 1);
|
1053
|
+
}
|
1054
|
+
|
1055
|
+
terminate() {
|
1056
|
+
this._listeners.length = 0;
|
1057
|
+
}
|
1058
|
+
|
1059
|
+
}
|
1060
|
+
|
1061
|
+
exports.LoopbackPort = LoopbackPort;
|
1062
|
+
|
1063
|
+
const PDFWorker = function PDFWorkerClosure() {
|
1064
|
+
const pdfWorkerPorts = new WeakMap();
|
1065
|
+
let isWorkerDisabled = false;
|
1066
|
+
let fallbackWorkerSrc;
|
1067
|
+
let nextFakeWorkerId = 0;
|
1068
|
+
let fakeWorkerCapability;
|
1069
|
+
|
1070
|
+
if (_is_node.isNodeJS && typeof require === "function") {
|
1071
|
+
isWorkerDisabled = true;
|
1072
|
+
fallbackWorkerSrc = "../pdf.worker.js";
|
1073
|
+
} else if (typeof document === "object" && "currentScript" in document) {
|
1074
|
+
const pdfjsFilePath = document.currentScript && document.currentScript.src;
|
1075
|
+
|
1076
|
+
if (pdfjsFilePath) {
|
1077
|
+
fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
|
1078
|
+
}
|
1079
|
+
}
|
918
1080
|
|
919
|
-
var PDFWorker = function PDFWorkerClosure() {
|
920
|
-
var nextFakeWorkerId = 0;
|
921
1081
|
function getWorkerSrc() {
|
922
1082
|
if (_worker_options.GlobalWorkerOptions.workerSrc) {
|
923
1083
|
return _worker_options.GlobalWorkerOptions.workerSrc;
|
924
1084
|
}
|
925
|
-
|
1085
|
+
|
1086
|
+
if (typeof fallbackWorkerSrc !== "undefined") {
|
1087
|
+
if (!_is_node.isNodeJS) {
|
1088
|
+
(0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
|
1089
|
+
}
|
1090
|
+
|
926
1091
|
return fallbackWorkerSrc;
|
927
1092
|
}
|
1093
|
+
|
928
1094
|
throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
|
929
1095
|
}
|
1096
|
+
|
930
1097
|
function getMainThreadWorkerMessageHandler() {
|
1098
|
+
let mainWorkerMessageHandler;
|
1099
|
+
|
931
1100
|
try {
|
932
|
-
|
933
|
-
return window.pdfjsWorker && window.pdfjsWorker.WorkerMessageHandler;
|
934
|
-
}
|
1101
|
+
mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
|
935
1102
|
} catch (ex) {}
|
936
|
-
|
1103
|
+
|
1104
|
+
return mainWorkerMessageHandler || null;
|
937
1105
|
}
|
938
|
-
|
1106
|
+
|
939
1107
|
function setupFakeWorkerGlobal() {
|
940
|
-
if (
|
941
|
-
return
|
942
|
-
}
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
1108
|
+
if (fakeWorkerCapability) {
|
1109
|
+
return fakeWorkerCapability.promise;
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
fakeWorkerCapability = (0, _util.createPromiseCapability)();
|
1113
|
+
|
1114
|
+
const loader = async function () {
|
1115
|
+
const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
|
1116
|
+
|
1117
|
+
if (mainWorkerMessageHandler) {
|
1118
|
+
return mainWorkerMessageHandler;
|
1119
|
+
}
|
1120
|
+
|
1121
|
+
if (_is_node.isNodeJS && typeof require === "function") {
|
1122
|
+
const worker = eval("require")(getWorkerSrc());
|
1123
|
+
return worker.WorkerMessageHandler;
|
1124
|
+
}
|
1125
|
+
|
1126
|
+
await (0, _display_utils.loadScript)(getWorkerSrc());
|
1127
|
+
return window.pdfjsWorker.WorkerMessageHandler;
|
953
1128
|
};
|
954
|
-
|
955
|
-
|
1129
|
+
|
1130
|
+
loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
|
1131
|
+
return fakeWorkerCapability.promise;
|
956
1132
|
}
|
1133
|
+
|
957
1134
|
function createCDNWrapper(url) {
|
958
|
-
|
959
|
-
return
|
960
|
-
}
|
961
|
-
var pdfWorkerPorts = new WeakMap();
|
962
|
-
function PDFWorker() {
|
963
|
-
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
964
|
-
_ref2$name = _ref2.name,
|
965
|
-
name = _ref2$name === undefined ? null : _ref2$name,
|
966
|
-
_ref2$port = _ref2.port,
|
967
|
-
port = _ref2$port === undefined ? null : _ref2$port,
|
968
|
-
_ref2$postMessageTran = _ref2.postMessageTransfers,
|
969
|
-
postMessageTransfers = _ref2$postMessageTran === undefined ? true : _ref2$postMessageTran,
|
970
|
-
_ref2$verbosity = _ref2.verbosity,
|
971
|
-
verbosity = _ref2$verbosity === undefined ? (0, _util.getVerbosityLevel)() : _ref2$verbosity;
|
972
|
-
|
973
|
-
if (port && pdfWorkerPorts.has(port)) {
|
974
|
-
throw new Error('Cannot use more than one PDFWorker per port');
|
975
|
-
}
|
976
|
-
this.name = name;
|
977
|
-
this.destroyed = false;
|
978
|
-
this.postMessageTransfers = postMessageTransfers !== false;
|
979
|
-
this.verbosity = verbosity;
|
980
|
-
this._readyCapability = (0, _util.createPromiseCapability)();
|
981
|
-
this._port = null;
|
982
|
-
this._webWorker = null;
|
983
|
-
this._messageHandler = null;
|
984
|
-
if (port) {
|
985
|
-
pdfWorkerPorts.set(port, this);
|
986
|
-
this._initializeFromPort(port);
|
987
|
-
return;
|
988
|
-
}
|
989
|
-
this._initialize();
|
1135
|
+
const wrapper = "importScripts('" + url + "');";
|
1136
|
+
return URL.createObjectURL(new Blob([wrapper]));
|
990
1137
|
}
|
991
|
-
|
1138
|
+
|
1139
|
+
class PDFWorker {
|
1140
|
+
constructor({
|
1141
|
+
name = null,
|
1142
|
+
port = null,
|
1143
|
+
verbosity = (0, _util.getVerbosityLevel)()
|
1144
|
+
} = {}) {
|
1145
|
+
if (port && pdfWorkerPorts.has(port)) {
|
1146
|
+
throw new Error("Cannot use more than one PDFWorker per port");
|
1147
|
+
}
|
1148
|
+
|
1149
|
+
this.name = name;
|
1150
|
+
this.destroyed = false;
|
1151
|
+
this.postMessageTransfers = true;
|
1152
|
+
this.verbosity = verbosity;
|
1153
|
+
this._readyCapability = (0, _util.createPromiseCapability)();
|
1154
|
+
this._port = null;
|
1155
|
+
this._webWorker = null;
|
1156
|
+
this._messageHandler = null;
|
1157
|
+
|
1158
|
+
if (port) {
|
1159
|
+
pdfWorkerPorts.set(port, this);
|
1160
|
+
|
1161
|
+
this._initializeFromPort(port);
|
1162
|
+
|
1163
|
+
return;
|
1164
|
+
}
|
1165
|
+
|
1166
|
+
this._initialize();
|
1167
|
+
}
|
1168
|
+
|
992
1169
|
get promise() {
|
993
1170
|
return this._readyCapability.promise;
|
994
|
-
}
|
1171
|
+
}
|
1172
|
+
|
995
1173
|
get port() {
|
996
1174
|
return this._port;
|
997
|
-
}
|
1175
|
+
}
|
1176
|
+
|
998
1177
|
get messageHandler() {
|
999
1178
|
return this._messageHandler;
|
1000
|
-
}
|
1001
|
-
|
1179
|
+
}
|
1180
|
+
|
1181
|
+
_initializeFromPort(port) {
|
1002
1182
|
this._port = port;
|
1003
|
-
this._messageHandler = new _message_handler.MessageHandler(
|
1004
|
-
|
1183
|
+
this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
|
1184
|
+
|
1185
|
+
this._messageHandler.on("ready", function () {});
|
1186
|
+
|
1005
1187
|
this._readyCapability.resolve();
|
1006
|
-
}
|
1007
|
-
|
1008
|
-
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
_initialize() {
|
1191
|
+
if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
|
1192
|
+
let workerSrc = getWorkerSrc();
|
1009
1193
|
|
1010
|
-
if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
|
1011
|
-
var workerSrc = getWorkerSrc();
|
1012
1194
|
try {
|
1013
1195
|
if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
|
1014
|
-
workerSrc = createCDNWrapper(new
|
1196
|
+
workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
|
1015
1197
|
}
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1198
|
+
|
1199
|
+
const worker = new Worker(workerSrc);
|
1200
|
+
const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
|
1201
|
+
|
1202
|
+
const terminateEarly = () => {
|
1203
|
+
worker.removeEventListener("error", onWorkerError);
|
1020
1204
|
messageHandler.destroy();
|
1021
1205
|
worker.terminate();
|
1022
|
-
|
1023
|
-
|
1206
|
+
|
1207
|
+
if (this.destroyed) {
|
1208
|
+
this._readyCapability.reject(new Error("Worker was destroyed"));
|
1024
1209
|
} else {
|
1025
|
-
|
1210
|
+
this._setupFakeWorker();
|
1026
1211
|
}
|
1027
1212
|
};
|
1028
|
-
|
1029
|
-
|
1213
|
+
|
1214
|
+
const onWorkerError = () => {
|
1215
|
+
if (!this._webWorker) {
|
1030
1216
|
terminateEarly();
|
1031
1217
|
}
|
1032
1218
|
};
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1219
|
+
|
1220
|
+
worker.addEventListener("error", onWorkerError);
|
1221
|
+
messageHandler.on("test", data => {
|
1222
|
+
worker.removeEventListener("error", onWorkerError);
|
1223
|
+
|
1224
|
+
if (this.destroyed) {
|
1037
1225
|
terminateEarly();
|
1038
1226
|
return;
|
1039
1227
|
}
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1228
|
+
|
1229
|
+
if (data) {
|
1230
|
+
this._messageHandler = messageHandler;
|
1231
|
+
this._port = worker;
|
1232
|
+
this._webWorker = worker;
|
1233
|
+
|
1044
1234
|
if (!data.supportTransfers) {
|
1045
|
-
|
1235
|
+
this.postMessageTransfers = false;
|
1046
1236
|
}
|
1047
|
-
|
1048
|
-
|
1237
|
+
|
1238
|
+
this._readyCapability.resolve();
|
1239
|
+
|
1240
|
+
messageHandler.send("configure", {
|
1241
|
+
verbosity: this.verbosity
|
1242
|
+
});
|
1049
1243
|
} else {
|
1050
|
-
|
1244
|
+
this._setupFakeWorker();
|
1245
|
+
|
1051
1246
|
messageHandler.destroy();
|
1052
1247
|
worker.terminate();
|
1053
1248
|
}
|
1054
1249
|
});
|
1055
|
-
messageHandler.on(
|
1056
|
-
worker.removeEventListener(
|
1057
|
-
|
1250
|
+
messageHandler.on("ready", data => {
|
1251
|
+
worker.removeEventListener("error", onWorkerError);
|
1252
|
+
|
1253
|
+
if (this.destroyed) {
|
1058
1254
|
terminateEarly();
|
1059
1255
|
return;
|
1060
1256
|
}
|
1257
|
+
|
1061
1258
|
try {
|
1062
1259
|
sendTest();
|
1063
1260
|
} catch (e) {
|
1064
|
-
|
1261
|
+
this._setupFakeWorker();
|
1065
1262
|
}
|
1066
1263
|
});
|
1067
|
-
|
1068
|
-
|
1264
|
+
|
1265
|
+
const sendTest = () => {
|
1266
|
+
const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);
|
1267
|
+
|
1069
1268
|
try {
|
1070
|
-
messageHandler.send(
|
1269
|
+
messageHandler.send("test", testObj, [testObj.buffer]);
|
1071
1270
|
} catch (ex) {
|
1072
|
-
(0, _util.
|
1271
|
+
(0, _util.warn)("Cannot use postMessage transfers.");
|
1073
1272
|
testObj[0] = 0;
|
1074
|
-
messageHandler.send(
|
1273
|
+
messageHandler.send("test", testObj);
|
1075
1274
|
}
|
1076
1275
|
};
|
1276
|
+
|
1077
1277
|
sendTest();
|
1078
1278
|
return;
|
1079
1279
|
} catch (e) {
|
1080
|
-
(0, _util.info)(
|
1280
|
+
(0, _util.info)("The worker has been disabled.");
|
1081
1281
|
}
|
1082
1282
|
}
|
1283
|
+
|
1083
1284
|
this._setupFakeWorker();
|
1084
|
-
}
|
1085
|
-
_setupFakeWorker: function PDFWorker_setupFakeWorker() {
|
1086
|
-
var _this7 = this;
|
1285
|
+
}
|
1087
1286
|
|
1287
|
+
_setupFakeWorker() {
|
1088
1288
|
if (!isWorkerDisabled) {
|
1089
|
-
(0, _util.warn)(
|
1289
|
+
(0, _util.warn)("Setting up fake worker.");
|
1090
1290
|
isWorkerDisabled = true;
|
1091
1291
|
}
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1292
|
+
|
1293
|
+
setupFakeWorkerGlobal().then(WorkerMessageHandler => {
|
1294
|
+
if (this.destroyed) {
|
1295
|
+
this._readyCapability.reject(new Error("Worker was destroyed"));
|
1296
|
+
|
1095
1297
|
return;
|
1096
1298
|
}
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1299
|
+
|
1300
|
+
const port = new LoopbackPort();
|
1301
|
+
this._port = port;
|
1302
|
+
const id = "fake" + nextFakeWorkerId++;
|
1303
|
+
const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
|
1101
1304
|
WorkerMessageHandler.setup(workerHandler, port);
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1305
|
+
const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
|
1306
|
+
this._messageHandler = messageHandler;
|
1307
|
+
|
1308
|
+
this._readyCapability.resolve();
|
1309
|
+
|
1310
|
+
messageHandler.send("configure", {
|
1311
|
+
verbosity: this.verbosity
|
1312
|
+
});
|
1313
|
+
}).catch(reason => {
|
1314
|
+
this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
|
1107
1315
|
});
|
1108
|
-
}
|
1109
|
-
|
1316
|
+
}
|
1317
|
+
|
1318
|
+
destroy() {
|
1110
1319
|
this.destroyed = true;
|
1320
|
+
|
1111
1321
|
if (this._webWorker) {
|
1112
1322
|
this._webWorker.terminate();
|
1323
|
+
|
1113
1324
|
this._webWorker = null;
|
1114
1325
|
}
|
1326
|
+
|
1115
1327
|
pdfWorkerPorts.delete(this._port);
|
1116
1328
|
this._port = null;
|
1329
|
+
|
1117
1330
|
if (this._messageHandler) {
|
1118
1331
|
this._messageHandler.destroy();
|
1332
|
+
|
1119
1333
|
this._messageHandler = null;
|
1120
1334
|
}
|
1121
1335
|
}
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1336
|
+
|
1337
|
+
static fromPort(params) {
|
1338
|
+
if (!params || !params.port) {
|
1339
|
+
throw new Error("PDFWorker.fromPort - invalid method signature.");
|
1340
|
+
}
|
1341
|
+
|
1342
|
+
if (pdfWorkerPorts.has(params.port)) {
|
1343
|
+
return pdfWorkerPorts.get(params.port);
|
1344
|
+
}
|
1345
|
+
|
1346
|
+
return new PDFWorker(params);
|
1126
1347
|
}
|
1127
|
-
|
1128
|
-
|
1348
|
+
|
1349
|
+
static getWorkerSrc() {
|
1350
|
+
return getWorkerSrc();
|
1129
1351
|
}
|
1130
|
-
|
1131
|
-
}
|
1132
|
-
|
1133
|
-
return getWorkerSrc();
|
1134
|
-
};
|
1352
|
+
|
1353
|
+
}
|
1354
|
+
|
1135
1355
|
return PDFWorker;
|
1136
1356
|
}();
|
1137
1357
|
|
1138
|
-
|
1139
|
-
function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
|
1140
|
-
_classCallCheck(this, WorkerTransport);
|
1358
|
+
exports.PDFWorker = PDFWorker;
|
1141
1359
|
|
1360
|
+
class WorkerTransport {
|
1361
|
+
constructor(messageHandler, loadingTask, networkStream, params) {
|
1142
1362
|
this.messageHandler = messageHandler;
|
1143
1363
|
this.loadingTask = loadingTask;
|
1144
1364
|
this.commonObjs = new PDFObjects();
|
1145
|
-
this.fontLoader = new _font_loader.FontLoader(
|
1365
|
+
this.fontLoader = new _font_loader.FontLoader({
|
1366
|
+
docId: loadingTask.docId,
|
1367
|
+
onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
|
1368
|
+
});
|
1146
1369
|
this._params = params;
|
1147
1370
|
this.CMapReaderFactory = new params.CMapReaderFactory({
|
1148
1371
|
baseUrl: params.cMapUrl,
|
@@ -1160,731 +1383,824 @@ var WorkerTransport = function () {
|
|
1160
1383
|
this.setupMessageHandler();
|
1161
1384
|
}
|
1162
1385
|
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1386
|
+
destroy() {
|
1387
|
+
if (this.destroyCapability) {
|
1388
|
+
return this.destroyCapability.promise;
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
this.destroyed = true;
|
1392
|
+
this.destroyCapability = (0, _util.createPromiseCapability)();
|
1393
|
+
|
1394
|
+
if (this._passwordCapability) {
|
1395
|
+
this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
|
1396
|
+
}
|
1167
1397
|
|
1168
|
-
|
1169
|
-
|
1398
|
+
const waitOn = [];
|
1399
|
+
this.pageCache.forEach(function (page) {
|
1400
|
+
if (page) {
|
1401
|
+
waitOn.push(page._destroy());
|
1170
1402
|
}
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1403
|
+
});
|
1404
|
+
this.pageCache.length = 0;
|
1405
|
+
this.pagePromises.length = 0;
|
1406
|
+
const terminated = this.messageHandler.sendWithPromise("Terminate", null);
|
1407
|
+
waitOn.push(terminated);
|
1408
|
+
Promise.all(waitOn).then(() => {
|
1409
|
+
this.fontLoader.clear();
|
1410
|
+
|
1411
|
+
if (this._networkStream) {
|
1412
|
+
this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
|
1175
1413
|
}
|
1176
|
-
|
1177
|
-
this.
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
this.
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
key: 'setupMessageHandler',
|
1201
|
-
value: function setupMessageHandler() {
|
1202
|
-
var messageHandler = this.messageHandler,
|
1203
|
-
loadingTask = this.loadingTask;
|
1204
|
-
|
1205
|
-
messageHandler.on('GetReader', function (data, sink) {
|
1206
|
-
var _this9 = this;
|
1207
|
-
|
1208
|
-
(0, _util.assert)(this._networkStream);
|
1209
|
-
this._fullReader = this._networkStream.getFullReader();
|
1210
|
-
this._fullReader.onProgress = function (evt) {
|
1211
|
-
_this9._lastProgress = {
|
1212
|
-
loaded: evt.loaded,
|
1213
|
-
total: evt.total
|
1214
|
-
};
|
1414
|
+
|
1415
|
+
if (this.messageHandler) {
|
1416
|
+
this.messageHandler.destroy();
|
1417
|
+
this.messageHandler = null;
|
1418
|
+
}
|
1419
|
+
|
1420
|
+
this.destroyCapability.resolve();
|
1421
|
+
}, this.destroyCapability.reject);
|
1422
|
+
return this.destroyCapability.promise;
|
1423
|
+
}
|
1424
|
+
|
1425
|
+
setupMessageHandler() {
|
1426
|
+
const {
|
1427
|
+
messageHandler,
|
1428
|
+
loadingTask
|
1429
|
+
} = this;
|
1430
|
+
messageHandler.on("GetReader", (data, sink) => {
|
1431
|
+
(0, _util.assert)(this._networkStream);
|
1432
|
+
this._fullReader = this._networkStream.getFullReader();
|
1433
|
+
|
1434
|
+
this._fullReader.onProgress = evt => {
|
1435
|
+
this._lastProgress = {
|
1436
|
+
loaded: evt.loaded,
|
1437
|
+
total: evt.total
|
1215
1438
|
};
|
1216
|
-
|
1217
|
-
_this9._fullReader.read().then(function (_ref3) {
|
1218
|
-
var value = _ref3.value,
|
1219
|
-
done = _ref3.done;
|
1439
|
+
};
|
1220
1440
|
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1441
|
+
sink.onPull = () => {
|
1442
|
+
this._fullReader.read().then(function ({
|
1443
|
+
value,
|
1444
|
+
done
|
1445
|
+
}) {
|
1446
|
+
if (done) {
|
1447
|
+
sink.close();
|
1448
|
+
return;
|
1449
|
+
}
|
1450
|
+
|
1451
|
+
(0, _util.assert)((0, _util.isArrayBuffer)(value));
|
1452
|
+
sink.enqueue(new Uint8Array(value), 1, [value]);
|
1453
|
+
}).catch(reason => {
|
1454
|
+
sink.error(reason);
|
1455
|
+
});
|
1456
|
+
};
|
1457
|
+
|
1458
|
+
sink.onCancel = reason => {
|
1459
|
+
this._fullReader.cancel(reason);
|
1460
|
+
};
|
1461
|
+
});
|
1462
|
+
messageHandler.on("ReaderHeadersReady", data => {
|
1463
|
+
const headersCapability = (0, _util.createPromiseCapability)();
|
1464
|
+
const fullReader = this._fullReader;
|
1465
|
+
fullReader.headersReady.then(() => {
|
1466
|
+
if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
|
1467
|
+
if (this._lastProgress && loadingTask.onProgress) {
|
1468
|
+
loadingTask.onProgress(this._lastProgress);
|
1469
|
+
}
|
1470
|
+
|
1471
|
+
fullReader.onProgress = evt => {
|
1472
|
+
if (loadingTask.onProgress) {
|
1473
|
+
loadingTask.onProgress({
|
1474
|
+
loaded: evt.loaded,
|
1475
|
+
total: evt.total
|
1476
|
+
});
|
1224
1477
|
}
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1478
|
+
};
|
1479
|
+
}
|
1480
|
+
|
1481
|
+
headersCapability.resolve({
|
1482
|
+
isStreamingSupported: fullReader.isStreamingSupported,
|
1483
|
+
isRangeSupported: fullReader.isRangeSupported,
|
1484
|
+
contentLength: fullReader.contentLength
|
1485
|
+
});
|
1486
|
+
}, headersCapability.reject);
|
1487
|
+
return headersCapability.promise;
|
1488
|
+
});
|
1489
|
+
messageHandler.on("GetRangeReader", (data, sink) => {
|
1490
|
+
(0, _util.assert)(this._networkStream);
|
1491
|
+
|
1492
|
+
const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
|
1493
|
+
|
1494
|
+
if (!rangeReader) {
|
1495
|
+
sink.close();
|
1496
|
+
return;
|
1497
|
+
}
|
1498
|
+
|
1499
|
+
sink.onPull = () => {
|
1500
|
+
rangeReader.read().then(function ({
|
1501
|
+
value,
|
1502
|
+
done
|
1503
|
+
}) {
|
1504
|
+
if (done) {
|
1505
|
+
sink.close();
|
1506
|
+
return;
|
1507
|
+
}
|
1508
|
+
|
1509
|
+
(0, _util.assert)((0, _util.isArrayBuffer)(value));
|
1510
|
+
sink.enqueue(new Uint8Array(value), 1, [value]);
|
1511
|
+
}).catch(reason => {
|
1512
|
+
sink.error(reason);
|
1513
|
+
});
|
1514
|
+
};
|
1515
|
+
|
1516
|
+
sink.onCancel = reason => {
|
1517
|
+
rangeReader.cancel(reason);
|
1518
|
+
};
|
1519
|
+
});
|
1520
|
+
messageHandler.on("GetDoc", ({
|
1521
|
+
pdfInfo
|
1522
|
+
}) => {
|
1523
|
+
this._numPages = pdfInfo.numPages;
|
1524
|
+
|
1525
|
+
loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
|
1526
|
+
});
|
1527
|
+
messageHandler.on("DocException", function (ex) {
|
1528
|
+
let reason;
|
1529
|
+
|
1530
|
+
switch (ex.name) {
|
1531
|
+
case "PasswordException":
|
1532
|
+
reason = new _util.PasswordException(ex.message, ex.code);
|
1533
|
+
break;
|
1534
|
+
|
1535
|
+
case "InvalidPDFException":
|
1536
|
+
reason = new _util.InvalidPDFException(ex.message);
|
1537
|
+
break;
|
1538
|
+
|
1539
|
+
case "MissingPDFException":
|
1540
|
+
reason = new _util.MissingPDFException(ex.message);
|
1541
|
+
break;
|
1542
|
+
|
1543
|
+
case "UnexpectedResponseException":
|
1544
|
+
reason = new _util.UnexpectedResponseException(ex.message, ex.status);
|
1545
|
+
break;
|
1546
|
+
|
1547
|
+
case "UnknownErrorException":
|
1548
|
+
reason = new _util.UnknownErrorException(ex.message, ex.details);
|
1549
|
+
break;
|
1550
|
+
}
|
1551
|
+
|
1552
|
+
loadingTask._capability.reject(reason);
|
1553
|
+
});
|
1554
|
+
messageHandler.on("PasswordRequest", exception => {
|
1555
|
+
this._passwordCapability = (0, _util.createPromiseCapability)();
|
1556
|
+
|
1557
|
+
if (loadingTask.onPassword) {
|
1558
|
+
const updatePassword = password => {
|
1559
|
+
this._passwordCapability.resolve({
|
1560
|
+
password
|
1229
1561
|
});
|
1230
1562
|
};
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1563
|
+
|
1564
|
+
try {
|
1565
|
+
loadingTask.onPassword(updatePassword, exception.code);
|
1566
|
+
} catch (ex) {
|
1567
|
+
this._passwordCapability.reject(ex);
|
1568
|
+
}
|
1569
|
+
} else {
|
1570
|
+
this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
|
1571
|
+
}
|
1572
|
+
|
1573
|
+
return this._passwordCapability.promise;
|
1574
|
+
});
|
1575
|
+
messageHandler.on("DataLoaded", data => {
|
1576
|
+
if (loadingTask.onProgress) {
|
1577
|
+
loadingTask.onProgress({
|
1578
|
+
loaded: data.length,
|
1579
|
+
total: data.length
|
1580
|
+
});
|
1581
|
+
}
|
1582
|
+
|
1583
|
+
this.downloadInfoCapability.resolve(data);
|
1584
|
+
});
|
1585
|
+
messageHandler.on("StartRenderPage", data => {
|
1586
|
+
if (this.destroyed) {
|
1587
|
+
return;
|
1588
|
+
}
|
1589
|
+
|
1590
|
+
const page = this.pageCache[data.pageIndex];
|
1591
|
+
|
1592
|
+
page._startRenderPage(data.transparency, data.intent);
|
1593
|
+
});
|
1594
|
+
messageHandler.on("commonobj", data => {
|
1595
|
+
if (this.destroyed) {
|
1596
|
+
return;
|
1597
|
+
}
|
1598
|
+
|
1599
|
+
const [id, type, exportedData] = data;
|
1600
|
+
|
1601
|
+
if (this.commonObjs.has(id)) {
|
1602
|
+
return;
|
1603
|
+
}
|
1604
|
+
|
1605
|
+
switch (type) {
|
1606
|
+
case "Font":
|
1607
|
+
const params = this._params;
|
1608
|
+
|
1609
|
+
if ("error" in exportedData) {
|
1610
|
+
const exportedError = exportedData.error;
|
1611
|
+
(0, _util.warn)(`Error during font loading: ${exportedError}`);
|
1612
|
+
this.commonObjs.resolve(id, exportedError);
|
1613
|
+
break;
|
1614
|
+
}
|
1615
|
+
|
1616
|
+
let fontRegistry = null;
|
1617
|
+
|
1618
|
+
if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
|
1619
|
+
fontRegistry = {
|
1620
|
+
registerFont(font, url) {
|
1621
|
+
globalThis.FontInspector.fontAdded(font, url);
|
1622
|
+
}
|
1623
|
+
|
1624
|
+
};
|
1625
|
+
}
|
1626
|
+
|
1627
|
+
const font = new _font_loader.FontFaceObject(exportedData, {
|
1628
|
+
isEvalSupported: params.isEvalSupported,
|
1629
|
+
disableFontFace: params.disableFontFace,
|
1630
|
+
ignoreErrors: params.ignoreErrors,
|
1631
|
+
onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
|
1632
|
+
fontRegistry
|
1633
|
+
});
|
1634
|
+
this.fontLoader.bind(font).then(() => {
|
1635
|
+
this.commonObjs.resolve(id, font);
|
1636
|
+
}, reason => {
|
1637
|
+
messageHandler.sendWithPromise("FontFallback", {
|
1638
|
+
id
|
1639
|
+
}).finally(() => {
|
1640
|
+
this.commonObjs.resolve(id, font);
|
1641
|
+
});
|
1642
|
+
});
|
1643
|
+
break;
|
1644
|
+
|
1645
|
+
case "FontPath":
|
1646
|
+
case "FontType3Res":
|
1647
|
+
this.commonObjs.resolve(id, exportedData);
|
1648
|
+
break;
|
1649
|
+
|
1650
|
+
default:
|
1651
|
+
throw new Error(`Got unknown common object type ${type}`);
|
1652
|
+
}
|
1653
|
+
});
|
1654
|
+
messageHandler.on("obj", data => {
|
1655
|
+
if (this.destroyed) {
|
1656
|
+
return undefined;
|
1657
|
+
}
|
1658
|
+
|
1659
|
+
const [id, pageIndex, type, imageData] = data;
|
1660
|
+
const pageProxy = this.pageCache[pageIndex];
|
1661
|
+
|
1662
|
+
if (pageProxy.objs.has(id)) {
|
1663
|
+
return undefined;
|
1664
|
+
}
|
1665
|
+
|
1666
|
+
switch (type) {
|
1667
|
+
case "JpegStream":
|
1668
|
+
return new Promise((resolve, reject) => {
|
1669
|
+
const img = new Image();
|
1670
|
+
|
1671
|
+
img.onload = function () {
|
1672
|
+
resolve(img);
|
1673
|
+
};
|
1674
|
+
|
1675
|
+
img.onerror = function () {
|
1676
|
+
reject(new Error("Error during JPEG image loading"));
|
1677
|
+
(0, _display_utils.releaseImageResources)(img);
|
1678
|
+
};
|
1679
|
+
|
1680
|
+
img.src = imageData;
|
1681
|
+
}).then(img => {
|
1682
|
+
pageProxy.objs.resolve(id, img);
|
1683
|
+
});
|
1684
|
+
|
1685
|
+
case "Image":
|
1686
|
+
pageProxy.objs.resolve(id, imageData);
|
1687
|
+
const MAX_IMAGE_SIZE_TO_STORE = 8000000;
|
1688
|
+
|
1689
|
+
if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
|
1690
|
+
pageProxy.cleanupAfterRender = true;
|
1691
|
+
}
|
1692
|
+
|
1693
|
+
break;
|
1694
|
+
|
1695
|
+
default:
|
1696
|
+
throw new Error(`Got unknown object type ${type}`);
|
1697
|
+
}
|
1698
|
+
|
1699
|
+
return undefined;
|
1700
|
+
});
|
1701
|
+
messageHandler.on("DocProgress", data => {
|
1702
|
+
if (this.destroyed) {
|
1703
|
+
return;
|
1704
|
+
}
|
1705
|
+
|
1706
|
+
if (loadingTask.onProgress) {
|
1707
|
+
loadingTask.onProgress({
|
1708
|
+
loaded: data.loaded,
|
1709
|
+
total: data.total
|
1710
|
+
});
|
1711
|
+
}
|
1712
|
+
});
|
1713
|
+
messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
|
1714
|
+
messageHandler.on("JpegDecode", data => {
|
1715
|
+
if (this.destroyed) {
|
1716
|
+
return Promise.reject(new Error("Worker was destroyed"));
|
1717
|
+
}
|
1718
|
+
|
1719
|
+
if (typeof document === "undefined") {
|
1720
|
+
return Promise.reject(new Error('"document" is not defined.'));
|
1721
|
+
}
|
1722
|
+
|
1723
|
+
const [imageUrl, components] = data;
|
1724
|
+
|
1725
|
+
if (components !== 3 && components !== 1) {
|
1726
|
+
return Promise.reject(new Error("Only 3 components or 1 component can be returned"));
|
1727
|
+
}
|
1728
|
+
|
1729
|
+
return new Promise(function (resolve, reject) {
|
1730
|
+
const img = new Image();
|
1731
|
+
|
1732
|
+
img.onload = function () {
|
1733
|
+
const {
|
1734
|
+
width,
|
1735
|
+
height
|
1736
|
+
} = img;
|
1737
|
+
const size = width * height;
|
1738
|
+
const rgbaLength = size * 4;
|
1739
|
+
const buf = new Uint8ClampedArray(size * components);
|
1740
|
+
let tmpCanvas = document.createElement("canvas");
|
1741
|
+
tmpCanvas.width = width;
|
1742
|
+
tmpCanvas.height = height;
|
1743
|
+
let tmpCtx = tmpCanvas.getContext("2d");
|
1744
|
+
tmpCtx.drawImage(img, 0, 0);
|
1745
|
+
const data = tmpCtx.getImageData(0, 0, width, height).data;
|
1746
|
+
|
1747
|
+
if (components === 3) {
|
1748
|
+
for (let i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
|
1749
|
+
buf[j] = data[i];
|
1750
|
+
buf[j + 1] = data[i + 1];
|
1751
|
+
buf[j + 2] = data[i + 2];
|
1244
1752
|
}
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
loaded: evt.loaded,
|
1249
|
-
total: evt.total
|
1250
|
-
});
|
1251
|
-
}
|
1252
|
-
};
|
1253
|
-
}
|
1254
|
-
headersCapability.resolve({
|
1255
|
-
isStreamingSupported: fullReader.isStreamingSupported,
|
1256
|
-
isRangeSupported: fullReader.isRangeSupported,
|
1257
|
-
contentLength: fullReader.contentLength
|
1258
|
-
});
|
1259
|
-
}, headersCapability.reject);
|
1260
|
-
return headersCapability.promise;
|
1261
|
-
}, this);
|
1262
|
-
messageHandler.on('GetRangeReader', function (data, sink) {
|
1263
|
-
(0, _util.assert)(this._networkStream);
|
1264
|
-
var rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
|
1265
|
-
sink.onPull = function () {
|
1266
|
-
rangeReader.read().then(function (_ref4) {
|
1267
|
-
var value = _ref4.value,
|
1268
|
-
done = _ref4.done;
|
1269
|
-
|
1270
|
-
if (done) {
|
1271
|
-
sink.close();
|
1272
|
-
return;
|
1753
|
+
} else if (components === 1) {
|
1754
|
+
for (let i = 0, j = 0; i < rgbaLength; i += 4, j++) {
|
1755
|
+
buf[j] = data[i];
|
1273
1756
|
}
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1757
|
+
}
|
1758
|
+
|
1759
|
+
resolve({
|
1760
|
+
data: buf,
|
1761
|
+
width,
|
1762
|
+
height
|
1278
1763
|
});
|
1764
|
+
(0, _display_utils.releaseImageResources)(img);
|
1765
|
+
tmpCanvas.width = 0;
|
1766
|
+
tmpCanvas.height = 0;
|
1767
|
+
tmpCanvas = null;
|
1768
|
+
tmpCtx = null;
|
1279
1769
|
};
|
1280
|
-
|
1281
|
-
|
1770
|
+
|
1771
|
+
img.onerror = function () {
|
1772
|
+
reject(new Error("JpegDecode failed to load image"));
|
1773
|
+
(0, _display_utils.releaseImageResources)(img);
|
1282
1774
|
};
|
1283
|
-
}, this);
|
1284
|
-
messageHandler.on('GetDoc', function (_ref5) {
|
1285
|
-
var pdfInfo = _ref5.pdfInfo;
|
1286
|
-
|
1287
|
-
this.numPages = pdfInfo.numPages;
|
1288
|
-
this.pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
|
1289
|
-
loadingTask._capability.resolve(this.pdfDocument);
|
1290
|
-
}, this);
|
1291
|
-
messageHandler.on('PasswordRequest', function (exception) {
|
1292
|
-
var _this11 = this;
|
1293
|
-
|
1294
|
-
this._passwordCapability = (0, _util.createPromiseCapability)();
|
1295
|
-
if (loadingTask.onPassword) {
|
1296
|
-
var updatePassword = function updatePassword(password) {
|
1297
|
-
_this11._passwordCapability.resolve({ password: password });
|
1298
|
-
};
|
1299
|
-
try {
|
1300
|
-
loadingTask.onPassword(updatePassword, exception.code);
|
1301
|
-
} catch (ex) {
|
1302
|
-
this._passwordCapability.reject(ex);
|
1303
|
-
}
|
1304
|
-
} else {
|
1305
|
-
this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
|
1306
|
-
}
|
1307
|
-
return this._passwordCapability.promise;
|
1308
|
-
}, this);
|
1309
|
-
messageHandler.on('PasswordException', function (exception) {
|
1310
|
-
loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
|
1311
|
-
}, this);
|
1312
|
-
messageHandler.on('InvalidPDF', function (exception) {
|
1313
|
-
loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
|
1314
|
-
}, this);
|
1315
|
-
messageHandler.on('MissingPDF', function (exception) {
|
1316
|
-
loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
|
1317
|
-
}, this);
|
1318
|
-
messageHandler.on('UnexpectedResponse', function (exception) {
|
1319
|
-
loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
|
1320
|
-
}, this);
|
1321
|
-
messageHandler.on('UnknownError', function (exception) {
|
1322
|
-
loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
|
1323
|
-
}, this);
|
1324
|
-
messageHandler.on('DataLoaded', function (data) {
|
1325
|
-
if (loadingTask.onProgress) {
|
1326
|
-
loadingTask.onProgress({
|
1327
|
-
loaded: data.length,
|
1328
|
-
total: data.length
|
1329
|
-
});
|
1330
|
-
}
|
1331
|
-
this.downloadInfoCapability.resolve(data);
|
1332
|
-
}, this);
|
1333
|
-
messageHandler.on('StartRenderPage', function (data) {
|
1334
|
-
if (this.destroyed) {
|
1335
|
-
return;
|
1336
|
-
}
|
1337
|
-
var page = this.pageCache[data.pageIndex];
|
1338
|
-
page._stats.timeEnd('Page Request');
|
1339
|
-
page._startRenderPage(data.transparency, data.intent);
|
1340
|
-
}, this);
|
1341
|
-
messageHandler.on('RenderPageChunk', function (data) {
|
1342
|
-
if (this.destroyed) {
|
1343
|
-
return;
|
1344
|
-
}
|
1345
|
-
var page = this.pageCache[data.pageIndex];
|
1346
|
-
page._renderPageChunk(data.operatorList, data.intent);
|
1347
|
-
}, this);
|
1348
|
-
messageHandler.on('commonobj', function (data) {
|
1349
|
-
var _this12 = this;
|
1350
1775
|
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1776
|
+
img.src = imageUrl;
|
1777
|
+
});
|
1778
|
+
});
|
1779
|
+
messageHandler.on("FetchBuiltInCMap", (data, sink) => {
|
1780
|
+
if (this.destroyed) {
|
1781
|
+
sink.error(new Error("Worker was destroyed"));
|
1782
|
+
return;
|
1783
|
+
}
|
1354
1784
|
|
1355
|
-
|
1356
|
-
id = _data[0],
|
1357
|
-
type = _data[1],
|
1358
|
-
exportedData = _data[2];
|
1785
|
+
let fetched = false;
|
1359
1786
|
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
switch (type) {
|
1364
|
-
case 'Font':
|
1365
|
-
var params = this._params;
|
1366
|
-
if ('error' in exportedData) {
|
1367
|
-
var exportedError = exportedData.error;
|
1368
|
-
(0, _util.warn)('Error during font loading: ' + exportedError);
|
1369
|
-
this.commonObjs.resolve(id, exportedError);
|
1370
|
-
break;
|
1371
|
-
}
|
1372
|
-
var fontRegistry = null;
|
1373
|
-
if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
|
1374
|
-
fontRegistry = {
|
1375
|
-
registerFont: function registerFont(font, url) {
|
1376
|
-
_global_scope2.default['FontInspector'].fontAdded(font, url);
|
1377
|
-
}
|
1378
|
-
};
|
1379
|
-
}
|
1380
|
-
var font = new _font_loader.FontFaceObject(exportedData, {
|
1381
|
-
isEvalSupported: params.isEvalSupported,
|
1382
|
-
disableFontFace: params.disableFontFace,
|
1383
|
-
ignoreErrors: params.ignoreErrors,
|
1384
|
-
onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
|
1385
|
-
fontRegistry: fontRegistry
|
1386
|
-
});
|
1387
|
-
var fontReady = function fontReady(fontObjs) {
|
1388
|
-
_this12.commonObjs.resolve(id, font);
|
1389
|
-
};
|
1390
|
-
this.fontLoader.bind([font], fontReady);
|
1391
|
-
break;
|
1392
|
-
case 'FontPath':
|
1393
|
-
this.commonObjs.resolve(id, exportedData);
|
1394
|
-
break;
|
1395
|
-
default:
|
1396
|
-
throw new Error('Got unknown common object type ' + type);
|
1397
|
-
}
|
1398
|
-
}, this);
|
1399
|
-
messageHandler.on('obj', function (data) {
|
1400
|
-
if (this.destroyed) {
|
1787
|
+
sink.onPull = () => {
|
1788
|
+
if (fetched) {
|
1789
|
+
sink.close();
|
1401
1790
|
return;
|
1402
1791
|
}
|
1403
1792
|
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
}
|
1414
|
-
switch (type) {
|
1415
|
-
case 'JpegStream':
|
1416
|
-
return new Promise(function (resolve, reject) {
|
1417
|
-
var img = new Image();
|
1418
|
-
img.onload = function () {
|
1419
|
-
resolve(img);
|
1420
|
-
};
|
1421
|
-
img.onerror = function () {
|
1422
|
-
reject(new Error('Error during JPEG image loading'));
|
1423
|
-
};
|
1424
|
-
img.src = imageData;
|
1425
|
-
}).then(function (img) {
|
1426
|
-
pageProxy.objs.resolve(id, img);
|
1427
|
-
});
|
1428
|
-
case 'Image':
|
1429
|
-
pageProxy.objs.resolve(id, imageData);
|
1430
|
-
var MAX_IMAGE_SIZE_TO_STORE = 8000000;
|
1431
|
-
if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
|
1432
|
-
pageProxy.cleanupAfterRender = true;
|
1433
|
-
}
|
1434
|
-
break;
|
1435
|
-
default:
|
1436
|
-
throw new Error('Got unknown object type ' + type);
|
1437
|
-
}
|
1438
|
-
}, this);
|
1439
|
-
messageHandler.on('DocProgress', function (data) {
|
1440
|
-
if (this.destroyed) {
|
1441
|
-
return;
|
1442
|
-
}
|
1443
|
-
if (loadingTask.onProgress) {
|
1444
|
-
loadingTask.onProgress({
|
1445
|
-
loaded: data.loaded,
|
1446
|
-
total: data.total
|
1447
|
-
});
|
1448
|
-
}
|
1449
|
-
}, this);
|
1450
|
-
messageHandler.on('PageError', function (data) {
|
1451
|
-
if (this.destroyed) {
|
1452
|
-
return;
|
1453
|
-
}
|
1454
|
-
var page = this.pageCache[data.pageNum - 1];
|
1455
|
-
var intentState = page.intentStates[data.intent];
|
1456
|
-
if (intentState.displayReadyCapability) {
|
1457
|
-
intentState.displayReadyCapability.reject(data.error);
|
1458
|
-
} else {
|
1459
|
-
throw new Error(data.error);
|
1460
|
-
}
|
1461
|
-
if (intentState.operatorList) {
|
1462
|
-
intentState.operatorList.lastChunk = true;
|
1463
|
-
for (var i = 0; i < intentState.renderTasks.length; i++) {
|
1464
|
-
intentState.renderTasks[i].operatorListChanged();
|
1465
|
-
}
|
1466
|
-
}
|
1467
|
-
}, this);
|
1468
|
-
messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this);
|
1469
|
-
messageHandler.on('JpegDecode', function (data) {
|
1470
|
-
if (this.destroyed) {
|
1471
|
-
return Promise.reject(new Error('Worker was destroyed'));
|
1472
|
-
}
|
1473
|
-
if (typeof document === 'undefined') {
|
1474
|
-
return Promise.reject(new Error('"document" is not defined.'));
|
1475
|
-
}
|
1793
|
+
fetched = true;
|
1794
|
+
this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {
|
1795
|
+
sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);
|
1796
|
+
}).catch(function (reason) {
|
1797
|
+
sink.error(reason);
|
1798
|
+
});
|
1799
|
+
};
|
1800
|
+
});
|
1801
|
+
}
|
1476
1802
|
|
1477
|
-
|
1478
|
-
|
1479
|
-
|
1803
|
+
_onUnsupportedFeature({
|
1804
|
+
featureId
|
1805
|
+
}) {
|
1806
|
+
if (this.destroyed) {
|
1807
|
+
return;
|
1808
|
+
}
|
1480
1809
|
|
1481
|
-
|
1482
|
-
|
1483
|
-
}
|
1484
|
-
return new Promise(function (resolve, reject) {
|
1485
|
-
var img = new Image();
|
1486
|
-
img.onload = function () {
|
1487
|
-
var width = img.width;
|
1488
|
-
var height = img.height;
|
1489
|
-
var size = width * height;
|
1490
|
-
var rgbaLength = size * 4;
|
1491
|
-
var buf = new Uint8ClampedArray(size * components);
|
1492
|
-
var tmpCanvas = document.createElement('canvas');
|
1493
|
-
tmpCanvas.width = width;
|
1494
|
-
tmpCanvas.height = height;
|
1495
|
-
var tmpCtx = tmpCanvas.getContext('2d');
|
1496
|
-
tmpCtx.drawImage(img, 0, 0);
|
1497
|
-
var data = tmpCtx.getImageData(0, 0, width, height).data;
|
1498
|
-
if (components === 3) {
|
1499
|
-
for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
|
1500
|
-
buf[j] = data[i];
|
1501
|
-
buf[j + 1] = data[i + 1];
|
1502
|
-
buf[j + 2] = data[i + 2];
|
1503
|
-
}
|
1504
|
-
} else if (components === 1) {
|
1505
|
-
for (var _i = 0, _j = 0; _i < rgbaLength; _i += 4, _j++) {
|
1506
|
-
buf[_j] = data[_i];
|
1507
|
-
}
|
1508
|
-
}
|
1509
|
-
resolve({
|
1510
|
-
data: buf,
|
1511
|
-
width: width,
|
1512
|
-
height: height
|
1513
|
-
});
|
1514
|
-
};
|
1515
|
-
img.onerror = function () {
|
1516
|
-
reject(new Error('JpegDecode failed to load image'));
|
1517
|
-
};
|
1518
|
-
img.src = imageUrl;
|
1519
|
-
});
|
1520
|
-
}, this);
|
1521
|
-
messageHandler.on('FetchBuiltInCMap', function (data) {
|
1522
|
-
if (this.destroyed) {
|
1523
|
-
return Promise.reject(new Error('Worker was destroyed'));
|
1524
|
-
}
|
1525
|
-
return this.CMapReaderFactory.fetch({ name: data.name });
|
1526
|
-
}, this);
|
1810
|
+
if (this.loadingTask.onUnsupportedFeature) {
|
1811
|
+
this.loadingTask.onUnsupportedFeature(featureId);
|
1527
1812
|
}
|
1528
|
-
}
|
1529
|
-
key: '_onUnsupportedFeature',
|
1530
|
-
value: function _onUnsupportedFeature(_ref6) {
|
1531
|
-
var featureId = _ref6.featureId;
|
1813
|
+
}
|
1532
1814
|
|
1533
|
-
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
|
1538
|
-
|
1815
|
+
getData() {
|
1816
|
+
return this.messageHandler.sendWithPromise("GetData", null);
|
1817
|
+
}
|
1818
|
+
|
1819
|
+
getPage(pageNumber) {
|
1820
|
+
if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
|
1821
|
+
return Promise.reject(new Error("Invalid page request"));
|
1539
1822
|
}
|
1540
|
-
|
1541
|
-
|
1542
|
-
|
1543
|
-
|
1823
|
+
|
1824
|
+
const pageIndex = pageNumber - 1;
|
1825
|
+
|
1826
|
+
if (pageIndex in this.pagePromises) {
|
1827
|
+
return this.pagePromises[pageIndex];
|
1544
1828
|
}
|
1545
|
-
}, {
|
1546
|
-
key: 'getPage',
|
1547
|
-
value: function getPage(pageNumber) {
|
1548
|
-
var _this13 = this;
|
1549
1829
|
|
1550
|
-
|
1551
|
-
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
return this.pagePromises[pageIndex];
|
1830
|
+
const promise = this.messageHandler.sendWithPromise("GetPage", {
|
1831
|
+
pageIndex
|
1832
|
+
}).then(pageInfo => {
|
1833
|
+
if (this.destroyed) {
|
1834
|
+
throw new Error("Transport destroyed");
|
1556
1835
|
}
|
1557
|
-
|
1558
|
-
|
1559
|
-
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
1571
|
-
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
}
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
}, {
|
1589
|
-
key: 'getDestination',
|
1590
|
-
value: function getDestination(id) {
|
1591
|
-
if (typeof id !== 'string') {
|
1592
|
-
return Promise.reject(new Error('Invalid destination request.'));
|
1593
|
-
}
|
1594
|
-
return this.messageHandler.sendWithPromise('GetDestination', { id: id });
|
1595
|
-
}
|
1596
|
-
}, {
|
1597
|
-
key: 'getPageLabels',
|
1598
|
-
value: function getPageLabels() {
|
1599
|
-
return this.messageHandler.sendWithPromise('GetPageLabels', null);
|
1600
|
-
}
|
1601
|
-
}, {
|
1602
|
-
key: 'getPageMode',
|
1603
|
-
value: function getPageMode() {
|
1604
|
-
return this.messageHandler.sendWithPromise('GetPageMode', null);
|
1605
|
-
}
|
1606
|
-
}, {
|
1607
|
-
key: 'getAttachments',
|
1608
|
-
value: function getAttachments() {
|
1609
|
-
return this.messageHandler.sendWithPromise('GetAttachments', null);
|
1610
|
-
}
|
1611
|
-
}, {
|
1612
|
-
key: 'getJavaScript',
|
1613
|
-
value: function getJavaScript() {
|
1614
|
-
return this.messageHandler.sendWithPromise('GetJavaScript', null);
|
1615
|
-
}
|
1616
|
-
}, {
|
1617
|
-
key: 'getOutline',
|
1618
|
-
value: function getOutline() {
|
1619
|
-
return this.messageHandler.sendWithPromise('GetOutline', null);
|
1620
|
-
}
|
1621
|
-
}, {
|
1622
|
-
key: 'getPermissions',
|
1623
|
-
value: function getPermissions() {
|
1624
|
-
return this.messageHandler.sendWithPromise('GetPermissions', null);
|
1625
|
-
}
|
1626
|
-
}, {
|
1627
|
-
key: 'getMetadata',
|
1628
|
-
value: function getMetadata() {
|
1629
|
-
var _this14 = this;
|
1630
|
-
|
1631
|
-
return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) {
|
1632
|
-
return {
|
1633
|
-
info: results[0],
|
1634
|
-
metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
|
1635
|
-
contentDispositionFilename: _this14._fullReader ? _this14._fullReader.filename : null
|
1636
|
-
};
|
1637
|
-
});
|
1836
|
+
|
1837
|
+
const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
|
1838
|
+
this.pageCache[pageIndex] = page;
|
1839
|
+
return page;
|
1840
|
+
});
|
1841
|
+
this.pagePromises[pageIndex] = promise;
|
1842
|
+
return promise;
|
1843
|
+
}
|
1844
|
+
|
1845
|
+
getPageIndex(ref) {
|
1846
|
+
return this.messageHandler.sendWithPromise("GetPageIndex", {
|
1847
|
+
ref
|
1848
|
+
}).catch(function (reason) {
|
1849
|
+
return Promise.reject(new Error(reason));
|
1850
|
+
});
|
1851
|
+
}
|
1852
|
+
|
1853
|
+
getAnnotations(pageIndex, intent) {
|
1854
|
+
return this.messageHandler.sendWithPromise("GetAnnotations", {
|
1855
|
+
pageIndex,
|
1856
|
+
intent
|
1857
|
+
});
|
1858
|
+
}
|
1859
|
+
|
1860
|
+
getDestinations() {
|
1861
|
+
return this.messageHandler.sendWithPromise("GetDestinations", null);
|
1862
|
+
}
|
1863
|
+
|
1864
|
+
getDestination(id) {
|
1865
|
+
if (typeof id !== "string") {
|
1866
|
+
return Promise.reject(new Error("Invalid destination request."));
|
1638
1867
|
}
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1868
|
+
|
1869
|
+
return this.messageHandler.sendWithPromise("GetDestination", {
|
1870
|
+
id
|
1871
|
+
});
|
1872
|
+
}
|
1873
|
+
|
1874
|
+
getPageLabels() {
|
1875
|
+
return this.messageHandler.sendWithPromise("GetPageLabels", null);
|
1876
|
+
}
|
1877
|
+
|
1878
|
+
getPageLayout() {
|
1879
|
+
return this.messageHandler.sendWithPromise("GetPageLayout", null);
|
1880
|
+
}
|
1881
|
+
|
1882
|
+
getPageMode() {
|
1883
|
+
return this.messageHandler.sendWithPromise("GetPageMode", null);
|
1884
|
+
}
|
1885
|
+
|
1886
|
+
getViewerPreferences() {
|
1887
|
+
return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
|
1888
|
+
}
|
1889
|
+
|
1890
|
+
getOpenAction() {
|
1891
|
+
return this.messageHandler.sendWithPromise("GetOpenAction", null);
|
1892
|
+
}
|
1893
|
+
|
1894
|
+
getAttachments() {
|
1895
|
+
return this.messageHandler.sendWithPromise("GetAttachments", null);
|
1896
|
+
}
|
1897
|
+
|
1898
|
+
getJavaScript() {
|
1899
|
+
return this.messageHandler.sendWithPromise("GetJavaScript", null);
|
1900
|
+
}
|
1901
|
+
|
1902
|
+
getOutline() {
|
1903
|
+
return this.messageHandler.sendWithPromise("GetOutline", null);
|
1904
|
+
}
|
1905
|
+
|
1906
|
+
getPermissions() {
|
1907
|
+
return this.messageHandler.sendWithPromise("GetPermissions", null);
|
1908
|
+
}
|
1909
|
+
|
1910
|
+
getMetadata() {
|
1911
|
+
return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
|
1912
|
+
return {
|
1913
|
+
info: results[0],
|
1914
|
+
metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
|
1915
|
+
contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
|
1916
|
+
};
|
1917
|
+
});
|
1918
|
+
}
|
1919
|
+
|
1920
|
+
getStats() {
|
1921
|
+
return this.messageHandler.sendWithPromise("GetStats", null);
|
1922
|
+
}
|
1923
|
+
|
1924
|
+
startCleanup() {
|
1925
|
+
return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
|
1926
|
+
for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
|
1927
|
+
const page = this.pageCache[i];
|
1928
|
+
|
1929
|
+
if (page) {
|
1930
|
+
const cleanupSuccessful = page.cleanup();
|
1931
|
+
|
1932
|
+
if (!cleanupSuccessful) {
|
1933
|
+
throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
|
1654
1934
|
}
|
1655
1935
|
}
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1936
|
+
}
|
1937
|
+
|
1938
|
+
this.commonObjs.clear();
|
1939
|
+
this.fontLoader.clear();
|
1940
|
+
});
|
1941
|
+
}
|
1942
|
+
|
1943
|
+
get loadingParams() {
|
1944
|
+
const params = this._params;
|
1945
|
+
return (0, _util.shadow)(this, "loadingParams", {
|
1946
|
+
disableAutoFetch: params.disableAutoFetch,
|
1947
|
+
disableCreateObjectURL: params.disableCreateObjectURL,
|
1948
|
+
disableFontFace: params.disableFontFace,
|
1949
|
+
nativeImageDecoderSupport: params.nativeImageDecoderSupport
|
1950
|
+
});
|
1951
|
+
}
|
1952
|
+
|
1953
|
+
}
|
1954
|
+
|
1955
|
+
class PDFObjects {
|
1956
|
+
constructor() {
|
1957
|
+
this._objs = Object.create(null);
|
1958
|
+
}
|
1959
|
+
|
1960
|
+
_ensureObj(objId) {
|
1961
|
+
if (this._objs[objId]) {
|
1962
|
+
return this._objs[objId];
|
1659
1963
|
}
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1668
|
-
|
1669
|
-
|
1964
|
+
|
1965
|
+
return this._objs[objId] = {
|
1966
|
+
capability: (0, _util.createPromiseCapability)(),
|
1967
|
+
data: null,
|
1968
|
+
resolved: false
|
1969
|
+
};
|
1970
|
+
}
|
1971
|
+
|
1972
|
+
get(objId, callback = null) {
|
1973
|
+
if (callback) {
|
1974
|
+
this._ensureObj(objId).capability.promise.then(callback);
|
1975
|
+
|
1976
|
+
return null;
|
1670
1977
|
}
|
1671
|
-
}]);
|
1672
1978
|
|
1673
|
-
|
1674
|
-
|
1979
|
+
const obj = this._objs[objId];
|
1980
|
+
|
1981
|
+
if (!obj || !obj.resolved) {
|
1982
|
+
throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
|
1983
|
+
}
|
1675
1984
|
|
1676
|
-
|
1677
|
-
function PDFObjects() {
|
1678
|
-
this.objs = Object.create(null);
|
1985
|
+
return obj.data;
|
1679
1986
|
}
|
1680
|
-
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
return obj.data;
|
1703
|
-
},
|
1704
|
-
resolve: function PDFObjects_resolve(objId, data) {
|
1705
|
-
var obj = this.ensureObj(objId);
|
1706
|
-
obj.resolved = true;
|
1707
|
-
obj.data = data;
|
1708
|
-
obj.capability.resolve(data);
|
1709
|
-
},
|
1710
|
-
isResolved: function PDFObjects_isResolved(objId) {
|
1711
|
-
var objs = this.objs;
|
1712
|
-
if (!objs[objId]) {
|
1713
|
-
return false;
|
1714
|
-
}
|
1715
|
-
return objs[objId].resolved;
|
1716
|
-
},
|
1717
|
-
hasData: function PDFObjects_hasData(objId) {
|
1718
|
-
return this.isResolved(objId);
|
1719
|
-
},
|
1720
|
-
getData: function PDFObjects_getData(objId) {
|
1721
|
-
var objs = this.objs;
|
1722
|
-
if (!objs[objId] || !objs[objId].resolved) {
|
1723
|
-
return null;
|
1987
|
+
|
1988
|
+
has(objId) {
|
1989
|
+
const obj = this._objs[objId];
|
1990
|
+
return obj ? obj.resolved : false;
|
1991
|
+
}
|
1992
|
+
|
1993
|
+
resolve(objId, data) {
|
1994
|
+
const obj = this._ensureObj(objId);
|
1995
|
+
|
1996
|
+
obj.resolved = true;
|
1997
|
+
obj.data = data;
|
1998
|
+
obj.capability.resolve(data);
|
1999
|
+
}
|
2000
|
+
|
2001
|
+
clear() {
|
2002
|
+
for (const objId in this._objs) {
|
2003
|
+
const {
|
2004
|
+
data
|
2005
|
+
} = this._objs[objId];
|
2006
|
+
|
2007
|
+
if (typeof Image !== "undefined" && data instanceof Image) {
|
2008
|
+
(0, _display_utils.releaseImageResources)(data);
|
1724
2009
|
}
|
1725
|
-
return objs[objId].data;
|
1726
|
-
},
|
1727
|
-
clear: function PDFObjects_clear() {
|
1728
|
-
this.objs = Object.create(null);
|
1729
2010
|
}
|
1730
|
-
|
1731
|
-
|
1732
|
-
}
|
1733
|
-
|
1734
|
-
|
2011
|
+
|
2012
|
+
this._objs = Object.create(null);
|
2013
|
+
}
|
2014
|
+
|
2015
|
+
}
|
2016
|
+
|
2017
|
+
class RenderTask {
|
2018
|
+
constructor(internalRenderTask) {
|
1735
2019
|
this._internalRenderTask = internalRenderTask;
|
1736
2020
|
this.onContinue = null;
|
1737
2021
|
}
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
1752
|
-
|
1753
|
-
|
1754
|
-
|
1755
|
-
|
1756
|
-
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1776
|
-
|
1777
|
-
|
1778
|
-
|
1779
|
-
|
2022
|
+
|
2023
|
+
get promise() {
|
2024
|
+
return this._internalRenderTask.capability.promise;
|
2025
|
+
}
|
2026
|
+
|
2027
|
+
cancel() {
|
2028
|
+
this._internalRenderTask.cancel();
|
2029
|
+
}
|
2030
|
+
|
2031
|
+
then(onFulfilled, onRejected) {
|
2032
|
+
throw new Error("Removed API method: " + "RenderTask.then, use the `promise` getter instead.");
|
2033
|
+
}
|
2034
|
+
|
2035
|
+
}
|
2036
|
+
|
2037
|
+
const InternalRenderTask = function InternalRenderTaskClosure() {
|
2038
|
+
const canvasInRendering = new WeakSet();
|
2039
|
+
|
2040
|
+
class InternalRenderTask {
|
2041
|
+
constructor({
|
2042
|
+
callback,
|
2043
|
+
params,
|
2044
|
+
objs,
|
2045
|
+
commonObjs,
|
2046
|
+
operatorList,
|
2047
|
+
pageIndex,
|
2048
|
+
canvasFactory,
|
2049
|
+
webGLContext,
|
2050
|
+
useRequestAnimationFrame = false,
|
2051
|
+
pdfBug = false
|
2052
|
+
}) {
|
2053
|
+
this.callback = callback;
|
2054
|
+
this.params = params;
|
2055
|
+
this.objs = objs;
|
2056
|
+
this.commonObjs = commonObjs;
|
2057
|
+
this.operatorListIdx = null;
|
2058
|
+
this.operatorList = operatorList;
|
2059
|
+
this._pageIndex = pageIndex;
|
2060
|
+
this.canvasFactory = canvasFactory;
|
2061
|
+
this.webGLContext = webGLContext;
|
2062
|
+
this._pdfBug = pdfBug;
|
2063
|
+
this.running = false;
|
2064
|
+
this.graphicsReadyCallback = null;
|
2065
|
+
this.graphicsReady = false;
|
2066
|
+
this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
|
2067
|
+
this.cancelled = false;
|
2068
|
+
this.capability = (0, _util.createPromiseCapability)();
|
2069
|
+
this.task = new RenderTask(this);
|
2070
|
+
this._continueBound = this._continue.bind(this);
|
2071
|
+
this._scheduleNextBound = this._scheduleNext.bind(this);
|
2072
|
+
this._nextBound = this._next.bind(this);
|
2073
|
+
this._canvas = params.canvasContext.canvas;
|
2074
|
+
}
|
2075
|
+
|
2076
|
+
initializeGraphics(transparency = false) {
|
1780
2077
|
if (this.cancelled) {
|
1781
2078
|
return;
|
1782
2079
|
}
|
2080
|
+
|
1783
2081
|
if (this._canvas) {
|
1784
2082
|
if (canvasInRendering.has(this._canvas)) {
|
1785
|
-
throw new Error(
|
2083
|
+
throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
|
1786
2084
|
}
|
1787
|
-
|
2085
|
+
|
2086
|
+
canvasInRendering.add(this._canvas);
|
1788
2087
|
}
|
1789
|
-
|
1790
|
-
|
2088
|
+
|
2089
|
+
if (this._pdfBug && globalThis.StepperManager && globalThis.StepperManager.enabled) {
|
2090
|
+
this.stepper = globalThis.StepperManager.create(this._pageIndex);
|
1791
2091
|
this.stepper.init(this.operatorList);
|
1792
2092
|
this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
|
1793
2093
|
}
|
1794
|
-
|
1795
|
-
|
2094
|
+
|
2095
|
+
const {
|
2096
|
+
canvasContext,
|
2097
|
+
viewport,
|
2098
|
+
transform,
|
2099
|
+
imageLayer,
|
2100
|
+
background
|
2101
|
+
} = this.params;
|
2102
|
+
this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
|
1796
2103
|
this.gfx.beginDrawing({
|
1797
|
-
transform
|
1798
|
-
viewport
|
1799
|
-
transparency
|
1800
|
-
background
|
2104
|
+
transform,
|
2105
|
+
viewport,
|
2106
|
+
transparency,
|
2107
|
+
background
|
1801
2108
|
});
|
1802
2109
|
this.operatorListIdx = 0;
|
1803
2110
|
this.graphicsReady = true;
|
2111
|
+
|
1804
2112
|
if (this.graphicsReadyCallback) {
|
1805
2113
|
this.graphicsReadyCallback();
|
1806
2114
|
}
|
1807
|
-
}
|
2115
|
+
}
|
1808
2116
|
|
1809
|
-
cancel
|
2117
|
+
cancel(error = null) {
|
1810
2118
|
this.running = false;
|
1811
2119
|
this.cancelled = true;
|
2120
|
+
|
2121
|
+
if (this.gfx) {
|
2122
|
+
this.gfx.endDrawing();
|
2123
|
+
}
|
2124
|
+
|
1812
2125
|
if (this._canvas) {
|
1813
2126
|
canvasInRendering.delete(this._canvas);
|
1814
2127
|
}
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
2128
|
+
|
2129
|
+
this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
|
2130
|
+
}
|
2131
|
+
|
2132
|
+
operatorListChanged() {
|
1818
2133
|
if (!this.graphicsReady) {
|
1819
2134
|
if (!this.graphicsReadyCallback) {
|
1820
2135
|
this.graphicsReadyCallback = this._continueBound;
|
1821
2136
|
}
|
2137
|
+
|
1822
2138
|
return;
|
1823
2139
|
}
|
2140
|
+
|
1824
2141
|
if (this.stepper) {
|
1825
2142
|
this.stepper.updateOperatorList(this.operatorList);
|
1826
2143
|
}
|
2144
|
+
|
1827
2145
|
if (this.running) {
|
1828
2146
|
return;
|
1829
2147
|
}
|
2148
|
+
|
1830
2149
|
this._continue();
|
1831
|
-
}
|
1832
|
-
|
2150
|
+
}
|
2151
|
+
|
2152
|
+
_continue() {
|
1833
2153
|
this.running = true;
|
2154
|
+
|
1834
2155
|
if (this.cancelled) {
|
1835
2156
|
return;
|
1836
2157
|
}
|
2158
|
+
|
1837
2159
|
if (this.task.onContinue) {
|
1838
2160
|
this.task.onContinue(this._scheduleNextBound);
|
1839
2161
|
} else {
|
1840
2162
|
this._scheduleNext();
|
1841
2163
|
}
|
1842
|
-
}
|
1843
|
-
_scheduleNext: function InternalRenderTask__scheduleNext() {
|
1844
|
-
var _this16 = this;
|
2164
|
+
}
|
1845
2165
|
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
2166
|
+
_scheduleNext() {
|
2167
|
+
if (this._useRequestAnimationFrame) {
|
2168
|
+
window.requestAnimationFrame(() => {
|
2169
|
+
this._nextBound().catch(this.cancel.bind(this));
|
1849
2170
|
});
|
1850
2171
|
} else {
|
1851
|
-
Promise.resolve().then(this._nextBound).catch(this.
|
2172
|
+
Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
|
1852
2173
|
}
|
1853
|
-
}
|
1854
|
-
_next: function InternalRenderTask__next() {
|
1855
|
-
var _this17 = this;
|
2174
|
+
}
|
1856
2175
|
|
1857
|
-
|
1858
|
-
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
2176
|
+
async _next() {
|
2177
|
+
if (this.cancelled) {
|
2178
|
+
return;
|
2179
|
+
}
|
2180
|
+
|
2181
|
+
this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
|
2182
|
+
|
2183
|
+
if (this.operatorListIdx === this.operatorList.argsArray.length) {
|
2184
|
+
this.running = false;
|
2185
|
+
|
2186
|
+
if (this.operatorList.lastChunk) {
|
2187
|
+
this.gfx.endDrawing();
|
2188
|
+
|
2189
|
+
if (this._canvas) {
|
2190
|
+
canvasInRendering.delete(this._canvas);
|
1870
2191
|
}
|
2192
|
+
|
2193
|
+
this.callback();
|
1871
2194
|
}
|
1872
|
-
}
|
2195
|
+
}
|
1873
2196
|
}
|
1874
|
-
|
2197
|
+
|
2198
|
+
}
|
2199
|
+
|
1875
2200
|
return InternalRenderTask;
|
1876
2201
|
}();
|
1877
|
-
|
1878
|
-
|
1879
|
-
exports.version = version = '2.0.943';
|
1880
|
-
exports.build = build = 'dc98bf76';
|
1881
|
-
}
|
1882
|
-
exports.getDocument = getDocument;
|
1883
|
-
exports.LoopbackPort = LoopbackPort;
|
1884
|
-
exports.PDFDataRangeTransport = PDFDataRangeTransport;
|
1885
|
-
exports.PDFWorker = PDFWorker;
|
1886
|
-
exports.PDFDocumentProxy = PDFDocumentProxy;
|
1887
|
-
exports.PDFPageProxy = PDFPageProxy;
|
1888
|
-
exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
|
2202
|
+
|
2203
|
+
const version = '2.4.456';
|
1889
2204
|
exports.version = version;
|
2205
|
+
const build = '228a591c';
|
1890
2206
|
exports.build = build;
|