pdfjs-dist 2.0.487 → 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.

Files changed (161) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +15564 -9476
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +46644 -36309
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/external/url/url-lib.js +627 -0
  9. package/image_decoders/pdf.image_decoders.js +11430 -0
  10. package/image_decoders/pdf.image_decoders.js.map +1 -0
  11. package/image_decoders/pdf.image_decoders.min.js +1 -0
  12. package/lib/core/annotation.js +406 -131
  13. package/lib/core/arithmetic_decoder.js +275 -245
  14. package/lib/core/bidi.js +65 -6
  15. package/lib/core/ccitt.js +173 -18
  16. package/lib/core/ccitt_stream.js +15 -6
  17. package/lib/core/cff_parser.js +376 -53
  18. package/lib/core/charsets.js +5 -4
  19. package/lib/core/chunked_stream.js +387 -149
  20. package/lib/core/cmap.js +310 -75
  21. package/lib/core/colorspace.js +874 -594
  22. package/lib/core/crypto.js +290 -45
  23. package/lib/core/document.js +545 -260
  24. package/lib/core/encodings.js +19 -10
  25. package/lib/core/evaluator.js +725 -147
  26. package/lib/core/font_renderer.js +360 -91
  27. package/lib/core/fonts.js +791 -186
  28. package/lib/core/function.js +284 -71
  29. package/lib/core/glyphlist.js +3 -2
  30. package/lib/core/image.js +168 -61
  31. package/lib/core/jbig2.js +479 -66
  32. package/lib/core/jbig2_stream.js +19 -8
  33. package/lib/core/jpeg_stream.js +38 -13
  34. package/lib/core/jpg.js +252 -29
  35. package/lib/core/jpx.js +396 -6
  36. package/lib/core/jpx_stream.js +18 -6
  37. package/lib/core/metrics.js +4 -4
  38. package/lib/core/murmurhash3.js +24 -6
  39. package/lib/core/obj.js +1137 -475
  40. package/lib/core/operator_list.js +108 -6
  41. package/lib/core/parser.js +321 -68
  42. package/lib/core/pattern.js +145 -13
  43. package/lib/core/pdf_manager.js +321 -133
  44. package/lib/core/primitives.js +75 -22
  45. package/lib/core/ps_parser.js +134 -45
  46. package/lib/core/standard_fonts.js +10 -10
  47. package/lib/core/stream.js +313 -34
  48. package/lib/core/type1_parser.js +143 -13
  49. package/lib/core/unicode.js +31 -4
  50. package/lib/core/worker.js +210 -66
  51. package/lib/display/annotation_layer.js +361 -123
  52. package/lib/display/api.js +1454 -729
  53. package/lib/display/api_compatibility.js +11 -13
  54. package/lib/display/canvas.js +324 -29
  55. package/lib/display/content_disposition.js +83 -32
  56. package/lib/display/dom_utils.js +226 -41
  57. package/lib/display/fetch_stream.js +208 -84
  58. package/lib/display/font_loader.js +465 -236
  59. package/lib/display/metadata.js +38 -16
  60. package/lib/display/network.js +216 -51
  61. package/lib/display/network_utils.js +32 -19
  62. package/lib/display/node_stream.js +352 -169
  63. package/lib/display/pattern_helper.js +58 -7
  64. package/lib/display/svg.js +242 -29
  65. package/lib/display/text_layer.js +132 -18
  66. package/lib/display/transport_stream.js +171 -42
  67. package/lib/display/webgl.js +64 -18
  68. package/lib/display/worker_options.js +5 -4
  69. package/lib/display/xml_parser.js +166 -53
  70. package/lib/examples/node/domstubs.js +57 -4
  71. package/lib/pdf.js +21 -4
  72. package/lib/pdf.worker.js +5 -3
  73. package/lib/shared/compatibility.js +158 -564
  74. package/lib/shared/global_scope.js +2 -2
  75. package/lib/shared/is_node.js +4 -4
  76. package/lib/shared/message_handler.js +521 -0
  77. package/lib/shared/streams_polyfill.js +21 -17
  78. package/lib/shared/url_polyfill.js +56 -0
  79. package/lib/shared/util.js +295 -650
  80. package/lib/test/unit/annotation_spec.js +629 -345
  81. package/lib/test/unit/api_spec.js +555 -253
  82. package/lib/test/unit/bidi_spec.js +7 -7
  83. package/lib/test/unit/cff_parser_spec.js +40 -11
  84. package/lib/test/unit/clitests_helper.js +9 -7
  85. package/lib/test/unit/cmap_spec.js +80 -26
  86. package/lib/test/unit/colorspace_spec.js +99 -52
  87. package/lib/test/unit/crypto_spec.js +17 -5
  88. package/lib/test/unit/custom_spec.js +41 -53
  89. package/lib/test/unit/display_svg_spec.js +33 -17
  90. package/lib/test/unit/document_spec.js +3 -3
  91. package/lib/test/unit/dom_utils_spec.js +9 -9
  92. package/lib/test/unit/encodings_spec.js +25 -45
  93. package/lib/test/unit/evaluator_spec.js +34 -9
  94. package/lib/test/unit/function_spec.js +17 -5
  95. package/lib/test/unit/jasmine-boot.js +31 -18
  96. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  97. package/lib/test/unit/metadata_spec.js +71 -11
  98. package/lib/test/unit/murmurhash3_spec.js +3 -3
  99. package/lib/test/unit/network_spec.js +20 -5
  100. package/lib/test/unit/network_utils_spec.js +41 -14
  101. package/lib/test/unit/node_stream_spec.js +51 -27
  102. package/lib/test/unit/parser_spec.js +35 -8
  103. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  104. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  105. package/lib/test/unit/pdf_history_spec.js +21 -9
  106. package/lib/test/unit/primitives_spec.js +24 -4
  107. package/lib/test/unit/stream_spec.js +12 -4
  108. package/lib/test/unit/test_utils.js +90 -27
  109. package/lib/test/unit/testreporter.js +21 -3
  110. package/lib/test/unit/type1_parser_spec.js +8 -6
  111. package/lib/test/unit/ui_utils_spec.js +452 -14
  112. package/lib/test/unit/unicode_spec.js +14 -11
  113. package/lib/test/unit/util_spec.js +131 -9
  114. package/lib/web/annotation_layer_builder.js +39 -22
  115. package/lib/web/app.js +1240 -582
  116. package/lib/web/app_options.js +71 -41
  117. package/lib/web/base_viewer.js +508 -179
  118. package/lib/web/chromecom.js +261 -117
  119. package/lib/web/debugger.js +166 -22
  120. package/lib/web/download_manager.js +31 -13
  121. package/lib/web/firefox_print_service.js +17 -9
  122. package/lib/web/firefoxcom.js +283 -79
  123. package/lib/web/genericcom.js +89 -30
  124. package/lib/web/genericl10n.js +142 -30
  125. package/lib/web/grab_to_pan.js +26 -4
  126. package/lib/web/interfaces.js +170 -47
  127. package/lib/web/overlay_manager.js +235 -85
  128. package/lib/web/password_prompt.js +21 -13
  129. package/lib/web/pdf_attachment_viewer.js +38 -18
  130. package/lib/web/pdf_cursor_tools.js +39 -16
  131. package/lib/web/pdf_document_properties.js +80 -30
  132. package/lib/web/pdf_find_bar.js +84 -40
  133. package/lib/web/pdf_find_controller.js +495 -184
  134. package/lib/web/pdf_find_utils.js +111 -0
  135. package/lib/web/pdf_history.js +190 -53
  136. package/lib/web/pdf_link_service.js +137 -76
  137. package/lib/web/pdf_outline_viewer.js +73 -22
  138. package/lib/web/pdf_page_view.js +196 -63
  139. package/lib/web/pdf_presentation_mode.js +99 -34
  140. package/lib/web/pdf_print_service.js +57 -11
  141. package/lib/web/pdf_rendering_queue.js +27 -5
  142. package/lib/web/pdf_sidebar.js +120 -67
  143. package/lib/web/pdf_sidebar_resizer.js +42 -16
  144. package/lib/web/pdf_single_page_viewer.js +74 -66
  145. package/lib/web/pdf_thumbnail_view.js +103 -32
  146. package/lib/web/pdf_thumbnail_viewer.js +64 -24
  147. package/lib/web/pdf_viewer.component.js +112 -32
  148. package/lib/web/pdf_viewer.js +91 -52
  149. package/lib/web/preferences.js +275 -80
  150. package/lib/web/secondary_toolbar.js +165 -40
  151. package/lib/web/text_layer_builder.js +162 -65
  152. package/lib/web/toolbar.js +78 -43
  153. package/lib/web/ui_utils.js +462 -136
  154. package/lib/web/view_history.js +215 -67
  155. package/lib/web/viewer_compatibility.js +4 -13
  156. package/package.json +5 -4
  157. package/web/pdf_viewer.css +58 -1
  158. package/web/pdf_viewer.js +6346 -3919
  159. package/web/pdf_viewer.js.map +1 -1
  160. package/lib/test/unit/fonts_spec.js +0 -81
  161. package/lib/web/dom_events.js +0 -137
