pdfjs-dist 2.3.200 → 2.4.456
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +6499 -17971
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +19303 -29896
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25473 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +57878 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +407 -0
- package/es5/web/pdf_viewer.js +7757 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1333 -4839
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +683 -1066
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +196 -193
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +441 -569
- package/lib/core/cmap.js +220 -279
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +59 -80
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +564 -673
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +983 -889
- package/lib/core/font_renderer.js +128 -171
- package/lib/core/fonts.js +451 -400
- package/lib/core/function.js +289 -285
- package/lib/core/glyphlist.js +4527 -4527
- package/lib/core/image.js +138 -117
- package/lib/core/image_utils.js +46 -63
- package/lib/core/jbig2.js +324 -332
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +133 -24
- package/lib/core/jpg.js +238 -210
- package/lib/core/jpx.js +158 -157
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2928 -2928
- package/lib/core/murmurhash3.js +87 -102
- package/lib/core/obj.js +1111 -1302
- package/lib/core/operator_list.js +55 -42
- package/lib/core/parser.js +956 -987
- package/lib/core/pattern.js +69 -69
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +45 -77
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +83 -77
- package/lib/core/type1_parser.js +78 -68
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +148 -196
- package/lib/core/worker_stream.js +101 -210
- package/lib/display/annotation_layer.js +733 -1155
- package/lib/display/api.js +1539 -1928
- package/lib/display/api_compatibility.js +10 -8
- package/lib/display/canvas.js +159 -158
- package/lib/display/content_disposition.js +36 -55
- package/lib/display/display_utils.js +298 -551
- package/lib/display/fetch_stream.js +181 -305
- package/lib/display/font_loader.js +273 -416
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +376 -511
- package/lib/display/network_utils.js +20 -19
- package/lib/display/node_stream.js +276 -460
- package/lib/display/pattern_helper.js +76 -44
- package/lib/display/svg.js +1137 -1405
- package/lib/display/text_layer.js +75 -82
- package/lib/display/transport_stream.js +236 -374
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +37 -37
- package/lib/pdf.js +22 -21
- package/lib/pdf.worker.js +5 -5
- package/lib/shared/compatibility.js +2 -251
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +222 -194
- package/lib/shared/util.js +269 -405
- package/lib/test/unit/annotation_spec.js +1089 -1014
- package/lib/test/unit/api_spec.js +617 -544
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +63 -62
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +84 -86
- package/lib/test/unit/colorspace_spec.js +154 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +22 -24
- package/lib/test/unit/display_svg_spec.js +35 -36
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +16 -16
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +81 -95
- package/lib/test/unit/fetch_stream_spec.js +30 -30
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +48 -32
- package/lib/test/unit/message_handler_spec.js +172 -162
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +12 -12
- package/lib/test/unit/network_utils_spec.js +152 -152
- package/lib/test/unit/node_stream_spec.js +74 -90
- package/lib/test/unit/parser_spec.js +107 -113
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +117 -115
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +119 -285
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +41 -41
- package/lib/test/unit/ui_utils_spec.js +318 -426
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +122 -143
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1166 -1196
- package/lib/web/app_options.js +61 -77
- package/lib/web/base_viewer.js +804 -850
- package/lib/web/chromecom.js +164 -249
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +38 -57
- package/lib/web/firefox_print_service.js +35 -30
- package/lib/web/firefoxcom.js +175 -374
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +30 -30
- package/lib/web/interfaces.js +80 -258
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +105 -130
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +227 -376
- package/lib/web/pdf_find_bar.js +137 -171
- package/lib/web/pdf_find_controller.js +492 -549
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +395 -406
- package/lib/web/pdf_link_service.js +302 -349
- package/lib/web/pdf_outline_viewer.js +148 -209
- package/lib/web/pdf_page_view.js +449 -507
- package/lib/web/pdf_presentation_mode.js +304 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +264 -304
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +66 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -317
- package/lib/web/toolbar.js +216 -211
- package/lib/web/ui_utils.js +303 -404
- package/lib/web/view_history.js +49 -222
- package/lib/web/viewer_compatibility.js +7 -5
- package/package.json +2 -9
- package/web/pdf_viewer.css +25 -18
- package/web/pdf_viewer.js +3481 -4764
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/lib/shared/streams_polyfill.js +0 -43
package/lib/core/image.js
CHANGED
@@ -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,31 +26,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.PDFImage = void 0;
|
28
28
|
|
29
|
-
var _util = require("../shared/util");
|
29
|
+
var _util = require("../shared/util.js");
|
30
30
|
|
31
|
-
var _primitives = require("./primitives");
|
31
|
+
var _primitives = require("./primitives.js");
|
32
32
|
|
33
|
-
var _colorspace = require("./colorspace");
|
33
|
+
var _colorspace = require("./colorspace.js");
|
34
34
|
|
35
|
-
var _stream = require("./stream");
|
35
|
+
var _stream = require("./stream.js");
|
36
36
|
|
37
|
-
var _jpeg_stream = require("./jpeg_stream");
|
37
|
+
var _jpeg_stream = require("./jpeg_stream.js");
|
38
38
|
|
39
|
-
var _jpx = require("./jpx");
|
40
|
-
|
41
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
|
42
|
-
|
43
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
|
44
|
-
|
45
|
-
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
46
|
-
|
47
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
39
|
+
var _jpx = require("./jpx.js");
|
48
40
|
|
49
41
|
var PDFImage = function PDFImageClosure() {
|
50
42
|
function handleImageData(image, nativeDecoder) {
|
51
43
|
if (nativeDecoder && nativeDecoder.canDecode(image)) {
|
52
|
-
return nativeDecoder.decode(image)
|
53
|
-
(0, _util.warn)(
|
44
|
+
return nativeDecoder.decode(image).catch(reason => {
|
45
|
+
(0, _util.warn)("Native image decoding failed -- trying to recover: " + (reason && reason.message));
|
54
46
|
return image;
|
55
47
|
});
|
56
48
|
}
|
@@ -60,12 +52,28 @@ var PDFImage = function PDFImageClosure() {
|
|
60
52
|
|
61
53
|
function decodeAndClamp(value, addend, coefficient, max) {
|
62
54
|
value = addend + value * coefficient;
|
63
|
-
|
55
|
+
|
56
|
+
if (value < 0) {
|
57
|
+
value = 0;
|
58
|
+
} else if (value > max) {
|
59
|
+
value = max;
|
60
|
+
}
|
61
|
+
|
62
|
+
return value;
|
64
63
|
}
|
65
64
|
|
66
65
|
function resizeImageMask(src, bpc, w1, h1, w2, h2) {
|
67
66
|
var length = w2 * h2;
|
68
|
-
|
67
|
+
let dest;
|
68
|
+
|
69
|
+
if (bpc <= 8) {
|
70
|
+
dest = new Uint8Array(length);
|
71
|
+
} else if (bpc <= 16) {
|
72
|
+
dest = new Uint16Array(length);
|
73
|
+
} else {
|
74
|
+
dest = new Uint32Array(length);
|
75
|
+
}
|
76
|
+
|
69
77
|
var xRatio = w1 / w2;
|
70
78
|
var yRatio = h1 / h2;
|
71
79
|
var i,
|
@@ -92,26 +100,23 @@ var PDFImage = function PDFImageClosure() {
|
|
92
100
|
return dest;
|
93
101
|
}
|
94
102
|
|
95
|
-
function PDFImage(
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
_ref$isMask = _ref.isMask,
|
106
|
-
isMask = _ref$isMask === void 0 ? false : _ref$isMask,
|
107
|
-
pdfFunctionFactory = _ref.pdfFunctionFactory;
|
103
|
+
function PDFImage({
|
104
|
+
xref,
|
105
|
+
res,
|
106
|
+
image,
|
107
|
+
isInline = false,
|
108
|
+
smask = null,
|
109
|
+
mask = null,
|
110
|
+
isMask = false,
|
111
|
+
pdfFunctionFactory
|
112
|
+
}) {
|
108
113
|
this.image = image;
|
109
114
|
var dict = image.dict;
|
110
|
-
|
115
|
+
const filter = dict.get("Filter");
|
111
116
|
|
112
117
|
if ((0, _primitives.isName)(filter)) {
|
113
118
|
switch (filter.name) {
|
114
|
-
case
|
119
|
+
case "JPXDecode":
|
115
120
|
var jpxImage = new _jpx.JpxImage();
|
116
121
|
jpxImage.parseImageProperties(image.stream);
|
117
122
|
image.stream.reset();
|
@@ -121,41 +126,41 @@ var PDFImage = function PDFImageClosure() {
|
|
121
126
|
image.numComps = jpxImage.componentsCount;
|
122
127
|
break;
|
123
128
|
|
124
|
-
case
|
129
|
+
case "JBIG2Decode":
|
125
130
|
image.bitsPerComponent = 1;
|
126
131
|
image.numComps = 1;
|
127
132
|
break;
|
128
133
|
}
|
129
134
|
}
|
130
135
|
|
131
|
-
|
132
|
-
|
136
|
+
let width = dict.get("Width", "W");
|
137
|
+
let height = dict.get("Height", "H");
|
133
138
|
|
134
139
|
if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {
|
135
|
-
(0, _util.warn)(
|
140
|
+
(0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary.");
|
136
141
|
width = image.width;
|
137
142
|
height = image.height;
|
138
143
|
}
|
139
144
|
|
140
145
|
if (width < 1 || height < 1) {
|
141
|
-
throw new _util.FormatError(
|
146
|
+
throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
|
142
147
|
}
|
143
148
|
|
144
149
|
this.width = width;
|
145
150
|
this.height = height;
|
146
|
-
this.interpolate = dict.get(
|
147
|
-
this.imageMask = dict.get(
|
148
|
-
this.matte = dict.get(
|
151
|
+
this.interpolate = dict.get("Interpolate", "I") || false;
|
152
|
+
this.imageMask = dict.get("ImageMask", "IM") || false;
|
153
|
+
this.matte = dict.get("Matte") || false;
|
149
154
|
var bitsPerComponent = image.bitsPerComponent;
|
150
155
|
|
151
156
|
if (!bitsPerComponent) {
|
152
|
-
bitsPerComponent = dict.get(
|
157
|
+
bitsPerComponent = dict.get("BitsPerComponent", "BPC");
|
153
158
|
|
154
159
|
if (!bitsPerComponent) {
|
155
160
|
if (this.imageMask) {
|
156
161
|
bitsPerComponent = 1;
|
157
162
|
} else {
|
158
|
-
throw new _util.FormatError(
|
163
|
+
throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
|
159
164
|
}
|
160
165
|
}
|
161
166
|
}
|
@@ -163,35 +168,35 @@ var PDFImage = function PDFImageClosure() {
|
|
163
168
|
this.bpc = bitsPerComponent;
|
164
169
|
|
165
170
|
if (!this.imageMask) {
|
166
|
-
var colorSpace = dict.get(
|
171
|
+
var colorSpace = dict.get("ColorSpace", "CS");
|
167
172
|
|
168
173
|
if (!colorSpace) {
|
169
|
-
(0, _util.info)(
|
174
|
+
(0, _util.info)("JPX images (which do not require color spaces)");
|
170
175
|
|
171
176
|
switch (image.numComps) {
|
172
177
|
case 1:
|
173
|
-
colorSpace = _primitives.Name.get(
|
178
|
+
colorSpace = _primitives.Name.get("DeviceGray");
|
174
179
|
break;
|
175
180
|
|
176
181
|
case 3:
|
177
|
-
colorSpace = _primitives.Name.get(
|
182
|
+
colorSpace = _primitives.Name.get("DeviceRGB");
|
178
183
|
break;
|
179
184
|
|
180
185
|
case 4:
|
181
|
-
colorSpace = _primitives.Name.get(
|
186
|
+
colorSpace = _primitives.Name.get("DeviceCMYK");
|
182
187
|
break;
|
183
188
|
|
184
189
|
default:
|
185
|
-
throw new Error(
|
190
|
+
throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
|
186
191
|
}
|
187
192
|
}
|
188
193
|
|
189
|
-
|
194
|
+
const resources = isInline ? res : null;
|
190
195
|
this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);
|
191
196
|
this.numComps = this.colorSpace.numComps;
|
192
197
|
}
|
193
198
|
|
194
|
-
this.decode = dict.getArray(
|
199
|
+
this.decode = dict.getArray("Decode", "D");
|
195
200
|
this.needsDecode = false;
|
196
201
|
|
197
202
|
if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
|
@@ -199,7 +204,7 @@ var PDFImage = function PDFImageClosure() {
|
|
199
204
|
var max = (1 << bitsPerComponent) - 1;
|
200
205
|
this.decodeCoefficients = [];
|
201
206
|
this.decodeAddends = [];
|
202
|
-
|
207
|
+
const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
|
203
208
|
|
204
209
|
for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
|
205
210
|
var dmin = this.decode[i];
|
@@ -211,27 +216,27 @@ var PDFImage = function PDFImageClosure() {
|
|
211
216
|
|
212
217
|
if (smask) {
|
213
218
|
this.smask = new PDFImage({
|
214
|
-
xref
|
215
|
-
res
|
219
|
+
xref,
|
220
|
+
res,
|
216
221
|
image: smask,
|
217
|
-
isInline
|
218
|
-
pdfFunctionFactory
|
222
|
+
isInline,
|
223
|
+
pdfFunctionFactory
|
219
224
|
});
|
220
225
|
} else if (mask) {
|
221
226
|
if ((0, _primitives.isStream)(mask)) {
|
222
227
|
var maskDict = mask.dict,
|
223
|
-
imageMask = maskDict.get(
|
228
|
+
imageMask = maskDict.get("ImageMask", "IM");
|
224
229
|
|
225
230
|
if (!imageMask) {
|
226
|
-
(0, _util.warn)(
|
231
|
+
(0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
|
227
232
|
} else {
|
228
233
|
this.mask = new PDFImage({
|
229
|
-
xref
|
230
|
-
res
|
234
|
+
xref,
|
235
|
+
res,
|
231
236
|
image: mask,
|
232
|
-
isInline
|
237
|
+
isInline,
|
233
238
|
isMask: true,
|
234
|
-
pdfFunctionFactory
|
239
|
+
pdfFunctionFactory
|
235
240
|
});
|
236
241
|
}
|
237
242
|
} else {
|
@@ -240,21 +245,20 @@ var PDFImage = function PDFImageClosure() {
|
|
240
245
|
}
|
241
246
|
}
|
242
247
|
|
243
|
-
PDFImage.buildImage = function (
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
pdfFunctionFactory = _ref2.pdfFunctionFactory;
|
248
|
+
PDFImage.buildImage = function ({
|
249
|
+
handler,
|
250
|
+
xref,
|
251
|
+
res,
|
252
|
+
image,
|
253
|
+
isInline = false,
|
254
|
+
nativeDecoder = null,
|
255
|
+
pdfFunctionFactory
|
256
|
+
}) {
|
253
257
|
var imagePromise = handleImageData(image, nativeDecoder);
|
254
258
|
var smaskPromise;
|
255
259
|
var maskPromise;
|
256
|
-
var smask = image.dict.get(
|
257
|
-
var mask = image.dict.get(
|
260
|
+
var smask = image.dict.get("SMask");
|
261
|
+
var mask = image.dict.get("Mask");
|
258
262
|
|
259
263
|
if (smask) {
|
260
264
|
smaskPromise = handleImageData(smask, nativeDecoder);
|
@@ -268,7 +272,7 @@ var PDFImage = function PDFImageClosure() {
|
|
268
272
|
} else if (Array.isArray(mask)) {
|
269
273
|
maskPromise = Promise.resolve(mask);
|
270
274
|
} else {
|
271
|
-
(0, _util.warn)(
|
275
|
+
(0, _util.warn)("Unsupported mask format.");
|
272
276
|
maskPromise = Promise.resolve(null);
|
273
277
|
}
|
274
278
|
} else {
|
@@ -276,30 +280,26 @@ var PDFImage = function PDFImageClosure() {
|
|
276
280
|
}
|
277
281
|
}
|
278
282
|
|
279
|
-
return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function (
|
280
|
-
var _ref4 = _slicedToArray(_ref3, 3),
|
281
|
-
imageData = _ref4[0],
|
282
|
-
smaskData = _ref4[1],
|
283
|
-
maskData = _ref4[2];
|
284
|
-
|
283
|
+
return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function ([imageData, smaskData, maskData]) {
|
285
284
|
return new PDFImage({
|
286
|
-
xref
|
287
|
-
res
|
285
|
+
xref,
|
286
|
+
res,
|
288
287
|
image: imageData,
|
289
|
-
isInline
|
288
|
+
isInline,
|
290
289
|
smask: smaskData,
|
291
290
|
mask: maskData,
|
292
|
-
pdfFunctionFactory
|
291
|
+
pdfFunctionFactory
|
293
292
|
});
|
294
293
|
});
|
295
294
|
};
|
296
295
|
|
297
|
-
PDFImage.createMask = function (
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
296
|
+
PDFImage.createMask = function ({
|
297
|
+
imgArray,
|
298
|
+
width,
|
299
|
+
height,
|
300
|
+
imageIsFromDecodeStream,
|
301
|
+
inverseDecode
|
302
|
+
}) {
|
303
303
|
var computedLength = (width + 7 >> 3) * height;
|
304
304
|
var actualLength = imgArray.byteLength;
|
305
305
|
var haveFullData = computedLength === actualLength;
|
@@ -321,14 +321,14 @@ var PDFImage = function PDFImageClosure() {
|
|
321
321
|
|
322
322
|
if (inverseDecode) {
|
323
323
|
for (i = 0; i < actualLength; i++) {
|
324
|
-
data[i] ^=
|
324
|
+
data[i] ^= 0xff;
|
325
325
|
}
|
326
326
|
}
|
327
327
|
|
328
328
|
return {
|
329
|
-
data
|
330
|
-
width
|
331
|
-
height
|
329
|
+
data,
|
330
|
+
width,
|
331
|
+
height
|
332
332
|
};
|
333
333
|
};
|
334
334
|
|
@@ -341,7 +341,7 @@ var PDFImage = function PDFImageClosure() {
|
|
341
341
|
return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);
|
342
342
|
},
|
343
343
|
|
344
|
-
decodeBuffer
|
344
|
+
decodeBuffer(buffer) {
|
345
345
|
var bpc = this.bpc;
|
346
346
|
var numComps = this.numComps;
|
347
347
|
var decodeAddends = this.decodeAddends;
|
@@ -366,7 +366,8 @@ var PDFImage = function PDFImageClosure() {
|
|
366
366
|
}
|
367
367
|
}
|
368
368
|
},
|
369
|
-
|
369
|
+
|
370
|
+
getComponents(buffer) {
|
370
371
|
var bpc = this.bpc;
|
371
372
|
|
372
373
|
if (bpc === 8) {
|
@@ -378,7 +379,16 @@ var PDFImage = function PDFImageClosure() {
|
|
378
379
|
var numComps = this.numComps;
|
379
380
|
var length = width * height * numComps;
|
380
381
|
var bufferPos = 0;
|
381
|
-
|
382
|
+
let output;
|
383
|
+
|
384
|
+
if (bpc <= 8) {
|
385
|
+
output = new Uint8Array(length);
|
386
|
+
} else if (bpc <= 16) {
|
387
|
+
output = new Uint16Array(length);
|
388
|
+
} else {
|
389
|
+
output = new Uint32Array(length);
|
390
|
+
}
|
391
|
+
|
382
392
|
var rowComps = width * numComps;
|
383
393
|
var max = (1 << bpc) - 1;
|
384
394
|
var i = 0,
|
@@ -431,8 +441,15 @@ var PDFImage = function PDFImageClosure() {
|
|
431
441
|
}
|
432
442
|
|
433
443
|
var remainingBits = bits - bpc;
|
434
|
-
|
435
|
-
|
444
|
+
let value = buf >> remainingBits;
|
445
|
+
|
446
|
+
if (value < 0) {
|
447
|
+
value = 0;
|
448
|
+
} else if (value > max) {
|
449
|
+
value = max;
|
450
|
+
}
|
451
|
+
|
452
|
+
output[i] = value;
|
436
453
|
buf = buf & (1 << remainingBits) - 1;
|
437
454
|
bits = remainingBits;
|
438
455
|
}
|
@@ -440,7 +457,8 @@ var PDFImage = function PDFImageClosure() {
|
|
440
457
|
|
441
458
|
return output;
|
442
459
|
},
|
443
|
-
|
460
|
+
|
461
|
+
fillOpacity(rgbaBuf, width, height, actualHeight, image) {
|
444
462
|
var smask = this.smask;
|
445
463
|
var mask = this.mask;
|
446
464
|
var alphaBuf, sw, sh, i, ii, j;
|
@@ -490,7 +508,7 @@ var PDFImage = function PDFImageClosure() {
|
|
490
508
|
alphaBuf[i] = opacity;
|
491
509
|
}
|
492
510
|
} else {
|
493
|
-
throw new _util.FormatError(
|
511
|
+
throw new _util.FormatError("Unknown mask format.");
|
494
512
|
}
|
495
513
|
}
|
496
514
|
|
@@ -504,7 +522,8 @@ var PDFImage = function PDFImageClosure() {
|
|
504
522
|
}
|
505
523
|
}
|
506
524
|
},
|
507
|
-
|
525
|
+
|
526
|
+
undoPreblend(buffer, width, height) {
|
508
527
|
var matte = this.smask && this.smask.matte;
|
509
528
|
|
510
529
|
if (!matte) {
|
@@ -533,8 +552,8 @@ var PDFImage = function PDFImageClosure() {
|
|
533
552
|
buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
|
534
553
|
}
|
535
554
|
},
|
536
|
-
|
537
|
-
|
555
|
+
|
556
|
+
createImageData(forceRGBA = false) {
|
538
557
|
var drawWidth = this.drawWidth;
|
539
558
|
var drawHeight = this.drawHeight;
|
540
559
|
var imgData = {
|
@@ -553,9 +572,9 @@ var PDFImage = function PDFImageClosure() {
|
|
553
572
|
if (!forceRGBA) {
|
554
573
|
var kind;
|
555
574
|
|
556
|
-
if (this.colorSpace.name ===
|
575
|
+
if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
|
557
576
|
kind = _util.ImageKind.GRAYSCALE_1BPP;
|
558
|
-
} else if (this.colorSpace.name ===
|
577
|
+
} else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
|
559
578
|
kind = _util.ImageKind.RGB_24BPP;
|
560
579
|
}
|
561
580
|
|
@@ -572,7 +591,7 @@ var PDFImage = function PDFImageClosure() {
|
|
572
591
|
}
|
573
592
|
|
574
593
|
if (this.needsDecode) {
|
575
|
-
(0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP,
|
594
|
+
(0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
|
576
595
|
var buffer = imgData.data;
|
577
596
|
|
578
597
|
for (var i = 0, ii = buffer.length; i < ii; i++) {
|
@@ -584,14 +603,14 @@ var PDFImage = function PDFImageClosure() {
|
|
584
603
|
}
|
585
604
|
|
586
605
|
if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
|
587
|
-
|
606
|
+
let imageLength = originalHeight * rowBytes;
|
588
607
|
|
589
608
|
switch (this.colorSpace.name) {
|
590
|
-
case
|
609
|
+
case "DeviceGray":
|
591
610
|
imageLength *= 3;
|
592
611
|
|
593
|
-
case
|
594
|
-
case
|
612
|
+
case "DeviceRGB":
|
613
|
+
case "DeviceCMYK":
|
595
614
|
imgData.kind = _util.ImageKind.RGB_24BPP;
|
596
615
|
imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);
|
597
616
|
return imgData;
|
@@ -629,11 +648,12 @@ var PDFImage = function PDFImageClosure() {
|
|
629
648
|
|
630
649
|
return imgData;
|
631
650
|
},
|
632
|
-
|
651
|
+
|
652
|
+
fillGrayBuffer(buffer) {
|
633
653
|
var numComps = this.numComps;
|
634
654
|
|
635
655
|
if (numComps !== 1) {
|
636
|
-
throw new _util.FormatError(
|
656
|
+
throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
|
637
657
|
}
|
638
658
|
|
639
659
|
var width = this.width;
|
@@ -671,14 +691,15 @@ var PDFImage = function PDFImageClosure() {
|
|
671
691
|
buffer[i] = scale * comps[i];
|
672
692
|
}
|
673
693
|
},
|
674
|
-
|
675
|
-
|
694
|
+
|
695
|
+
getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {
|
676
696
|
this.image.reset();
|
677
697
|
this.image.drawWidth = drawWidth || this.width;
|
678
698
|
this.image.drawHeight = drawHeight || this.height;
|
679
699
|
this.image.forceRGB = !!forceRGB;
|
680
700
|
return this.image.getBytes(length, true);
|
681
701
|
}
|
702
|
+
|
682
703
|
};
|
683
704
|
return PDFImage;
|
684
705
|
}();
|
package/lib/core/image_utils.js
CHANGED
@@ -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,31 +26,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.NativeImageDecoder = void 0;
|
28
28
|
|
29
|
-
var _colorspace = require("./colorspace");
|
29
|
+
var _colorspace = require("./colorspace.js");
|
30
30
|
|
31
|
-
var _jpeg_stream = require("./jpeg_stream");
|
31
|
+
var _jpeg_stream = require("./jpeg_stream.js");
|
32
32
|
|
33
|
-
var _stream = require("./stream");
|
34
|
-
|
35
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
36
|
-
|
37
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
38
|
-
|
39
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
40
|
-
|
41
|
-
var NativeImageDecoder =
|
42
|
-
/*#__PURE__*/
|
43
|
-
function () {
|
44
|
-
function NativeImageDecoder(_ref) {
|
45
|
-
var xref = _ref.xref,
|
46
|
-
resources = _ref.resources,
|
47
|
-
handler = _ref.handler,
|
48
|
-
_ref$forceDataSchema = _ref.forceDataSchema,
|
49
|
-
forceDataSchema = _ref$forceDataSchema === void 0 ? false : _ref$forceDataSchema,
|
50
|
-
pdfFunctionFactory = _ref.pdfFunctionFactory;
|
51
|
-
|
52
|
-
_classCallCheck(this, NativeImageDecoder);
|
33
|
+
var _stream = require("./stream.js");
|
53
34
|
|
35
|
+
class NativeImageDecoder {
|
36
|
+
constructor({
|
37
|
+
xref,
|
38
|
+
resources,
|
39
|
+
handler,
|
40
|
+
forceDataSchema = false,
|
41
|
+
pdfFunctionFactory
|
42
|
+
}) {
|
54
43
|
this.xref = xref;
|
55
44
|
this.resources = resources;
|
56
45
|
this.handler = handler;
|
@@ -58,54 +47,48 @@ function () {
|
|
58
47
|
this.pdfFunctionFactory = pdfFunctionFactory;
|
59
48
|
}
|
60
49
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory);
|
65
|
-
}
|
66
|
-
}, {
|
67
|
-
key: "decode",
|
68
|
-
value: function decode(image) {
|
69
|
-
var dict = image.dict;
|
70
|
-
var colorSpace = dict.get('ColorSpace', 'CS');
|
71
|
-
colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory);
|
72
|
-
return this.handler.sendWithPromise('JpegDecode', [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function (_ref2) {
|
73
|
-
var data = _ref2.data,
|
74
|
-
width = _ref2.width,
|
75
|
-
height = _ref2.height;
|
76
|
-
return new _stream.Stream(data, 0, data.length, dict);
|
77
|
-
});
|
78
|
-
}
|
79
|
-
}], [{
|
80
|
-
key: "isSupported",
|
81
|
-
value: function isSupported(image, xref, res, pdfFunctionFactory) {
|
82
|
-
var dict = image.dict;
|
50
|
+
canDecode(image) {
|
51
|
+
return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory) && image.maybeValidDimensions;
|
52
|
+
}
|
83
53
|
|
84
|
-
|
85
|
-
|
86
|
-
|
54
|
+
decode(image) {
|
55
|
+
const dict = image.dict;
|
56
|
+
let colorSpace = dict.get("ColorSpace", "CS");
|
57
|
+
colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory);
|
58
|
+
return this.handler.sendWithPromise("JpegDecode", [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function ({
|
59
|
+
data,
|
60
|
+
width,
|
61
|
+
height
|
62
|
+
}) {
|
63
|
+
return new _stream.Stream(data, 0, data.length, dict);
|
64
|
+
});
|
65
|
+
}
|
87
66
|
|
88
|
-
|
67
|
+
static isSupported(image, xref, res, pdfFunctionFactory) {
|
68
|
+
const dict = image.dict;
|
89
69
|
|
90
|
-
|
70
|
+
if (dict.has("DecodeParms") || dict.has("DP")) {
|
71
|
+
return false;
|
91
72
|
}
|
92
|
-
}, {
|
93
|
-
key: "isDecodable",
|
94
|
-
value: function isDecodable(image, xref, res, pdfFunctionFactory) {
|
95
|
-
var dict = image.dict;
|
96
73
|
|
97
|
-
|
98
|
-
|
99
|
-
|
74
|
+
const cs = _colorspace.ColorSpace.parse(dict.get("ColorSpace", "CS"), xref, res, pdfFunctionFactory);
|
75
|
+
|
76
|
+
return (cs.name === "DeviceGray" || cs.name === "DeviceRGB") && cs.isDefaultDecode(dict.getArray("Decode", "D"));
|
77
|
+
}
|
100
78
|
|
101
|
-
|
79
|
+
static isDecodable(image, xref, res, pdfFunctionFactory) {
|
80
|
+
const dict = image.dict;
|
102
81
|
|
103
|
-
|
104
|
-
return
|
82
|
+
if (dict.has("DecodeParms") || dict.has("DP")) {
|
83
|
+
return false;
|
105
84
|
}
|
106
|
-
}]);
|
107
85
|
|
108
|
-
|
109
|
-
|
86
|
+
const cs = _colorspace.ColorSpace.parse(dict.get("ColorSpace", "CS"), xref, res, pdfFunctionFactory);
|
87
|
+
|
88
|
+
const bpc = dict.get("BitsPerComponent", "BPC") || 1;
|
89
|
+
return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray("Decode", "D"), bpc);
|
90
|
+
}
|
91
|
+
|
92
|
+
}
|
110
93
|
|
111
94
|
exports.NativeImageDecoder = NativeImageDecoder;
|