pdfjs-dist 2.1.266 → 2.5.207
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 +8382 -18492
- 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 +20417 -29816
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25688 -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 +58239 -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 +403 -0
- package/es5/web/pdf_viewer.js +7742 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1475 -4897
- 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 +750 -899
- 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 +235 -183
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +447 -542
- package/lib/core/cmap.js +222 -264
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +573 -660
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +1103 -868
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +570 -491
- package/lib/core/function.js +291 -288
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +145 -149
- package/lib/core/image_utils.js +170 -0
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +284 -232
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2929 -2929
- package/lib/core/murmurhash3.js +90 -101
- package/lib/core/obj.js +1183 -1157
- package/lib/core/operator_list.js +99 -67
- package/lib/core/parser.js +972 -911
- package/lib/core/pattern.js +87 -70
- package/lib/core/pdf_manager.js +150 -315
- package/lib/core/primitives.js +83 -56
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +87 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +193 -390
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +741 -972
- package/lib/display/api.js +1500 -1791
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +165 -165
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +515 -0
- package/lib/display/fetch_stream.js +183 -298
- package/lib/display/font_loader.js +273 -413
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +266 -359
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +285 -458
- package/lib/display/pattern_helper.js +113 -65
- package/lib/display/svg.js +1166 -901
- package/lib/display/text_layer.js +156 -132
- package/lib/display/transport_stream.js +262 -278
- 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 +40 -37
- package/lib/pdf.js +226 -59
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +266 -416
- package/lib/test/unit/annotation_spec.js +1555 -701
- package/lib/test/unit/api_spec.js +802 -604
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +84 -69
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +74 -76
- package/lib/test/unit/colorspace_spec.js +166 -161
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +20 -22
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +16 -21
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +83 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +46 -30
- package/lib/test/unit/message_handler_spec.js +173 -159
- 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 +13 -61
- package/lib/test/unit/network_utils_spec.js +183 -119
- package/lib/test/unit/node_stream_spec.js +78 -92
- package/lib/test/unit/parser_spec.js +172 -114
- 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 +140 -125
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +131 -143
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +297 -459
- package/lib/test/unit/unicode_spec.js +38 -38
- package/lib/test/unit/util_spec.js +121 -305
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1328 -1214
- package/lib/web/app_options.js +105 -107
- package/lib/web/base_viewer.js +824 -838
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +39 -55
- package/lib/web/firefox_print_service.js +37 -27
- package/lib/web/firefoxcom.js +212 -363
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +32 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +113 -131
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +221 -306
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +491 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +140 -175
- package/lib/web/pdf_page_view.js +452 -523
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +84 -108
- package/lib/web/pdf_sidebar.js +276 -306
- 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 +82 -286
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +282 -339
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +267 -420
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +35 -25
- package/web/pdf_viewer.js +3489 -4855
- 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 -494
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/lib/test/unit/dom_utils_spec.js +0 -89
@@ -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,415 +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.errorFontLoadNative
|
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");
|
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");
|
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");
|
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
|
-
case "end":
|
194
|
-
return _context.stop();
|
195
|
-
}
|
196
|
-
}
|
197
|
-
}, _callee, this, [[7, 12]]);
|
198
|
-
}));
|
199
|
-
|
200
|
-
function bind(_x) {
|
201
|
-
return _bind.apply(this, arguments);
|
202
|
-
}
|
120
|
+
}
|
203
121
|
|
204
|
-
|
205
|
-
|
206
|
-
}
|
207
|
-
key: "_queueLoadingCallback",
|
208
|
-
value: function _queueLoadingCallback(callback) {
|
209
|
-
(0, _util.unreachable)('Abstract method `_queueLoadingCallback`.');
|
210
|
-
}
|
211
|
-
}, {
|
212
|
-
key: "_prepareFontLoadEvent",
|
213
|
-
value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {
|
214
|
-
(0, _util.unreachable)('Abstract method `_prepareFontLoadEvent`.');
|
215
|
-
}
|
216
|
-
}, {
|
217
|
-
key: "isFontLoadingAPISupported",
|
218
|
-
get: function get() {
|
219
|
-
(0, _util.unreachable)('Abstract method `isFontLoadingAPISupported`.');
|
220
|
-
}
|
221
|
-
}, {
|
222
|
-
key: "isSyncFontLoadingSupported",
|
223
|
-
get: function get() {
|
224
|
-
(0, _util.unreachable)('Abstract method `isSyncFontLoadingSupported`.');
|
225
|
-
}
|
226
|
-
}, {
|
227
|
-
key: "_loadTestFont",
|
228
|
-
get: function get() {
|
229
|
-
(0, _util.unreachable)('Abstract method `_loadTestFont`.');
|
230
|
-
}
|
231
|
-
}]);
|
122
|
+
_queueLoadingCallback(callback) {
|
123
|
+
(0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
|
124
|
+
}
|
232
125
|
|
233
|
-
|
234
|
-
|
126
|
+
get isFontLoadingAPISupported() {
|
127
|
+
const supported = typeof document !== "undefined" && !!document.fonts;
|
128
|
+
return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
|
129
|
+
}
|
235
130
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
exports.FontLoader = FontLoader =
|
240
|
-
/*#__PURE__*/
|
241
|
-
function (_BaseFontLoader) {
|
242
|
-
_inherits(GenericFontLoader, _BaseFontLoader);
|
131
|
+
get isSyncFontLoadingSupported() {
|
132
|
+
(0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
|
133
|
+
}
|
243
134
|
|
244
|
-
|
245
|
-
|
135
|
+
get _loadTestFont() {
|
136
|
+
(0, _util.unreachable)("Abstract method `_loadTestFont`.");
|
137
|
+
}
|
246
138
|
|
247
|
-
|
139
|
+
_prepareFontLoadEvent(rules, fontsToLoad, request) {
|
140
|
+
(0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
|
141
|
+
}
|
248
142
|
|
249
|
-
|
250
|
-
|
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 = {
|
251
152
|
requests: [],
|
252
153
|
nextRequestId: 0
|
253
154
|
};
|
254
|
-
|
255
|
-
return _this2;
|
155
|
+
this.loadTestFontId = 0;
|
256
156
|
}
|
257
157
|
|
258
|
-
|
259
|
-
|
260
|
-
value: function _queueLoadingCallback(callback) {
|
261
|
-
function completeRequest() {
|
262
|
-
(0, _util.assert)(!request.done, 'completeRequest() cannot be called twice.');
|
263
|
-
request.done = true;
|
264
|
-
|
265
|
-
while (context.requests.length > 0 && context.requests[0].done) {
|
266
|
-
var otherRequest = context.requests.shift();
|
267
|
-
setTimeout(otherRequest.callback, 0);
|
268
|
-
}
|
269
|
-
}
|
158
|
+
get isSyncFontLoadingSupported() {
|
159
|
+
let supported = false;
|
270
160
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
complete: completeRequest,
|
276
|
-
callback: callback
|
277
|
-
};
|
278
|
-
context.requests.push(request);
|
279
|
-
return request;
|
280
|
-
}
|
281
|
-
}, {
|
282
|
-
key: "_prepareFontLoadEvent",
|
283
|
-
value: function _prepareFontLoadEvent(rules, fonts, request) {
|
284
|
-
function int32(data, offset) {
|
285
|
-
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
|
286
|
-
}
|
161
|
+
if (typeof navigator === "undefined") {
|
162
|
+
supported = true;
|
163
|
+
} else {
|
164
|
+
const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
287
165
|
|
288
|
-
|
289
|
-
|
290
|
-
var chunk2 = s.substring(offset + remove);
|
291
|
-
return chunk1 + insert + chunk2;
|
166
|
+
if (m && m[1] >= 14) {
|
167
|
+
supported = true;
|
292
168
|
}
|
169
|
+
}
|
293
170
|
|
294
|
-
|
295
|
-
|
296
|
-
canvas.width = 1;
|
297
|
-
canvas.height = 1;
|
298
|
-
var ctx = canvas.getContext('2d');
|
299
|
-
var called = 0;
|
171
|
+
return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
|
172
|
+
}
|
300
173
|
|
301
|
-
|
302
|
-
|
174
|
+
_queueLoadingCallback(callback) {
|
175
|
+
function completeRequest() {
|
176
|
+
(0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
|
177
|
+
request.done = true;
|
303
178
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
179
|
+
while (context.requests.length > 0 && context.requests[0].done) {
|
180
|
+
const otherRequest = context.requests.shift();
|
181
|
+
setTimeout(otherRequest.callback, 0);
|
182
|
+
}
|
183
|
+
}
|
309
184
|
|
310
|
-
|
311
|
-
|
312
|
-
|
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
|
+
}
|
313
195
|
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
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
|
+
};
|
318
200
|
|
319
|
-
|
320
|
-
|
201
|
+
return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
|
202
|
+
}
|
321
203
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
var CFF_CHECKSUM_OFFSET = 16;
|
327
|
-
var XXXX_VALUE = 0x58585858;
|
328
|
-
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
|
+
}
|
329
208
|
|
330
|
-
|
331
|
-
|
332
|
-
|
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
|
+
}
|
333
214
|
|
334
|
-
|
335
|
-
|
336
|
-
|
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;
|
337
221
|
|
338
|
-
|
339
|
-
|
340
|
-
var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}");
|
341
|
-
this.insertRule(rule);
|
342
|
-
var names = [];
|
222
|
+
function isFontReady(name, callback) {
|
223
|
+
called++;
|
343
224
|
|
344
|
-
|
345
|
-
|
225
|
+
if (called > 30) {
|
226
|
+
(0, _util.warn)("Load test font never loaded.");
|
227
|
+
callback();
|
228
|
+
return;
|
346
229
|
}
|
347
230
|
|
348
|
-
|
349
|
-
|
350
|
-
|
231
|
+
ctx.font = "30px " + name;
|
232
|
+
ctx.fillText(".", 0, 20);
|
233
|
+
const imageData = ctx.getImageData(0, 0, 1, 1);
|
351
234
|
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
span.style.fontFamily = names[i];
|
356
|
-
div.appendChild(span);
|
235
|
+
if (imageData.data[3] > 0) {
|
236
|
+
callback();
|
237
|
+
return;
|
357
238
|
}
|
358
239
|
|
359
|
-
|
360
|
-
isFontReady(loadTestFontId, function () {
|
361
|
-
document.body.removeChild(div);
|
362
|
-
request.complete();
|
363
|
-
});
|
240
|
+
setTimeout(isFontReady.bind(null, name, callback));
|
364
241
|
}
|
365
|
-
}, {
|
366
|
-
key: "isFontLoadingAPISupported",
|
367
|
-
get: function get() {
|
368
|
-
var supported = typeof document !== 'undefined' && !!document.fonts;
|
369
242
|
|
370
|
-
|
371
|
-
|
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);
|
372
250
|
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
}
|
251
|
+
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
|
252
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
|
253
|
+
}
|
377
254
|
|
378
|
-
|
255
|
+
if (i < loadTestFontId.length) {
|
256
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
|
379
257
|
}
|
380
|
-
}, {
|
381
|
-
key: "isSyncFontLoadingSupported",
|
382
|
-
get: function get() {
|
383
|
-
var supported = false;
|
384
258
|
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
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 = [];
|
389
264
|
|
390
|
-
|
391
|
-
|
392
|
-
}
|
393
|
-
}
|
394
|
-
|
395
|
-
return (0, _util.shadow)(this, 'isSyncFontLoadingSupported', supported);
|
265
|
+
for (i = 0, ii = fonts.length; i < ii; i++) {
|
266
|
+
names.push(fonts[i].loadedName);
|
396
267
|
}
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
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);
|
405
281
|
}
|
406
|
-
}]);
|
407
282
|
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
}
|
283
|
+
document.body.appendChild(div);
|
284
|
+
isFontReady(loadTestFontId, function () {
|
285
|
+
document.body.removeChild(div);
|
286
|
+
request.complete();
|
287
|
+
});
|
288
|
+
}
|
415
289
|
|
416
|
-
};
|
417
|
-
|
418
|
-
var FontFaceObject =
|
419
|
-
/*#__PURE__*/
|
420
|
-
function () {
|
421
|
-
function FontFaceObject(translatedData, _ref2) {
|
422
|
-
var _ref2$isEvalSupported = _ref2.isEvalSupported,
|
423
|
-
isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,
|
424
|
-
_ref2$disableFontFace = _ref2.disableFontFace,
|
425
|
-
disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,
|
426
|
-
_ref2$ignoreErrors = _ref2.ignoreErrors,
|
427
|
-
ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,
|
428
|
-
_ref2$onUnsupportedFe = _ref2.onUnsupportedFeature,
|
429
|
-
onUnsupportedFeature = _ref2$onUnsupportedFe === void 0 ? null : _ref2$onUnsupportedFe,
|
430
|
-
_ref2$fontRegistry = _ref2.fontRegistry,
|
431
|
-
fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;
|
432
|
-
|
433
|
-
_classCallCheck(this, FontFaceObject);
|
290
|
+
};
|
291
|
+
}
|
434
292
|
|
293
|
+
class FontFaceObject {
|
294
|
+
constructor(translatedData, {
|
295
|
+
isEvalSupported = true,
|
296
|
+
disableFontFace = false,
|
297
|
+
ignoreErrors = false,
|
298
|
+
onUnsupportedFeature = null,
|
299
|
+
fontRegistry = null
|
300
|
+
}) {
|
435
301
|
this.compiledGlyphs = Object.create(null);
|
436
302
|
|
437
|
-
for (
|
303
|
+
for (const i in translatedData) {
|
438
304
|
this[i] = translatedData[i];
|
439
305
|
}
|
440
306
|
|
@@ -445,98 +311,92 @@ function () {
|
|
445
311
|
this.fontRegistry = fontRegistry;
|
446
312
|
}
|
447
313
|
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
return null;
|
453
|
-
}
|
454
|
-
|
455
|
-
var nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
314
|
+
createNativeFontFace() {
|
315
|
+
if (!this.data || this.disableFontFace) {
|
316
|
+
return null;
|
317
|
+
}
|
456
318
|
|
457
|
-
|
458
|
-
this.fontRegistry.registerFont(this);
|
459
|
-
}
|
319
|
+
const nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
460
320
|
|
461
|
-
|
321
|
+
if (this.fontRegistry) {
|
322
|
+
this.fontRegistry.registerFont(this);
|
462
323
|
}
|
463
|
-
}, {
|
464
|
-
key: "createFontFaceRule",
|
465
|
-
value: function createFontFaceRule() {
|
466
|
-
if (!this.data || this.disableFontFace) {
|
467
|
-
return null;
|
468
|
-
}
|
469
324
|
|
470
|
-
|
471
|
-
|
472
|
-
var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}");
|
325
|
+
return nativeFontFace;
|
326
|
+
}
|
473
327
|
|
474
|
-
|
475
|
-
|
476
|
-
|
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}}`;
|
477
336
|
|
478
|
-
|
337
|
+
if (this.fontRegistry) {
|
338
|
+
this.fontRegistry.registerFont(this, url);
|
479
339
|
}
|
480
|
-
}, {
|
481
|
-
key: "getPathGenerator",
|
482
|
-
value: function getPathGenerator(objs, character) {
|
483
|
-
if (this.compiledGlyphs[character] !== undefined) {
|
484
|
-
return this.compiledGlyphs[character];
|
485
|
-
}
|
486
340
|
|
487
|
-
|
341
|
+
return rule;
|
342
|
+
}
|
488
343
|
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
throw ex;
|
494
|
-
}
|
344
|
+
getPathGenerator(objs, character) {
|
345
|
+
if (this.compiledGlyphs[character] !== undefined) {
|
346
|
+
return this.compiledGlyphs[character];
|
347
|
+
}
|
495
348
|
|
496
|
-
|
497
|
-
this._onUnsupportedFeature({
|
498
|
-
featureId: _util.UNSUPPORTED_FEATURES.font
|
499
|
-
});
|
500
|
-
}
|
349
|
+
let cmds, current;
|
501
350
|
|
502
|
-
|
503
|
-
|
351
|
+
try {
|
352
|
+
cmds = objs.get(this.loadedName + "_path_" + character);
|
353
|
+
} catch (ex) {
|
354
|
+
if (!this.ignoreErrors) {
|
355
|
+
throw ex;
|
504
356
|
}
|
505
357
|
|
506
|
-
if (this.
|
507
|
-
|
508
|
-
|
358
|
+
if (this._onUnsupportedFeature) {
|
359
|
+
this._onUnsupportedFeature({
|
360
|
+
featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
|
361
|
+
});
|
362
|
+
}
|
509
363
|
|
510
|
-
|
511
|
-
|
364
|
+
(0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
|
365
|
+
return this.compiledGlyphs[character] = function (c, size) {};
|
366
|
+
}
|
512
367
|
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
args = '';
|
517
|
-
}
|
368
|
+
if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
|
369
|
+
let args,
|
370
|
+
js = "";
|
518
371
|
|
519
|
-
|
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 = "";
|
520
379
|
}
|
521
380
|
|
522
|
-
|
381
|
+
js += "c." + current.cmd + "(" + args + ");\n";
|
523
382
|
}
|
524
383
|
|
525
|
-
return this.compiledGlyphs[character] =
|
526
|
-
|
527
|
-
current = cmds[_i];
|
384
|
+
return this.compiledGlyphs[character] = new Function("c", "size", js);
|
385
|
+
}
|
528
386
|
|
529
|
-
|
530
|
-
|
531
|
-
|
387
|
+
return this.compiledGlyphs[character] = function (c, size) {
|
388
|
+
for (let i = 0, ii = cmds.length; i < ii; i++) {
|
389
|
+
current = cmds[i];
|
532
390
|
|
533
|
-
|
391
|
+
if (current.cmd === "scale") {
|
392
|
+
current.args = [size, -size];
|
534
393
|
}
|
535
|
-
};
|
536
|
-
}
|
537
|
-
}]);
|
538
394
|
|
539
|
-
|
540
|
-
}
|
395
|
+
c[current.cmd].apply(c, current.args);
|
396
|
+
}
|
397
|
+
};
|
398
|
+
}
|
399
|
+
|
400
|
+
}
|
541
401
|
|
542
402
|
exports.FontFaceObject = FontFaceObject;
|