pdfjs-dist 2.0.943 → 2.4.456
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8286 -14230
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +25500 -26628
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +2887 -4094
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +855 -778
- package/lib/core/arithmetic_decoder.js +325 -311
- package/lib/core/bidi.js +117 -50
- package/lib/core/ccitt.js +251 -89
- package/lib/core/ccitt_stream.js +26 -16
- package/lib/core/cff_parser.js +525 -197
- package/lib/core/charsets.js +6 -5
- package/lib/core/chunked_stream.js +541 -406
- package/lib/core/cmap.js +368 -253
- package/lib/core/colorspace.js +781 -800
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +609 -422
- package/lib/core/document.js +649 -481
- package/lib/core/encodings.js +33 -24
- package/lib/core/evaluator.js +1471 -736
- package/lib/core/font_renderer.js +289 -149
- package/lib/core/fonts.js +1067 -413
- package/lib/core/function.js +517 -287
- package/lib/core/glyphlist.js +4529 -4527
- package/lib/core/image.js +232 -114
- package/lib/core/image_utils.js +94 -0
- package/lib/core/jbig2.js +711 -342
- package/lib/core/jbig2_stream.js +31 -19
- package/lib/core/jpeg_stream.js +151 -26
- package/lib/core/jpg.js +433 -181
- package/lib/core/jpx.js +551 -143
- package/lib/core/jpx_stream.js +40 -28
- package/lib/core/metrics.js +2931 -2931
- package/lib/core/murmurhash3.js +104 -97
- package/lib/core/obj.js +1561 -1053
- package/lib/core/operator_list.js +192 -64
- package/lib/core/parser.js +1162 -864
- package/lib/core/pattern.js +224 -75
- package/lib/core/pdf_manager.js +154 -285
- package/lib/core/primitives.js +145 -69
- package/lib/core/ps_parser.js +212 -162
- package/lib/core/standard_fonts.js +245 -244
- package/lib/core/stream.js +353 -81
- package/lib/core/type1_parser.js +218 -68
- package/lib/core/unicode.js +1682 -1655
- package/lib/core/worker.js +233 -302
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +808 -862
- package/lib/display/api.js +1778 -1462
- package/lib/display/api_compatibility.js +14 -9
- package/lib/display/canvas.js +463 -140
- package/lib/display/content_disposition.js +86 -58
- package/lib/display/display_utils.js +524 -0
- package/lib/display/fetch_stream.js +202 -274
- package/lib/display/font_loader.js +311 -333
- package/lib/display/metadata.js +98 -88
- package/lib/display/network.js +343 -347
- package/lib/display/network_utils.js +46 -26
- package/lib/display/node_stream.js +326 -404
- package/lib/display/pattern_helper.js +168 -69
- package/lib/display/svg.js +1296 -885
- package/lib/display/text_layer.js +229 -103
- package/lib/display/transport_stream.js +290 -250
- package/lib/display/webgl.js +116 -83
- package/lib/display/worker_options.js +6 -5
- package/lib/display/xml_parser.js +358 -337
- package/lib/examples/node/domstubs.js +95 -39
- package/lib/pdf.js +49 -31
- package/lib/pdf.worker.js +7 -5
- package/lib/shared/compatibility.js +3 -145
- package/lib/shared/is_node.js +8 -7
- package/lib/shared/message_handler.js +367 -314
- package/lib/shared/util.js +421 -415
- package/lib/test/unit/annotation_spec.js +1570 -690
- package/lib/test/unit/api_spec.js +855 -493
- package/lib/test/unit/bidi_spec.js +12 -12
- package/lib/test/unit/cff_parser_spec.js +88 -61
- package/lib/test/unit/clitests_helper.js +9 -12
- package/lib/test/unit/cmap_spec.js +140 -88
- package/lib/test/unit/colorspace_spec.js +204 -152
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +194 -182
- package/lib/test/unit/custom_spec.js +50 -64
- package/lib/test/unit/display_svg_spec.js +53 -38
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +17 -22
- package/lib/test/unit/encodings_spec.js +15 -57
- package/lib/test/unit/evaluator_spec.js +90 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +219 -205
- package/lib/test/unit/jasmine-boot.js +68 -39
- package/lib/test/unit/message_handler_spec.js +187 -160
- package/lib/test/unit/metadata_spec.js +87 -34
- package/lib/test/unit/murmurhash3_spec.js +13 -13
- package/lib/test/unit/network_spec.js +26 -59
- package/lib/test/unit/network_utils_spec.js +187 -121
- package/lib/test/unit/node_stream_spec.js +98 -90
- package/lib/test/unit/parser_spec.js +173 -131
- package/lib/test/unit/pdf_find_controller_spec.js +148 -67
- package/lib/test/unit/pdf_find_utils_spec.js +35 -34
- package/lib/test/unit/pdf_history_spec.js +45 -33
- package/lib/test/unit/primitives_spec.js +161 -126
- package/lib/test/unit/stream_spec.js +22 -15
- package/lib/test/unit/test_utils.js +149 -98
- package/lib/test/unit/testreporter.js +36 -18
- package/lib/test/unit/type1_parser_spec.js +46 -44
- package/lib/test/unit/ui_utils_spec.js +388 -372
- package/lib/test/unit/unicode_spec.js +49 -46
- package/lib/test/unit/util_spec.js +144 -248
- package/lib/web/annotation_layer_builder.js +75 -95
- package/lib/web/app.js +1538 -1147
- package/lib/web/app_options.js +116 -104
- package/lib/web/base_viewer.js +950 -775
- package/lib/web/chromecom.js +217 -225
- package/lib/web/debugger.js +236 -148
- package/lib/web/download_manager.js +50 -50
- package/lib/web/firefox_print_service.js +51 -33
- package/lib/web/firefoxcom.js +225 -352
- package/lib/web/genericcom.js +30 -93
- package/lib/web/genericl10n.js +26 -143
- package/lib/web/grab_to_pan.js +57 -33
- package/lib/web/interfaces.js +105 -232
- package/lib/web/overlay_manager.js +73 -227
- package/lib/web/password_prompt.js +44 -62
- package/lib/web/pdf_attachment_viewer.js +118 -123
- package/lib/web/pdf_cursor_tools.js +89 -93
- package/lib/web/pdf_document_properties.js +242 -281
- package/lib/web/pdf_find_bar.js +157 -163
- package/lib/web/pdf_find_controller.js +598 -454
- package/lib/web/pdf_find_utils.js +32 -16
- package/lib/web/pdf_history.js +481 -355
- package/lib/web/pdf_link_service.js +355 -323
- package/lib/web/pdf_outline_viewer.js +167 -152
- package/lib/web/pdf_page_view.js +511 -457
- package/lib/web/pdf_presentation_mode.js +347 -335
- package/lib/web/pdf_print_service.js +133 -103
- package/lib/web/pdf_rendering_queue.js +98 -100
- package/lib/web/pdf_sidebar.js +323 -299
- package/lib/web/pdf_sidebar_resizer.js +107 -108
- package/lib/web/pdf_single_page_viewer.js +94 -146
- package/lib/web/pdf_thumbnail_view.js +319 -269
- package/lib/web/pdf_thumbnail_viewer.js +219 -199
- package/lib/web/pdf_viewer.component.js +111 -32
- package/lib/web/pdf_viewer.js +61 -101
- package/lib/web/preferences.js +87 -272
- package/lib/web/secondary_toolbar.js +207 -220
- package/lib/web/text_layer_builder.js +322 -322
- package/lib/web/toolbar.js +227 -180
- package/lib/web/ui_utils.js +476 -421
- package/lib/web/view_history.js +59 -208
- package/lib/web/viewer_compatibility.js +9 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +36 -22
- package/web/pdf_viewer.js +4407 -4516
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -441
- package/lib/shared/streams_polyfill.js +0 -39
- package/lib/shared/url_polyfill.js +0 -50
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/web/dom_events.js +0 -140
@@ -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.
|
@@ -19,56 +19,70 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.OperatorList =
|
27
|
+
exports.OperatorList = void 0;
|
28
28
|
|
29
|
-
var _util = require(
|
29
|
+
var _util = require("../shared/util.js");
|
30
30
|
|
31
31
|
var QueueOptimizer = function QueueOptimizerClosure() {
|
32
32
|
function addState(parentState, pattern, checkFn, iterateFn, processFn) {
|
33
33
|
var state = parentState;
|
34
|
+
|
34
35
|
for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
|
35
36
|
var item = pattern[i];
|
36
37
|
state = state[item] || (state[item] = []);
|
37
38
|
}
|
39
|
+
|
38
40
|
state[pattern[pattern.length - 1]] = {
|
39
|
-
checkFn
|
40
|
-
iterateFn
|
41
|
-
processFn
|
41
|
+
checkFn,
|
42
|
+
iterateFn,
|
43
|
+
processFn
|
42
44
|
};
|
43
45
|
}
|
46
|
+
|
44
47
|
function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
|
45
48
|
var iFirstPIMXO = iFirstSave + 2;
|
49
|
+
|
46
50
|
for (var i = 0; i < count; i++) {
|
47
51
|
var arg = argsArray[iFirstPIMXO + 4 * i];
|
48
52
|
var imageMask = arg.length === 1 && arg[0];
|
53
|
+
|
49
54
|
if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
|
50
55
|
fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
|
51
56
|
continue;
|
52
57
|
}
|
58
|
+
|
53
59
|
break;
|
54
60
|
}
|
61
|
+
|
55
62
|
return count - i;
|
56
63
|
}
|
64
|
+
|
57
65
|
var InitialState = [];
|
58
66
|
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
|
59
67
|
var fnArray = context.fnArray;
|
60
68
|
var iFirstSave = context.iCurr - 3;
|
61
69
|
var pos = (i - iFirstSave) % 4;
|
70
|
+
|
62
71
|
switch (pos) {
|
63
72
|
case 0:
|
64
73
|
return fnArray[i] === _util.OPS.save;
|
74
|
+
|
65
75
|
case 1:
|
66
76
|
return fnArray[i] === _util.OPS.transform;
|
77
|
+
|
67
78
|
case 2:
|
68
79
|
return fnArray[i] === _util.OPS.paintInlineImageXObject;
|
80
|
+
|
69
81
|
case 3:
|
70
82
|
return fnArray[i] === _util.OPS.restore;
|
71
83
|
}
|
84
|
+
|
85
|
+
throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
|
72
86
|
}, function foundInlineImageGroup(context, i) {
|
73
87
|
var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
|
74
88
|
var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
|
@@ -81,26 +95,31 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
81
95
|
var iFirstTransform = curr - 2;
|
82
96
|
var iFirstPIIXO = curr - 1;
|
83
97
|
var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
|
98
|
+
|
84
99
|
if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
|
85
100
|
return i - (i - iFirstSave) % 4;
|
86
101
|
}
|
102
|
+
|
87
103
|
var maxX = 0;
|
88
104
|
var map = [],
|
89
105
|
maxLineHeight = 0;
|
90
106
|
var currentX = IMAGE_PADDING,
|
91
107
|
currentY = IMAGE_PADDING;
|
92
108
|
var q;
|
109
|
+
|
93
110
|
for (q = 0; q < count; q++) {
|
94
111
|
var transform = argsArray[iFirstTransform + (q << 2)];
|
95
112
|
var img = argsArray[iFirstPIIXO + (q << 2)][0];
|
113
|
+
|
96
114
|
if (currentX + img.width > MAX_WIDTH) {
|
97
115
|
maxX = Math.max(maxX, currentX);
|
98
116
|
currentY += maxLineHeight + 2 * IMAGE_PADDING;
|
99
117
|
currentX = 0;
|
100
118
|
maxLineHeight = 0;
|
101
119
|
}
|
120
|
+
|
102
121
|
map.push({
|
103
|
-
transform
|
122
|
+
transform,
|
104
123
|
x: currentX,
|
105
124
|
y: currentY,
|
106
125
|
w: img.width,
|
@@ -109,22 +128,27 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
109
128
|
currentX += img.width + 2 * IMAGE_PADDING;
|
110
129
|
maxLineHeight = Math.max(maxLineHeight, img.height);
|
111
130
|
}
|
131
|
+
|
112
132
|
var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
|
113
133
|
var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
|
114
134
|
var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
|
115
135
|
var imgRowSize = imgWidth << 2;
|
136
|
+
|
116
137
|
for (q = 0; q < count; q++) {
|
117
138
|
var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
|
118
139
|
var rowSize = map[q].w << 2;
|
119
140
|
var dataOffset = 0;
|
120
141
|
var offset = map[q].x + map[q].y * imgWidth << 2;
|
121
142
|
imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
|
143
|
+
|
122
144
|
for (var k = 0, kk = map[q].h; k < kk; k++) {
|
123
145
|
imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
|
124
146
|
dataOffset += rowSize;
|
125
147
|
offset += imgRowSize;
|
126
148
|
}
|
149
|
+
|
127
150
|
imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
|
151
|
+
|
128
152
|
while (offset >= 0) {
|
129
153
|
data[offset - 4] = data[offset];
|
130
154
|
data[offset - 3] = data[offset + 1];
|
@@ -137,6 +161,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
137
161
|
offset -= imgRowSize;
|
138
162
|
}
|
139
163
|
}
|
164
|
+
|
140
165
|
fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
|
141
166
|
argsArray.splice(iFirstSave, count * 4, [{
|
142
167
|
width: imgWidth,
|
@@ -150,16 +175,22 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
150
175
|
var fnArray = context.fnArray;
|
151
176
|
var iFirstSave = context.iCurr - 3;
|
152
177
|
var pos = (i - iFirstSave) % 4;
|
178
|
+
|
153
179
|
switch (pos) {
|
154
180
|
case 0:
|
155
181
|
return fnArray[i] === _util.OPS.save;
|
182
|
+
|
156
183
|
case 1:
|
157
184
|
return fnArray[i] === _util.OPS.transform;
|
185
|
+
|
158
186
|
case 2:
|
159
187
|
return fnArray[i] === _util.OPS.paintImageMaskXObject;
|
188
|
+
|
160
189
|
case 3:
|
161
190
|
return fnArray[i] === _util.OPS.restore;
|
162
191
|
}
|
192
|
+
|
193
|
+
throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
|
163
194
|
}, function foundImageMaskGroup(context, i) {
|
164
195
|
var MIN_IMAGES_IN_MASKS_BLOCK = 10;
|
165
196
|
var MAX_IMAGES_IN_MASKS_BLOCK = 100;
|
@@ -172,45 +203,55 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
172
203
|
var iFirstPIMXO = curr - 1;
|
173
204
|
var count = Math.floor((i - iFirstSave) / 4);
|
174
205
|
count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
|
206
|
+
|
175
207
|
if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
|
176
208
|
return i - (i - iFirstSave) % 4;
|
177
209
|
}
|
210
|
+
|
178
211
|
var q;
|
179
212
|
var isSameImage = false;
|
180
213
|
var iTransform, transformArgs;
|
181
214
|
var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
|
215
|
+
|
182
216
|
if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {
|
183
217
|
isSameImage = true;
|
184
218
|
var firstTransformArg0 = argsArray[iFirstTransform][0];
|
185
219
|
var firstTransformArg3 = argsArray[iFirstTransform][3];
|
186
220
|
iTransform = iFirstTransform + 4;
|
187
221
|
var iPIMXO = iFirstPIMXO + 4;
|
222
|
+
|
188
223
|
for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
|
189
224
|
transformArgs = argsArray[iTransform];
|
225
|
+
|
190
226
|
if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) {
|
191
227
|
if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
|
192
228
|
isSameImage = false;
|
193
229
|
} else {
|
194
230
|
count = q;
|
195
231
|
}
|
232
|
+
|
196
233
|
break;
|
197
234
|
}
|
198
235
|
}
|
199
236
|
}
|
237
|
+
|
200
238
|
if (isSameImage) {
|
201
239
|
count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
|
202
240
|
var positions = new Float32Array(count * 2);
|
203
241
|
iTransform = iFirstTransform;
|
242
|
+
|
204
243
|
for (q = 0; q < count; q++, iTransform += 4) {
|
205
244
|
transformArgs = argsArray[iTransform];
|
206
245
|
positions[q << 1] = transformArgs[4];
|
207
246
|
positions[(q << 1) + 1] = transformArgs[5];
|
208
247
|
}
|
248
|
+
|
209
249
|
fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
|
210
250
|
argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
|
211
251
|
} else {
|
212
252
|
count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
|
213
253
|
var images = [];
|
254
|
+
|
214
255
|
for (q = 0; q < count; q++) {
|
215
256
|
transformArgs = argsArray[iFirstTransform + (q << 2)];
|
216
257
|
var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
|
@@ -221,47 +262,61 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
221
262
|
transform: transformArgs
|
222
263
|
});
|
223
264
|
}
|
265
|
+
|
224
266
|
fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
|
225
267
|
argsArray.splice(iFirstSave, count * 4, [images]);
|
226
268
|
}
|
269
|
+
|
227
270
|
return iFirstSave + 1;
|
228
271
|
});
|
229
272
|
addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
|
230
273
|
var argsArray = context.argsArray;
|
231
274
|
var iFirstTransform = context.iCurr - 2;
|
232
275
|
return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
|
233
|
-
}, function (context, i) {
|
276
|
+
}, function iterateImageGroup(context, i) {
|
234
277
|
var fnArray = context.fnArray,
|
235
278
|
argsArray = context.argsArray;
|
236
279
|
var iFirstSave = context.iCurr - 3;
|
237
280
|
var pos = (i - iFirstSave) % 4;
|
281
|
+
|
238
282
|
switch (pos) {
|
239
283
|
case 0:
|
240
284
|
return fnArray[i] === _util.OPS.save;
|
285
|
+
|
241
286
|
case 1:
|
242
287
|
if (fnArray[i] !== _util.OPS.transform) {
|
243
288
|
return false;
|
244
289
|
}
|
290
|
+
|
245
291
|
var iFirstTransform = context.iCurr - 2;
|
246
292
|
var firstTransformArg0 = argsArray[iFirstTransform][0];
|
247
293
|
var firstTransformArg3 = argsArray[iFirstTransform][3];
|
294
|
+
|
248
295
|
if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
|
249
296
|
return false;
|
250
297
|
}
|
298
|
+
|
251
299
|
return true;
|
300
|
+
|
252
301
|
case 2:
|
253
302
|
if (fnArray[i] !== _util.OPS.paintImageXObject) {
|
254
303
|
return false;
|
255
304
|
}
|
305
|
+
|
256
306
|
var iFirstPIXO = context.iCurr - 1;
|
257
307
|
var firstPIXOArg0 = argsArray[iFirstPIXO][0];
|
308
|
+
|
258
309
|
if (argsArray[i][0] !== firstPIXOArg0) {
|
259
310
|
return false;
|
260
311
|
}
|
312
|
+
|
261
313
|
return true;
|
314
|
+
|
262
315
|
case 3:
|
263
316
|
return fnArray[i] === _util.OPS.restore;
|
264
317
|
}
|
318
|
+
|
319
|
+
throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
|
265
320
|
}, function (context, i) {
|
266
321
|
var MIN_IMAGES_IN_BLOCK = 3;
|
267
322
|
var MAX_IMAGES_IN_BLOCK = 1000;
|
@@ -275,47 +330,61 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
275
330
|
var firstTransformArg0 = argsArray[iFirstTransform][0];
|
276
331
|
var firstTransformArg3 = argsArray[iFirstTransform][3];
|
277
332
|
var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
|
333
|
+
|
278
334
|
if (count < MIN_IMAGES_IN_BLOCK) {
|
279
335
|
return i - (i - iFirstSave) % 4;
|
280
336
|
}
|
337
|
+
|
281
338
|
var positions = new Float32Array(count * 2);
|
282
339
|
var iTransform = iFirstTransform;
|
340
|
+
|
283
341
|
for (var q = 0; q < count; q++, iTransform += 4) {
|
284
342
|
var transformArgs = argsArray[iTransform];
|
285
343
|
positions[q << 1] = transformArgs[4];
|
286
344
|
positions[(q << 1) + 1] = transformArgs[5];
|
287
345
|
}
|
346
|
+
|
288
347
|
var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
|
289
348
|
fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
|
290
349
|
argsArray.splice(iFirstSave, count * 4, args);
|
291
350
|
return iFirstSave + 1;
|
292
351
|
});
|
293
|
-
addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function (context, i) {
|
352
|
+
addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
|
294
353
|
var fnArray = context.fnArray,
|
295
354
|
argsArray = context.argsArray;
|
296
355
|
var iFirstSave = context.iCurr - 4;
|
297
356
|
var pos = (i - iFirstSave) % 5;
|
357
|
+
|
298
358
|
switch (pos) {
|
299
359
|
case 0:
|
300
360
|
return fnArray[i] === _util.OPS.beginText;
|
361
|
+
|
301
362
|
case 1:
|
302
363
|
return fnArray[i] === _util.OPS.setFont;
|
364
|
+
|
303
365
|
case 2:
|
304
366
|
return fnArray[i] === _util.OPS.setTextMatrix;
|
367
|
+
|
305
368
|
case 3:
|
306
369
|
if (fnArray[i] !== _util.OPS.showText) {
|
307
370
|
return false;
|
308
371
|
}
|
372
|
+
|
309
373
|
var iFirstSetFont = context.iCurr - 3;
|
310
374
|
var firstSetFontArg0 = argsArray[iFirstSetFont][0];
|
311
375
|
var firstSetFontArg1 = argsArray[iFirstSetFont][1];
|
376
|
+
|
312
377
|
if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
|
313
378
|
return false;
|
314
379
|
}
|
380
|
+
|
315
381
|
return true;
|
382
|
+
|
316
383
|
case 4:
|
317
384
|
return fnArray[i] === _util.OPS.endText;
|
318
385
|
}
|
386
|
+
|
387
|
+
throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
|
319
388
|
}, function (context, i) {
|
320
389
|
var MIN_CHARS_IN_BLOCK = 3;
|
321
390
|
var MAX_CHARS_IN_BLOCK = 1000;
|
@@ -330,22 +399,29 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
330
399
|
var firstSetFontArg0 = argsArray[iFirstSetFont][0];
|
331
400
|
var firstSetFontArg1 = argsArray[iFirstSetFont][1];
|
332
401
|
var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
|
402
|
+
|
333
403
|
if (count < MIN_CHARS_IN_BLOCK) {
|
334
404
|
return i - (i - iFirstBeginText) % 5;
|
335
405
|
}
|
406
|
+
|
336
407
|
var iFirst = iFirstBeginText;
|
408
|
+
|
337
409
|
if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
|
338
410
|
count++;
|
339
411
|
iFirst -= 5;
|
340
412
|
}
|
413
|
+
|
341
414
|
var iEndText = iFirst + 4;
|
415
|
+
|
342
416
|
for (var q = 1; q < count; q++) {
|
343
417
|
fnArray.splice(iEndText, 3);
|
344
418
|
argsArray.splice(iEndText, 3);
|
345
419
|
iEndText += 2;
|
346
420
|
}
|
421
|
+
|
347
422
|
return iEndText + 1;
|
348
423
|
});
|
424
|
+
|
349
425
|
function QueueOptimizer(queue) {
|
350
426
|
this.queue = queue;
|
351
427
|
this.state = null;
|
@@ -357,134 +433,153 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
357
433
|
this.match = null;
|
358
434
|
this.lastProcessed = 0;
|
359
435
|
}
|
436
|
+
|
360
437
|
QueueOptimizer.prototype = {
|
361
|
-
_optimize
|
362
|
-
|
363
|
-
|
438
|
+
_optimize() {
|
439
|
+
const fnArray = this.queue.fnArray;
|
440
|
+
let i = this.lastProcessed,
|
364
441
|
ii = fnArray.length;
|
365
|
-
|
366
|
-
|
442
|
+
let state = this.state;
|
443
|
+
let match = this.match;
|
444
|
+
|
367
445
|
if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
|
368
446
|
this.lastProcessed = ii;
|
369
447
|
return;
|
370
448
|
}
|
371
|
-
|
449
|
+
|
450
|
+
const context = this.context;
|
451
|
+
|
372
452
|
while (i < ii) {
|
373
453
|
if (match) {
|
374
|
-
|
454
|
+
const iterate = (0, match.iterateFn)(context, i);
|
455
|
+
|
375
456
|
if (iterate) {
|
376
457
|
i++;
|
377
458
|
continue;
|
378
459
|
}
|
460
|
+
|
379
461
|
i = (0, match.processFn)(context, i + 1);
|
380
462
|
ii = fnArray.length;
|
381
463
|
match = null;
|
382
464
|
state = null;
|
465
|
+
|
383
466
|
if (i >= ii) {
|
384
467
|
break;
|
385
468
|
}
|
386
469
|
}
|
470
|
+
|
387
471
|
state = (state || InitialState)[fnArray[i]];
|
472
|
+
|
388
473
|
if (!state || Array.isArray(state)) {
|
389
474
|
i++;
|
390
475
|
continue;
|
391
476
|
}
|
477
|
+
|
392
478
|
context.iCurr = i;
|
393
479
|
i++;
|
480
|
+
|
394
481
|
if (state.checkFn && !(0, state.checkFn)(context)) {
|
395
482
|
state = null;
|
396
483
|
continue;
|
397
484
|
}
|
485
|
+
|
398
486
|
match = state;
|
399
487
|
state = null;
|
400
488
|
}
|
489
|
+
|
401
490
|
this.state = state;
|
402
491
|
this.match = match;
|
403
492
|
this.lastProcessed = i;
|
404
493
|
},
|
405
|
-
|
494
|
+
|
495
|
+
push(fn, args) {
|
406
496
|
this.queue.fnArray.push(fn);
|
407
497
|
this.queue.argsArray.push(args);
|
498
|
+
|
408
499
|
this._optimize();
|
409
500
|
},
|
410
|
-
|
501
|
+
|
502
|
+
flush() {
|
411
503
|
while (this.match) {
|
412
|
-
|
504
|
+
const length = this.queue.fnArray.length;
|
413
505
|
this.lastProcessed = (0, this.match.processFn)(this.context, length);
|
414
506
|
this.match = null;
|
415
507
|
this.state = null;
|
508
|
+
|
416
509
|
this._optimize();
|
417
510
|
}
|
418
511
|
},
|
419
|
-
|
512
|
+
|
513
|
+
reset() {
|
420
514
|
this.state = null;
|
421
515
|
this.match = null;
|
422
516
|
this.lastProcessed = 0;
|
423
517
|
}
|
518
|
+
|
424
519
|
};
|
425
520
|
return QueueOptimizer;
|
426
521
|
}();
|
522
|
+
|
427
523
|
var NullOptimizer = function NullOptimizerClosure() {
|
428
524
|
function NullOptimizer(queue) {
|
429
525
|
this.queue = queue;
|
430
526
|
}
|
527
|
+
|
431
528
|
NullOptimizer.prototype = {
|
432
|
-
push
|
529
|
+
push(fn, args) {
|
433
530
|
this.queue.fnArray.push(fn);
|
434
531
|
this.queue.argsArray.push(args);
|
435
532
|
},
|
436
|
-
|
533
|
+
|
534
|
+
flush() {},
|
535
|
+
|
536
|
+
reset() {}
|
537
|
+
|
437
538
|
};
|
438
539
|
return NullOptimizer;
|
439
540
|
}();
|
541
|
+
|
440
542
|
var OperatorList = function OperatorListClosure() {
|
441
543
|
var CHUNK_SIZE = 1000;
|
442
544
|
var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
argsArray = queue.argsArray;
|
447
|
-
for (var i = 0, ii = queue.length; i < ii; i++) {
|
448
|
-
switch (fnArray[i]) {
|
449
|
-
case _util.OPS.paintInlineImageXObject:
|
450
|
-
case _util.OPS.paintInlineImageXObjectGroup:
|
451
|
-
case _util.OPS.paintImageMaskXObject:
|
452
|
-
var arg = argsArray[i][0];
|
453
|
-
;
|
454
|
-
if (!arg.cached) {
|
455
|
-
transfers.push(arg.data.buffer);
|
456
|
-
}
|
457
|
-
break;
|
458
|
-
}
|
459
|
-
}
|
460
|
-
return transfers;
|
461
|
-
}
|
462
|
-
function OperatorList(intent, messageHandler, pageIndex) {
|
463
|
-
this.messageHandler = messageHandler;
|
545
|
+
|
546
|
+
function OperatorList(intent, streamSink, pageIndex) {
|
547
|
+
this._streamSink = streamSink;
|
464
548
|
this.fnArray = [];
|
465
549
|
this.argsArray = [];
|
466
|
-
|
550
|
+
|
551
|
+
if (streamSink && intent !== "oplist") {
|
467
552
|
this.optimizer = new QueueOptimizer(this);
|
468
553
|
} else {
|
469
554
|
this.optimizer = new NullOptimizer(this);
|
470
555
|
}
|
556
|
+
|
471
557
|
this.dependencies = Object.create(null);
|
472
558
|
this._totalLength = 0;
|
473
559
|
this.pageIndex = pageIndex;
|
474
560
|
this.intent = intent;
|
475
561
|
this.weight = 0;
|
562
|
+
this._resolved = streamSink ? null : Promise.resolve();
|
476
563
|
}
|
564
|
+
|
477
565
|
OperatorList.prototype = {
|
478
566
|
get length() {
|
479
567
|
return this.argsArray.length;
|
480
568
|
},
|
569
|
+
|
570
|
+
get ready() {
|
571
|
+
return this._resolved || this._streamSink.ready;
|
572
|
+
},
|
573
|
+
|
481
574
|
get totalLength() {
|
482
575
|
return this._totalLength + this.length;
|
483
576
|
},
|
484
|
-
|
577
|
+
|
578
|
+
addOp(fn, args) {
|
485
579
|
this.optimizer.push(fn, args);
|
486
580
|
this.weight++;
|
487
|
-
|
581
|
+
|
582
|
+
if (this._streamSink) {
|
488
583
|
if (this.weight >= CHUNK_SIZE) {
|
489
584
|
this.flush();
|
490
585
|
} else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
|
@@ -492,53 +587,86 @@ var OperatorList = function OperatorListClosure() {
|
|
492
587
|
}
|
493
588
|
}
|
494
589
|
},
|
495
|
-
|
590
|
+
|
591
|
+
addDependency(dependency) {
|
496
592
|
if (dependency in this.dependencies) {
|
497
593
|
return;
|
498
594
|
}
|
595
|
+
|
499
596
|
this.dependencies[dependency] = true;
|
500
597
|
this.addOp(_util.OPS.dependency, [dependency]);
|
501
598
|
},
|
502
|
-
|
599
|
+
|
600
|
+
addDependencies(dependencies) {
|
503
601
|
for (var key in dependencies) {
|
504
602
|
this.addDependency(key);
|
505
603
|
}
|
506
604
|
},
|
507
|
-
|
605
|
+
|
606
|
+
addOpList(opList) {
|
508
607
|
Object.assign(this.dependencies, opList.dependencies);
|
608
|
+
|
509
609
|
for (var i = 0, ii = opList.length; i < ii; i++) {
|
510
610
|
this.addOp(opList.fnArray[i], opList.argsArray[i]);
|
511
611
|
}
|
512
612
|
},
|
513
|
-
|
613
|
+
|
614
|
+
getIR() {
|
514
615
|
return {
|
515
616
|
fnArray: this.fnArray,
|
516
617
|
argsArray: this.argsArray,
|
517
618
|
length: this.length
|
518
619
|
};
|
519
620
|
},
|
520
|
-
|
621
|
+
|
622
|
+
get _transfers() {
|
623
|
+
const transfers = [];
|
624
|
+
const {
|
625
|
+
fnArray,
|
626
|
+
argsArray,
|
627
|
+
length
|
628
|
+
} = this;
|
629
|
+
|
630
|
+
for (let i = 0; i < length; i++) {
|
631
|
+
switch (fnArray[i]) {
|
632
|
+
case _util.OPS.paintInlineImageXObject:
|
633
|
+
case _util.OPS.paintInlineImageXObjectGroup:
|
634
|
+
case _util.OPS.paintImageMaskXObject:
|
635
|
+
const arg = argsArray[i][0];
|
636
|
+
;
|
637
|
+
|
638
|
+
if (!arg.cached) {
|
639
|
+
transfers.push(arg.data.buffer);
|
640
|
+
}
|
641
|
+
|
642
|
+
break;
|
643
|
+
}
|
644
|
+
}
|
645
|
+
|
646
|
+
return transfers;
|
647
|
+
},
|
648
|
+
|
649
|
+
flush(lastChunk = false) {
|
521
650
|
this.optimizer.flush();
|
522
|
-
|
523
|
-
var length = this.length;
|
651
|
+
const length = this.length;
|
524
652
|
this._totalLength += length;
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
intent: this.intent
|
534
|
-
}, transfers);
|
653
|
+
|
654
|
+
this._streamSink.enqueue({
|
655
|
+
fnArray: this.fnArray,
|
656
|
+
argsArray: this.argsArray,
|
657
|
+
lastChunk,
|
658
|
+
length
|
659
|
+
}, 1, this._transfers);
|
660
|
+
|
535
661
|
this.dependencies = Object.create(null);
|
536
662
|
this.fnArray.length = 0;
|
537
663
|
this.argsArray.length = 0;
|
538
664
|
this.weight = 0;
|
539
665
|
this.optimizer.reset();
|
540
666
|
}
|
667
|
+
|
541
668
|
};
|
542
669
|
return OperatorList;
|
543
670
|
}();
|
671
|
+
|
544
672
|
exports.OperatorList = OperatorList;
|