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.

Files changed (185) hide show
  1. package/README.md +4 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +6499 -17971
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +22 -1
  6. package/build/pdf.worker.entry.js +5 -3
  7. package/build/pdf.worker.js +19303 -29896
  8. package/build/pdf.worker.js.map +1 -1
  9. package/build/pdf.worker.min.js +22 -1
  10. package/es5/build/pdf.js +25473 -0
  11. package/es5/build/pdf.js.map +1 -0
  12. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  13. package/es5/build/pdf.worker.js +57878 -0
  14. package/es5/build/pdf.worker.js.map +1 -0
  15. package/es5/web/images/annotation-check.svg +11 -0
  16. package/es5/web/images/annotation-comment.svg +16 -0
  17. package/es5/web/images/annotation-help.svg +26 -0
  18. package/es5/web/images/annotation-insert.svg +10 -0
  19. package/es5/web/images/annotation-key.svg +11 -0
  20. package/es5/web/images/annotation-newparagraph.svg +11 -0
  21. package/es5/web/images/annotation-noicon.svg +7 -0
  22. package/es5/web/images/annotation-note.svg +42 -0
  23. package/es5/web/images/annotation-paragraph.svg +16 -0
  24. package/es5/web/images/loading-icon.gif +0 -0
  25. package/es5/web/images/shadow.png +0 -0
  26. package/es5/web/images/texture.png +0 -0
  27. package/es5/web/pdf_viewer.css +407 -0
  28. package/es5/web/pdf_viewer.js +7757 -0
  29. package/es5/web/pdf_viewer.js.map +1 -0
  30. package/image_decoders/pdf.image_decoders.js +1333 -4839
  31. package/image_decoders/pdf.image_decoders.js.map +1 -1
  32. package/image_decoders/pdf.image_decoders.min.js +22 -1
  33. package/lib/README.md +7 -0
  34. package/lib/core/annotation.js +683 -1066
  35. package/lib/core/arithmetic_decoder.js +81 -97
  36. package/lib/core/bidi.js +54 -46
  37. package/lib/core/ccitt.js +88 -81
  38. package/lib/core/ccitt_stream.js +15 -14
  39. package/lib/core/cff_parser.js +196 -193
  40. package/lib/core/charsets.js +4 -4
  41. package/lib/core/chunked_stream.js +441 -569
  42. package/lib/core/cmap.js +220 -279
  43. package/lib/core/colorspace.js +699 -863
  44. package/lib/core/core_utils.js +59 -80
  45. package/lib/core/crypto.js +379 -437
  46. package/lib/core/document.js +564 -673
  47. package/lib/core/encodings.js +15 -15
  48. package/lib/core/evaluator.js +983 -889
  49. package/lib/core/font_renderer.js +128 -171
  50. package/lib/core/fonts.js +451 -400
  51. package/lib/core/function.js +289 -285
  52. package/lib/core/glyphlist.js +4527 -4527
  53. package/lib/core/image.js +138 -117
  54. package/lib/core/image_utils.js +46 -63
  55. package/lib/core/jbig2.js +324 -332
  56. package/lib/core/jbig2_stream.js +18 -17
  57. package/lib/core/jpeg_stream.js +133 -24
  58. package/lib/core/jpg.js +238 -210
  59. package/lib/core/jpx.js +158 -157
  60. package/lib/core/jpx_stream.js +28 -28
  61. package/lib/core/metrics.js +2928 -2928
  62. package/lib/core/murmurhash3.js +87 -102
  63. package/lib/core/obj.js +1111 -1302
  64. package/lib/core/operator_list.js +55 -42
  65. package/lib/core/parser.js +956 -987
  66. package/lib/core/pattern.js +69 -69
  67. package/lib/core/pdf_manager.js +149 -316
  68. package/lib/core/primitives.js +45 -77
  69. package/lib/core/ps_parser.js +175 -214
  70. package/lib/core/standard_fonts.js +237 -236
  71. package/lib/core/stream.js +83 -77
  72. package/lib/core/type1_parser.js +78 -68
  73. package/lib/core/unicode.js +1654 -1654
  74. package/lib/core/worker.js +148 -196
  75. package/lib/core/worker_stream.js +101 -210
  76. package/lib/display/annotation_layer.js +733 -1155
  77. package/lib/display/api.js +1539 -1928
  78. package/lib/display/api_compatibility.js +10 -8
  79. package/lib/display/canvas.js +159 -158
  80. package/lib/display/content_disposition.js +36 -55
  81. package/lib/display/display_utils.js +298 -551
  82. package/lib/display/fetch_stream.js +181 -305
  83. package/lib/display/font_loader.js +273 -416
  84. package/lib/display/metadata.js +86 -98
  85. package/lib/display/network.js +376 -511
  86. package/lib/display/network_utils.js +20 -19
  87. package/lib/display/node_stream.js +276 -460
  88. package/lib/display/pattern_helper.js +76 -44
  89. package/lib/display/svg.js +1137 -1405
  90. package/lib/display/text_layer.js +75 -82
  91. package/lib/display/transport_stream.js +236 -374
  92. package/lib/display/webgl.js +70 -83
  93. package/lib/display/worker_options.js +3 -3
  94. package/lib/display/xml_parser.js +303 -392
  95. package/lib/examples/node/domstubs.js +37 -37
  96. package/lib/pdf.js +22 -21
  97. package/lib/pdf.worker.js +5 -5
  98. package/lib/shared/compatibility.js +2 -251
  99. package/lib/shared/is_node.js +7 -6
  100. package/lib/shared/message_handler.js +222 -194
  101. package/lib/shared/util.js +269 -405
  102. package/lib/test/unit/annotation_spec.js +1089 -1014
  103. package/lib/test/unit/api_spec.js +617 -544
  104. package/lib/test/unit/bidi_spec.js +7 -7
  105. package/lib/test/unit/cff_parser_spec.js +63 -62
  106. package/lib/test/unit/clitests_helper.js +7 -9
  107. package/lib/test/unit/cmap_spec.js +84 -86
  108. package/lib/test/unit/colorspace_spec.js +154 -154
  109. package/lib/test/unit/core_utils_spec.js +125 -105
  110. package/lib/test/unit/crypto_spec.js +181 -181
  111. package/lib/test/unit/custom_spec.js +22 -24
  112. package/lib/test/unit/display_svg_spec.js +35 -36
  113. package/lib/test/unit/display_utils_spec.js +139 -149
  114. package/lib/test/unit/document_spec.js +16 -16
  115. package/lib/test/unit/encodings_spec.js +12 -34
  116. package/lib/test/unit/evaluator_spec.js +81 -95
  117. package/lib/test/unit/fetch_stream_spec.js +30 -30
  118. package/lib/test/unit/function_spec.js +206 -204
  119. package/lib/test/unit/jasmine-boot.js +48 -32
  120. package/lib/test/unit/message_handler_spec.js +172 -162
  121. package/lib/test/unit/metadata_spec.js +69 -69
  122. package/lib/test/unit/murmurhash3_spec.js +12 -12
  123. package/lib/test/unit/network_spec.js +12 -12
  124. package/lib/test/unit/network_utils_spec.js +152 -152
  125. package/lib/test/unit/node_stream_spec.js +74 -90
  126. package/lib/test/unit/parser_spec.js +107 -113
  127. package/lib/test/unit/pdf_find_controller_spec.js +55 -86
  128. package/lib/test/unit/pdf_find_utils_spec.js +32 -32
  129. package/lib/test/unit/pdf_history_spec.js +32 -32
  130. package/lib/test/unit/primitives_spec.js +117 -115
  131. package/lib/test/unit/stream_spec.js +16 -14
  132. package/lib/test/unit/test_utils.js +119 -285
  133. package/lib/test/unit/testreporter.js +19 -19
  134. package/lib/test/unit/type1_parser_spec.js +41 -41
  135. package/lib/test/unit/ui_utils_spec.js +318 -426
  136. package/lib/test/unit/unicode_spec.js +42 -42
  137. package/lib/test/unit/util_spec.js +122 -143
  138. package/lib/web/annotation_layer_builder.js +66 -103
  139. package/lib/web/app.js +1166 -1196
  140. package/lib/web/app_options.js +61 -77
  141. package/lib/web/base_viewer.js +804 -850
  142. package/lib/web/chromecom.js +164 -249
  143. package/lib/web/debugger.js +149 -205
  144. package/lib/web/download_manager.js +38 -57
  145. package/lib/web/firefox_print_service.js +35 -30
  146. package/lib/web/firefoxcom.js +175 -374
  147. package/lib/web/genericcom.js +26 -108
  148. package/lib/web/genericl10n.js +24 -153
  149. package/lib/web/grab_to_pan.js +30 -30
  150. package/lib/web/interfaces.js +80 -258
  151. package/lib/web/overlay_manager.js +70 -246
  152. package/lib/web/password_prompt.js +38 -64
  153. package/lib/web/pdf_attachment_viewer.js +105 -130
  154. package/lib/web/pdf_cursor_tools.js +75 -102
  155. package/lib/web/pdf_document_properties.js +227 -376
  156. package/lib/web/pdf_find_bar.js +137 -171
  157. package/lib/web/pdf_find_controller.js +492 -549
  158. package/lib/web/pdf_find_utils.js +13 -13
  159. package/lib/web/pdf_history.js +395 -406
  160. package/lib/web/pdf_link_service.js +302 -349
  161. package/lib/web/pdf_outline_viewer.js +148 -209
  162. package/lib/web/pdf_page_view.js +449 -507
  163. package/lib/web/pdf_presentation_mode.js +304 -357
  164. package/lib/web/pdf_print_service.js +90 -104
  165. package/lib/web/pdf_rendering_queue.js +87 -108
  166. package/lib/web/pdf_sidebar.js +264 -304
  167. package/lib/web/pdf_sidebar_resizer.js +92 -119
  168. package/lib/web/pdf_single_page_viewer.js +77 -126
  169. package/lib/web/pdf_thumbnail_view.js +276 -297
  170. package/lib/web/pdf_thumbnail_viewer.js +186 -206
  171. package/lib/web/pdf_viewer.component.js +20 -21
  172. package/lib/web/pdf_viewer.js +55 -115
  173. package/lib/web/preferences.js +66 -273
  174. package/lib/web/secondary_toolbar.js +164 -196
  175. package/lib/web/text_layer_builder.js +284 -317
  176. package/lib/web/toolbar.js +216 -211
  177. package/lib/web/ui_utils.js +303 -404
  178. package/lib/web/view_history.js +49 -222
  179. package/lib/web/viewer_compatibility.js +7 -5
  180. package/package.json +2 -9
  181. package/web/pdf_viewer.css +25 -18
  182. package/web/pdf_viewer.js +3481 -4764
  183. package/web/pdf_viewer.js.map +1 -1
  184. package/webpack.js +14 -5
  185. 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 2019 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.
