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
@@ -0,0 +1,524 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
Object.defineProperty(exports, "__esModule", {
|
25
|
+
value: true
|
26
|
+
});
|
27
|
+
exports.addLinkAttributes = addLinkAttributes;
|
28
|
+
exports.getFilenameFromUrl = getFilenameFromUrl;
|
29
|
+
exports.isFetchSupported = isFetchSupported;
|
30
|
+
exports.isValidFetchUrl = isValidFetchUrl;
|
31
|
+
exports.loadScript = loadScript;
|
32
|
+
exports.deprecated = deprecated;
|
33
|
+
exports.releaseImageResources = releaseImageResources;
|
34
|
+
exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
|
35
|
+
|
36
|
+
var _util = require("../shared/util.js");
|
37
|
+
|
38
|
+
const DEFAULT_LINK_REL = "noopener noreferrer nofollow";
|
39
|
+
exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
|
40
|
+
const SVG_NS = "http://www.w3.org/2000/svg";
|
41
|
+
|
42
|
+
class DOMCanvasFactory {
|
43
|
+
create(width, height) {
|
44
|
+
if (width <= 0 || height <= 0) {
|
45
|
+
throw new Error("Invalid canvas size");
|
46
|
+
}
|
47
|
+
|
48
|
+
const canvas = document.createElement("canvas");
|
49
|
+
const context = canvas.getContext("2d");
|
50
|
+
canvas.width = width;
|
51
|
+
canvas.height = height;
|
52
|
+
return {
|
53
|
+
canvas,
|
54
|
+
context
|
55
|
+
};
|
56
|
+
}
|
57
|
+
|
58
|
+
reset(canvasAndContext, width, height) {
|
59
|
+
if (!canvasAndContext.canvas) {
|
60
|
+
throw new Error("Canvas is not specified");
|
61
|
+
}
|
62
|
+
|
63
|
+
if (width <= 0 || height <= 0) {
|
64
|
+
throw new Error("Invalid canvas size");
|
65
|
+
}
|
66
|
+
|
67
|
+
canvasAndContext.canvas.width = width;
|
68
|
+
canvasAndContext.canvas.height = height;
|
69
|
+
}
|
70
|
+
|
71
|
+
destroy(canvasAndContext) {
|
72
|
+
if (!canvasAndContext.canvas) {
|
73
|
+
throw new Error("Canvas is not specified");
|
74
|
+
}
|
75
|
+
|
76
|
+
canvasAndContext.canvas.width = 0;
|
77
|
+
canvasAndContext.canvas.height = 0;
|
78
|
+
canvasAndContext.canvas = null;
|
79
|
+
canvasAndContext.context = null;
|
80
|
+
}
|
81
|
+
|
82
|
+
}
|
83
|
+
|
84
|
+
exports.DOMCanvasFactory = DOMCanvasFactory;
|
85
|
+
|
86
|
+
class DOMCMapReaderFactory {
|
87
|
+
constructor({
|
88
|
+
baseUrl = null,
|
89
|
+
isCompressed = false
|
90
|
+
}) {
|
91
|
+
this.baseUrl = baseUrl;
|
92
|
+
this.isCompressed = isCompressed;
|
93
|
+
}
|
94
|
+
|
95
|
+
async fetch({
|
96
|
+
name
|
97
|
+
}) {
|
98
|
+
if (!this.baseUrl) {
|
99
|
+
throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
|
100
|
+
}
|
101
|
+
|
102
|
+
if (!name) {
|
103
|
+
throw new Error("CMap name must be specified.");
|
104
|
+
}
|
105
|
+
|
106
|
+
const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
|
107
|
+
const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
|
108
|
+
|
109
|
+
if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {
|
110
|
+
return fetch(url).then(async response => {
|
111
|
+
if (!response.ok) {
|
112
|
+
throw new Error(response.statusText);
|
113
|
+
}
|
114
|
+
|
115
|
+
let cMapData;
|
116
|
+
|
117
|
+
if (this.isCompressed) {
|
118
|
+
cMapData = new Uint8Array((await response.arrayBuffer()));
|
119
|
+
} else {
|
120
|
+
cMapData = (0, _util.stringToBytes)((await response.text()));
|
121
|
+
}
|
122
|
+
|
123
|
+
return {
|
124
|
+
cMapData,
|
125
|
+
compressionType
|
126
|
+
};
|
127
|
+
}).catch(reason => {
|
128
|
+
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
|
129
|
+
});
|
130
|
+
}
|
131
|
+
|
132
|
+
return new Promise((resolve, reject) => {
|
133
|
+
const request = new XMLHttpRequest();
|
134
|
+
request.open("GET", url, true);
|
135
|
+
|
136
|
+
if (this.isCompressed) {
|
137
|
+
request.responseType = "arraybuffer";
|
138
|
+
}
|
139
|
+
|
140
|
+
request.onreadystatechange = () => {
|
141
|
+
if (request.readyState !== XMLHttpRequest.DONE) {
|
142
|
+
return;
|
143
|
+
}
|
144
|
+
|
145
|
+
if (request.status === 200 || request.status === 0) {
|
146
|
+
let cMapData;
|
147
|
+
|
148
|
+
if (this.isCompressed && request.response) {
|
149
|
+
cMapData = new Uint8Array(request.response);
|
150
|
+
} else if (!this.isCompressed && request.responseText) {
|
151
|
+
cMapData = (0, _util.stringToBytes)(request.responseText);
|
152
|
+
}
|
153
|
+
|
154
|
+
if (cMapData) {
|
155
|
+
resolve({
|
156
|
+
cMapData,
|
157
|
+
compressionType
|
158
|
+
});
|
159
|
+
return;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
reject(new Error(request.statusText));
|
164
|
+
};
|
165
|
+
|
166
|
+
request.send(null);
|
167
|
+
}).catch(reason => {
|
168
|
+
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
|
169
|
+
});
|
170
|
+
}
|
171
|
+
|
172
|
+
}
|
173
|
+
|
174
|
+
exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
|
175
|
+
|
176
|
+
class DOMSVGFactory {
|
177
|
+
create(width, height) {
|
178
|
+
(0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions");
|
179
|
+
const svg = document.createElementNS(SVG_NS, "svg:svg");
|
180
|
+
svg.setAttribute("version", "1.1");
|
181
|
+
svg.setAttribute("width", width + "px");
|
182
|
+
svg.setAttribute("height", height + "px");
|
183
|
+
svg.setAttribute("preserveAspectRatio", "none");
|
184
|
+
svg.setAttribute("viewBox", "0 0 " + width + " " + height);
|
185
|
+
return svg;
|
186
|
+
}
|
187
|
+
|
188
|
+
createElement(type) {
|
189
|
+
(0, _util.assert)(typeof type === "string", "Invalid SVG element type");
|
190
|
+
return document.createElementNS(SVG_NS, type);
|
191
|
+
}
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
exports.DOMSVGFactory = DOMSVGFactory;
|
196
|
+
|
197
|
+
class PageViewport {
|
198
|
+
constructor({
|
199
|
+
viewBox,
|
200
|
+
scale,
|
201
|
+
rotation,
|
202
|
+
offsetX = 0,
|
203
|
+
offsetY = 0,
|
204
|
+
dontFlip = false
|
205
|
+
}) {
|
206
|
+
this.viewBox = viewBox;
|
207
|
+
this.scale = scale;
|
208
|
+
this.rotation = rotation;
|
209
|
+
this.offsetX = offsetX;
|
210
|
+
this.offsetY = offsetY;
|
211
|
+
const centerX = (viewBox[2] + viewBox[0]) / 2;
|
212
|
+
const centerY = (viewBox[3] + viewBox[1]) / 2;
|
213
|
+
let rotateA, rotateB, rotateC, rotateD;
|
214
|
+
rotation = rotation % 360;
|
215
|
+
rotation = rotation < 0 ? rotation + 360 : rotation;
|
216
|
+
|
217
|
+
switch (rotation) {
|
218
|
+
case 180:
|
219
|
+
rotateA = -1;
|
220
|
+
rotateB = 0;
|
221
|
+
rotateC = 0;
|
222
|
+
rotateD = 1;
|
223
|
+
break;
|
224
|
+
|
225
|
+
case 90:
|
226
|
+
rotateA = 0;
|
227
|
+
rotateB = 1;
|
228
|
+
rotateC = 1;
|
229
|
+
rotateD = 0;
|
230
|
+
break;
|
231
|
+
|
232
|
+
case 270:
|
233
|
+
rotateA = 0;
|
234
|
+
rotateB = -1;
|
235
|
+
rotateC = -1;
|
236
|
+
rotateD = 0;
|
237
|
+
break;
|
238
|
+
|
239
|
+
default:
|
240
|
+
rotateA = 1;
|
241
|
+
rotateB = 0;
|
242
|
+
rotateC = 0;
|
243
|
+
rotateD = -1;
|
244
|
+
break;
|
245
|
+
}
|
246
|
+
|
247
|
+
if (dontFlip) {
|
248
|
+
rotateC = -rotateC;
|
249
|
+
rotateD = -rotateD;
|
250
|
+
}
|
251
|
+
|
252
|
+
let offsetCanvasX, offsetCanvasY;
|
253
|
+
let width, height;
|
254
|
+
|
255
|
+
if (rotateA === 0) {
|
256
|
+
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
257
|
+
offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
|
258
|
+
width = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
259
|
+
height = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
260
|
+
} else {
|
261
|
+
offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
|
262
|
+
offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
|
263
|
+
width = Math.abs(viewBox[2] - viewBox[0]) * scale;
|
264
|
+
height = Math.abs(viewBox[3] - viewBox[1]) * scale;
|
265
|
+
}
|
266
|
+
|
267
|
+
this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
|
268
|
+
this.width = width;
|
269
|
+
this.height = height;
|
270
|
+
}
|
271
|
+
|
272
|
+
clone({
|
273
|
+
scale = this.scale,
|
274
|
+
rotation = this.rotation,
|
275
|
+
offsetX = this.offsetX,
|
276
|
+
offsetY = this.offsetY,
|
277
|
+
dontFlip = false
|
278
|
+
} = {}) {
|
279
|
+
return new PageViewport({
|
280
|
+
viewBox: this.viewBox.slice(),
|
281
|
+
scale,
|
282
|
+
rotation,
|
283
|
+
offsetX,
|
284
|
+
offsetY,
|
285
|
+
dontFlip
|
286
|
+
});
|
287
|
+
}
|
288
|
+
|
289
|
+
convertToViewportPoint(x, y) {
|
290
|
+
return _util.Util.applyTransform([x, y], this.transform);
|
291
|
+
}
|
292
|
+
|
293
|
+
convertToViewportRectangle(rect) {
|
294
|
+
const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
|
295
|
+
|
296
|
+
const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
|
297
|
+
|
298
|
+
return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
|
299
|
+
}
|
300
|
+
|
301
|
+
convertToPdfPoint(x, y) {
|
302
|
+
return _util.Util.applyInverseTransform([x, y], this.transform);
|
303
|
+
}
|
304
|
+
|
305
|
+
}
|
306
|
+
|
307
|
+
exports.PageViewport = PageViewport;
|
308
|
+
|
309
|
+
class RenderingCancelledException extends _util.BaseException {
|
310
|
+
constructor(msg, type) {
|
311
|
+
super(msg);
|
312
|
+
this.type = type;
|
313
|
+
}
|
314
|
+
|
315
|
+
}
|
316
|
+
|
317
|
+
exports.RenderingCancelledException = RenderingCancelledException;
|
318
|
+
const LinkTarget = {
|
319
|
+
NONE: 0,
|
320
|
+
SELF: 1,
|
321
|
+
BLANK: 2,
|
322
|
+
PARENT: 3,
|
323
|
+
TOP: 4
|
324
|
+
};
|
325
|
+
exports.LinkTarget = LinkTarget;
|
326
|
+
|
327
|
+
function addLinkAttributes(link, {
|
328
|
+
url,
|
329
|
+
target,
|
330
|
+
rel,
|
331
|
+
enabled = true
|
332
|
+
} = {}) {
|
333
|
+
(0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.');
|
334
|
+
const urlNullRemoved = (0, _util.removeNullCharacters)(url);
|
335
|
+
|
336
|
+
if (enabled) {
|
337
|
+
link.href = link.title = urlNullRemoved;
|
338
|
+
} else {
|
339
|
+
link.href = "";
|
340
|
+
link.title = `Disabled: ${urlNullRemoved}`;
|
341
|
+
|
342
|
+
link.onclick = () => {
|
343
|
+
return false;
|
344
|
+
};
|
345
|
+
}
|
346
|
+
|
347
|
+
let targetStr = "";
|
348
|
+
|
349
|
+
switch (target) {
|
350
|
+
case LinkTarget.NONE:
|
351
|
+
break;
|
352
|
+
|
353
|
+
case LinkTarget.SELF:
|
354
|
+
targetStr = "_self";
|
355
|
+
break;
|
356
|
+
|
357
|
+
case LinkTarget.BLANK:
|
358
|
+
targetStr = "_blank";
|
359
|
+
break;
|
360
|
+
|
361
|
+
case LinkTarget.PARENT:
|
362
|
+
targetStr = "_parent";
|
363
|
+
break;
|
364
|
+
|
365
|
+
case LinkTarget.TOP:
|
366
|
+
targetStr = "_top";
|
367
|
+
break;
|
368
|
+
}
|
369
|
+
|
370
|
+
link.target = targetStr;
|
371
|
+
link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
|
372
|
+
}
|
373
|
+
|
374
|
+
function getFilenameFromUrl(url) {
|
375
|
+
const anchor = url.indexOf("#");
|
376
|
+
const query = url.indexOf("?");
|
377
|
+
const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
|
378
|
+
return url.substring(url.lastIndexOf("/", end) + 1, end);
|
379
|
+
}
|
380
|
+
|
381
|
+
class StatTimer {
|
382
|
+
constructor() {
|
383
|
+
this.started = Object.create(null);
|
384
|
+
this.times = [];
|
385
|
+
}
|
386
|
+
|
387
|
+
time(name) {
|
388
|
+
if (name in this.started) {
|
389
|
+
(0, _util.warn)(`Timer is already running for ${name}`);
|
390
|
+
}
|
391
|
+
|
392
|
+
this.started[name] = Date.now();
|
393
|
+
}
|
394
|
+
|
395
|
+
timeEnd(name) {
|
396
|
+
if (!(name in this.started)) {
|
397
|
+
(0, _util.warn)(`Timer has not been started for ${name}`);
|
398
|
+
}
|
399
|
+
|
400
|
+
this.times.push({
|
401
|
+
name,
|
402
|
+
start: this.started[name],
|
403
|
+
end: Date.now()
|
404
|
+
});
|
405
|
+
delete this.started[name];
|
406
|
+
}
|
407
|
+
|
408
|
+
toString() {
|
409
|
+
const outBuf = [];
|
410
|
+
let longest = 0;
|
411
|
+
|
412
|
+
for (const time of this.times) {
|
413
|
+
const name = time.name;
|
414
|
+
|
415
|
+
if (name.length > longest) {
|
416
|
+
longest = name.length;
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
420
|
+
for (const time of this.times) {
|
421
|
+
const duration = time.end - time.start;
|
422
|
+
outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`);
|
423
|
+
}
|
424
|
+
|
425
|
+
return outBuf.join("");
|
426
|
+
}
|
427
|
+
|
428
|
+
}
|
429
|
+
|
430
|
+
exports.StatTimer = StatTimer;
|
431
|
+
|
432
|
+
function isFetchSupported() {
|
433
|
+
return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined";
|
434
|
+
}
|
435
|
+
|
436
|
+
function isValidFetchUrl(url, baseUrl) {
|
437
|
+
try {
|
438
|
+
const {
|
439
|
+
protocol
|
440
|
+
} = baseUrl ? new URL(url, baseUrl) : new URL(url);
|
441
|
+
return protocol === "http:" || protocol === "https:";
|
442
|
+
} catch (ex) {
|
443
|
+
return false;
|
444
|
+
}
|
445
|
+
}
|
446
|
+
|
447
|
+
function loadScript(src) {
|
448
|
+
return new Promise((resolve, reject) => {
|
449
|
+
const script = document.createElement("script");
|
450
|
+
script.src = src;
|
451
|
+
script.onload = resolve;
|
452
|
+
|
453
|
+
script.onerror = function () {
|
454
|
+
reject(new Error(`Cannot load script at: ${script.src}`));
|
455
|
+
};
|
456
|
+
|
457
|
+
(document.head || document.documentElement).appendChild(script);
|
458
|
+
});
|
459
|
+
}
|
460
|
+
|
461
|
+
function deprecated(details) {
|
462
|
+
console.log("Deprecated API usage: " + details);
|
463
|
+
}
|
464
|
+
|
465
|
+
function releaseImageResources(img) {
|
466
|
+
(0, _util.assert)(img instanceof Image, "Invalid `img` parameter.");
|
467
|
+
const url = img.src;
|
468
|
+
|
469
|
+
if (typeof url === "string" && url.startsWith("blob:") && URL.revokeObjectURL) {
|
470
|
+
URL.revokeObjectURL(url);
|
471
|
+
}
|
472
|
+
|
473
|
+
img.removeAttribute("src");
|
474
|
+
}
|
475
|
+
|
476
|
+
let pdfDateStringRegex;
|
477
|
+
|
478
|
+
class PDFDateString {
|
479
|
+
static toDateObject(input) {
|
480
|
+
if (!input || !(0, _util.isString)(input)) {
|
481
|
+
return null;
|
482
|
+
}
|
483
|
+
|
484
|
+
if (!pdfDateStringRegex) {
|
485
|
+
pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
|
486
|
+
}
|
487
|
+
|
488
|
+
const matches = pdfDateStringRegex.exec(input);
|
489
|
+
|
490
|
+
if (!matches) {
|
491
|
+
return null;
|
492
|
+
}
|
493
|
+
|
494
|
+
const year = parseInt(matches[1], 10);
|
495
|
+
let month = parseInt(matches[2], 10);
|
496
|
+
month = month >= 1 && month <= 12 ? month - 1 : 0;
|
497
|
+
let day = parseInt(matches[3], 10);
|
498
|
+
day = day >= 1 && day <= 31 ? day : 1;
|
499
|
+
let hour = parseInt(matches[4], 10);
|
500
|
+
hour = hour >= 0 && hour <= 23 ? hour : 0;
|
501
|
+
let minute = parseInt(matches[5], 10);
|
502
|
+
minute = minute >= 0 && minute <= 59 ? minute : 0;
|
503
|
+
let second = parseInt(matches[6], 10);
|
504
|
+
second = second >= 0 && second <= 59 ? second : 0;
|
505
|
+
const universalTimeRelation = matches[7] || "Z";
|
506
|
+
let offsetHour = parseInt(matches[8], 10);
|
507
|
+
offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
|
508
|
+
let offsetMinute = parseInt(matches[9], 10) || 0;
|
509
|
+
offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
|
510
|
+
|
511
|
+
if (universalTimeRelation === "-") {
|
512
|
+
hour += offsetHour;
|
513
|
+
minute += offsetMinute;
|
514
|
+
} else if (universalTimeRelation === "+") {
|
515
|
+
hour -= offsetHour;
|
516
|
+
minute -= offsetMinute;
|
517
|
+
}
|
518
|
+
|
519
|
+
return new Date(Date.UTC(year, month, day, hour, minute, second));
|
520
|
+
}
|
521
|
+
|
522
|
+
}
|
523
|
+
|
524
|
+
exports.PDFDateString = PDFDateString;
|