pdfjs-dist 2.2.228 → 2.6.347
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 +8816 -19300
- 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 +27185 -35746
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +26665 -0
- package/es5/build/pdf.js.map +1 -0
- package/es5/build/pdf.min.js +22 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +61231 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -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/pdf_viewer.css +406 -0
- package/es5/web/pdf_viewer.js +7886 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1498 -4832
- 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 +1144 -927
- 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 +747 -716
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +462 -553
- package/lib/core/cmap.js +231 -277
- package/lib/core/colorspace.js +715 -857
- package/lib/core/core_utils.js +57 -52
- package/lib/core/crypto.js +416 -437
- package/lib/core/document.js +629 -670
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +3229 -2800
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +602 -534
- package/lib/core/function.js +355 -279
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +442 -439
- package/lib/core/image_utils.js +221 -61
- 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 +289 -233
- package/lib/core/jpx.js +161 -143
- 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 +1343 -1300
- package/lib/core/operator_list.js +90 -67
- package/lib/core/parser.js +990 -987
- package/lib/core/pattern.js +105 -77
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +156 -104
- 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 +89 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +275 -290
- package/lib/core/worker_stream.js +101 -210
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +772 -1041
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +1575 -1868
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +370 -222
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +341 -536
- package/lib/display/fetch_stream.js +188 -304
- package/lib/display/font_loader.js +282 -414
- package/lib/display/metadata.js +81 -99
- package/lib/display/network.js +362 -511
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +283 -465
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/pattern_helper.js +93 -44
- package/lib/display/svg.js +1163 -1401
- package/lib/display/text_layer.js +154 -137
- package/lib/display/transport_stream.js +237 -375
- 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 +220 -58
- 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 +271 -306
- package/lib/test/unit/annotation_spec.js +1902 -763
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +790 -592
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +73 -72
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +86 -88
- package/lib/test/unit/colorspace_spec.js +346 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +232 -185
- package/lib/test/unit/custom_spec.js +150 -24
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +128 -17
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +112 -91
- package/lib/test/unit/fetch_stream_spec.js +31 -29
- 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 +173 -159
- package/lib/test/unit/metadata_spec.js +71 -71
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -11
- package/lib/test/unit/network_utils_spec.js +158 -144
- package/lib/test/unit/node_stream_spec.js +76 -90
- package/lib/test/unit/parser_spec.js +108 -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 +337 -156
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +91 -304
- package/lib/test/unit/testreporter.js +33 -22
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +299 -461
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +129 -149
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +78 -111
- package/lib/web/app.js +1542 -1267
- package/lib/web/app_options.js +76 -91
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +869 -834
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +34 -58
- package/lib/web/firefox_print_service.js +62 -34
- package/lib/web/firefoxcom.js +206 -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 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +150 -126
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +229 -383
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +492 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +119 -212
- package/lib/web/pdf_page_view.js +474 -513
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +96 -110
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +286 -302
- 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 +289 -297
- package/lib/web/pdf_thumbnail_viewer.js +202 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +69 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -319
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +274 -421
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +4 -9
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +29 -27
- package/web/pdf_viewer.js +3524 -4746
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +6 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/web/images/texture.png +0 -0
@@ -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,292 @@ 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
|
-
|
31
|
+
class BaseFontLoader {
|
32
|
+
constructor({
|
33
|
+
docId,
|
34
|
+
onUnsupportedFeature,
|
35
|
+
ownerDocument = globalThis.document
|
36
|
+
}) {
|
37
|
+
if (this.constructor === BaseFontLoader) {
|
38
|
+
(0, _util.unreachable)("Cannot initialize BaseFontLoader.");
|
39
|
+
}
|
32
40
|
|
33
|
-
|
41
|
+
this.docId = docId;
|
42
|
+
this._onUnsupportedFeature = onUnsupportedFeature;
|
43
|
+
this._document = ownerDocument;
|
44
|
+
this.nativeFontFaces = [];
|
45
|
+
this.styleElement = null;
|
46
|
+
}
|
34
47
|
|
35
|
-
|
48
|
+
addNativeFontFace(nativeFontFace) {
|
49
|
+
this.nativeFontFaces.push(nativeFontFace);
|
36
50
|
|
37
|
-
|
51
|
+
this._document.fonts.add(nativeFontFace);
|
52
|
+
}
|
38
53
|
|
39
|
-
|
54
|
+
insertRule(rule) {
|
55
|
+
let styleElement = this.styleElement;
|
40
56
|
|
41
|
-
|
57
|
+
if (!styleElement) {
|
58
|
+
styleElement = this.styleElement = this._document.createElement("style");
|
59
|
+
styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
|
42
60
|
|
43
|
-
|
61
|
+
this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
|
62
|
+
}
|
44
63
|
|
45
|
-
|
64
|
+
const styleSheet = styleElement.sheet;
|
65
|
+
styleSheet.insertRule(rule, styleSheet.cssRules.length);
|
66
|
+
}
|
46
67
|
|
47
|
-
|
68
|
+
clear() {
|
69
|
+
this.nativeFontFaces.forEach(nativeFontFace => {
|
70
|
+
this._document.fonts.delete(nativeFontFace);
|
71
|
+
});
|
72
|
+
this.nativeFontFaces.length = 0;
|
48
73
|
|
49
|
-
|
74
|
+
if (this.styleElement) {
|
75
|
+
this.styleElement.remove();
|
76
|
+
this.styleElement = null;
|
77
|
+
}
|
78
|
+
}
|
50
79
|
|
51
|
-
|
80
|
+
async bind(font) {
|
81
|
+
if (font.attached || font.missingFile) {
|
82
|
+
return;
|
83
|
+
}
|
52
84
|
|
53
|
-
|
85
|
+
font.attached = true;
|
54
86
|
|
55
|
-
|
87
|
+
if (this.isFontLoadingAPISupported) {
|
88
|
+
const nativeFontFace = font.createNativeFontFace();
|
56
89
|
|
57
|
-
|
58
|
-
|
59
|
-
function () {
|
60
|
-
function BaseFontLoader(_ref) {
|
61
|
-
var docId = _ref.docId,
|
62
|
-
onUnsupportedFeature = _ref.onUnsupportedFeature;
|
90
|
+
if (nativeFontFace) {
|
91
|
+
this.addNativeFontFace(nativeFontFace);
|
63
92
|
|
64
|
-
|
93
|
+
try {
|
94
|
+
await nativeFontFace.loaded;
|
95
|
+
} catch (ex) {
|
96
|
+
this._onUnsupportedFeature({
|
97
|
+
featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
|
98
|
+
});
|
65
99
|
|
66
|
-
|
67
|
-
|
100
|
+
(0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
|
101
|
+
font.disableFontFace = true;
|
102
|
+
throw ex;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
return;
|
68
107
|
}
|
69
108
|
|
70
|
-
|
71
|
-
this._onUnsupportedFeature = onUnsupportedFeature;
|
72
|
-
this.nativeFontFaces = [];
|
73
|
-
this.styleElement = null;
|
74
|
-
}
|
109
|
+
const rule = font.createFontFaceRule();
|
75
110
|
|
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);
|
111
|
+
if (rule) {
|
112
|
+
this.insertRule(rule);
|
113
|
+
|
114
|
+
if (this.isSyncFontLoadingSupported) {
|
115
|
+
return;
|
91
116
|
}
|
92
117
|
|
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;
|
118
|
+
await new Promise(resolve => {
|
119
|
+
const request = this._queueLoadingCallback(resolve);
|
103
120
|
|
104
|
-
|
105
|
-
|
106
|
-
this.styleElement = null;
|
107
|
-
}
|
121
|
+
this._prepareFontLoadEvent([rule], [font], request);
|
122
|
+
});
|
108
123
|
}
|
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
|
-
}
|
124
|
+
}
|
206
125
|
|
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
|
-
}]);
|
126
|
+
_queueLoadingCallback(callback) {
|
127
|
+
(0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
|
128
|
+
}
|
235
129
|
|
236
|
-
|
237
|
-
|
130
|
+
get isFontLoadingAPISupported() {
|
131
|
+
const supported = typeof this._document !== "undefined" && !!this._document.fonts;
|
132
|
+
return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
|
133
|
+
}
|
238
134
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
exports.FontLoader = FontLoader =
|
243
|
-
/*#__PURE__*/
|
244
|
-
function (_BaseFontLoader) {
|
245
|
-
_inherits(GenericFontLoader, _BaseFontLoader);
|
135
|
+
get isSyncFontLoadingSupported() {
|
136
|
+
(0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
|
137
|
+
}
|
246
138
|
|
247
|
-
|
248
|
-
|
139
|
+
get _loadTestFont() {
|
140
|
+
(0, _util.unreachable)("Abstract method `_loadTestFont`.");
|
141
|
+
}
|
142
|
+
|
143
|
+
_prepareFontLoadEvent(rules, fontsToLoad, request) {
|
144
|
+
(0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
|
145
|
+
}
|
249
146
|
|
250
|
-
|
147
|
+
}
|
251
148
|
|
252
|
-
|
253
|
-
|
149
|
+
let FontLoader;
|
150
|
+
exports.FontLoader = FontLoader;
|
151
|
+
{
|
152
|
+
exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
|
153
|
+
constructor(params) {
|
154
|
+
super(params);
|
155
|
+
this.loadingContext = {
|
254
156
|
requests: [],
|
255
157
|
nextRequestId: 0
|
256
158
|
};
|
257
|
-
|
258
|
-
return _this2;
|
159
|
+
this.loadTestFontId = 0;
|
259
160
|
}
|
260
161
|
|
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
|
-
}
|
162
|
+
get isSyncFontLoadingSupported() {
|
163
|
+
let supported = false;
|
273
164
|
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
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;
|
165
|
+
if (typeof navigator === "undefined") {
|
166
|
+
supported = true;
|
167
|
+
} else {
|
168
|
+
const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
169
|
+
|
170
|
+
if (m && m[1] >= 14) {
|
171
|
+
supported = true;
|
289
172
|
}
|
173
|
+
}
|
174
|
+
|
175
|
+
return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
|
176
|
+
}
|
177
|
+
|
178
|
+
_queueLoadingCallback(callback) {
|
179
|
+
function completeRequest() {
|
180
|
+
(0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
|
181
|
+
request.done = true;
|
290
182
|
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
return chunk1 + insert + chunk2;
|
183
|
+
while (context.requests.length > 0 && context.requests[0].done) {
|
184
|
+
const otherRequest = context.requests.shift();
|
185
|
+
setTimeout(otherRequest.callback, 0);
|
295
186
|
}
|
187
|
+
}
|
296
188
|
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
189
|
+
const context = this.loadingContext;
|
190
|
+
const request = {
|
191
|
+
id: `pdfjs-font-loading-${context.nextRequestId++}`,
|
192
|
+
done: false,
|
193
|
+
complete: completeRequest,
|
194
|
+
callback
|
195
|
+
};
|
196
|
+
context.requests.push(request);
|
197
|
+
return request;
|
198
|
+
}
|
303
199
|
|
304
|
-
|
305
|
-
|
200
|
+
get _loadTestFont() {
|
201
|
+
const getLoadTestFont = function () {
|
202
|
+
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==");
|
203
|
+
};
|
306
204
|
|
307
|
-
|
308
|
-
|
309
|
-
callback();
|
310
|
-
return;
|
311
|
-
}
|
205
|
+
return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
|
206
|
+
}
|
312
207
|
|
313
|
-
|
314
|
-
|
315
|
-
|
208
|
+
_prepareFontLoadEvent(rules, fonts, request) {
|
209
|
+
function int32(data, offset) {
|
210
|
+
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
|
211
|
+
}
|
316
212
|
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
213
|
+
function spliceString(s, offset, remove, insert) {
|
214
|
+
const chunk1 = s.substring(0, offset);
|
215
|
+
const chunk2 = s.substring(offset + remove);
|
216
|
+
return chunk1 + insert + chunk2;
|
217
|
+
}
|
321
218
|
|
322
|
-
|
323
|
-
}
|
219
|
+
let i, ii;
|
324
220
|
|
325
|
-
|
326
|
-
var data = this._loadTestFont;
|
327
|
-
var COMMENT_OFFSET = 976;
|
328
|
-
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
|
329
|
-
var CFF_CHECKSUM_OFFSET = 16;
|
330
|
-
var XXXX_VALUE = 0x58585858;
|
331
|
-
var checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
221
|
+
const canvas = this._document.createElement("canvas");
|
332
222
|
|
333
|
-
|
334
|
-
|
335
|
-
|
223
|
+
canvas.width = 1;
|
224
|
+
canvas.height = 1;
|
225
|
+
const ctx = canvas.getContext("2d");
|
226
|
+
let called = 0;
|
227
|
+
|
228
|
+
function isFontReady(name, callback) {
|
229
|
+
called++;
|
336
230
|
|
337
|
-
if (
|
338
|
-
|
231
|
+
if (called > 30) {
|
232
|
+
(0, _util.warn)("Load test font never loaded.");
|
233
|
+
callback();
|
234
|
+
return;
|
339
235
|
}
|
340
236
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
this.insertRule(rule);
|
345
|
-
var names = [];
|
237
|
+
ctx.font = "30px " + name;
|
238
|
+
ctx.fillText(".", 0, 20);
|
239
|
+
const imageData = ctx.getImageData(0, 0, 1, 1);
|
346
240
|
|
347
|
-
|
348
|
-
|
241
|
+
if (imageData.data[3] > 0) {
|
242
|
+
callback();
|
243
|
+
return;
|
349
244
|
}
|
350
245
|
|
351
|
-
|
352
|
-
|
353
|
-
div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;');
|
246
|
+
setTimeout(isFontReady.bind(null, name, callback));
|
247
|
+
}
|
354
248
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
249
|
+
const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
|
250
|
+
let data = this._loadTestFont;
|
251
|
+
const COMMENT_OFFSET = 976;
|
252
|
+
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
|
253
|
+
const CFF_CHECKSUM_OFFSET = 16;
|
254
|
+
const XXXX_VALUE = 0x58585858;
|
255
|
+
let checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
361
256
|
|
362
|
-
|
363
|
-
|
364
|
-
document.body.removeChild(div);
|
365
|
-
request.complete();
|
366
|
-
});
|
257
|
+
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
|
258
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
|
367
259
|
}
|
368
|
-
}, {
|
369
|
-
key: "isFontLoadingAPISupported",
|
370
|
-
get: function get() {
|
371
|
-
var supported = typeof document !== 'undefined' && !!document.fonts;
|
372
260
|
|
373
|
-
|
374
|
-
|
261
|
+
if (i < loadTestFontId.length) {
|
262
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
|
263
|
+
}
|
375
264
|
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
265
|
+
data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
|
266
|
+
const url = `url(data:font/opentype;base64,${btoa(data)});`;
|
267
|
+
const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
|
268
|
+
this.insertRule(rule);
|
269
|
+
const names = [];
|
380
270
|
|
381
|
-
|
271
|
+
for (i = 0, ii = fonts.length; i < ii; i++) {
|
272
|
+
names.push(fonts[i].loadedName);
|
382
273
|
}
|
383
|
-
}, {
|
384
|
-
key: "isSyncFontLoadingSupported",
|
385
|
-
get: function get() {
|
386
|
-
var supported = false;
|
387
274
|
|
388
|
-
|
389
|
-
supported = true;
|
390
|
-
} else {
|
391
|
-
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
275
|
+
names.push(loadTestFontId);
|
392
276
|
|
393
|
-
|
394
|
-
supported = true;
|
395
|
-
}
|
396
|
-
}
|
277
|
+
const div = this._document.createElement("div");
|
397
278
|
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
279
|
+
div.style.visibility = "hidden";
|
280
|
+
div.style.width = div.style.height = "10px";
|
281
|
+
div.style.position = "absolute";
|
282
|
+
div.style.top = div.style.left = "0px";
|
283
|
+
|
284
|
+
for (i = 0, ii = names.length; i < ii; ++i) {
|
285
|
+
const span = this._document.createElement("span");
|
286
|
+
|
287
|
+
span.textContent = "Hi";
|
288
|
+
span.style.fontFamily = names[i];
|
289
|
+
div.appendChild(span);
|
408
290
|
}
|
409
|
-
}]);
|
410
291
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
get value() {
|
416
|
-
return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)());
|
417
|
-
}
|
292
|
+
this._document.body.appendChild(div);
|
293
|
+
|
294
|
+
isFontReady(loadTestFontId, () => {
|
295
|
+
this._document.body.removeChild(div);
|
418
296
|
|
419
|
-
|
420
|
-
|
421
|
-
|
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);
|
297
|
+
request.complete();
|
298
|
+
});
|
299
|
+
}
|
437
300
|
|
301
|
+
};
|
302
|
+
}
|
303
|
+
|
304
|
+
class FontFaceObject {
|
305
|
+
constructor(translatedData, {
|
306
|
+
isEvalSupported = true,
|
307
|
+
disableFontFace = false,
|
308
|
+
ignoreErrors = false,
|
309
|
+
onUnsupportedFeature = null,
|
310
|
+
fontRegistry = null
|
311
|
+
}) {
|
438
312
|
this.compiledGlyphs = Object.create(null);
|
439
313
|
|
440
|
-
for (
|
314
|
+
for (const i in translatedData) {
|
441
315
|
this[i] = translatedData[i];
|
442
316
|
}
|
443
317
|
|
@@ -448,98 +322,92 @@ function () {
|
|
448
322
|
this.fontRegistry = fontRegistry;
|
449
323
|
}
|
450
324
|
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
return null;
|
456
|
-
}
|
457
|
-
|
458
|
-
var nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
325
|
+
createNativeFontFace() {
|
326
|
+
if (!this.data || this.disableFontFace) {
|
327
|
+
return null;
|
328
|
+
}
|
459
329
|
|
460
|
-
|
461
|
-
this.fontRegistry.registerFont(this);
|
462
|
-
}
|
330
|
+
const nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
463
331
|
|
464
|
-
|
332
|
+
if (this.fontRegistry) {
|
333
|
+
this.fontRegistry.registerFont(this);
|
465
334
|
}
|
466
|
-
}, {
|
467
|
-
key: "createFontFaceRule",
|
468
|
-
value: function createFontFaceRule() {
|
469
|
-
if (!this.data || this.disableFontFace) {
|
470
|
-
return null;
|
471
|
-
}
|
472
335
|
|
473
|
-
|
474
|
-
|
475
|
-
var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}");
|
336
|
+
return nativeFontFace;
|
337
|
+
}
|
476
338
|
|
477
|
-
|
478
|
-
|
479
|
-
|
339
|
+
createFontFaceRule() {
|
340
|
+
if (!this.data || this.disableFontFace) {
|
341
|
+
return null;
|
342
|
+
}
|
480
343
|
|
481
|
-
|
344
|
+
const data = (0, _util.bytesToString)(new Uint8Array(this.data));
|
345
|
+
const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
|
346
|
+
const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
|
347
|
+
|
348
|
+
if (this.fontRegistry) {
|
349
|
+
this.fontRegistry.registerFont(this, url);
|
482
350
|
}
|
483
|
-
}, {
|
484
|
-
key: "getPathGenerator",
|
485
|
-
value: function getPathGenerator(objs, character) {
|
486
|
-
if (this.compiledGlyphs[character] !== undefined) {
|
487
|
-
return this.compiledGlyphs[character];
|
488
|
-
}
|
489
351
|
|
490
|
-
|
352
|
+
return rule;
|
353
|
+
}
|
491
354
|
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
throw ex;
|
497
|
-
}
|
355
|
+
getPathGenerator(objs, character) {
|
356
|
+
if (this.compiledGlyphs[character] !== undefined) {
|
357
|
+
return this.compiledGlyphs[character];
|
358
|
+
}
|
498
359
|
|
499
|
-
|
500
|
-
this._onUnsupportedFeature({
|
501
|
-
featureId: _util.UNSUPPORTED_FEATURES.font
|
502
|
-
});
|
503
|
-
}
|
360
|
+
let cmds, current;
|
504
361
|
|
505
|
-
|
506
|
-
|
362
|
+
try {
|
363
|
+
cmds = objs.get(this.loadedName + "_path_" + character);
|
364
|
+
} catch (ex) {
|
365
|
+
if (!this.ignoreErrors) {
|
366
|
+
throw ex;
|
507
367
|
}
|
508
368
|
|
509
|
-
if (this.
|
510
|
-
|
511
|
-
|
369
|
+
if (this._onUnsupportedFeature) {
|
370
|
+
this._onUnsupportedFeature({
|
371
|
+
featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
|
372
|
+
});
|
373
|
+
}
|
512
374
|
|
513
|
-
|
514
|
-
|
375
|
+
(0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
|
376
|
+
return this.compiledGlyphs[character] = function (c, size) {};
|
377
|
+
}
|
378
|
+
|
379
|
+
if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
|
380
|
+
let args,
|
381
|
+
js = "";
|
515
382
|
|
516
|
-
|
517
|
-
|
518
|
-
} else {
|
519
|
-
args = '';
|
520
|
-
}
|
383
|
+
for (let i = 0, ii = cmds.length; i < ii; i++) {
|
384
|
+
current = cmds[i];
|
521
385
|
|
522
|
-
|
386
|
+
if (current.args !== undefined) {
|
387
|
+
args = current.args.join(",");
|
388
|
+
} else {
|
389
|
+
args = "";
|
523
390
|
}
|
524
391
|
|
525
|
-
|
392
|
+
js += "c." + current.cmd + "(" + args + ");\n";
|
526
393
|
}
|
527
394
|
|
528
|
-
return this.compiledGlyphs[character] =
|
529
|
-
|
530
|
-
current = cmds[_i];
|
395
|
+
return this.compiledGlyphs[character] = new Function("c", "size", js);
|
396
|
+
}
|
531
397
|
|
532
|
-
|
533
|
-
|
534
|
-
|
398
|
+
return this.compiledGlyphs[character] = function (c, size) {
|
399
|
+
for (let i = 0, ii = cmds.length; i < ii; i++) {
|
400
|
+
current = cmds[i];
|
535
401
|
|
536
|
-
|
402
|
+
if (current.cmd === "scale") {
|
403
|
+
current.args = [size, -size];
|
537
404
|
}
|
538
|
-
};
|
539
|
-
}
|
540
|
-
}]);
|
541
405
|
|
542
|
-
|
543
|
-
}
|
406
|
+
c[current.cmd].apply(c, current.args);
|
407
|
+
}
|
408
|
+
};
|
409
|
+
}
|
410
|
+
|
411
|
+
}
|
544
412
|
|
545
413
|
exports.FontFaceObject = FontFaceObject;
|