@@ -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)["catch"](function (reason) {
53
- (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));
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
- 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;
64
63
  }
65
64
 
66
65
  function resizeImageMask(src, bpc, w1, h1, w2, h2) {
67
66
  var length = w2 * h2;
68
- 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
+
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(_ref) {
96
- var xref = _ref.xref,
97
- res = _ref.res,
98
- image = _ref.image,
99
- _ref$isInline = _ref.isInline,
100
- isInline = _ref$isInline === void 0 ? false : _ref$isInline,
101
- _ref$smask = _ref.smask,
102
- smask = _ref$smask === void 0 ? null : _ref$smask,
103
- _ref$mask = _ref.mask,
104
- mask = _ref$mask === void 0 ? null : _ref$mask,
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
- var filter = dict.get('Filter');
115
+ const filter = dict.get("Filter");
111
116
 
112
117
  if ((0, _primitives.isName)(filter)) {
113
118
  switch (filter.name) {
114
- case 'JPXDecode':
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 'JBIG2Decode':
129
+ case "JBIG2Decode":
125
130
  image.bitsPerComponent = 1;
126
131
  image.numComps = 1;
127
132
  break;
128
133
  }
129
134
  }
130
135
 
131
- var width = dict.get('Width', 'W');
132
- var height = dict.get('Height', 'H');
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)('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.");
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("Invalid image width: ".concat(width, " or ") + "height: ".concat(height));
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('Interpolate', 'I') || false;
147
- this.imageMask = dict.get('ImageMask', 'IM') || false;
148
- 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;
149
154
  var bitsPerComponent = image.bitsPerComponent;
150
155
 
151
156
  if (!bitsPerComponent) {
152
- bitsPerComponent = dict.get('BitsPerComponent', 'BPC');
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("Bits per component missing in image: ".concat(this.imageMask));
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('ColorSpace', 'CS');
171
+ var colorSpace = dict.get("ColorSpace", "CS");
167
172
 
168
173
  if (!colorSpace) {
169
- (0, _util.info)('JPX images (which do not require color spaces)');
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('DeviceGray');
178
+ colorSpace = _primitives.Name.get("DeviceGray");
174
179
  break;
175
180
 
176
181
  case 3:
177
- colorSpace = _primitives.Name.get('DeviceRGB');
182
+ colorSpace = _primitives.Name.get("DeviceRGB");
178
183
  break;
179
184
 
180
185
  case 4:
181
- colorSpace = _primitives.Name.get('DeviceCMYK');
186
+ colorSpace = _primitives.Name.get("DeviceCMYK");
182
187
  break;
183
188
 
184
189
  default:
185
- throw new Error("JPX images with ".concat(image.numComps, " ") + 'color components not supported.');
190
+ throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
186
191
  }
187
192
  }
188
193
 
189
- var resources = isInline ? res : null;
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('Decode', 'D');
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
- var isIndexed = this.colorSpace && this.colorSpace.name === 'Indexed';
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: xref,
215
- res: res,
219
+ xref,
220
+ res,
216
221
  image: smask,
217
- isInline: isInline,
218
- pdfFunctionFactory: 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('ImageMask', 'IM');
228
+ imageMask = maskDict.get("ImageMask", "IM");
224
229
 
225
230
  if (!imageMask) {
226
- (0, _util.warn)('Ignoring /Mask in image without /ImageMask.');
231
+ (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
227
232
  } else {
228
233
  this.mask = new PDFImage({
229
- xref: xref,
230
- res: res,
234
+ xref,
235
+ res,
231
236
  image: mask,
232
- isInline: isInline,
237
+ isInline,
233
238
  isMask: true,
234
- pdfFunctionFactory: 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 (_ref2) {
244
- var handler = _ref2.handler,
245
- xref = _ref2.xref,
246
- res = _ref2.res,
247
- image = _ref2.image,
248
- _ref2$isInline = _ref2.isInline,
249
- isInline = _ref2$isInline === void 0 ? false : _ref2$isInline,
250
- _ref2$nativeDecoder = _ref2.nativeDecoder,
251
- nativeDecoder = _ref2$nativeDecoder === void 0 ? null : _ref2$nativeDecoder,
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('SMask');
257
- var mask = image.dict.get('Mask');
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)('Unsupported mask format.');
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 (_ref3) {
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: xref,
287
- res: res,
285
+ xref,
286
+ res,
288
287
  image: imageData,
289
- isInline: isInline,
288
+ isInline,
290
289
  smask: smaskData,
291
290
  mask: maskData,
292
- pdfFunctionFactory: pdfFunctionFactory
291
+ pdfFunctionFactory
293
292
  });
294
293
  });
295
294
  };
296
295
 
297
- PDFImage.createMask = function (_ref5) {
298
- var imgArray = _ref5.imgArray,
299
- width = _ref5.width,
300
- height = _ref5.height,
301
- imageIsFromDecodeStream = _ref5.imageIsFromDecodeStream,
302
- inverseDecode = _ref5.inverseDecode;
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] ^= 0xFF;
324
+ data[i] ^= 0xff;
325
325
  }
326
326
  }
