pdfjs-dist 2.3.200 → 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/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +6499 -17971
- 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 +19303 -29896
- 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 +1333 -4839
- 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 +683 -1066
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +196 -193
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +441 -569
- package/lib/core/cmap.js +220 -279
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +59 -80
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +564 -673
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +983 -889
- package/lib/core/font_renderer.js +128 -171
- package/lib/core/fonts.js +451 -400
- package/lib/core/function.js +289 -285
- package/lib/core/glyphlist.js +4527 -4527
- package/lib/core/image.js +138 -117
- package/lib/core/image_utils.js +46 -63
- package/lib/core/jbig2.js +324 -332
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +133 -24
- package/lib/core/jpg.js +238 -210
- package/lib/core/jpx.js +158 -157
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2928 -2928
- package/lib/core/murmurhash3.js +87 -102
- package/lib/core/obj.js +1111 -1302
- package/lib/core/operator_list.js +55 -42
- package/lib/core/parser.js +956 -987
- package/lib/core/pattern.js +69 -69
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +45 -77
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +83 -77
- package/lib/core/type1_parser.js +78 -68
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +148 -196
- package/lib/core/worker_stream.js +101 -210
- package/lib/display/annotation_layer.js +733 -1155
- package/lib/display/api.js +1539 -1928
- package/lib/display/api_compatibility.js +10 -8
- package/lib/display/canvas.js +159 -158
- package/lib/display/content_disposition.js +36 -55
- package/lib/display/display_utils.js +298 -551
- package/lib/display/fetch_stream.js +181 -305
- package/lib/display/font_loader.js +273 -416
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +376 -511
- package/lib/display/network_utils.js +20 -19
- package/lib/display/node_stream.js +276 -460
- package/lib/display/pattern_helper.js +76 -44
- package/lib/display/svg.js +1137 -1405
- package/lib/display/text_layer.js +75 -82
- package/lib/display/transport_stream.js +236 -374
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +37 -37
- package/lib/pdf.js +22 -21
- package/lib/pdf.worker.js +5 -5
- package/lib/shared/compatibility.js +2 -251
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +222 -194
- package/lib/shared/util.js +269 -405
- package/lib/test/unit/annotation_spec.js +1089 -1014
- package/lib/test/unit/api_spec.js +617 -544
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +63 -62
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +84 -86
- package/lib/test/unit/colorspace_spec.js +154 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +22 -24
- package/lib/test/unit/display_svg_spec.js +35 -36
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +16 -16
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +81 -95
- package/lib/test/unit/fetch_stream_spec.js +30 -30
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +48 -32
- package/lib/test/unit/message_handler_spec.js +172 -162
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +12 -12
- package/lib/test/unit/network_utils_spec.js +152 -152
- package/lib/test/unit/node_stream_spec.js +74 -90
- package/lib/test/unit/parser_spec.js +107 -113
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +117 -115
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +119 -285
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +41 -41
- package/lib/test/unit/ui_utils_spec.js +318 -426
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +122 -143
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1166 -1196
- package/lib/web/app_options.js +61 -77
- package/lib/web/base_viewer.js +804 -850
- package/lib/web/chromecom.js +164 -249
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +38 -57
- package/lib/web/firefox_print_service.js +35 -30
- package/lib/web/firefoxcom.js +175 -374
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +30 -30
- package/lib/web/interfaces.js +80 -258
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +105 -130
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +227 -376
- package/lib/web/pdf_find_bar.js +137 -171
- package/lib/web/pdf_find_controller.js +492 -549
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +395 -406
- package/lib/web/pdf_link_service.js +302 -349
- package/lib/web/pdf_outline_viewer.js +148 -209
- package/lib/web/pdf_page_view.js +449 -507
- package/lib/web/pdf_presentation_mode.js +304 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +264 -304
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +66 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -317
- package/lib/web/toolbar.js +216 -211
- package/lib/web/ui_utils.js +303 -404
- package/lib/web/view_history.js +49 -222
- package/lib/web/viewer_compatibility.js +7 -5
- package/package.json +2 -9
- package/web/pdf_viewer.css +25 -18
- package/web/pdf_viewer.js +3481 -4764
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/lib/shared/streams_polyfill.js +0 -43
@@ -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.
|
@@ -31,341 +31,186 @@ exports.isValidFetchUrl = isValidFetchUrl;
|
|
31
31
|
exports.loadScript = loadScript;
|
32
32
|
exports.deprecated = deprecated;
|
33
33
|
exports.releaseImageResources = releaseImageResources;
|
34
|
-
exports.PDFDateString = exports.
|
34
|
+
exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
|
35
35
|
|
36
|
-
var
|
36
|
+
var _util = require("../shared/util.js");
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
43
|
-
|
44
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
45
|
-
|
46
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
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";
|
47
41
|
|
48
|
-
|
42
|
+
class DOMCanvasFactory {
|
43
|
+
create(width, height) {
|
44
|
+
if (width <= 0 || height <= 0) {
|
45
|
+
throw new Error("Invalid canvas size");
|
46
|
+
}
|
49
47
|
|
50
|
-
|
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
|
+
}
|
51
57
|
|
52
|
-
|
58
|
+
reset(canvasAndContext, width, height) {
|
59
|
+
if (!canvasAndContext.canvas) {
|
60
|
+
throw new Error("Canvas is not specified");
|
61
|
+
}
|
53
62
|
|
54
|
-
|
63
|
+
if (width <= 0 || height <= 0) {
|
64
|
+
throw new Error("Invalid canvas size");
|
65
|
+
}
|
55
66
|
|
56
|
-
|
67
|
+
canvasAndContext.canvas.width = width;
|
68
|
+
canvasAndContext.canvas.height = height;
|
69
|
+
}
|
57
70
|
|
58
|
-
|
71
|
+
destroy(canvasAndContext) {
|
72
|
+
if (!canvasAndContext.canvas) {
|
73
|
+
throw new Error("Canvas is not specified");
|
74
|
+
}
|
59
75
|
|
60
|
-
|
76
|
+
canvasAndContext.canvas.width = 0;
|
77
|
+
canvasAndContext.canvas.height = 0;
|
78
|
+
canvasAndContext.canvas = null;
|
79
|
+
canvasAndContext.context = null;
|
80
|
+
}
|
61
81
|
|
62
|
-
|
82
|
+
}
|
63
83
|
|
64
|
-
|
65
|
-
exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
|
66
|
-
var SVG_NS = 'http://www.w3.org/2000/svg';
|
84
|
+
exports.DOMCanvasFactory = DOMCanvasFactory;
|
67
85
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
86
|
+
class DOMCMapReaderFactory {
|
87
|
+
constructor({
|
88
|
+
baseUrl = null,
|
89
|
+
isCompressed = false
|
90
|
+
}) {
|
91
|
+
this.baseUrl = baseUrl;
|
92
|
+
this.isCompressed = isCompressed;
|
73
93
|
}
|
74
94
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
}
|
81
|
-
|
82
|
-
var canvas = document.createElement('canvas');
|
83
|
-
var context = canvas.getContext('2d');
|
84
|
-
canvas.width = width;
|
85
|
-
canvas.height = height;
|
86
|
-
return {
|
87
|
-
canvas: canvas,
|
88
|
-
context: context
|
89
|
-
};
|
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.');
|
90
100
|
}
|
91
|
-
}, {
|
92
|
-
key: "reset",
|
93
|
-
value: function reset(canvasAndContext, width, height) {
|
94
|
-
if (!canvasAndContext.canvas) {
|
95
|
-
throw new Error('Canvas is not specified');
|
96
|
-
}
|
97
101
|
|
98
|
-
|
99
|
-
|
100
|
-
}
|
101
|
-
|
102
|
-
canvasAndContext.canvas.width = width;
|
103
|
-
canvasAndContext.canvas.height = height;
|
102
|
+
if (!name) {
|
103
|
+
throw new Error("CMap name must be specified.");
|
104
104
|
}
|
105
|
-
}, {
|
106
|
-
key: "destroy",
|
107
|
-
value: function destroy(canvasAndContext) {
|
108
|
-
if (!canvasAndContext.canvas) {
|
109
|
-
throw new Error('Canvas is not specified');
|
110
|
-
}
|
111
105
|
|
112
|
-
|
113
|
-
|
114
|
-
canvasAndContext.canvas = null;
|
115
|
-
canvasAndContext.context = null;
|
116
|
-
}
|
117
|
-
}]);
|
106
|
+
const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
|
107
|
+
const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
|
118
108
|
|
119
|
-
|
120
|
-
|
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
|
+
}
|
121
114
|
|
122
|
-
|
115
|
+
let cMapData;
|
123
116
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
baseUrl = _ref$baseUrl === void 0 ? null : _ref$baseUrl,
|
130
|
-
_ref$isCompressed = _ref.isCompressed,
|
131
|
-
isCompressed = _ref$isCompressed === void 0 ? false : _ref$isCompressed;
|
117
|
+
if (this.isCompressed) {
|
118
|
+
cMapData = new Uint8Array((await response.arrayBuffer()));
|
119
|
+
} else {
|
120
|
+
cMapData = (0, _util.stringToBytes)((await response.text()));
|
121
|
+
}
|
132
122
|
|
133
|
-
|
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
|
+
}
|
134
131
|
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
return new Promise((resolve, reject) => {
|
133
|
+
const request = new XMLHttpRequest();
|
134
|
+
request.open("GET", url, true);
|
138
135
|
|
139
|
-
|
140
|
-
|
141
|
-
value: function (_fetch) {
|
142
|
-
function fetch(_x) {
|
143
|
-
return _fetch.apply(this, arguments);
|
136
|
+
if (this.isCompressed) {
|
137
|
+
request.responseType = "arraybuffer";
|
144
138
|
}
|
145
139
|
|
146
|
-
|
147
|
-
|
148
|
-
|
140
|
+
request.onreadystatechange = () => {
|
141
|
+
if (request.readyState !== XMLHttpRequest.DONE) {
|
142
|
+
return;
|
143
|
+
}
|
149
144
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
if (this.baseUrl) {
|
167
|
-
_context2.next = 3;
|
168
|
-
break;
|
169
|
-
}
|
170
|
-
|
171
|
-
throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
|
172
|
-
|
173
|
-
case 3:
|
174
|
-
if (name) {
|
175
|
-
_context2.next = 5;
|
176
|
-
break;
|
177
|
-
}
|
178
|
-
|
179
|
-
throw new Error('CMap name must be specified.');
|
180
|
-
|
181
|
-
case 5:
|
182
|
-
url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : '');
|
183
|
-
compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
|
184
|
-
|
185
|
-
if (!(isFetchSupported() && isValidFetchUrl(url, document.baseURI))) {
|
186
|
-
_context2.next = 9;
|
187
|
-
break;
|
188
|
-
}
|
189
|
-
|
190
|
-
return _context2.abrupt("return", fetch(url).then(
|
191
|
-
/*#__PURE__*/
|
192
|
-
function () {
|
193
|
-
var _ref4 = _asyncToGenerator(
|
194
|
-
/*#__PURE__*/
|
195
|
-
_regenerator["default"].mark(function _callee(response) {
|
196
|
-
var cMapData;
|
197
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
198
|
-
while (1) {
|
199
|
-
switch (_context.prev = _context.next) {
|
200
|
-
case 0:
|
201
|
-
if (response.ok) {
|
202
|
-
_context.next = 2;
|
203
|
-
break;
|
204
|
-
}
|
205
|
-
|
206
|
-
throw new Error(response.statusText);
|
207
|
-
|
208
|
-
case 2:
|
209
|
-
if (!_this.isCompressed) {
|
210
|
-
_context.next = 10;
|
211
|
-
break;
|
212
|
-
}
|
213
|
-
|
214
|
-
_context.t0 = Uint8Array;
|
215
|
-
_context.next = 6;
|
216
|
-
return response.arrayBuffer();
|
217
|
-
|
218
|
-
case 6:
|
219
|
-
_context.t1 = _context.sent;
|
220
|
-
cMapData = new _context.t0(_context.t1);
|
221
|
-
_context.next = 15;
|
222
|
-
break;
|
223
|
-
|
224
|
-
case 10:
|
225
|
-
_context.t2 = _util.stringToBytes;
|
226
|
-
_context.next = 13;
|
227
|
-
return response.text();
|
228
|
-
|
229
|
-
case 13:
|
230
|
-
_context.t3 = _context.sent;
|
231
|
-
cMapData = (0, _context.t2)(_context.t3);
|
232
|
-
|
233
|
-
case 15:
|
234
|
-
return _context.abrupt("return", {
|
235
|
-
cMapData: cMapData,
|
236
|
-
compressionType: compressionType
|
237
|
-
});
|
238
|
-
|
239
|
-
case 16:
|
240
|
-
case "end":
|
241
|
-
return _context.stop();
|
242
|
-
}
|
243
|
-
}
|
244
|
-
}, _callee);
|
245
|
-
}));
|
246
|
-
|
247
|
-
return function (_x3) {
|
248
|
-
return _ref4.apply(this, arguments);
|
249
|
-
};
|
250
|
-
}())["catch"](function (reason) {
|
251
|
-
throw new Error("Unable to load ".concat(_this.isCompressed ? 'binary ' : '') + "CMap at: ".concat(url));
|
252
|
-
}));
|
253
|
-
|
254
|
-
case 9:
|
255
|
-
return _context2.abrupt("return", new Promise(function (resolve, reject) {
|
256
|
-
var request = new XMLHttpRequest();
|
257
|
-
request.open('GET', url, true);
|
258
|
-
|
259
|
-
if (_this.isCompressed) {
|
260
|
-
request.responseType = 'arraybuffer';
|
261
|
-
}
|
262
|
-
|
263
|
-
request.onreadystatechange = function () {
|
264
|
-
if (request.readyState !== XMLHttpRequest.DONE) {
|
265
|
-
return;
|
266
|
-
}
|
267
|
-
|
268
|
-
if (request.status === 200 || request.status === 0) {
|
269
|
-
var cMapData;
|
270
|
-
|
271
|
-
if (_this.isCompressed && request.response) {
|
272
|
-
cMapData = new Uint8Array(request.response);
|
273
|
-
} else if (!_this.isCompressed && request.responseText) {
|
274
|
-
cMapData = (0, _util.stringToBytes)(request.responseText);
|
275
|
-
}
|
276
|
-
|
277
|
-
if (cMapData) {
|
278
|
-
resolve({
|
279
|
-
cMapData: cMapData,
|
280
|
-
compressionType: compressionType
|
281
|
-
});
|
282
|
-
return;
|
283
|
-
}
|
284
|
-
}
|
285
|
-
|
286
|
-
reject(new Error(request.statusText));
|
287
|
-
};
|
288
|
-
|
289
|
-
request.send(null);
|
290
|
-
})["catch"](function (reason) {
|
291
|
-
throw new Error("Unable to load ".concat(_this.isCompressed ? 'binary ' : '') + "CMap at: ".concat(url));
|
292
|
-
}));
|
293
|
-
|
294
|
-
case 10:
|
295
|
-
case "end":
|
296
|
-
return _context2.stop();
|
297
|
-
}
|
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;
|
298
160
|
}
|
299
|
-
}
|
300
|
-
}));
|
161
|
+
}
|
301
162
|
|
302
|
-
|
303
|
-
return _ref3.apply(this, arguments);
|
163
|
+
reject(new Error(request.statusText));
|
304
164
|
};
|
305
|
-
}())
|
306
|
-
}]);
|
307
165
|
|
308
|
-
|
309
|
-
}(
|
166
|
+
request.send(null);
|
167
|
+
}).catch(reason => {
|
168
|
+
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
|
169
|
+
});
|
170
|
+
}
|
171
|
+
|
172
|
+
}
|
310
173
|
|
311
174
|
exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
|
312
175
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
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;
|
318
186
|
}
|
319
187
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
var svg = document.createElementNS(SVG_NS, 'svg:svg');
|
325
|
-
svg.setAttribute('version', '1.1');
|
326
|
-
svg.setAttribute('width', width + 'px');
|
327
|
-
svg.setAttribute('height', height + 'px');
|
328
|
-
svg.setAttribute('preserveAspectRatio', 'none');
|
329
|
-
svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height);
|
330
|
-
return svg;
|
331
|
-
}
|
332
|
-
}, {
|
333
|
-
key: "createElement",
|
334
|
-
value: function createElement(type) {
|
335
|
-
(0, _util.assert)(typeof type === 'string', 'Invalid SVG element type');
|
336
|
-
return document.createElementNS(SVG_NS, type);
|
337
|
-
}
|
338
|
-
}]);
|
188
|
+
createElement(type) {
|
189
|
+
(0, _util.assert)(typeof type === "string", "Invalid SVG element type");
|
190
|
+
return document.createElementNS(SVG_NS, type);
|
191
|
+
}
|
339
192
|
|
340
|
-
|
341
|
-
}();
|
193
|
+
}
|
342
194
|
|
343
195
|
exports.DOMSVGFactory = DOMSVGFactory;
|
344
196
|
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
_ref5$offsetY = _ref5.offsetY,
|
355
|
-
offsetY = _ref5$offsetY === void 0 ? 0 : _ref5$offsetY,
|
356
|
-
_ref5$dontFlip = _ref5.dontFlip,
|
357
|
-
dontFlip = _ref5$dontFlip === void 0 ? false : _ref5$dontFlip;
|
358
|
-
|
359
|
-
_classCallCheck(this, PageViewport);
|
360
|
-
|
197
|
+
class PageViewport {
|
198
|
+
constructor({
|
199
|
+
viewBox,
|
200
|
+
scale,
|
201
|
+
rotation,
|
202
|
+
offsetX = 0,
|
203
|
+
offsetY = 0,
|
204
|
+
dontFlip = false
|
205
|
+
}) {
|
361
206
|
this.viewBox = viewBox;
|
362
207
|
this.scale = scale;
|
363
208
|
this.rotation = rotation;
|
364
209
|
this.offsetX = offsetX;
|
365
210
|
this.offsetY = offsetY;
|
366
|
-
|
367
|
-
|
368
|
-
|
211
|
+
const centerX = (viewBox[2] + viewBox[0]) / 2;
|
212
|
+
const centerY = (viewBox[3] + viewBox[1]) / 2;
|
213
|
+
let rotateA, rotateB, rotateC, rotateD;
|
369
214
|
rotation = rotation % 360;
|
370
215
|
rotation = rotation < 0 ? rotation + 360 : rotation;
|
371
216
|
|
@@ -404,8 +249,8 @@ function () {
|
|
404
249
|
rotateD = -rotateD;
|
405
250
|
}
|
406
251
|
|
407
|
-
|
408
|
-
|
252
|
+
let offsetCanvasX, offsetCanvasY;
|
253
|
+
let width, height;
|
409
254
|
|
410
255
|
if (rotateA === 0) {
|
411
256
|
offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
|
@@ -424,72 +269,53 @@ function () {
|
|
424
269
|
this.height = height;
|
425
270
|
}
|
426
271
|
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
offsetY: this.offsetY,
|
444
|
-
dontFlip: dontFlip
|
445
|
-
});
|
446
|
-
}
|
447
|
-
}, {
|
448
|
-
key: "convertToViewportPoint",
|
449
|
-
value: function convertToViewportPoint(x, y) {
|
450
|
-
return _util.Util.applyTransform([x, y], this.transform);
|
451
|
-
}
|
452
|
-
}, {
|
453
|
-
key: "convertToViewportRectangle",
|
454
|
-
value: function convertToViewportRectangle(rect) {
|
455
|
-
var topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
|
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
|
+
}
|
456
288
|
|
457
|
-
|
289
|
+
convertToViewportPoint(x, y) {
|
290
|
+
return _util.Util.applyTransform([x, y], this.transform);
|
291
|
+
}
|
458
292
|
|
459
|
-
|
460
|
-
|
461
|
-
}, {
|
462
|
-
key: "convertToPdfPoint",
|
463
|
-
value: function convertToPdfPoint(x, y) {
|
464
|
-
return _util.Util.applyInverseTransform([x, y], this.transform);
|
465
|
-
}
|
466
|
-
}]);
|
293
|
+
convertToViewportRectangle(rect) {
|
294
|
+
const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
|
467
295
|
|
468
|
-
|
469
|
-
}();
|
296
|
+
const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
|
470
297
|
|
471
|
-
|
298
|
+
return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
|
299
|
+
}
|
472
300
|
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
_inherits(RenderingCancelledException, _BaseException);
|
301
|
+
convertToPdfPoint(x, y) {
|
302
|
+
return _util.Util.applyInverseTransform([x, y], this.transform);
|
303
|
+
}
|
477
304
|
|
478
|
-
|
479
|
-
var _this2;
|
305
|
+
}
|
480
306
|
|
481
|
-
|
307
|
+
exports.PageViewport = PageViewport;
|
482
308
|
|
483
|
-
|
484
|
-
|
485
|
-
|
309
|
+
class RenderingCancelledException extends _util.BaseException {
|
310
|
+
constructor(msg, type) {
|
311
|
+
super(msg);
|
312
|
+
this.type = type;
|
486
313
|
}
|
487
314
|
|
488
|
-
|
489
|
-
}(_util.BaseException);
|
315
|
+
}
|
490
316
|
|
491
317
|
exports.RenderingCancelledException = RenderingCancelledException;
|
492
|
-
|
318
|
+
const LinkTarget = {
|
493
319
|
NONE: 0,
|
494
320
|
SELF: 1,
|
495
321
|
BLANK: 2,
|
@@ -497,204 +323,135 @@ var LinkTarget = {
|
|
497
323
|
TOP: 4
|
498
324
|
};
|
499
325
|
exports.LinkTarget = LinkTarget;
|
500
|
-
var LinkTargetStringMap = ['', '_self', '_blank', '_parent', '_top'];
|
501
326
|
|
502
|
-
function addLinkAttributes(link
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
(0, _util.assert)(url && typeof url === 'string', 'addLinkAttributes: A valid "url" parameter must provided.');
|
511
|
-
var urlNullRemoved = (0, _util.removeNullCharacters)(url);
|
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);
|
512
335
|
|
513
336
|
if (enabled) {
|
514
337
|
link.href = link.title = urlNullRemoved;
|
515
338
|
} else {
|
516
|
-
link.href =
|
517
|
-
link.title =
|
339
|
+
link.href = "";
|
340
|
+
link.title = `Disabled: ${urlNullRemoved}`;
|
518
341
|
|
519
|
-
link.onclick =
|
342
|
+
link.onclick = () => {
|
520
343
|
return false;
|
521
344
|
};
|
522
345
|
}
|
523
346
|
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
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;
|
528
372
|
}
|
529
373
|
|
530
374
|
function getFilenameFromUrl(url) {
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
return url.substring(url.lastIndexOf(
|
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);
|
535
379
|
}
|
536
380
|
|
537
|
-
|
538
|
-
|
539
|
-
function () {
|
540
|
-
function StatTimer() {
|
541
|
-
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
542
|
-
|
543
|
-
_classCallCheck(this, StatTimer);
|
544
|
-
|
545
|
-
this.enabled = !!enable;
|
381
|
+
class StatTimer {
|
382
|
+
constructor() {
|
546
383
|
this.started = Object.create(null);
|
547
384
|
this.times = [];
|
548
385
|
}
|
549
386
|
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
return;
|
555
|
-
}
|
387
|
+
time(name) {
|
388
|
+
if (name in this.started) {
|
389
|
+
(0, _util.warn)(`Timer is already running for ${name}`);
|
390
|
+
}
|
556
391
|
|
557
|
-
|
558
|
-
|
559
|
-
}
|
392
|
+
this.started[name] = Date.now();
|
393
|
+
}
|
560
394
|
|
561
|
-
|
395
|
+
timeEnd(name) {
|
396
|
+
if (!(name in this.started)) {
|
397
|
+
(0, _util.warn)(`Timer has not been started for ${name}`);
|
562
398
|
}
|
563
|
-
}, {
|
564
|
-
key: "timeEnd",
|
565
|
-
value: function timeEnd(name) {
|
566
|
-
if (!this.enabled) {
|
567
|
-
return;
|
568
|
-
}
|
569
399
|
|
570
|
-
|
571
|
-
|
572
|
-
|
400
|
+
this.times.push({
|
401
|
+
name,
|
402
|
+
start: this.started[name],
|
403
|
+
end: Date.now()
|
404
|
+
});
|
405
|
+
delete this.started[name];
|
406
|
+
}
|
573
407
|
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
'end': Date.now()
|
578
|
-
});
|
579
|
-
delete this.started[name];
|
580
|
-
}
|
581
|
-
}, {
|
582
|
-
key: "toString",
|
583
|
-
value: function toString() {
|
584
|
-
var out = '',
|
585
|
-
longest = 0;
|
586
|
-
var _iteratorNormalCompletion = true;
|
587
|
-
var _didIteratorError = false;
|
588
|
-
var _iteratorError = undefined;
|
589
|
-
|
590
|
-
try {
|
591
|
-
for (var _iterator = this.times[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
592
|
-
var time = _step.value;
|
593
|
-
var name = time.name;
|
594
|
-
|
595
|
-
if (name.length > longest) {
|
596
|
-
longest = name.length;
|
597
|
-
}
|
598
|
-
}
|
599
|
-
} catch (err) {
|
600
|
-
_didIteratorError = true;
|
601
|
-
_iteratorError = err;
|
602
|
-
} finally {
|
603
|
-
try {
|
604
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
605
|
-
_iterator["return"]();
|
606
|
-
}
|
607
|
-
} finally {
|
608
|
-
if (_didIteratorError) {
|
609
|
-
throw _iteratorError;
|
610
|
-
}
|
611
|
-
}
|
612
|
-
}
|
408
|
+
toString() {
|
409
|
+
const outBuf = [];
|
410
|
+
let longest = 0;
|
613
411
|
|
614
|
-
|
615
|
-
|
616
|
-
var _iteratorError2 = undefined;
|
412
|
+
for (const time of this.times) {
|
413
|
+
const name = time.name;
|
617
414
|
|
618
|
-
|
619
|
-
|
620
|
-
var _time = _step2.value;
|
621
|
-
var duration = _time.end - _time.start;
|
622
|
-
out += "".concat(_time.name.padEnd(longest), " ").concat(duration, "ms\n");
|
623
|
-
}
|
624
|
-
} catch (err) {
|
625
|
-
_didIteratorError2 = true;
|
626
|
-
_iteratorError2 = err;
|
627
|
-
} finally {
|
628
|
-
try {
|
629
|
-
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
|
630
|
-
_iterator2["return"]();
|
631
|
-
}
|
632
|
-
} finally {
|
633
|
-
if (_didIteratorError2) {
|
634
|
-
throw _iteratorError2;
|
635
|
-
}
|
636
|
-
}
|
415
|
+
if (name.length > longest) {
|
416
|
+
longest = name.length;
|
637
417
|
}
|
638
|
-
|
639
|
-
return out;
|
640
418
|
}
|
641
|
-
}]);
|
642
|
-
|
643
|
-
return StatTimer;
|
644
|
-
}();
|
645
419
|
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
function () {
|
651
|
-
function DummyStatTimer() {
|
652
|
-
_classCallCheck(this, DummyStatTimer);
|
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
|
+
}
|
653
424
|
|
654
|
-
|
425
|
+
return outBuf.join("");
|
655
426
|
}
|
656
427
|
|
657
|
-
|
658
|
-
key: "time",
|
659
|
-
value: function time(name) {}
|
660
|
-
}, {
|
661
|
-
key: "timeEnd",
|
662
|
-
value: function timeEnd(name) {}
|
663
|
-
}, {
|
664
|
-
key: "toString",
|
665
|
-
value: function toString() {
|
666
|
-
return '';
|
667
|
-
}
|
668
|
-
}]);
|
669
|
-
|
670
|
-
return DummyStatTimer;
|
671
|
-
}();
|
428
|
+
}
|
672
429
|
|
673
|
-
exports.
|
430
|
+
exports.StatTimer = StatTimer;
|
674
431
|
|
675
432
|
function isFetchSupported() {
|
676
|
-
return typeof fetch !==
|
433
|
+
return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined";
|
677
434
|
}
|
678
435
|
|
679
436
|
function isValidFetchUrl(url, baseUrl) {
|
680
437
|
try {
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
return protocol ===
|
438
|
+
const {
|
439
|
+
protocol
|
440
|
+
} = baseUrl ? new URL(url, baseUrl) : new URL(url);
|
441
|
+
return protocol === "http:" || protocol === "https:";
|
685
442
|
} catch (ex) {
|
686
443
|
return false;
|
687
444
|
}
|
688
445
|
}
|
689
446
|
|
690
447
|
function loadScript(src) {
|
691
|
-
return new Promise(
|
692
|
-
|
448
|
+
return new Promise((resolve, reject) => {
|
449
|
+
const script = document.createElement("script");
|
693
450
|
script.src = src;
|
694
451
|
script.onload = resolve;
|
695
452
|
|
696
453
|
script.onerror = function () {
|
697
|
-
reject(new Error(
|
454
|
+
reject(new Error(`Cannot load script at: ${script.src}`));
|
698
455
|
};
|
699
456
|
|
700
457
|
(document.head || document.documentElement).appendChild(script);
|
@@ -702,76 +459,66 @@ function loadScript(src) {
|
|
702
459
|
}
|
703
460
|
|
704
461
|
function deprecated(details) {
|
705
|
-
console.log(
|
462
|
+
console.log("Deprecated API usage: " + details);
|
706
463
|
}
|
707
464
|
|
708
465
|
function releaseImageResources(img) {
|
709
|
-
(0, _util.assert)(img instanceof Image,
|
710
|
-
|
466
|
+
(0, _util.assert)(img instanceof Image, "Invalid `img` parameter.");
|
467
|
+
const url = img.src;
|
711
468
|
|
712
|
-
if (typeof url ===
|
469
|
+
if (typeof url === "string" && url.startsWith("blob:") && URL.revokeObjectURL) {
|
713
470
|
URL.revokeObjectURL(url);
|
714
471
|
}
|
715
472
|
|
716
|
-
img.removeAttribute(
|
473
|
+
img.removeAttribute("src");
|
717
474
|
}
|
718
475
|
|
719
|
-
|
720
|
-
|
721
|
-
var PDFDateString =
|
722
|
-
/*#__PURE__*/
|
723
|
-
function () {
|
724
|
-
function PDFDateString() {
|
725
|
-
_classCallCheck(this, PDFDateString);
|
726
|
-
}
|
476
|
+
let pdfDateStringRegex;
|
727
477
|
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
}
|
734
|
-
|
735
|
-
if (!pdfDateStringRegex) {
|
736
|
-
pdfDateStringRegex = new RegExp('^D:' + '(\\d{4})' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '(\\d{2})?' + '([Z|+|-])?' + '(\\d{2})?' + '\'?' + '(\\d{2})?' + '\'?');
|
737
|
-
}
|
478
|
+
class PDFDateString {
|
479
|
+
static toDateObject(input) {
|
480
|
+
if (!input || !(0, _util.isString)(input)) {
|
481
|
+
return null;
|
482
|
+
}
|
738
483
|
|
739
|
-
|
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
|
+
}
|
740
487
|
|
741
|
-
|
742
|
-
return null;
|
743
|
-
}
|
488
|
+
const matches = pdfDateStringRegex.exec(input);
|
744
489
|
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
var day = parseInt(matches[3], 10);
|
749
|
-
day = day >= 1 && day <= 31 ? day : 1;
|
750
|
-
var hour = parseInt(matches[4], 10);
|
751
|
-
hour = hour >= 0 && hour <= 23 ? hour : 0;
|
752
|
-
var minute = parseInt(matches[5], 10);
|
753
|
-
minute = minute >= 0 && minute <= 59 ? minute : 0;
|
754
|
-
var second = parseInt(matches[6], 10);
|
755
|
-
second = second >= 0 && second <= 59 ? second : 0;
|
756
|
-
var universalTimeRelation = matches[7] || 'Z';
|
757
|
-
var offsetHour = parseInt(matches[8], 10);
|
758
|
-
offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
|
759
|
-
var offsetMinute = parseInt(matches[9], 10) || 0;
|
760
|
-
offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
|
761
|
-
|
762
|
-
if (universalTimeRelation === '-') {
|
763
|
-
hour += offsetHour;
|
764
|
-
minute += offsetMinute;
|
765
|
-
} else if (universalTimeRelation === '+') {
|
766
|
-
hour -= offsetHour;
|
767
|
-
minute -= offsetMinute;
|
768
|
-
}
|
490
|
+
if (!matches) {
|
491
|
+
return null;
|
492
|
+
}
|
769
493
|
|
770
|
-
|
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;
|
771
517
|
}
|
772
|
-
}]);
|
773
518
|
|
774
|
-
|
775
|
-
}
|
519
|
+
return new Date(Date.UTC(year, month, day, hour, minute, second));
|
520
|
+
}
|
521
|
+
|
522
|
+
}
|
776
523
|
|
777
524
|
exports.PDFDateString = PDFDateString;
|