@@ -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 2017 Mozilla Foundation
5
+ * Copyright 2018 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,38 +19,41 @@
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.SVGGraphics = undefined;
27
+ exports.SVGGraphics = void 0;
28
28
 
29
- var _util = require('../shared/util');
29
+ var _util = require("../shared/util");
30
30
 
31
- var _dom_utils = require('./dom_utils');
31
+ var _dom_utils = require("./dom_utils");
32
32
 
33
- var _is_node = require('../shared/is_node');
34
-
35
- var _is_node2 = _interopRequireDefault(_is_node);
33
+ var _is_node = _interopRequireDefault(require("../shared/is_node"));
36
34
 
37
35
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
36
 
39
37
  var SVGGraphics = function SVGGraphics() {
40
38
  throw new Error('Not implemented: SVGGraphics');
41
39
  };
40
+
41
+ exports.SVGGraphics = SVGGraphics;
42
42
  {
43
43
  var SVG_DEFAULTS = {
44
44
  fontStyle: 'normal',
45
45
  fontWeight: 'normal',
46
46
  fillColor: '#000000'
47
47
  };
48
+
48
49
  var convertImgDataToPng = function convertImgDataToPngClosure() {
49
50
  var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
50
51
  var CHUNK_WRAPPER_SIZE = 12;
51
52
  var crcTable = new Int32Array(256);
53
+
52
54
  for (var i = 0; i < 256; i++) {
53
55
  var c = i;
56
+
54
57
  for (var h = 0; h < 8; h++) {
55
58
  if (c & 1) {
56
59
  c = 0xedB88320 ^ c >> 1 & 0x7fffffff;
@@ -58,17 +61,22 @@ var SVGGraphics = function SVGGraphics() {
58
61
  c = c >> 1 & 0x7fffffff;
59
62
  }
60
63
  }
64
+
61
65
  crcTable[i] = c;
62
66
  }
67
+
63
68
  function crc32(data, start, end) {
64
69
  var crc = -1;
70
+
65
71
  for (var i = start; i < end; i++) {
66
72
  var a = (crc ^ data[i]) & 0xff;
67
73
  var b = crcTable[a];
68
74
  crc = crc >>> 8 ^ b;
69
75
  }
76
+
70
77
  return crc ^ -1;
71
78
  }
79
+
72
80
  function writePngChunk(type, body, data, offset) {
73
81
  var p = offset;
74
82
  var len = body.length;
@@ -90,33 +98,45 @@ var SVGGraphics = function SVGGraphics() {
90
98
  data[p + 2] = crc >> 8 & 0xff;
91
99
  data[p + 3] = crc & 0xff;
92
100
  }
101
+
93
102
  function adler32(data, start, end) {
94
103
  var a = 1;
95
104
  var b = 0;
105
+
96
106
  for (var i = start; i < end; ++i) {
97
107
  a = (a + (data[i] & 0xff)) % 65521;
98
108
  b = (b + a) % 65521;
99
109
  }
110
+
100
111
  return b << 16 | a;
101
112
  }
113
+
102
114
  function deflateSync(literals) {
103
- if (!(0, _is_node2.default)()) {
115
+ if (!(0, _is_node.default)()) {
104
116
  return deflateSyncUncompressed(literals);
105
117
  }
118
+
106
119
  try {
107
120
  var input;
121
+
108
122
  if (parseInt(process.versions.node) >= 8) {
109
123
  input = literals;
110
124
  } else {
111
125
  input = new Buffer(literals);
112
126
  }
113
- var output = require('zlib').deflateSync(input, { level: 9 });
127
+
128
+ var output = require('zlib').deflateSync(input, {
129
+ level: 9
130
+ });
131
+
114
132
  return output instanceof Uint8Array ? output : new Uint8Array(output);
115
133
  } catch (e) {
116
134
  (0, _util.warn)('Not compressing PNG because zlib.deflateSync is unavailable: ' + e);
117
135
  }
136
+
118
137
  return deflateSyncUncompressed(literals);
119
138
  }
139
+
120
140
  function deflateSyncUncompressed(literals) {
121
141
  var len = literals.length;
122
142
  var maxBlockLength = 0xFFFF;
@@ -126,6 +146,7 @@ var SVGGraphics = function SVGGraphics() {
126
146
  idat[pi++] = 0x78;
127
147
  idat[pi++] = 0x9c;
128
148
  var pos = 0;
149
+
129
150
  while (len > maxBlockLength) {
130
151
  idat[pi++] = 0x00;
131
152
  idat[pi++] = 0xff;
@@ -137,6 +158,7 @@ var SVGGraphics = function SVGGraphics() {
137
158
  pos += maxBlockLength;
138
159
  len -= maxBlockLength;
139
160
  }
161
+
140
162
  idat[pi++] = 0x01;
141
163
  idat[pi++] = len & 0xff;
142
164
  idat[pi++] = len >> 8 & 0xff;
@@ -151,49 +173,60 @@ var SVGGraphics = function SVGGraphics() {
151
173
  idat[pi++] = adler & 0xff;
152
174
  return idat;
153
175
  }
176
+
154
177
  function encode(imgData, kind, forceDataSchema, isMask) {
155
178
  var width = imgData.width;
156
179
  var height = imgData.height;
157
180
  var bitDepth, colorType, lineSize;
158
181
  var bytes = imgData.data;
182
+
159
183
  switch (kind) {
160
184
  case _util.ImageKind.GRAYSCALE_1BPP:
161
185
  colorType = 0;
162
186
  bitDepth = 1;
163
187
  lineSize = width + 7 >> 3;
164
188
  break;
189
+
165
190
  case _util.ImageKind.RGB_24BPP:
166
191
  colorType = 2;
167
192
  bitDepth = 8;
168
193
  lineSize = width * 3;
169
194
  break;
195
+
170
196
  case _util.ImageKind.RGBA_32BPP:
171
197
  colorType = 6;
172
198
  bitDepth = 8;
173
199
  lineSize = width * 4;
174
200
  break;
201
+
175
202
  default:
176
203
  throw new Error('invalid format');
177
204
  }
205
+
178
206
  var literals = new Uint8Array((1 + lineSize) * height);
179
207
  var offsetLiterals = 0,
180
208
  offsetBytes = 0;
181
209
  var y, i;
210
+
182
211
  for (y = 0; y < height; ++y) {
183
212
  literals[offsetLiterals++] = 0;
184
213
  literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
185
214
  offsetBytes += lineSize;
186
215
  offsetLiterals += lineSize;
187
216
  }
217
+
188
218
  if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
189
219
  offsetLiterals = 0;
220
+
190
221
  for (y = 0; y < height; y++) {
191
222
  offsetLiterals++;
223
+
192
224
  for (i = 0; i < lineSize; i++) {
193
225
  literals[offsetLiterals++] ^= 0xFF;
194
226
  }
195
227
  }
196
228
  }
229
+
197
230
  var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
198
231
  var idat = deflateSync(literals);
199
232
  var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
@@ -208,11 +241,13 @@ var SVGGraphics = function SVGGraphics() {
208
241
  writePngChunk('IEND', new Uint8Array(0), data, offset);
209
242
  return (0, _util.createObjectURL)(data, 'image/png', forceDataSchema);
210
243
  }
244
+
211
245
  return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
212
246
  var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
213
247
  return encode(imgData, kind, forceDataSchema, isMask);
214
248
  };
215
249
  }();
250
+
216
251
  var SVGExtraState = function SVGExtraStateClosure() {
217
252
  function SVGExtraState() {
218
253
  this.fontSizeScale = 1;
@@ -221,6 +256,7 @@ var SVGGraphics = function SVGGraphics() {
221
256
  this.textMatrix = _util.IDENTITY_MATRIX;
222
257
  this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
223
258
  this.leading = 0;
259
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
224
260
  this.x = 0;
225
261
  this.y = 0;
226
262
  this.lineX = 0;
@@ -244,6 +280,7 @@ var SVGGraphics = function SVGGraphics() {
244
280
  this.clipGroup = null;
245
281
  this.maskId = '';
246
282
  }
283
+
247
284
  SVGExtraState.prototype = {
248
285
  clone: function SVGExtraState_clone() {
249
286
  return Object.create(this);
@@ -255,11 +292,13 @@ var SVGGraphics = function SVGGraphics() {
255
292
  };
256
293
  return SVGExtraState;
257
294
  }();
295
+
258
296
  exports.SVGGraphics = SVGGraphics = function SVGGraphicsClosure() {
259
297
  function opListToTree(opList) {
260
298
  var opTree = [];
261
299
  var tmp = [];
262
300
  var opListLen = opList.length;
301
+
263
302
  for (var x = 0; x < opListLen; x++) {
264
303
  if (opList[x].fn === 'save') {
265
304
  opTree.push({
@@ -271,36 +310,46 @@ var SVGGraphics = function SVGGraphics() {
271
310
  opTree = opTree[opTree.length - 1].items;
272
311
  continue;
273
312
  }
313
+
274
314
  if (opList[x].fn === 'restore') {
275
315
  opTree = tmp.pop();
276
316
  } else {
277
317
  opTree.push(opList[x]);
278
318
  }
279
319
  }
320
+
280
321
  return opTree;
281
322
  }
323
+
282
324
  function pf(value) {
283
325
  if (Number.isInteger(value)) {
284
326
  return value.toString();
285
327
  }
328
+
286
329
  var s = value.toFixed(10);
287
330
  var i = s.length - 1;
331
+
288
332
  if (s[i] !== '0') {
289
333
  return s;
290
334
  }
335
+
291
336
  do {
292
337
  i--;
293
338
  } while (s[i] === '0');
294
- return s.substr(0, s[i] === '.' ? i : i + 1);
339
+
340
+ return s.substring(0, s[i] === '.' ? i : i + 1);
295
341
  }
342
+
296
343
  function pm(m) {
297
344
  if (m[4] === 0 && m[5] === 0) {
298
345
  if (m[1] === 0 && m[2] === 0) {
299
346
  if (m[0] === 1 && m[3] === 1) {
300
347
  return '';
301
348
  }
349
+
302
350
  return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')';
303
351
  }
352
+
304
353
  if (m[0] === m[3] && m[1] === -m[2]) {
305
354
  var a = Math.acos(m[0]) * 180 / Math.PI;
306
355
  return 'rotate(' + pf(a) + ')';
@@ -310,8 +359,10 @@ var SVGGraphics = function SVGGraphics() {
310
359
  return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')';
311
360
  }
312
361
  }
362
+
313
363
  return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' + pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')';
314
364
  }
365
+
315
366
  function SVGGraphics(commonObjs, objs, forceDataSchema) {
316
367
  this.svgFactory = new _dom_utils.DOMSVGFactory();
317
368
  this.current = new SVGExtraState();
@@ -327,6 +378,7 @@ var SVGGraphics = function SVGGraphics() {
327
378
  this.cssStyle = null;
328
379
  this.forceDataSchema = !!forceDataSchema;
329
380
  }
381
+
330
382
  var XML_NS = 'http://www.w3.org/XML/1998/namespace';
331
383
  var XLINK_NS = 'http://www.w3.org/1999/xlink';
332
384
  var LINE_CAP_STYLES = ['butt', 'round', 'square'];
@@ -357,13 +409,16 @@ var SVGGraphics = function SVGGraphics() {
357
409
  var fnArray = operatorList.fnArray;
358
410
  var fnArrayLen = fnArray.length;
359
411
  var argsArray = operatorList.argsArray;
412
+
360
413
  for (var i = 0; i < fnArrayLen; i++) {
361
414
  if (_util.OPS.dependency === fnArray[i]) {
362
415
  var deps = argsArray[i];
416
+
363
417
  for (var n = 0, nn = deps.length; n < nn; n++) {
364
418
  var obj = deps[n];
365
419
  var common = obj.substring(0, 2) === 'g_';
366
420
  var promise;
421
+
367
422
  if (common) {
368
423
  promise = new Promise(function (resolve) {
369
424
  _this.commonObjs.get(obj, resolve);
@@ -373,10 +428,12 @@ var SVGGraphics = function SVGGraphics() {
373
428
  _this.objs.get(obj, resolve);
374
429
  });
375
430
  }
431
+
376
432
  this.current.dependencies.push(promise);
377
433
  }
378
434
  }
379
435
  }
436
+
380
437
  return Promise.all(this.current.dependencies);
381
438
  },
382
439
  transform: function SVGGraphics_transform(a, b, c, d, e, f) {
@@ -388,11 +445,16 @@ var SVGGraphics = function SVGGraphics() {
388
445
  var _this2 = this;
389
446
 
390
447
  this.viewport = viewport;
448
+
391
449
  var svgElement = this._initialize(viewport);
450
+
392
451
  return this.loadDependencies(operatorList).then(function () {
393
452
  _this2.transformMatrix = _util.IDENTITY_MATRIX;
453
+
394
454
  var opTree = _this2.convertOpList(operatorList);
455
+
395
456
  _this2.executeOpTree(opTree);
457
+
396
458
  return svgElement;
397
459
  });
398
460
  },
@@ -402,9 +464,11 @@ var SVGGraphics = function SVGGraphics() {
402
464
  var fnArrayLen = fnArray.length;
403
465
  var REVOPS = [];
404
466
  var opList = [];
467
+
405
468
  for (var op in _util.OPS) {
406
469
  REVOPS[_util.OPS[op]] = op;
407
470
  }
471
+
408
472
  for (var x = 0; x < fnArrayLen; x++) {
409
473
  var fnId = fnArray[x];
410
474
  opList.push({
@@ -413,149 +477,201 @@ var SVGGraphics = function SVGGraphics() {
413
477
  'args': argsArray[x]
414
478
  });
415
479
  }
480
+
416
481
  return opListToTree(opList);
417
482
  },
418
483
  executeOpTree: function SVGGraphics_executeOpTree(opTree) {
419
484
  var opTreeLen = opTree.length;
485
+
420
486
  for (var x = 0; x < opTreeLen; x++) {
421
487
  var fn = opTree[x].fn;
422
488
  var fnId = opTree[x].fnId;
423
489
  var args = opTree[x].args;
490
+
424
491
  switch (fnId | 0) {
425
492
  case _util.OPS.beginText:
426
493
  this.beginText();
427
494
  break;
495
+
428
496
  case _util.OPS.dependency:
429
497
  break;
498
+
430
499
  case _util.OPS.setLeading:
431
500
  this.setLeading(args);
432
501
  break;
502
+
433
503
  case _util.OPS.setLeadingMoveText:
434
504
  this.setLeadingMoveText(args[0], args[1]);
435
505
  break;
506
+
436
507
  case _util.OPS.setFont:
437
508
  this.setFont(args);
438
509
  break;
510
+
439
511
  case _util.OPS.showText:
440
512
  this.showText(args[0]);
441
513
  break;
514
+
442
515
  case _util.OPS.showSpacedText:
443
516
  this.showText(args[0]);
444
517
  break;
518
+
445
519
  case _util.OPS.endText:
446
520
  this.endText();
447
521
  break;
522
+
448
523
  case _util.OPS.moveText:
449
524
  this.moveText(args[0], args[1]);
450
525
  break;
526
+
451
527
  case _util.OPS.setCharSpacing:
452
528
  this.setCharSpacing(args[0]);
453
529
  break;
530
+
454
531
  case _util.OPS.setWordSpacing:
455
532
  this.setWordSpacing(args[0]);
456
533
  break;
534
+
457
535
  case _util.OPS.setHScale:
458
536
  this.setHScale(args[0]);
459
537
  break;
538
+
460
539
  case _util.OPS.setTextMatrix:
461
540
  this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
462
541
  break;
542
+
463
543
  case _util.OPS.setTextRise:
464
544
  this.setTextRise(args[0]);
465
545
  break;
546
+
547
+ case _util.OPS.setTextRenderingMode:
548
+ this.setTextRenderingMode(args[0]);
549
+ break;
550
+
466
551
  case _util.OPS.setLineWidth:
467
552
  this.setLineWidth(args[0]);
468
553
  break;
554
+
469
555
  case _util.OPS.setLineJoin:
470
556
  this.setLineJoin(args[0]);
471
557
  break;
558
+
472
559
  case _util.OPS.setLineCap:
473
560
  this.setLineCap(args[0]);
474
561
  break;
562
+
475
563
  case _util.OPS.setMiterLimit:
476
564
  this.setMiterLimit(args[0]);
477
565
  break;
566
+
478
567
  case _util.OPS.setFillRGBColor:
479
568
  this.setFillRGBColor(args[0], args[1], args[2]);
480
569
  break;
570
+
481
571
  case _util.OPS.setStrokeRGBColor:
482
572
  this.setStrokeRGBColor(args[0], args[1], args[2]);
483
573
  break;
574
+
484
575
  case _util.OPS.setDash:
485
576
  this.setDash(args[0], args[1]);
486
577
  break;
578
+
487
579
  case _util.OPS.setGState:
488
580
  this.setGState(args[0]);
489
581
  break;
582
+
490
583
  case _util.OPS.fill:
491
584
  this.fill();
492
585
  break;
586
+
493
587
  case _util.OPS.eoFill:
494
588
  this.eoFill();
495
589
  break;
590
+
496
591
  case _util.OPS.stroke:
497
592
  this.stroke();
498
593
  break;
594
+
499
595
  case _util.OPS.fillStroke:
500
596
  this.fillStroke();
501
597
  break;
598
+
502
599
  case _util.OPS.eoFillStroke:
503
600
  this.eoFillStroke();
504
601
  break;
602
+
505
603
  case _util.OPS.clip:
506
604
  this.clip('nonzero');
507
605
  break;
606
+
508
607
  case _util.OPS.eoClip:
509
608
  this.clip('evenodd');
510
609
  break;
610
+
511
611
  case _util.OPS.paintSolidColorImageMask:
512
612
  this.paintSolidColorImageMask();
513
613
  break;
614
+
514
615
  case _util.OPS.paintJpegXObject:
515
616
  this.paintJpegXObject(args[0], args[1], args[2]);
516
617
  break;
618
+
517
619
  case _util.OPS.paintImageXObject:
518
620
  this.paintImageXObject(args[0]);
519
621
  break;
622
+
520
623
  case _util.OPS.paintInlineImageXObject:
521
624
  this.paintInlineImageXObject(args[0]);
522
625
  break;
626
+
523
627
  case _util.OPS.paintImageMaskXObject:
524
628
  this.paintImageMaskXObject(args[0]);
525
629
  break;
630
+
526
631
  case _util.OPS.paintFormXObjectBegin:
527
632
  this.paintFormXObjectBegin(args[0], args[1]);
528
633
  break;
634
+
529
635
  case _util.OPS.paintFormXObjectEnd:
530
636
  this.paintFormXObjectEnd();
531
637
  break;
638
+
532
639
  case _util.OPS.closePath:
533
640
  this.closePath();
534
641
  break;
642
+
535
643
  case _util.OPS.closeStroke:
536
644
  this.closeStroke();
537
645
  break;
646
+
538
647
  case _util.OPS.closeFillStroke:
539
648
  this.closeFillStroke();
540
649
  break;
650
+
541
651
  case _util.OPS.closeEOFillStroke:
542
652
  this.closeEOFillStroke();
543
653
  break;
654
+
544
655
  case _util.OPS.nextLine:
545
656
  this.nextLine();
546
657
  break;
658
+
547
659
  case _util.OPS.transform:
548
660
  this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
549
661
  break;
662
+
550
663
  case _util.OPS.constructPath:
551
664
  this.constructPath(args[0], args[1]);
552
665
  break;
666
+
553
667
  case _util.OPS.endPath:
554
668
  this.endPath();
555
669
  break;
670
+
556
671
  case 92:
557
672
  this.group(opTree[x].items);
558
673
  break;
674
+
559
675
  default:
560
676
  (0, _util.warn)('Unimplemented operator ' + fn);
561
677
  break;
@@ -608,9 +724,11 @@ var SVGGraphics = function SVGGraphics() {
608
724
  var current = this.current;
609
725
  var font = current.font;
610
726
  var fontSize = current.fontSize;
727
+
611
728
  if (fontSize === 0) {
612
729
  return;
613
730
  }
731
+
614
732
  var charSpacing = current.charSpacing;
615
733
  var wordSpacing = current.wordSpacing;
616
734
  var fontDirection = current.fontDirection;
@@ -620,8 +738,10 @@ var SVGGraphics = function SVGGraphics() {
620
738
  var widthAdvanceScale = fontSize * current.fontMatrix[0];
621
739
  var x = 0,
622
740
  i;
741
+
623
742
  for (i = 0; i < glyphsLength; ++i) {
624
743
  var glyph = glyphs[i];
744
+
625
745
  if (glyph === null) {
626
746
  x += fontDirection * wordSpacing;
627
747
  continue;
@@ -629,45 +749,73 @@ var SVGGraphics = function SVGGraphics() {
629
749
  x += -glyph * fontSize * 0.001;
630
750
  continue;
631
751
  }
752
+
632
753
  var width = glyph.width;
633
754
  var character = glyph.fontChar;
634
755
  var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
635
756
  var charWidth = width * widthAdvanceScale + spacing * fontDirection;
757
+
636
758
  if (!glyph.isInFont && !font.missingFile) {
637
759
  x += charWidth;
638
760
  continue;
639
761
  }
762
+
640
763
  current.xcoords.push(current.x + x * textHScale);
641
764
  current.tspan.textContent += character;
642
765
  x += charWidth;
643
766
  }
767
+
644
768
  if (vertical) {
645
769
  current.y -= x * textHScale;
646
770
  } else {
647
771
  current.x += x * textHScale;
648
772
  }
773
+
649
774
  current.tspan.setAttributeNS(null, 'x', current.xcoords.map(pf).join(' '));
650
775
  current.tspan.setAttributeNS(null, 'y', pf(-current.y));
651
776
  current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
652
777
  current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px');
778
+
653
779
  if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
654
780
  current.tspan.setAttributeNS(null, 'font-style', current.fontStyle);
655
781
  }
782
+
656
783
  if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
657
784
  current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight);
658
785
  }
659
- if (current.fillColor !== SVG_DEFAULTS.fillColor) {
660
- current.tspan.setAttributeNS(null, 'fill', current.fillColor);
786
+
787
+ var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
788
+
789
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
790
+ if (current.fillColor !== SVG_DEFAULTS.fillColor) {
791
+ current.tspan.setAttributeNS(null, 'fill', current.fillColor);
792
+ }
793
+
794
+ if (current.fillAlpha < 1) {
795
+ current.tspan.setAttributeNS(null, 'fill-opacity', current.fillAlpha);
796
+ }
797
+ } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
798
+ current.tspan.setAttributeNS(null, 'fill', 'transparent');
799
+ } else {
800
+ current.tspan.setAttributeNS(null, 'fill', 'none');
661
801
  }
802
+
803
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
804
+ this._setStrokeAttributes(current.tspan);
805
+ }
806
+
662
807
  var textMatrix = current.textMatrix;
808
+
663
809
  if (current.textRise !== 0) {
664
810
  textMatrix = textMatrix.slice();
665
811
  textMatrix[5] += current.textRise;
666
812
  }
813
+
667
814
  current.txtElement.setAttributeNS(null, 'transform', pm(textMatrix) + ' scale(1, -1)');
668
815
  current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve');
669
816
  current.txtElement.appendChild(current.tspan);
670
817
  current.txtgrp.appendChild(current.txtElement);
818
+
671
819
  this._ensureTransformGroup().appendChild(current.txtElement);
672
820
  },
673
821
  setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) {
@@ -680,6 +828,7 @@ var SVGGraphics = function SVGGraphics() {
680
828
  this.cssStyle.setAttributeNS(null, 'type', 'text/css');
681
829
  this.defs.appendChild(this.cssStyle);
682
830
  }
831
+
683
832
  var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);
684
833
  this.cssStyle.textContent += '@font-face { font-family: "' + fontObj.loadedName + '";' + ' src: url(' + url + '); }\n';
685
834
  },
@@ -688,19 +837,23 @@ var SVGGraphics = function SVGGraphics() {
688
837
  var fontObj = this.commonObjs.get(details[0]);
689
838
  var size = details[1];
690
839
  this.current.font = fontObj;
840
+
691
841
  if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) {
692
842
  this.addFontStyle(fontObj);
693
843
  this.embeddedFonts[fontObj.loadedName] = fontObj;
694
844
  }
845
+
695
846
  current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
696
847
  var bold = fontObj.black ? fontObj.bold ? 'bolder' : 'bold' : fontObj.bold ? 'bold' : 'normal';
697
848
  var italic = fontObj.italic ? 'italic' : 'normal';
849
+
698
850
  if (size < 0) {
699
851
  size = -size;
700
852
  current.fontDirection = -1;
701
853
  } else {
702
854
  current.fontDirection = 1;
703
855
  }
856
+
704
857
  current.fontSize = size;
705
858
  current.fontFamily = fontObj.loadedName;
706
859
  current.fontWeight = bold;
@@ -709,9 +862,19 @@ var SVGGraphics = function SVGGraphics() {
709
862
  current.tspan.setAttributeNS(null, 'y', pf(-current.y));
710
863
  current.xcoords = [];
711
864
  },
712
- endText: function SVGGraphics_endText() {},
865
+ endText: function endText() {
866
+ var current = this.current;
867
+
868
+ if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) {
869
+ current.element = current.txtElement;
870
+ this.clip('nonzero');
871
+ this.endPath();
872
+ }
873
+ },
713
874
  setLineWidth: function SVGGraphics_setLineWidth(width) {
714
- this.current.lineWidth = width;
875
+ if (width > 0) {
876
+ this.current.lineWidth = width;
877
+ }
715
878
  },
716
879
  setLineCap: function SVGGraphics_setLineCap(style) {
717
880
  this.current.lineCap = LINE_CAP_STYLES[style];
@@ -727,6 +890,7 @@ var SVGGraphics = function SVGGraphics() {
727
890
  },
728
891
  setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) {
729
892
  var color = _util.Util.makeCssRgb(r, g, b);
893
+
730
894
  this.current.strokeColor = color;
731
895
  },
732
896
  setFillAlpha: function SVGGraphics_setFillAlpha(fillAlpha) {
@@ -734,6 +898,7 @@ var SVGGraphics = function SVGGraphics() {
734
898
  },
735
899
  setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) {
736
900
  var color = _util.Util.makeCssRgb(r, g, b);
901
+
737
902
  this.current.fillColor = color;
738
903
  this.current.tspan = this.svgFactory.createElement('svg:tspan');
739
904
  this.current.xcoords = [];
@@ -749,6 +914,7 @@ var SVGGraphics = function SVGGraphics() {
749
914
  current.path = this.svgFactory.createElement('svg:path');
750
915
  var d = [];
751
916
  var opLength = ops.length;
917
+
752
918
  for (var i = 0, j = 0; i < opLength; i++) {
753
919
  switch (ops[i] | 0) {
754
920
  case _util.OPS.rectangle:
@@ -760,42 +926,51 @@ var SVGGraphics = function SVGGraphics() {
760
926
  var yh = y + height;
761
927
  d.push('M', pf(x), pf(y), 'L', pf(xw), pf(y), 'L', pf(xw), pf(yh), 'L', pf(x), pf(yh), 'Z');
762
928
  break;
929
+
763
930
  case _util.OPS.moveTo:
764
931
  x = args[j++];
765
932
  y = args[j++];
766
933
  d.push('M', pf(x), pf(y));
767
934
  break;
935
+
768
936
  case _util.OPS.lineTo:
769
937
  x = args[j++];
770
938
  y = args[j++];
771
939
  d.push('L', pf(x), pf(y));
772
940
  break;
941
+
773
942
  case _util.OPS.curveTo:
774
943
  x = args[j + 4];
775
944
  y = args[j + 5];
776
945
  d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
777
946
  j += 6;
778
947
  break;
948
+
779
949
  case _util.OPS.curveTo2:
780
950
  x = args[j + 2];
781
951
  y = args[j + 3];
782
952
  d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
783
953
  j += 4;
784
954
  break;
955
+
785
956
  case _util.OPS.curveTo3:
786
957
  x = args[j + 2];
787
958
  y = args[j + 3];
788
959
  d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
789
960
  j += 4;
790
961
  break;
962
+
791
963
  case _util.OPS.closePath:
792
964
  d.push('Z');
793
965
  break;
794
966
  }
795
967
  }
968
+
796
969
  current.path.setAttributeNS(null, 'd', d.join(' '));
797
970
  current.path.setAttributeNS(null, 'fill', 'none');
971
+
798
972
  this._ensureTransformGroup().appendChild(current.path);
973
+
799
974
  current.element = current.path;
800
975
  current.setCurrentPoint(x, y);
801
976
  },
@@ -803,27 +978,33 @@ var SVGGraphics = function SVGGraphics() {
803
978
  if (!this.pendingClip) {
804
979
  return;
805
980
  }
981
+
806
982
  var current = this.current;
807
983
  var clipId = 'clippath' + clipCount;
808
984
  clipCount++;
809
985
  var clipPath = this.svgFactory.createElement('svg:clipPath');
810
986
  clipPath.setAttributeNS(null, 'id', clipId);
811
987
  clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
812
- var clipElement = current.element.cloneNode();
988
+ var clipElement = current.element.cloneNode(true);
989
+
813
990
  if (this.pendingClip === 'evenodd') {
814
991
  clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
815
992
  } else {
816
993
  clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
817
994
  }
995
+
818
996
  this.pendingClip = null;
819
997
  clipPath.appendChild(clipElement);
820
998
  this.defs.appendChild(clipPath);
999
+
821
1000
  if (current.activeClipUrl) {
822
1001
  current.clipGroup = null;
823
1002
  this.extraStack.forEach(function (prev) {
824
1003
  prev.clipGroup = null;
825
1004
  });
1005
+ clipPath.setAttributeNS(null, 'clip-path', current.activeClipUrl);
826
1006
  }
1007
+
827
1008
  current.activeClipUrl = 'url(#' + clipId + ')';
828
1009
  this.tgrp = null;
829
1010
  },
@@ -832,6 +1013,7 @@ var SVGGraphics = function SVGGraphics() {
832
1013
  },
833
1014
  closePath: function SVGGraphics_closePath() {
834
1015
  var current = this.current;
1016
+
835
1017
  if (current.path) {
836
1018
  var d = current.path.getAttributeNS(null, 'd');
837
1019
  d += 'Z';
@@ -844,6 +1026,9 @@ var SVGGraphics = function SVGGraphics() {
844
1026
  setTextRise: function SVGGraphics_setTextRise(textRise) {
845
1027
  this.current.textRise = textRise;
846
1028
  },
1029
+ setTextRenderingMode: function setTextRenderingMode(textRenderingMode) {
1030
+ this.current.textRenderingMode = textRenderingMode;
1031
+ },
847
1032
  setHScale: function SVGGraphics_setHScale(scale) {
848
1033
  this.current.textHScale = scale / 100;
849
1034
  },
@@ -852,31 +1037,40 @@ var SVGGraphics = function SVGGraphics() {
852
1037
  var state = states[i];
853
1038
  var key = state[0];
854
1039
  var value = state[1];
1040
+
855
1041
  switch (key) {
856
1042
  case 'LW':
857
1043
  this.setLineWidth(value);
858
1044
  break;
1045
+
859
1046
  case 'LC':
860
1047
  this.setLineCap(value);
861
1048
  break;
1049
+
862
1050
  case 'LJ':
863
1051
  this.setLineJoin(value);
864
1052
  break;
1053
+
865
1054
  case 'ML':
866
1055
  this.setMiterLimit(value);
867
1056
  break;
1057
+
868
1058
  case 'D':
869
1059
  this.setDash(value[0], value[1]);
870
1060
  break;
1061
+
871
1062
  case 'Font':
872
1063
  this.setFont(value);
873
1064
  break;
1065
+
874
1066
  case 'CA':
875
1067
  this.setStrokeAlpha(value);
876
1068
  break;
1069
+
877
1070
  case 'ca':
878
1071
  this.setFillAlpha(value);
879
1072
  break;
1073
+
880
1074
  default:
881
1075
  (0, _util.warn)('Unimplemented graphic state ' + key);
882
1076
  break;
@@ -885,29 +1079,39 @@ var SVGGraphics = function SVGGraphics() {
885
1079
  },
886
1080
  fill: function SVGGraphics_fill() {
887
1081
  var current = this.current;
1082
+
888
1083
  if (current.element) {
889
1084
  current.element.setAttributeNS(null, 'fill', current.fillColor);
890
1085
  current.element.setAttributeNS(null, 'fill-opacity', current.fillAlpha);
1086
+ this.endPath();
891
1087
  }
892
1088
  },
893
1089
  stroke: function SVGGraphics_stroke() {
894
1090
  var current = this.current;
1091
+
895
1092
  if (current.element) {
896
- current.element.setAttributeNS(null, 'stroke', current.strokeColor);
897
- current.element.setAttributeNS(null, 'stroke-opacity', current.strokeAlpha);
898
- current.element.setAttributeNS(null, 'stroke-miterlimit', pf(current.miterLimit));
899
- current.element.setAttributeNS(null, 'stroke-linecap', current.lineCap);
900
- current.element.setAttributeNS(null, 'stroke-linejoin', current.lineJoin);
901
- current.element.setAttributeNS(null, 'stroke-width', pf(current.lineWidth) + 'px');
902
- current.element.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' '));
903
- current.element.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px');
1093
+ this._setStrokeAttributes(current.element);
1094
+
904
1095
  current.element.setAttributeNS(null, 'fill', 'none');
1096
+ this.endPath();
905
1097
  }
906
1098
  },
1099
+ _setStrokeAttributes: function _setStrokeAttributes(element) {
1100
+ var current = this.current;
1101
+ element.setAttributeNS(null, 'stroke', current.strokeColor);
1102
+ element.setAttributeNS(null, 'stroke-opacity', current.strokeAlpha);
1103
+ element.setAttributeNS(null, 'stroke-miterlimit', pf(current.miterLimit));
1104
+ element.setAttributeNS(null, 'stroke-linecap', current.lineCap);
1105
+ element.setAttributeNS(null, 'stroke-linejoin', current.lineJoin);
1106
+ element.setAttributeNS(null, 'stroke-width', pf(current.lineWidth) + 'px');
1107
+ element.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' '));
1108
+ element.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px');
1109
+ },
907
1110
  eoFill: function SVGGraphics_eoFill() {
908
1111
  if (this.current.element) {
909
1112
  this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
910
1113
  }
1114
+
911
1115
  this.fill();
912
1116
  },
913
1117
  fillStroke: function SVGGraphics_fillStroke() {
@@ -918,6 +1122,7 @@ var SVGGraphics = function SVGGraphics() {
918
1122
  if (this.current.element) {
919
1123
  this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
920
1124
  }
1125
+
921
1126
  this.fillStroke();
922
1127
  },
923
1128
  closeStroke: function SVGGraphics_closeStroke() {
@@ -932,7 +1137,6 @@ var SVGGraphics = function SVGGraphics() {
932
1137
  this.closePath();
933
1138
  this.eoFillStroke();
934
1139
  },
935
-
936
1140
  paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() {
937
1141
  var current = this.current;
938
1142
  var rect = this.svgFactory.createElement('svg:rect');
@@ -941,6 +1145,7 @@ var SVGGraphics = function SVGGraphics() {
941
1145
  rect.setAttributeNS(null, 'width', '1px');
942
1146
  rect.setAttributeNS(null, 'height', '1px');
943
1147
  rect.setAttributeNS(null, 'fill', current.fillColor);
1148
+
944
1149
  this._ensureTransformGroup().appendChild(rect);
945
1150
  },
946
1151
  paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) {
@@ -952,14 +1157,17 @@ var SVGGraphics = function SVGGraphics() {
952
1157
  imgEl.setAttributeNS(null, 'x', '0');
953
1158
  imgEl.setAttributeNS(null, 'y', pf(-h));
954
1159
  imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')');
1160
+
955
1161
  this._ensureTransformGroup().appendChild(imgEl);
956
1162
  },
957
1163
  paintImageXObject: function SVGGraphics_paintImageXObject(objId) {
958
1164
  var imgData = this.objs.get(objId);
1165
+
959
1166
  if (!imgData) {
960
1167
  (0, _util.warn)('Dependent image isn\'t ready yet');
961
1168
  return;
962
1169
  }
1170
+
963
1171
  this.paintInlineImageXObject(imgData);
964
1172
  },
965
1173
  paintInlineImageXObject: function SVGGraphics_paintInlineImageXObject(imgData, mask) {
@@ -980,6 +1188,7 @@ var SVGGraphics = function SVGGraphics() {
980
1188
  imgEl.setAttributeNS(null, 'width', pf(width) + 'px');
981
1189
  imgEl.setAttributeNS(null, 'height', pf(height) + 'px');
982
1190
  imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / width) + ' ' + pf(-1 / height) + ')');
1191
+
983
1192
  if (mask) {
984
1193
  mask.appendChild(imgEl);
985
1194
  } else {
@@ -1002,14 +1211,17 @@ var SVGGraphics = function SVGGraphics() {
1002
1211
  rect.setAttributeNS(null, 'fill', fillColor);
1003
1212
  rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId + ')');
1004
1213
  this.defs.appendChild(mask);
1214
+
1005
1215
  this._ensureTransformGroup().appendChild(rect);
1216
+
1006
1217
  this.paintInlineImageXObject(imgData, mask);
1007
1218
  },
1008
1219
  paintFormXObjectBegin: function SVGGraphics_paintFormXObjectBegin(matrix, bbox) {
1009
1220
  if (Array.isArray(matrix) && matrix.length === 6) {
1010
1221
  this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
1011
1222
  }
1012
- if (Array.isArray(bbox) && bbox.length === 4) {
1223
+
1224
+ if (bbox) {
1013
1225
  var width = bbox[2] - bbox[0];
1014
1226
  var height = bbox[3] - bbox[1];
1015
1227
  var cliprect = this.svgFactory.createElement('svg:rect');
@@ -1034,7 +1246,6 @@ var SVGGraphics = function SVGGraphics() {
1034
1246
  this.svg = rootGroup;
1035
1247
  return svg;
1036
1248
  },
1037
-
1038
1249
  _ensureClipGroup: function SVGGraphics_ensureClipGroup() {
1039
1250
  if (!this.current.clipGroup) {
1040
1251
  var clipGroup = this.svgFactory.createElement('svg:g');
@@ -1042,22 +1253,24 @@ var SVGGraphics = function SVGGraphics() {
1042
1253
  this.svg.appendChild(clipGroup);
1043
1254
  this.current.clipGroup = clipGroup;
1044
1255
  }
1256
+
1045
1257
  return this.current.clipGroup;
1046
1258
  },
1047
1259
  _ensureTransformGroup: function SVGGraphics_ensureTransformGroup() {
1048
1260
  if (!this.tgrp) {
1049
1261
  this.tgrp = this.svgFactory.createElement('svg:g');
1050
1262
  this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
1263
+
1051
1264
  if (this.current.activeClipUrl) {
1052
1265
  this._ensureClipGroup().appendChild(this.tgrp);
1053
1266
  } else {
1054
1267
  this.svg.appendChild(this.tgrp);
1055
1268
  }
1056
1269
  }
1270
+
1057
1271
  return this.tgrp;
1058
1272
  }
1059
1273
  };
1060
1274
  return SVGGraphics;
1061
1275
  }();
1062
- }
1063
- exports.SVGGraphics = SVGGraphics;
1276
+ }