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.
|
@@ -26,418 +26,281 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.FontLoader = exports.FontFaceObject = void 0;
|
28
28
|
|
29
|
-
var
|
29
|
+
var _util = require("../shared/util.js");
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
class BaseFontLoader {
|
32
|
+
constructor({
|
33
|
+
docId,
|
34
|
+
onUnsupportedFeature
|
35
|
+
}) {
|
36
|
+
if (this.constructor === BaseFontLoader) {
|
37
|
+
(0, _util.unreachable)("Cannot initialize BaseFontLoader.");
|
38
|
+
}
|
34
39
|
|
35
|
-
|
40
|
+
this.docId = docId;
|
41
|
+
this._onUnsupportedFeature = onUnsupportedFeature;
|
42
|
+
this.nativeFontFaces = [];
|
43
|
+
this.styleElement = null;
|
44
|
+
}
|
36
45
|
|
37
|
-
|
46
|
+
addNativeFontFace(nativeFontFace) {
|
47
|
+
this.nativeFontFaces.push(nativeFontFace);
|
48
|
+
document.fonts.add(nativeFontFace);
|
49
|
+
}
|
38
50
|
|
39
|
-
|
51
|
+
insertRule(rule) {
|
52
|
+
let styleElement = this.styleElement;
|
40
53
|
|
41
|
-
|
54
|
+
if (!styleElement) {
|
55
|
+
styleElement = this.styleElement = document.createElement("style");
|
56
|
+
styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
|
57
|
+
document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
|
58
|
+
}
|
42
59
|
|
43
|
-
|
60
|
+
const styleSheet = styleElement.sheet;
|
61
|
+
styleSheet.insertRule(rule, styleSheet.cssRules.length);
|
62
|
+
}
|
44
63
|
|
45
|
-
|
64
|
+
clear() {
|
65
|
+
this.nativeFontFaces.forEach(function (nativeFontFace) {
|
66
|
+
document.fonts.delete(nativeFontFace);
|
67
|
+
});
|
68
|
+
this.nativeFontFaces.length = 0;
|
46
69
|
|
47
|
-
|
70
|
+
if (this.styleElement) {
|
71
|
+
this.styleElement.remove();
|
72
|
+
this.styleElement = null;
|
73
|
+
}
|
74
|
+
}
|
48
75
|
|
49
|
-
|
76
|
+
async bind(font) {
|
77
|
+
if (font.attached || font.missingFile) {
|
78
|
+
return;
|
79
|
+
}
|
50
80
|
|
51
|
-
|
81
|
+
font.attached = true;
|
52
82
|
|
53
|
-
|
83
|
+
if (this.isFontLoadingAPISupported) {
|
84
|
+
const nativeFontFace = font.createNativeFontFace();
|
54
85
|
|
55
|
-
|
86
|
+
if (nativeFontFace) {
|
87
|
+
this.addNativeFontFace(nativeFontFace);
|
56
88
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
89
|
+
try {
|
90
|
+
await nativeFontFace.loaded;
|
91
|
+
} catch (ex) {
|
92
|
+
this._onUnsupportedFeature({
|
93
|
+
featureId: _util.UNSUPPORTED_FEATURES.font
|
94
|
+
});
|
63
95
|
|
64
|
-
|
96
|
+
(0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
|
97
|
+
font.disableFontFace = true;
|
98
|
+
throw ex;
|
99
|
+
}
|
100
|
+
}
|
65
101
|
|
66
|
-
|
67
|
-
(0, _util.unreachable)('Cannot initialize BaseFontLoader.');
|
102
|
+
return;
|
68
103
|
}
|
69
104
|
|
70
|
-
|
71
|
-
this._onUnsupportedFeature = onUnsupportedFeature;
|
72
|
-
this.nativeFontFaces = [];
|
73
|
-
this.styleElement = null;
|
74
|
-
}
|
105
|
+
const rule = font.createFontFaceRule();
|
75
106
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
this.
|
80
|
-
|
81
|
-
}
|
82
|
-
}, {
|
83
|
-
key: "insertRule",
|
84
|
-
value: function insertRule(rule) {
|
85
|
-
var styleElement = this.styleElement;
|
86
|
-
|
87
|
-
if (!styleElement) {
|
88
|
-
styleElement = this.styleElement = document.createElement('style');
|
89
|
-
styleElement.id = "PDFJS_FONT_STYLE_TAG_".concat(this.docId);
|
90
|
-
document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement);
|
107
|
+
if (rule) {
|
108
|
+
this.insertRule(rule);
|
109
|
+
|
110
|
+
if (this.isSyncFontLoadingSupported) {
|
111
|
+
return;
|
91
112
|
}
|
92
113
|
|
93
|
-
|
94
|
-
|
95
|
-
}
|
96
|
-
}, {
|
97
|
-
key: "clear",
|
98
|
-
value: function clear() {
|
99
|
-
this.nativeFontFaces.forEach(function (nativeFontFace) {
|
100
|
-
document.fonts["delete"](nativeFontFace);
|
101
|
-
});
|
102
|
-
this.nativeFontFaces.length = 0;
|
114
|
+
await new Promise(resolve => {
|
115
|
+
const request = this._queueLoadingCallback(resolve);
|
103
116
|
|
104
|
-
|
105
|
-
|
106
|
-
this.styleElement = null;
|
107
|
-
}
|
117
|
+
this._prepareFontLoadEvent([rule], [font], request);
|
118
|
+
});
|
108
119
|
}
|
109
|
-
}
|
110
|
-
key: "bind",
|
111
|
-
value: function () {
|
112
|
-
var _bind = _asyncToGenerator(
|
113
|
-
/*#__PURE__*/
|
114
|
-
_regenerator["default"].mark(function _callee(font) {
|
115
|
-
var _this = this;
|
116
|
-
|
117
|
-
var nativeFontFace, rule;
|
118
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
119
|
-
while (1) {
|
120
|
-
switch (_context.prev = _context.next) {
|
121
|
-
case 0:
|
122
|
-
if (!(font.attached || font.missingFile)) {
|
123
|
-
_context.next = 2;
|
124
|
-
break;
|
125
|
-
}
|
126
|
-
|
127
|
-
return _context.abrupt("return", undefined);
|
128
|
-
|
129
|
-
case 2:
|
130
|
-
font.attached = true;
|
131
|
-
|
132
|
-
if (!this.isFontLoadingAPISupported) {
|
133
|
-
_context.next = 19;
|
134
|
-
break;
|
135
|
-
}
|
136
|
-
|
137
|
-
nativeFontFace = font.createNativeFontFace();
|
138
|
-
|
139
|
-
if (!nativeFontFace) {
|
140
|
-
_context.next = 18;
|
141
|
-
break;
|
142
|
-
}
|
143
|
-
|
144
|
-
this.addNativeFontFace(nativeFontFace);
|
145
|
-
_context.prev = 7;
|
146
|
-
_context.next = 10;
|
147
|
-
return nativeFontFace.loaded;
|
148
|
-
|
149
|
-
case 10:
|
150
|
-
_context.next = 18;
|
151
|
-
break;
|
152
|
-
|
153
|
-
case 12:
|
154
|
-
_context.prev = 12;
|
155
|
-
_context.t0 = _context["catch"](7);
|
156
|
-
|
157
|
-
this._onUnsupportedFeature({
|
158
|
-
featureId: _util.UNSUPPORTED_FEATURES.font
|
159
|
-
});
|
160
|
-
|
161
|
-
(0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'."));
|
162
|
-
font.disableFontFace = true;
|
163
|
-
throw _context.t0;
|
164
|
-
|
165
|
-
case 18:
|
166
|
-
return _context.abrupt("return", undefined);
|
167
|
-
|
168
|
-
case 19:
|
169
|
-
rule = font.createFontFaceRule();
|
170
|
-
|
171
|
-
if (!rule) {
|
172
|
-
_context.next = 25;
|
173
|
-
break;
|
174
|
-
}
|
175
|
-
|
176
|
-
this.insertRule(rule);
|
177
|
-
|
178
|
-
if (!this.isSyncFontLoadingSupported) {
|
179
|
-
_context.next = 24;
|
180
|
-
break;
|
181
|
-
}
|
182
|
-
|
183
|
-
return _context.abrupt("return", undefined);
|
184
|
-
|
185
|
-
case 24:
|
186
|
-
return _context.abrupt("return", new Promise(function (resolve) {
|
187
|
-
var request = _this._queueLoadingCallback(resolve);
|
188
|
-
|
189
|
-
_this._prepareFontLoadEvent([rule], [font], request);
|
190
|
-
}));
|
191
|
-
|
192
|
-
case 25:
|
193
|
-
return _context.abrupt("return", undefined);
|
194
|
-
|
195
|
-
case 26:
|
196
|
-
case "end":
|
197
|
-
return _context.stop();
|
198
|
-
}
|
199
|
-
}
|
200
|
-
}, _callee, this, [[7, 12]]);
|
201
|
-
}));
|
202
|
-
|
203
|
-
function bind(_x) {
|
204
|
-
return _bind.apply(this, arguments);
|
205
|
-
}
|
120
|
+
}
|
206
121
|
|
207
|
-
|
208
|
-
|
209
|
-
}
|
210
|
-
key: "_queueLoadingCallback",
|
211
|
-
value: function _queueLoadingCallback(callback) {
|
212
|
-
(0, _util.unreachable)('Abstract method `_queueLoadingCallback`.');
|
213
|
-
}
|
214
|
-
}, {
|
215
|
-
key: "_prepareFontLoadEvent",
|
216
|
-
value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {
|
217
|
-
(0, _util.unreachable)('Abstract method `_prepareFontLoadEvent`.');
|
218
|
-
}
|
219
|
-
}, {
|
220
|
-
key: "isFontLoadingAPISupported",
|
221
|
-
get: function get() {
|
222
|
-
(0, _util.unreachable)('Abstract method `isFontLoadingAPISupported`.');
|
223
|
-
}
|
224
|
-
}, {
|
225
|
-
key: "isSyncFontLoadingSupported",
|
226
|
-
get: function get() {
|
227
|
-
(0, _util.unreachable)('Abstract method `isSyncFontLoadingSupported`.');
|
228
|
-
}
|
229
|
-
}, {
|
230
|
-
key: "_loadTestFont",
|
231
|
-
get: function get() {
|
232
|
-
(0, _util.unreachable)('Abstract method `_loadTestFont`.');
|
233
|
-
}
|
234
|
-
}]);
|
122
|
+
_queueLoadingCallback(callback) {
|
123
|
+
(0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
|
124
|
+
}
|
235
125
|
|
236
|
-
|
237
|
-
|
126
|
+
get isFontLoadingAPISupported() {
|
127
|
+
const supported = typeof document !== "undefined" && !!document.fonts;
|
128
|
+
return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
|
129
|
+
}
|
238
130
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
exports.FontLoader = FontLoader =
|
243
|
-
/*#__PURE__*/
|
244
|
-
function (_BaseFontLoader) {
|
245
|
-
_inherits(GenericFontLoader, _BaseFontLoader);
|
131
|
+
get isSyncFontLoadingSupported() {
|
132
|
+
(0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
|
133
|
+
}
|
246
134
|
|
247
|
-
|
248
|
-
|
135
|
+
get _loadTestFont() {
|
136
|
+
(0, _util.unreachable)("Abstract method `_loadTestFont`.");
|
137
|
+
}
|
249
138
|
|
250
|
-
|
139
|
+
_prepareFontLoadEvent(rules, fontsToLoad, request) {
|
140
|
+
(0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
|
141
|
+
}
|
251
142
|
|
252
|
-
|
253
|
-
|
143
|
+
}
|
144
|
+
|
145
|
+
let FontLoader;
|
146
|
+
exports.FontLoader = FontLoader;
|
147
|
+
{
|
148
|
+
exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
|
149
|
+
constructor(docId) {
|
150
|
+
super(docId);
|
151
|
+
this.loadingContext = {
|
254
152
|
requests: [],
|
255
153
|
nextRequestId: 0
|
256
154
|
};
|
257
|
-
|
258
|
-
return _this2;
|
155
|
+
this.loadTestFontId = 0;
|
259
156
|
}
|
260
157
|
|
261
|
-
|
262
|
-
|
263
|
-
value: function _queueLoadingCallback(callback) {
|
264
|
-
function completeRequest() {
|
265
|
-
(0, _util.assert)(!request.done, 'completeRequest() cannot be called twice.');
|
266
|
-
request.done = true;
|
267
|
-
|
268
|
-
while (context.requests.length > 0 && context.requests[0].done) {
|
269
|
-
var otherRequest = context.requests.shift();
|
270
|
-
setTimeout(otherRequest.callback, 0);
|
271
|
-
}
|
272
|
-
}
|
158
|
+
get isSyncFontLoadingSupported() {
|
159
|
+
let supported = false;
|
273
160
|
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
complete: completeRequest,
|
279
|
-
callback: callback
|
280
|
-
};
|
281
|
-
context.requests.push(request);
|
282
|
-
return request;
|
283
|
-
}
|
284
|
-
}, {
|
285
|
-
key: "_prepareFontLoadEvent",
|
286
|
-
value: function _prepareFontLoadEvent(rules, fonts, request) {
|
287
|
-
function int32(data, offset) {
|
288
|
-
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
|
289
|
-
}
|
161
|
+
if (typeof navigator === "undefined") {
|
162
|
+
supported = true;
|
163
|
+
} else {
|
164
|
+
const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
290
165
|
|
291
|
-
|
292
|
-
|
293
|
-
var chunk2 = s.substring(offset + remove);
|
294
|
-
return chunk1 + insert + chunk2;
|
166
|
+
if (m && m[1] >= 14) {
|
167
|
+
supported = true;
|
295
168
|
}
|
169
|
+
}
|
296
170
|
|
297
|
-
|
298
|
-
|
299
|
-
canvas.width = 1;
|
300
|
-
canvas.height = 1;
|
301
|
-
var ctx = canvas.getContext('2d');
|
302
|
-
var called = 0;
|
171
|
+
return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
|
172
|
+
}
|
303
173
|
|
304
|
-
|
305
|
-
|
174
|
+
_queueLoadingCallback(callback) {
|
175
|
+
function completeRequest() {
|
176
|
+
(0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
|
177
|
+
request.done = true;
|
306
178
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
179
|
+
while (context.requests.length > 0 && context.requests[0].done) {
|
180
|
+
const otherRequest = context.requests.shift();
|
181
|
+
setTimeout(otherRequest.callback, 0);
|
182
|
+
}
|
183
|
+
}
|
312
184
|
|
313
|
-
|
314
|
-
|
315
|
-
|
185
|
+
const context = this.loadingContext;
|
186
|
+
const request = {
|
187
|
+
id: `pdfjs-font-loading-${context.nextRequestId++}`,
|
188
|
+
done: false,
|
189
|
+
complete: completeRequest,
|
190
|
+
callback
|
191
|
+
};
|
192
|
+
context.requests.push(request);
|
193
|
+
return request;
|
194
|
+
}
|
316
195
|
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
196
|
+
get _loadTestFont() {
|
197
|
+
const getLoadTestFont = function () {
|
198
|
+
return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
|
199
|
+
};
|
321
200
|
|
322
|
-
|
323
|
-
|
201
|
+
return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
|
202
|
+
}
|
324
203
|
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
var CFF_CHECKSUM_OFFSET = 16;
|
330
|
-
var XXXX_VALUE = 0x58585858;
|
331
|
-
var checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
204
|
+
_prepareFontLoadEvent(rules, fonts, request) {
|
205
|
+
function int32(data, offset) {
|
206
|
+
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
|
207
|
+
}
|
332
208
|
|
333
|
-
|
334
|
-
|
335
|
-
|
209
|
+
function spliceString(s, offset, remove, insert) {
|
210
|
+
const chunk1 = s.substring(0, offset);
|
211
|
+
const chunk2 = s.substring(offset + remove);
|
212
|
+
return chunk1 + insert + chunk2;
|
213
|
+
}
|
336
214
|
|
337
|
-
|
338
|
-
|
339
|
-
|
215
|
+
let i, ii;
|
216
|
+
const canvas = document.createElement("canvas");
|
217
|
+
canvas.width = 1;
|
218
|
+
canvas.height = 1;
|
219
|
+
const ctx = canvas.getContext("2d");
|
220
|
+
let called = 0;
|
340
221
|
|
341
|
-
|
342
|
-
|
343
|
-
var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}");
|
344
|
-
this.insertRule(rule);
|
345
|
-
var names = [];
|
222
|
+
function isFontReady(name, callback) {
|
223
|
+
called++;
|
346
224
|
|
347
|
-
|
348
|
-
|
225
|
+
if (called > 30) {
|
226
|
+
(0, _util.warn)("Load test font never loaded.");
|
227
|
+
callback();
|
228
|
+
return;
|
349
229
|
}
|
350
230
|
|
351
|
-
|
352
|
-
|
353
|
-
|
231
|
+
ctx.font = "30px " + name;
|
232
|
+
ctx.fillText(".", 0, 20);
|
233
|
+
const imageData = ctx.getImageData(0, 0, 1, 1);
|
354
234
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
span.style.fontFamily = names[i];
|
359
|
-
div.appendChild(span);
|
235
|
+
if (imageData.data[3] > 0) {
|
236
|
+
callback();
|
237
|
+
return;
|
360
238
|
}
|
361
239
|
|
362
|
-
|
363
|
-
isFontReady(loadTestFontId, function () {
|
364
|
-
document.body.removeChild(div);
|
365
|
-
request.complete();
|
366
|
-
});
|
240
|
+
setTimeout(isFontReady.bind(null, name, callback));
|
367
241
|
}
|
368
|
-
}, {
|
369
|
-
key: "isFontLoadingAPISupported",
|
370
|
-
get: function get() {
|
371
|
-
var supported = typeof document !== 'undefined' && !!document.fonts;
|
372
|
-
|
373
|
-
if (supported && typeof navigator !== 'undefined') {
|
374
|
-
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
375
242
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
243
|
+
const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
|
244
|
+
let data = this._loadTestFont;
|
245
|
+
const COMMENT_OFFSET = 976;
|
246
|
+
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
|
247
|
+
const CFF_CHECKSUM_OFFSET = 16;
|
248
|
+
const XXXX_VALUE = 0x58585858;
|
249
|
+
let checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
380
250
|
|
381
|
-
|
251
|
+
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
|
252
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
|
382
253
|
}
|
383
|
-
}, {
|
384
|
-
key: "isSyncFontLoadingSupported",
|
385
|
-
get: function get() {
|
386
|
-
var supported = false;
|
387
254
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
255
|
+
if (i < loadTestFontId.length) {
|
256
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
|
257
|
+
}
|
392
258
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
259
|
+
data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
|
260
|
+
const url = `url(data:font/opentype;base64,${btoa(data)});`;
|
261
|
+
const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
|
262
|
+
this.insertRule(rule);
|
263
|
+
const names = [];
|
397
264
|
|
398
|
-
|
265
|
+
for (i = 0, ii = fonts.length; i < ii; i++) {
|
266
|
+
names.push(fonts[i].loadedName);
|
399
267
|
}
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
268
|
+
|
269
|
+
names.push(loadTestFontId);
|
270
|
+
const div = document.createElement("div");
|
271
|
+
div.style.visibility = "hidden";
|
272
|
+
div.style.width = div.style.height = "10px";
|
273
|
+
div.style.position = "absolute";
|
274
|
+
div.style.top = div.style.left = "0px";
|
275
|
+
|
276
|
+
for (i = 0, ii = names.length; i < ii; ++i) {
|
277
|
+
const span = document.createElement("span");
|
278
|
+
span.textContent = "Hi";
|
279
|
+
span.style.fontFamily = names[i];
|
280
|
+
div.appendChild(span);
|
408
281
|
}
|
409
|
-
}]);
|
410
282
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
}
|
283
|
+
document.body.appendChild(div);
|
284
|
+
isFontReady(loadTestFontId, function () {
|
285
|
+
document.body.removeChild(div);
|
286
|
+
request.complete();
|
287
|
+
});
|
288
|
+
}
|
418
289
|
|
419
|
-
};
|
420
|
-
|
421
|
-
var FontFaceObject =
|
422
|
-
/*#__PURE__*/
|
423
|
-
function () {
|
424
|
-
function FontFaceObject(translatedData, _ref2) {
|
425
|
-
var _ref2$isEvalSupported = _ref2.isEvalSupported,
|
426
|
-
isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,
|
427
|
-
_ref2$disableFontFace = _ref2.disableFontFace,
|
428
|
-
disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,
|
429
|
-
_ref2$ignoreErrors = _ref2.ignoreErrors,
|
430
|
-
ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,
|
431
|
-
_ref2$onUnsupportedFe = _ref2.onUnsupportedFeature,
|
432
|
-
onUnsupportedFeature = _ref2$onUnsupportedFe === void 0 ? null : _ref2$onUnsupportedFe,
|
433
|
-
_ref2$fontRegistry = _ref2.fontRegistry,
|
434
|
-
fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;
|
435
|
-
|
436
|
-
_classCallCheck(this, FontFaceObject);
|
290
|
+
};
|
291
|
+
}
|
437
292
|
|
293
|
+
class FontFaceObject {
|
294
|
+
constructor(translatedData, {
|
295
|
+
isEvalSupported = true,
|
296
|
+
disableFontFace = false,
|
297
|
+
ignoreErrors = false,
|
298
|
+
onUnsupportedFeature = null,
|
299
|
+
fontRegistry = null
|
300
|
+
}) {
|
438
301
|
this.compiledGlyphs = Object.create(null);
|
439
302
|
|
440
|
-
for (
|
303
|
+
for (const i in translatedData) {
|
441
304
|
this[i] = translatedData[i];
|
442
305
|
}
|
443
306
|
|
@@ -448,98 +311,92 @@ function () {
|
|
448
311
|
this.fontRegistry = fontRegistry;
|
449
312
|
}
|
450
313
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
return null;
|
456
|
-
}
|
314
|
+
createNativeFontFace() {
|
315
|
+
if (!this.data || this.disableFontFace) {
|
316
|
+
return null;
|
317
|
+
}
|
457
318
|
|
458
|
-
|
319
|
+
const nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
459
320
|
|
460
|
-
|
461
|
-
|
462
|
-
}
|
463
|
-
|
464
|
-
return nativeFontFace;
|
321
|
+
if (this.fontRegistry) {
|
322
|
+
this.fontRegistry.registerFont(this);
|
465
323
|
}
|
466
|
-
}, {
|
467
|
-
key: "createFontFaceRule",
|
468
|
-
value: function createFontFaceRule() {
|
469
|
-
if (!this.data || this.disableFontFace) {
|
470
|
-
return null;
|
471
|
-
}
|
472
324
|
|
473
|
-
|
474
|
-
|
475
|
-
var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}");
|
325
|
+
return nativeFontFace;
|
326
|
+
}
|
476
327
|
|
477
|
-
|
478
|
-
|
479
|
-
|
328
|
+
createFontFaceRule() {
|
329
|
+
if (!this.data || this.disableFontFace) {
|
330
|
+
return null;
|
331
|
+
}
|
332
|
+
|
333
|
+
const data = (0, _util.bytesToString)(new Uint8Array(this.data));
|
334
|
+
const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
|
335
|
+
const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
|
480
336
|
|
481
|
-
|
337
|
+
if (this.fontRegistry) {
|
338
|
+
this.fontRegistry.registerFont(this, url);
|
482
339
|
}
|
483
|
-
}, {
|
484
|
-
key: "getPathGenerator",
|
485
|
-
value: function getPathGenerator(objs, character) {
|
486
|
-
if (this.compiledGlyphs[character] !== undefined) {
|
487
|
-
return this.compiledGlyphs[character];
|
488
|
-
}
|
489
340
|
|
490
|
-
|
341
|
+
return rule;
|
342
|
+
}
|
491
343
|
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
throw ex;
|
497
|
-
}
|
344
|
+
getPathGenerator(objs, character) {
|
345
|
+
if (this.compiledGlyphs[character] !== undefined) {
|
346
|
+
return this.compiledGlyphs[character];
|
347
|
+
}
|
498
348
|
|
499
|
-
|
500
|
-
this._onUnsupportedFeature({
|
501
|
-
featureId: _util.UNSUPPORTED_FEATURES.font
|
502
|
-
});
|
503
|
-
}
|
349
|
+
let cmds, current;
|
504
350
|
|
505
|
-
|
506
|
-
|
351
|
+
try {
|
352
|
+
cmds = objs.get(this.loadedName + "_path_" + character);
|
353
|
+
} catch (ex) {
|
354
|
+
if (!this.ignoreErrors) {
|
355
|
+
throw ex;
|
507
356
|
}
|
508
357
|
|
509
|
-
if (this.
|
510
|
-
|
511
|
-
|
358
|
+
if (this._onUnsupportedFeature) {
|
359
|
+
this._onUnsupportedFeature({
|
360
|
+
featureId: _util.UNSUPPORTED_FEATURES.font
|
361
|
+
});
|
362
|
+
}
|
512
363
|
|
513
|
-
|
514
|
-
|
364
|
+
(0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
|
365
|
+
return this.compiledGlyphs[character] = function (c, size) {};
|
366
|
+
}
|
515
367
|
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
args = '';
|
520
|
-
}
|
368
|
+
if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
|
369
|
+
let args,
|
370
|
+
js = "";
|
521
371
|
|
522
|
-
|
372
|
+
for (let i = 0, ii = cmds.length; i < ii; i++) {
|
373
|
+
current = cmds[i];
|
374
|
+
|
375
|
+
if (current.args !== undefined) {
|
376
|
+
args = current.args.join(",");
|
377
|
+
} else {
|
378
|
+
args = "";
|
523
379
|
}
|
524
380
|
|
525
|
-
|
381
|
+
js += "c." + current.cmd + "(" + args + ");\n";
|
526
382
|
}
|
527
383
|
|
528
|
-
return this.compiledGlyphs[character] =
|
529
|
-
|
530
|
-
current = cmds[_i];
|
384
|
+
return this.compiledGlyphs[character] = new Function("c", "size", js);
|
385
|
+
}
|
531
386
|
|
532
|
-
|
533
|
-
|
534
|
-
|
387
|
+
return this.compiledGlyphs[character] = function (c, size) {
|
388
|
+
for (let i = 0, ii = cmds.length; i < ii; i++) {
|
389
|
+
current = cmds[i];
|
535
390
|
|
536
|
-
|
391
|
+
if (current.cmd === "scale") {
|
392
|
+
current.args = [size, -size];
|
537
393
|
}
|
538
|
-
};
|
539
|
-
}
|
540
|
-
}]);
|
541
394
|
|
542
|
-
|
543
|
-
}
|
395
|
+
c[current.cmd].apply(c, current.args);
|
396
|
+
}
|
397
|
+
};
|
398
|
+
}
|
399
|
+
|
400
|
+
}
|
544
401
|
|
545
402
|
exports.FontFaceObject = FontFaceObject;
|