pdfjs-dist 2.0.943 → 2.1.266
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/bower.json +1 -1
- package/build/pdf.js +15329 -11095
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +12497 -4184
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/image_decoders/pdf.image_decoders.js +3438 -1209
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +335 -109
- package/lib/core/arithmetic_decoder.js +274 -244
- package/lib/core/bidi.js +64 -5
- package/lib/core/ccitt.js +172 -17
- package/lib/core/ccitt_stream.js +14 -5
- package/lib/core/cff_parser.js +304 -28
- package/lib/core/charsets.js +4 -3
- package/lib/core/chunked_stream.js +379 -149
- package/lib/core/cmap.js +210 -40
- package/lib/core/colorspace.js +332 -187
- package/lib/core/crypto.js +289 -44
- package/lib/core/document.js +508 -249
- package/lib/core/encodings.js +18 -9
- package/lib/core/evaluator.js +657 -119
- package/lib/core/font_renderer.js +217 -34
- package/lib/core/fonts.js +632 -41
- package/lib/core/function.js +252 -26
- package/lib/core/glyphlist.js +2 -1
- package/lib/core/image.js +124 -27
- package/lib/core/jbig2.js +425 -65
- package/lib/core/jbig2_stream.js +18 -7
- package/lib/core/jpeg_stream.js +24 -8
- package/lib/core/jpg.js +208 -16
- package/lib/core/jpx.js +395 -5
- package/lib/core/jpx_stream.js +17 -5
- package/lib/core/metrics.js +3 -3
- package/lib/core/murmurhash3.js +23 -5
- package/lib/core/obj.js +625 -132
- package/lib/core/operator_list.js +104 -3
- package/lib/core/parser.js +262 -25
- package/lib/core/pattern.js +144 -12
- package/lib/core/pdf_manager.js +104 -70
- package/lib/core/primitives.js +74 -21
- package/lib/core/ps_parser.js +133 -44
- package/lib/core/standard_fonts.js +9 -9
- package/lib/core/stream.js +283 -31
- package/lib/core/type1_parser.js +138 -6
- package/lib/core/unicode.js +28 -1
- package/lib/core/worker.js +192 -57
- package/lib/display/annotation_layer.js +303 -123
- package/lib/display/api.js +1073 -574
- package/lib/display/api_compatibility.js +4 -1
- package/lib/display/canvas.js +314 -18
- package/lib/display/content_disposition.js +70 -23
- package/lib/display/dom_utils.js +112 -59
- package/lib/display/fetch_stream.js +95 -50
- package/lib/display/font_loader.js +250 -132
- package/lib/display/metadata.js +37 -15
- package/lib/display/network.js +123 -34
- package/lib/display/network_utils.js +23 -10
- package/lib/display/node_stream.js +162 -65
- package/lib/display/pattern_helper.js +57 -6
- package/lib/display/svg.js +194 -18
- package/lib/display/text_layer.js +128 -14
- package/lib/display/transport_stream.js +83 -27
- package/lib/display/webgl.js +63 -17
- package/lib/display/worker_options.js +4 -3
- package/lib/display/xml_parser.js +162 -52
- package/lib/examples/node/domstubs.js +56 -3
- package/lib/pdf.js +15 -2
- package/lib/pdf.worker.js +4 -2
- package/lib/shared/compatibility.js +129 -26
- package/lib/shared/global_scope.js +1 -1
- package/lib/shared/is_node.js +3 -3
- package/lib/shared/message_handler.js +103 -45
- package/lib/shared/streams_polyfill.js +20 -16
- package/lib/shared/url_polyfill.js +8 -2
- package/lib/shared/util.js +246 -84
- package/lib/test/unit/annotation_spec.js +99 -73
- package/lib/test/unit/api_spec.js +347 -113
- package/lib/test/unit/bidi_spec.js +6 -6
- package/lib/test/unit/cff_parser_spec.js +17 -5
- package/lib/test/unit/clitests_helper.js +7 -8
- package/lib/test/unit/cmap_spec.js +79 -25
- package/lib/test/unit/colorspace_spec.js +65 -18
- package/lib/test/unit/crypto_spec.js +16 -4
- package/lib/test/unit/custom_spec.js +40 -52
- package/lib/test/unit/display_svg_spec.js +32 -16
- package/lib/test/unit/document_spec.js +2 -2
- package/lib/test/unit/dom_utils_spec.js +8 -8
- package/lib/test/unit/encodings_spec.js +24 -44
- package/lib/test/unit/evaluator_spec.js +15 -8
- package/lib/test/unit/function_spec.js +16 -4
- package/lib/test/unit/jasmine-boot.js +29 -16
- package/lib/test/unit/message_handler_spec.js +19 -6
- package/lib/test/unit/metadata_spec.js +64 -11
- package/lib/test/unit/murmurhash3_spec.js +2 -2
- package/lib/test/unit/network_spec.js +19 -4
- package/lib/test/unit/network_utils_spec.js +6 -4
- package/lib/test/unit/node_stream_spec.js +50 -26
- package/lib/test/unit/parser_spec.js +13 -29
- package/lib/test/unit/pdf_find_controller_spec.js +144 -32
- package/lib/test/unit/pdf_find_utils_spec.js +10 -9
- package/lib/test/unit/pdf_history_spec.js +20 -8
- package/lib/test/unit/primitives_spec.js +23 -3
- package/lib/test/unit/stream_spec.js +8 -3
- package/lib/test/unit/test_utils.js +89 -26
- package/lib/test/unit/testreporter.js +19 -1
- package/lib/test/unit/type1_parser_spec.js +7 -5
- package/lib/test/unit/ui_utils_spec.js +162 -38
- package/lib/test/unit/unicode_spec.js +13 -10
- package/lib/test/unit/util_spec.js +89 -9
- package/lib/web/annotation_layer_builder.js +38 -21
- package/lib/web/app.js +610 -245
- package/lib/web/app_options.js +54 -34
- package/lib/web/base_viewer.js +359 -162
- package/lib/web/chromecom.js +159 -80
- package/lib/web/debugger.js +161 -17
- package/lib/web/download_manager.js +29 -11
- package/lib/web/firefox_print_service.js +16 -8
- package/lib/web/firefoxcom.js +127 -91
- package/lib/web/genericcom.js +50 -31
- package/lib/web/genericl10n.js +46 -34
- package/lib/web/grab_to_pan.js +25 -3
- package/lib/web/interfaces.js +108 -61
- package/lib/web/overlay_manager.js +67 -45
- package/lib/web/password_prompt.js +20 -12
- package/lib/web/pdf_attachment_viewer.js +37 -17
- package/lib/web/pdf_cursor_tools.js +38 -15
- package/lib/web/pdf_document_properties.js +65 -24
- package/lib/web/pdf_find_bar.js +48 -20
- package/lib/web/pdf_find_controller.js +290 -89
- package/lib/web/pdf_find_utils.js +19 -3
- package/lib/web/pdf_history.js +186 -49
- package/lib/web/pdf_link_service.js +127 -52
- package/lib/web/pdf_outline_viewer.js +71 -21
- package/lib/web/pdf_page_view.js +188 -63
- package/lib/web/pdf_presentation_mode.js +98 -33
- package/lib/web/pdf_print_service.js +54 -10
- package/lib/web/pdf_rendering_queue.js +26 -4
- package/lib/web/pdf_sidebar.js +116 -62
- package/lib/web/pdf_sidebar_resizer.js +41 -15
- package/lib/web/pdf_single_page_viewer.js +65 -68
- package/lib/web/pdf_thumbnail_view.js +102 -31
- package/lib/web/pdf_thumbnail_viewer.js +62 -22
- package/lib/web/pdf_viewer.component.js +111 -31
- package/lib/web/pdf_viewer.js +80 -60
- package/lib/web/preferences.js +61 -39
- package/lib/web/secondary_toolbar.js +101 -82
- package/lib/web/text_layer_builder.js +124 -69
- package/lib/web/toolbar.js +67 -27
- package/lib/web/ui_utils.js +284 -128
- package/lib/web/view_history.js +75 -51
- package/lib/web/viewer_compatibility.js +2 -1
- package/package.json +1 -1
- package/web/pdf_viewer.css +1 -1
- package/web/pdf_viewer.js +2200 -973
- package/web/pdf_viewer.js.map +1 -1
- package/lib/web/dom_events.js +0 -140
package/lib/core/glyphlist.js
CHANGED
@@ -19,9 +19,10 @@
|
|
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
|
var getLookupTableFactory = require('../shared/util').getLookupTableFactory;
|
25
|
+
|
25
26
|
var getGlyphsUnicode = getLookupTableFactory(function (t) {
|
26
27
|
t['A'] = 0x0041;
|
27
28
|
t['AE'] = 0x00C6;
|
package/lib/core/image.js
CHANGED
@@ -19,26 +19,32 @@
|
|
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.PDFImage =
|
27
|
+
exports.PDFImage = void 0;
|
28
28
|
|
29
|
-
var
|
29
|
+
var _util = require("../shared/util");
|
30
30
|
|
31
|
-
var
|
31
|
+
var _primitives = require("./primitives");
|
32
32
|
|
33
|
-
var
|
33
|
+
var _colorspace = require("./colorspace");
|
34
34
|
|
35
|
-
var
|
35
|
+
var _stream = require("./stream");
|
36
36
|
|
37
|
-
var
|
37
|
+
var _jpeg_stream = require("./jpeg_stream");
|
38
38
|
|
39
|
-
var
|
39
|
+
var _jpx = require("./jpx");
|
40
40
|
|
41
|
-
|
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) { 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; }
|
42
48
|
|
43
49
|
var PDFImage = function PDFImageClosure() {
|
44
50
|
function handleImageData(image, nativeDecoder) {
|
@@ -48,12 +54,15 @@ var PDFImage = function PDFImageClosure() {
|
|
48
54
|
return image;
|
49
55
|
});
|
50
56
|
}
|
57
|
+
|
51
58
|
return Promise.resolve(image);
|
52
59
|
}
|
60
|
+
|
53
61
|
function decodeAndClamp(value, addend, coefficient, max) {
|
54
62
|
value = addend + value * coefficient;
|
55
63
|
return value < 0 ? 0 : value > max ? max : value;
|
56
64
|
}
|
65
|
+
|
57
66
|
function resizeImageMask(src, bpc, w1, h1, w2, h2) {
|
58
67
|
var length = w2 * h2;
|
59
68
|
var dest = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
|
@@ -66,35 +75,40 @@ var PDFImage = function PDFImageClosure() {
|
|
66
75
|
oldIndex;
|
67
76
|
var xScaled = new Uint16Array(w2);
|
68
77
|
var w1Scanline = w1;
|
78
|
+
|
69
79
|
for (i = 0; i < w2; i++) {
|
70
80
|
xScaled[i] = Math.floor(i * xRatio);
|
71
81
|
}
|
82
|
+
|
72
83
|
for (i = 0; i < h2; i++) {
|
73
84
|
py = Math.floor(i * yRatio) * w1Scanline;
|
85
|
+
|
74
86
|
for (j = 0; j < w2; j++) {
|
75
87
|
oldIndex = py + xScaled[j];
|
76
88
|
dest[newIndex++] = src[oldIndex];
|
77
89
|
}
|
78
90
|
}
|
91
|
+
|
79
92
|
return dest;
|
80
93
|
}
|
94
|
+
|
81
95
|
function PDFImage(_ref) {
|
82
96
|
var xref = _ref.xref,
|
83
97
|
res = _ref.res,
|
84
98
|
image = _ref.image,
|
85
99
|
_ref$isInline = _ref.isInline,
|
86
|
-
isInline = _ref$isInline ===
|
100
|
+
isInline = _ref$isInline === void 0 ? false : _ref$isInline,
|
87
101
|
_ref$smask = _ref.smask,
|
88
|
-
smask = _ref$smask ===
|
102
|
+
smask = _ref$smask === void 0 ? null : _ref$smask,
|
89
103
|
_ref$mask = _ref.mask,
|
90
|
-
mask = _ref$mask ===
|
104
|
+
mask = _ref$mask === void 0 ? null : _ref$mask,
|
91
105
|
_ref$isMask = _ref.isMask,
|
92
|
-
isMask = _ref$isMask ===
|
106
|
+
isMask = _ref$isMask === void 0 ? false : _ref$isMask,
|
93
107
|
pdfFunctionFactory = _ref.pdfFunctionFactory;
|
94
|
-
|
95
108
|
this.image = image;
|
96
109
|
var dict = image.dict;
|
97
110
|
var filter = dict.get('Filter');
|
111
|
+
|
98
112
|
if ((0, _primitives.isName)(filter)) {
|
99
113
|
switch (filter.name) {
|
100
114
|
case 'JPXDecode':
|
@@ -106,75 +120,95 @@ var PDFImage = function PDFImageClosure() {
|
|
106
120
|
image.bitsPerComponent = jpxImage.bitsPerComponent;
|
107
121
|
image.numComps = jpxImage.componentsCount;
|
108
122
|
break;
|
123
|
+
|
109
124
|
case 'JBIG2Decode':
|
110
125
|
image.bitsPerComponent = 1;
|
111
126
|
image.numComps = 1;
|
112
127
|
break;
|
113
128
|
}
|
114
129
|
}
|
130
|
+
|
115
131
|
var width = dict.get('Width', 'W');
|
116
132
|
var height = dict.get('Height', 'H');
|
133
|
+
|
117
134
|
if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {
|
118
135
|
(0, _util.warn)('PDFImage - using the Width/Height of the image data, ' + 'rather than the image dictionary.');
|
119
136
|
width = image.width;
|
120
137
|
height = image.height;
|
121
138
|
}
|
139
|
+
|
122
140
|
if (width < 1 || height < 1) {
|
123
|
-
throw new _util.FormatError(
|
141
|
+
throw new _util.FormatError("Invalid image width: ".concat(width, " or ") + "height: ".concat(height));
|
124
142
|
}
|
143
|
+
|
125
144
|
this.width = width;
|
126
145
|
this.height = height;
|
127
146
|
this.interpolate = dict.get('Interpolate', 'I') || false;
|
128
147
|
this.imageMask = dict.get('ImageMask', 'IM') || false;
|
129
148
|
this.matte = dict.get('Matte') || false;
|
130
149
|
var bitsPerComponent = image.bitsPerComponent;
|
150
|
+
|
131
151
|
if (!bitsPerComponent) {
|
132
152
|
bitsPerComponent = dict.get('BitsPerComponent', 'BPC');
|
153
|
+
|
133
154
|
if (!bitsPerComponent) {
|
134
155
|
if (this.imageMask) {
|
135
156
|
bitsPerComponent = 1;
|
136
157
|
} else {
|
137
|
-
throw new _util.FormatError(
|
158
|
+
throw new _util.FormatError("Bits per component missing in image: ".concat(this.imageMask));
|
138
159
|
}
|
139
160
|
}
|
140
161
|
}
|
162
|
+
|
141
163
|
this.bpc = bitsPerComponent;
|
164
|
+
|
142
165
|
if (!this.imageMask) {
|
143
166
|
var colorSpace = dict.get('ColorSpace', 'CS');
|
167
|
+
|
144
168
|
if (!colorSpace) {
|
145
169
|
(0, _util.info)('JPX images (which do not require color spaces)');
|
170
|
+
|
146
171
|
switch (image.numComps) {
|
147
172
|
case 1:
|
148
173
|
colorSpace = _primitives.Name.get('DeviceGray');
|
149
174
|
break;
|
175
|
+
|
150
176
|
case 3:
|
151
177
|
colorSpace = _primitives.Name.get('DeviceRGB');
|
152
178
|
break;
|
179
|
+
|
153
180
|
case 4:
|
154
181
|
colorSpace = _primitives.Name.get('DeviceCMYK');
|
155
182
|
break;
|
183
|
+
|
156
184
|
default:
|
157
|
-
throw new Error(
|
185
|
+
throw new Error("JPX images with ".concat(image.numComps, " ") + 'color components not supported.');
|
158
186
|
}
|
159
187
|
}
|
188
|
+
|
160
189
|
var resources = isInline ? res : null;
|
161
190
|
this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);
|
162
191
|
this.numComps = this.colorSpace.numComps;
|
163
192
|
}
|
193
|
+
|
164
194
|
this.decode = dict.getArray('Decode', 'D');
|
165
195
|
this.needsDecode = false;
|
166
|
-
|
196
|
+
|
197
|
+
if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
|
167
198
|
this.needsDecode = true;
|
168
199
|
var max = (1 << bitsPerComponent) - 1;
|
169
200
|
this.decodeCoefficients = [];
|
170
201
|
this.decodeAddends = [];
|
202
|
+
var isIndexed = this.colorSpace && this.colorSpace.name === 'Indexed';
|
203
|
+
|
171
204
|
for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
|
172
205
|
var dmin = this.decode[i];
|
173
206
|
var dmax = this.decode[i + 1];
|
174
|
-
this.decodeCoefficients[j] = dmax - dmin;
|
175
|
-
this.decodeAddends[j] = max * dmin;
|
207
|
+
this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
|
208
|
+
this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
|
176
209
|
}
|
177
210
|
}
|
211
|
+
|
178
212
|
if (smask) {
|
179
213
|
this.smask = new PDFImage({
|
180
214
|
xref: xref,
|
@@ -187,6 +221,7 @@ var PDFImage = function PDFImageClosure() {
|
|
187
221
|
if ((0, _primitives.isStream)(mask)) {
|
188
222
|
var maskDict = mask.dict,
|
189
223
|
imageMask = maskDict.get('ImageMask', 'IM');
|
224
|
+
|
190
225
|
if (!imageMask) {
|
191
226
|
(0, _util.warn)('Ignoring /Mask in image without /ImageMask.');
|
192
227
|
} else {
|
@@ -204,27 +239,29 @@ var PDFImage = function PDFImageClosure() {
|
|
204
239
|
}
|
205
240
|
}
|
206
241
|
}
|
242
|
+
|
207
243
|
PDFImage.buildImage = function (_ref2) {
|
208
244
|
var handler = _ref2.handler,
|
209
245
|
xref = _ref2.xref,
|
210
246
|
res = _ref2.res,
|
211
247
|
image = _ref2.image,
|
212
248
|
_ref2$isInline = _ref2.isInline,
|
213
|
-
isInline = _ref2$isInline ===
|
249
|
+
isInline = _ref2$isInline === void 0 ? false : _ref2$isInline,
|
214
250
|
_ref2$nativeDecoder = _ref2.nativeDecoder,
|
215
|
-
nativeDecoder = _ref2$nativeDecoder ===
|
251
|
+
nativeDecoder = _ref2$nativeDecoder === void 0 ? null : _ref2$nativeDecoder,
|
216
252
|
pdfFunctionFactory = _ref2.pdfFunctionFactory;
|
217
|
-
|
218
253
|
var imagePromise = handleImageData(image, nativeDecoder);
|
219
254
|
var smaskPromise;
|
220
255
|
var maskPromise;
|
221
256
|
var smask = image.dict.get('SMask');
|
222
257
|
var mask = image.dict.get('Mask');
|
258
|
+
|
223
259
|
if (smask) {
|
224
260
|
smaskPromise = handleImageData(smask, nativeDecoder);
|
225
261
|
maskPromise = Promise.resolve(null);
|
226
262
|
} else {
|
227
263
|
smaskPromise = Promise.resolve(null);
|
264
|
+
|
228
265
|
if (mask) {
|
229
266
|
if ((0, _primitives.isStream)(mask)) {
|
230
267
|
maskPromise = handleImageData(mask, nativeDecoder);
|
@@ -238,6 +275,7 @@ var PDFImage = function PDFImageClosure() {
|
|
238
275
|
maskPromise = Promise.resolve(null);
|
239
276
|
}
|
240
277
|
}
|
278
|
+
|
241
279
|
return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function (_ref3) {
|
242
280
|
var _ref4 = _slicedToArray(_ref3, 3),
|
243
281
|
imageData = _ref4[0],
|
@@ -255,17 +293,18 @@ var PDFImage = function PDFImageClosure() {
|
|
255
293
|
});
|
256
294
|
});
|
257
295
|
};
|
296
|
+
|
258
297
|
PDFImage.createMask = function (_ref5) {
|
259
298
|
var imgArray = _ref5.imgArray,
|
260
299
|
width = _ref5.width,
|
261
300
|
height = _ref5.height,
|
262
301
|
imageIsFromDecodeStream = _ref5.imageIsFromDecodeStream,
|
263
302
|
inverseDecode = _ref5.inverseDecode;
|
264
|
-
|
265
303
|
var computedLength = (width + 7 >> 3) * height;
|
266
304
|
var actualLength = imgArray.byteLength;
|
267
305
|
var haveFullData = computedLength === actualLength;
|
268
306
|
var data, i;
|
307
|
+
|
269
308
|
if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
|
270
309
|
data = imgArray;
|
271
310
|
} else if (!inverseDecode) {
|
@@ -274,28 +313,34 @@ var PDFImage = function PDFImageClosure() {
|
|
274
313
|
} else {
|
275
314
|
data = new Uint8ClampedArray(computedLength);
|
276
315
|
data.set(imgArray);
|
316
|
+
|
277
317
|
for (i = actualLength; i < computedLength; i++) {
|
278
318
|
data[i] = 0xff;
|
279
319
|
}
|
280
320
|
}
|
321
|
+
|
281
322
|
if (inverseDecode) {
|
282
323
|
for (i = 0; i < actualLength; i++) {
|
283
324
|
data[i] ^= 0xFF;
|
284
325
|
}
|
285
326
|
}
|
327
|
+
|
286
328
|
return {
|
287
329
|
data: data,
|
288
330
|
width: width,
|
289
331
|
height: height
|
290
332
|
};
|
291
333
|
};
|
334
|
+
|
292
335
|
PDFImage.prototype = {
|
293
336
|
get drawWidth() {
|
294
337
|
return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);
|
295
338
|
},
|
339
|
+
|
296
340
|
get drawHeight() {
|
297
341
|
return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);
|
298
342
|
},
|
343
|
+
|
299
344
|
decodeBuffer: function decodeBuffer(buffer) {
|
300
345
|
var bpc = this.bpc;
|
301
346
|
var numComps = this.numComps;
|
@@ -303,13 +348,17 @@ var PDFImage = function PDFImageClosure() {
|
|
303
348
|
var decodeCoefficients = this.decodeCoefficients;
|
304
349
|
var max = (1 << bpc) - 1;
|
305
350
|
var i, ii;
|
351
|
+
|
306
352
|
if (bpc === 1) {
|
307
353
|
for (i = 0, ii = buffer.length; i < ii; i++) {
|
308
354
|
buffer[i] = +!buffer[i];
|
309
355
|
}
|
356
|
+
|
310
357
|
return;
|
311
358
|
}
|
359
|
+
|
312
360
|
var index = 0;
|
361
|
+
|
313
362
|
for (i = 0, ii = this.width * this.height; i < ii; i++) {
|
314
363
|
for (var j = 0; j < numComps; j++) {
|
315
364
|
buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);
|
@@ -319,9 +368,11 @@ var PDFImage = function PDFImageClosure() {
|
|
319
368
|
},
|
320
369
|
getComponents: function getComponents(buffer) {
|
321
370
|
var bpc = this.bpc;
|
371
|
+
|
322
372
|
if (bpc === 8) {
|
323
373
|
return buffer;
|
324
374
|
}
|
375
|
+
|
325
376
|
var width = this.width;
|
326
377
|
var height = this.height;
|
327
378
|
var numComps = this.numComps;
|
@@ -333,11 +384,14 @@ var PDFImage = function PDFImageClosure() {
|
|
333
384
|
var i = 0,
|
334
385
|
ii,
|
335
386
|
buf;
|
387
|
+
|
336
388
|
if (bpc === 1) {
|
337
389
|
var mask, loop1End, loop2End;
|
390
|
+
|
338
391
|
for (var j = 0; j < height; j++) {
|
339
392
|
loop1End = i + (rowComps & ~7);
|
340
393
|
loop2End = i + rowComps;
|
394
|
+
|
341
395
|
while (i < loop1End) {
|
342
396
|
buf = buffer[bufferPos++];
|
343
397
|
output[i] = buf >> 7 & 1;
|
@@ -350,9 +404,11 @@ var PDFImage = function PDFImageClosure() {
|
|
350
404
|
output[i + 7] = buf & 1;
|
351
405
|
i += 8;
|
352
406
|
}
|
407
|
+
|
353
408
|
if (i < loop2End) {
|
354
409
|
buf = buffer[bufferPos++];
|
355
410
|
mask = 128;
|
411
|
+
|
356
412
|
while (i < loop2End) {
|
357
413
|
output[i++] = +!!(buf & mask);
|
358
414
|
mask >>= 1;
|
@@ -362,15 +418,18 @@ var PDFImage = function PDFImageClosure() {
|
|
362
418
|
} else {
|
363
419
|
var bits = 0;
|
364
420
|
buf = 0;
|
421
|
+
|
365
422
|
for (i = 0, ii = length; i < ii; ++i) {
|
366
423
|
if (i % rowComps === 0) {
|
367
424
|
buf = 0;
|
368
425
|
bits = 0;
|
369
426
|
}
|
427
|
+
|
370
428
|
while (bits < bpc) {
|
371
429
|
buf = buf << 8 | buffer[bufferPos++];
|
372
430
|
bits += 8;
|
373
431
|
}
|
432
|
+
|
374
433
|
var remainingBits = bits - bpc;
|
375
434
|
var value = buf >> remainingBits;
|
376
435
|
output[i] = value < 0 ? 0 : value > max ? max : value;
|
@@ -378,17 +437,20 @@ var PDFImage = function PDFImageClosure() {
|
|
378
437
|
bits = remainingBits;
|
379
438
|
}
|
380
439
|
}
|
440
|
+
|
381
441
|
return output;
|
382
442
|
},
|
383
443
|
fillOpacity: function fillOpacity(rgbaBuf, width, height, actualHeight, image) {
|
384
444
|
var smask = this.smask;
|
385
445
|
var mask = this.mask;
|
386
446
|
var alphaBuf, sw, sh, i, ii, j;
|
447
|
+
|
387
448
|
if (smask) {
|
388
449
|
sw = smask.width;
|
389
450
|
sh = smask.height;
|
390
451
|
alphaBuf = new Uint8ClampedArray(sw * sh);
|
391
452
|
smask.fillGrayBuffer(alphaBuf);
|
453
|
+
|
392
454
|
if (sw !== width || sh !== height) {
|
393
455
|
alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
|
394
456
|
}
|
@@ -399,32 +461,39 @@ var PDFImage = function PDFImageClosure() {
|
|
399
461
|
alphaBuf = new Uint8ClampedArray(sw * sh);
|
400
462
|
mask.numComps = 1;
|
401
463
|
mask.fillGrayBuffer(alphaBuf);
|
464
|
+
|
402
465
|
for (i = 0, ii = sw * sh; i < ii; ++i) {
|
403
466
|
alphaBuf[i] = 255 - alphaBuf[i];
|
404
467
|
}
|
468
|
+
|
405
469
|
if (sw !== width || sh !== height) {
|
406
470
|
alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
|
407
471
|
}
|
408
472
|
} else if (Array.isArray(mask)) {
|
409
473
|
alphaBuf = new Uint8ClampedArray(width * height);
|
410
474
|
var numComps = this.numComps;
|
475
|
+
|
411
476
|
for (i = 0, ii = width * height; i < ii; ++i) {
|
412
477
|
var opacity = 0;
|
413
478
|
var imageOffset = i * numComps;
|
479
|
+
|
414
480
|
for (j = 0; j < numComps; ++j) {
|
415
481
|
var color = image[imageOffset + j];
|
416
482
|
var maskOffset = j * 2;
|
483
|
+
|
417
484
|
if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
|
418
485
|
opacity = 255;
|
419
486
|
break;
|
420
487
|
}
|
421
488
|
}
|
489
|
+
|
422
490
|
alphaBuf[i] = opacity;
|
423
491
|
}
|
424
492
|
} else {
|
425
493
|
throw new _util.FormatError('Unknown mask format.');
|
426
494
|
}
|
427
495
|
}
|
496
|
+
|
428
497
|
if (alphaBuf) {
|
429
498
|
for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
|
430
499
|
rgbaBuf[j] = alphaBuf[i];
|
@@ -437,22 +506,27 @@ var PDFImage = function PDFImageClosure() {
|
|
437
506
|
},
|
438
507
|
undoPreblend: function undoPreblend(buffer, width, height) {
|
439
508
|
var matte = this.smask && this.smask.matte;
|
509
|
+
|
440
510
|
if (!matte) {
|
441
511
|
return;
|
442
512
|
}
|
513
|
+
|
443
514
|
var matteRgb = this.colorSpace.getRgb(matte, 0);
|
444
515
|
var matteR = matteRgb[0];
|
445
516
|
var matteG = matteRgb[1];
|
446
517
|
var matteB = matteRgb[2];
|
447
518
|
var length = width * height * 4;
|
519
|
+
|
448
520
|
for (var i = 0; i < length; i += 4) {
|
449
521
|
var alpha = buffer[i + 3];
|
522
|
+
|
450
523
|
if (alpha === 0) {
|
451
524
|
buffer[i] = 255;
|
452
525
|
buffer[i + 1] = 255;
|
453
526
|
buffer[i + 2] = 255;
|
454
527
|
continue;
|
455
528
|
}
|
529
|
+
|
456
530
|
var k = 255 / alpha;
|
457
531
|
buffer[i] = (buffer[i] - matteR) * k + matteR;
|
458
532
|
buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
|
@@ -461,7 +535,6 @@ var PDFImage = function PDFImageClosure() {
|
|
461
535
|
},
|
462
536
|
createImageData: function createImageData() {
|
463
537
|
var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
464
|
-
|
465
538
|
var drawWidth = this.drawWidth;
|
466
539
|
var drawHeight = this.drawHeight;
|
467
540
|
var imgData = {
|
@@ -476,16 +549,20 @@ var PDFImage = function PDFImageClosure() {
|
|
476
549
|
var bpc = this.bpc;
|
477
550
|
var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
|
478
551
|
var imgArray;
|
552
|
+
|
479
553
|
if (!forceRGBA) {
|
480
554
|
var kind;
|
555
|
+
|
481
556
|
if (this.colorSpace.name === 'DeviceGray' && bpc === 1) {
|
482
557
|
kind = _util.ImageKind.GRAYSCALE_1BPP;
|
483
558
|
} else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 && !this.needsDecode) {
|
484
559
|
kind = _util.ImageKind.RGB_24BPP;
|
485
560
|
}
|
561
|
+
|
486
562
|
if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {
|
487
563
|
imgData.kind = kind;
|
488
564
|
imgArray = this.getImageBytes(originalHeight * rowBytes);
|
565
|
+
|
489
566
|
if (this.image instanceof _stream.DecodeStream) {
|
490
567
|
imgData.data = imgArray;
|
491
568
|
} else {
|
@@ -493,20 +570,26 @@ var PDFImage = function PDFImageClosure() {
|
|
493
570
|
newArray.set(imgArray);
|
494
571
|
imgData.data = newArray;
|
495
572
|
}
|
573
|
+
|
496
574
|
if (this.needsDecode) {
|
497
575
|
(0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, 'PDFImage.createImageData: The image must be grayscale.');
|
498
576
|
var buffer = imgData.data;
|
577
|
+
|
499
578
|
for (var i = 0, ii = buffer.length; i < ii; i++) {
|
500
579
|
buffer[i] ^= 0xff;
|
501
580
|
}
|
502
581
|
}
|
582
|
+
|
503
583
|
return imgData;
|
504
584
|
}
|
585
|
+
|
505
586
|
if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
|
506
587
|
var imageLength = originalHeight * rowBytes;
|
588
|
+
|
507
589
|
switch (this.colorSpace.name) {
|
508
590
|
case 'DeviceGray':
|
509
591
|
imageLength *= 3;
|
592
|
+
|
510
593
|
case 'DeviceRGB':
|
511
594
|
case 'DeviceCMYK':
|
512
595
|
imgData.kind = _util.ImageKind.RGB_24BPP;
|
@@ -515,10 +598,12 @@ var PDFImage = function PDFImageClosure() {
|
|
515
598
|
}
|
516
599
|
}
|
517
600
|
}
|
601
|
+
|
518
602
|
imgArray = this.getImageBytes(originalHeight * rowBytes);
|
519
603
|
var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
|
520
604
|
var comps = this.getComponents(imgArray);
|
521
605
|
var alpha01, maybeUndoPreblend;
|
606
|
+
|
522
607
|
if (!forceRGBA && !this.smask && !this.mask) {
|
523
608
|
imgData.kind = _util.ImageKind.RGB_24BPP;
|
524
609
|
imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
|
@@ -531,20 +616,26 @@ var PDFImage = function PDFImageClosure() {
|
|
531
616
|
maybeUndoPreblend = true;
|
532
617
|
this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);
|
533
618
|
}
|
619
|
+
|
534
620
|
if (this.needsDecode) {
|
535
621
|
this.decodeBuffer(comps);
|
536
622
|
}
|
623
|
+
|
537
624
|
this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
|
625
|
+
|
538
626
|
if (maybeUndoPreblend) {
|
539
627
|
this.undoPreblend(imgData.data, drawWidth, actualHeight);
|
540
628
|
}
|
629
|
+
|
541
630
|
return imgData;
|
542
631
|
},
|
543
632
|
fillGrayBuffer: function fillGrayBuffer(buffer) {
|
544
633
|
var numComps = this.numComps;
|
634
|
+
|
545
635
|
if (numComps !== 1) {
|
546
|
-
throw new _util.FormatError(
|
636
|
+
throw new _util.FormatError("Reading gray scale from a color image: ".concat(numComps));
|
547
637
|
}
|
638
|
+
|
548
639
|
var width = this.width;
|
549
640
|
var height = this.height;
|
550
641
|
var bpc = this.bpc;
|
@@ -552,8 +643,10 @@ var PDFImage = function PDFImageClosure() {
|
|
552
643
|
var imgArray = this.getImageBytes(height * rowBytes);
|
553
644
|
var comps = this.getComponents(imgArray);
|
554
645
|
var i, length;
|
646
|
+
|
555
647
|
if (bpc === 1) {
|
556
648
|
length = width * height;
|
649
|
+
|
557
650
|
if (this.needsDecode) {
|
558
651
|
for (i = 0; i < length; ++i) {
|
559
652
|
buffer[i] = comps[i] - 1 & 255;
|
@@ -563,20 +656,23 @@ var PDFImage = function PDFImageClosure() {
|
|
563
656
|
buffer[i] = -comps[i] & 255;
|
564
657
|
}
|
565
658
|
}
|
659
|
+
|
566
660
|
return;
|
567
661
|
}
|
662
|
+
|
568
663
|
if (this.needsDecode) {
|
569
664
|
this.decodeBuffer(comps);
|
570
665
|
}
|
666
|
+
|
571
667
|
length = width * height;
|
572
668
|
var scale = 255 / ((1 << bpc) - 1);
|
669
|
+
|
573
670
|
for (i = 0; i < length; ++i) {
|
574
671
|
buffer[i] = scale * comps[i];
|
575
672
|
}
|
576
673
|
},
|
577
674
|
getImageBytes: function getImageBytes(length, drawWidth, drawHeight) {
|
578
675
|
var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
579
|
-
|
580
676
|
this.image.reset();
|
581
677
|
this.image.drawWidth = drawWidth || this.width;
|
582
678
|
this.image.drawHeight = drawHeight || this.height;
|
@@ -586,4 +682,5 @@ var PDFImage = function PDFImageClosure() {
|
|
586
682
|
};
|
587
683
|
return PDFImage;
|
588
684
|
}();
|
685
|
+
|
589
686
|
exports.PDFImage = PDFImage;
|