327
327
 
328
328
  return {
329
- data: data,
330
- width: width,
331
- height: 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: function decodeBuffer(buffer) {
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
- getComponents: function getComponents(buffer) {
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
- 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
+
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
- var value = buf >> remainingBits;
435
- 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;
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
- fillOpacity: function fillOpacity(rgbaBuf, width, height, actualHeight, image) {
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('Unknown mask format.');
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
- undoPreblend: function undoPreblend(buffer, width, height) {
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
- createImageData: function createImageData() {
537
- var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
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 === 'DeviceGray' && bpc === 1) {
575
+ if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
557
576
  kind = _util.ImageKind.GRAYSCALE_1BPP;
558
- } else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 && !this.needsDecode) {
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, 'PDFImage.createImageData: The image must be grayscale.');
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
- var imageLength = originalHeight * rowBytes;
606
+ let imageLength = originalHeight * rowBytes;
588
607
 
589
608
  switch (this.colorSpace.name) {
590
- case 'DeviceGray':
609
+ case "DeviceGray":
591
610
  imageLength *= 3;
592
611
 
593
- case 'DeviceRGB':
594
- case 'DeviceCMYK':
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
- fillGrayBuffer: function fillGrayBuffer(buffer) {
651
+
652
+ fillGrayBuffer(buffer) {
633
653
  var numComps = this.numComps;
634
654
 
635
655
  if (numComps !== 1) {
636
- throw new _util.FormatError("Reading gray scale from a color image: ".concat(numComps));
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
- getImageBytes: function getImageBytes(length, drawWidth, drawHeight) {
675
- var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
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
  }();
@@ -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 2019 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.
@@ -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
- _createClass(NativeImageDecoder, [{
62
- key: "canDecode",
63
- value: function canDecode(image) {
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
- if (dict.has('DecodeParms') || dict.has('DP')) {
85
- return false;
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
- var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory);
67
+ static isSupported(image, xref, res, pdfFunctionFactory) {
68
+ const dict = image.dict;
89
69
 
90
- return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && cs.isDefaultDecode(dict.getArray('Decode', 'D'));
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
- if (dict.has('DecodeParms') || dict.has('DP')) {
98
- return false;
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
- var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory);
79
+ static isDecodable(image, xref, res, pdfFunctionFactory) {
80
+ const dict = image.dict;
102
81
 
103
- var bpc = dict.get('BitsPerComponent', 'BPC') || 1;
104
- return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D'), bpc);
82
+ if (dict.has("DecodeParms") || dict.has("DP")) {
83
+ return false;
105
84
  }
106
- }]);
107
85
 
108
- return NativeImageDecoder;
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;