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.

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