pdfjs-dist 2.6.347 → 2.7.570

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 (158) hide show
  1. package/README.md +3 -3
  2. package/bower.json +1 -1
  3. package/build/pdf.js +2050 -1087
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +1 -1
  6. package/build/pdf.worker.js +18219 -10436
  7. package/build/pdf.worker.js.map +1 -1
  8. package/build/pdf.worker.min.js +1 -1
  9. package/es5/build/pdf.d.ts +1 -0
  10. package/es5/build/pdf.js +6623 -6654
  11. package/es5/build/pdf.js.map +1 -1
  12. package/es5/build/pdf.min.js +1 -1
  13. package/es5/build/pdf.worker.js +20815 -13888
  14. package/es5/build/pdf.worker.js.map +1 -1
  15. package/es5/build/pdf.worker.min.js +1 -1
  16. package/es5/image_decoders/pdf.image_decoders.js +3817 -4946
  17. package/es5/image_decoders/pdf.image_decoders.js.map +1 -1
  18. package/es5/image_decoders/pdf.image_decoders.min.js +1 -1
  19. package/es5/web/pdf_viewer.css +18 -15
  20. package/es5/web/pdf_viewer.js +1094 -514
  21. package/es5/web/pdf_viewer.js.map +1 -1
  22. package/image_decoders/pdf.image_decoders.js +774 -168
  23. package/image_decoders/pdf.image_decoders.js.map +1 -1
  24. package/image_decoders/pdf.image_decoders.min.js +1 -1
  25. package/lib/core/annotation.js +556 -108
  26. package/lib/core/cff_parser.js +7 -1
  27. package/lib/core/charsets.js +1 -1
  28. package/lib/core/cmap.js +20 -1
  29. package/lib/core/core_utils.js +162 -3
  30. package/lib/core/crypto.js +1 -1
  31. package/lib/core/default_appearance.js +132 -0
  32. package/lib/core/document.js +115 -9
  33. package/lib/core/encodings.js +1 -1
  34. package/lib/core/evaluator.js +168 -74
  35. package/lib/core/fonts.js +97 -11
  36. package/lib/core/function.js +5 -10
  37. package/lib/core/glyphlist.js +11 -4529
  38. package/lib/core/image_utils.js +30 -1
  39. package/lib/core/jpg.js +1 -1
  40. package/lib/core/jpx.js +5 -5
  41. package/lib/core/murmurhash3.js +1 -1
  42. package/lib/core/obj.js +123 -39
  43. package/lib/core/pattern.js +4 -4
  44. package/lib/core/primitives.js +24 -5
  45. package/lib/core/standard_fonts.js +1 -1
  46. package/lib/core/stream.js +5 -1
  47. package/lib/core/unicode.js +15 -1387
  48. package/lib/core/worker.js +58 -17
  49. package/lib/core/writer.js +68 -4
  50. package/lib/display/annotation_layer.js +712 -119
  51. package/lib/display/annotation_storage.js +21 -4
  52. package/lib/display/api.js +88 -18
  53. package/lib/display/canvas.js +414 -375
  54. package/lib/display/display_utils.js +11 -4
  55. package/lib/display/fetch_stream.js +3 -3
  56. package/lib/display/font_loader.js +2 -3
  57. package/lib/display/metadata.js +54 -20
  58. package/lib/display/node_stream.js +1 -1
  59. package/lib/display/optional_content_config.js +1 -1
  60. package/lib/display/pattern_helper.js +109 -113
  61. package/lib/display/svg.js +5 -5
  62. package/lib/display/text_layer.js +54 -54
  63. package/lib/display/transport_stream.js +4 -4
  64. package/lib/display/webgl.js +65 -68
  65. package/lib/examples/node/domstubs.js +9 -4
  66. package/lib/pdf.js +2 -2
  67. package/lib/pdf.sandbox.js +311 -0
  68. package/lib/pdf.worker.js +2 -2
  69. package/lib/shared/scripting_utils.js +84 -0
  70. package/lib/shared/util.js +129 -14
  71. package/lib/{display → shared}/xml_parser.js +112 -4
  72. package/lib/test/unit/annotation_spec.js +831 -109
  73. package/lib/test/unit/annotation_storage_spec.js +28 -10
  74. package/lib/test/unit/api_spec.js +190 -160
  75. package/lib/test/unit/bidi_spec.js +6 -6
  76. package/lib/test/unit/cff_parser_spec.js +73 -73
  77. package/lib/test/unit/clitests_helper.js +2 -0
  78. package/lib/test/unit/cmap_spec.js +48 -74
  79. package/lib/test/unit/core_utils_spec.js +34 -0
  80. package/lib/test/unit/crypto_spec.js +162 -199
  81. package/lib/test/unit/custom_spec.js +7 -18
  82. package/lib/test/unit/default_appearance_spec.js +54 -0
  83. package/lib/test/unit/display_svg_spec.js +24 -19
  84. package/lib/test/unit/display_utils_spec.js +1 -1
  85. package/lib/test/unit/document_spec.js +187 -20
  86. package/lib/test/unit/evaluator_spec.js +30 -30
  87. package/lib/test/unit/function_spec.js +165 -165
  88. package/lib/test/unit/jasmine-boot.js +52 -53
  89. package/lib/test/unit/metadata_spec.js +2 -2
  90. package/lib/test/unit/murmurhash3_spec.js +29 -16
  91. package/lib/test/unit/network_spec.js +21 -21
  92. package/lib/test/unit/pdf_find_controller_spec.js +131 -69
  93. package/lib/test/unit/pdf_find_utils_spec.js +10 -10
  94. package/lib/test/unit/scripting_spec.js +1104 -0
  95. package/lib/test/unit/stream_spec.js +8 -8
  96. package/lib/test/unit/test_utils.js +16 -19
  97. package/lib/test/unit/testreporter.js +11 -4
  98. package/lib/test/unit/type1_parser_spec.js +23 -23
  99. package/lib/test/unit/ui_utils_spec.js +78 -35
  100. package/lib/test/unit/unicode_spec.js +7 -7
  101. package/lib/test/unit/util_spec.js +26 -3
  102. package/lib/test/unit/writer_spec.js +16 -1
  103. package/lib/test/unit/xml_spec.js +117 -0
  104. package/lib/web/annotation_layer_builder.js +18 -6
  105. package/lib/web/app.js +579 -161
  106. package/lib/web/app_options.js +14 -0
  107. package/lib/web/base_tree_viewer.js +50 -0
  108. package/lib/web/base_viewer.js +350 -14
  109. package/lib/web/chromecom.js +9 -1
  110. package/lib/web/debugger.js +1 -2
  111. package/lib/web/download_manager.js +0 -15
  112. package/lib/web/firefox_print_service.js +6 -4
  113. package/lib/web/firefoxcom.js +84 -69
  114. package/lib/web/generic_scripting.js +55 -0
  115. package/lib/web/genericcom.js +9 -1
  116. package/lib/web/grab_to_pan.js +1 -1
  117. package/lib/web/interfaces.js +9 -3
  118. package/lib/web/pdf_attachment_viewer.js +1 -3
  119. package/lib/web/pdf_cursor_tools.js +20 -13
  120. package/lib/web/pdf_document_properties.js +48 -61
  121. package/lib/web/pdf_find_bar.js +1 -3
  122. package/lib/web/pdf_find_controller.js +58 -12
  123. package/lib/web/pdf_history.js +43 -21
  124. package/lib/web/pdf_layer_viewer.js +1 -9
  125. package/lib/web/pdf_link_service.js +108 -78
  126. package/lib/web/pdf_outline_viewer.js +166 -10
  127. package/lib/web/pdf_page_view.js +14 -14
  128. package/lib/web/pdf_presentation_mode.js +21 -31
  129. package/lib/web/pdf_rendering_queue.js +8 -1
  130. package/lib/web/pdf_sidebar.js +62 -107
  131. package/lib/web/pdf_sidebar_resizer.js +11 -21
  132. package/lib/web/pdf_single_page_viewer.js +8 -0
  133. package/lib/web/pdf_thumbnail_view.js +26 -26
  134. package/lib/web/pdf_thumbnail_viewer.js +13 -2
  135. package/lib/web/pdf_viewer.component.js +2 -2
  136. package/lib/web/pdf_viewer.js +3 -1
  137. package/lib/web/preferences.js +33 -44
  138. package/lib/web/text_layer_builder.js +2 -9
  139. package/lib/web/ui_utils.js +78 -46
  140. package/lib/web/viewer_compatibility.js +1 -2
  141. package/package.json +4 -1
  142. package/types/display/annotation_layer.d.ts +18 -3
  143. package/types/display/api.d.ts +110 -54
  144. package/types/display/canvas.d.ts +1 -1
  145. package/types/display/display_utils.d.ts +96 -95
  146. package/types/display/fetch_stream.d.ts +2 -2
  147. package/types/display/metadata.d.ts +4 -0
  148. package/types/display/pattern_helper.d.ts +1 -1
  149. package/types/display/text_layer.d.ts +7 -7
  150. package/types/display/transport_stream.d.ts +1 -1
  151. package/types/shared/scripting_utils.d.ts +12 -0
  152. package/types/shared/util.d.ts +281 -250
  153. package/types/shared/xml_parser.d.ts +64 -0
  154. package/web/pdf_viewer.css +18 -15
  155. package/web/pdf_viewer.js +809 -408
  156. package/web/pdf_viewer.js.map +1 -1
  157. package/webpack.js +1 -1
  158. package/types/display/xml_parser.d.ts +0 -35
@@ -24,7 +24,7 @@
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.WorkerMessageHandler = exports.WorkerTask = void 0;
27
+ exports.WorkerTask = exports.WorkerMessageHandler = void 0;
28
28
 
29
29
  var _util = require("../shared/util.js");
30
30
 
@@ -107,7 +107,7 @@ class WorkerMessageHandler {
107
107
  var WorkerTasks = [];
108
108
  const verbosity = (0, _util.getVerbosityLevel)();
109
109
  const apiVersion = docParams.apiVersion;
110
- const workerVersion = '2.6.347';
110
+ const workerVersion = '2.7.570';
111
111
 
112
112
  if (apiVersion !== workerVersion) {
113
113
  throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
@@ -123,8 +123,8 @@ class WorkerMessageHandler {
123
123
  throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
124
124
  }
125
125
 
126
- if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
127
- throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead.");
126
+ if (typeof ReadableStream === "undefined") {
127
+ throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); " + "please use an `es5`-build instead.");
128
128
  }
129
129
 
130
130
  var docId = docParams.docId;
@@ -406,6 +406,16 @@ class WorkerMessageHandler {
406
406
  handler.on("GetJavaScript", function wphSetupGetJavaScript(data) {
407
407
  return pdfManager.ensureCatalog("javaScript");
408
408
  });
409
+ handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) {
410
+ return pdfManager.ensureCatalog("jsActions");
411
+ });
412
+ handler.on("GetPageJSActions", function ({
413
+ pageIndex
414
+ }) {
415
+ return pdfManager.getPage(pageIndex).then(function (page) {
416
+ return page.jsActions;
417
+ });
418
+ });
409
419
  handler.on("GetOutline", function wphSetupGetOutline(data) {
410
420
  return pdfManager.ensureCatalog("documentOutline");
411
421
  });
@@ -418,6 +428,9 @@ class WorkerMessageHandler {
418
428
  handler.on("GetMetadata", function wphSetupGetMetadata(data) {
419
429
  return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
420
430
  });
431
+ handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) {
432
+ return pdfManager.ensureCatalog("markInfo");
433
+ });
421
434
  handler.on("GetData", function wphSetupGetData(data) {
422
435
  pdfManager.requestLoadedStream();
423
436
  return pdfManager.onLoadedStream().then(function (stream) {
@@ -435,23 +448,34 @@ class WorkerMessageHandler {
435
448
  return page.getAnnotationsData(intent);
436
449
  });
437
450
  });
451
+ handler.on("GetFieldObjects", function (data) {
452
+ return pdfManager.ensureDoc("fieldObjects");
453
+ });
454
+ handler.on("HasJSActions", function (data) {
455
+ return pdfManager.ensureDoc("hasJSActions");
456
+ });
457
+ handler.on("GetCalculationOrderIds", function (data) {
458
+ return pdfManager.ensureDoc("calculationOrderIds");
459
+ });
438
460
  handler.on("SaveDocument", function ({
439
461
  numPages,
440
462
  annotationStorage,
441
463
  filename
442
464
  }) {
443
465
  pdfManager.requestLoadedStream();
444
- const promises = [pdfManager.onLoadedStream()];
445
- const document = pdfManager.pdfDocument;
466
+ const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")];
446
467
 
447
468
  for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
448
469
  promises.push(pdfManager.getPage(pageIndex).then(function (page) {
449
470
  const task = new WorkerTask(`Save: page ${pageIndex}`);
450
- return page.save(handler, task, annotationStorage);
471
+ startWorkerTask(task);
472
+ return page.save(handler, task, annotationStorage).finally(function () {
473
+ finishWorkerTask(task);
474
+ });
451
475
  }));
452
476
  }
453
477
 
454
- return Promise.all(promises).then(([stream, ...refs]) => {
478
+ return Promise.all(promises).then(function ([stream, acroForm, xref, startXRef, ...refs]) {
455
479
  let newRefs = [];
456
480
 
457
481
  for (const ref of refs) {
@@ -462,18 +486,29 @@ class WorkerMessageHandler {
462
486
  return stream.bytes;
463
487
  }
464
488
 
465
- const xref = document.xref;
489
+ const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || [];
490
+ let xfaDatasets = null;
491
+
492
+ if (Array.isArray(xfa)) {
493
+ for (let i = 0, ii = xfa.length; i < ii; i += 2) {
494
+ if (xfa[i] === "datasets") {
495
+ xfaDatasets = xfa[i + 1];
496
+ }
497
+ }
498
+ } else {
499
+ (0, _util.warn)("Unsupported XFA type.");
500
+ }
501
+
466
502
  let newXrefInfo = Object.create(null);
467
503
 
468
504
  if (xref.trailer) {
469
- const _info = Object.create(null);
470
-
505
+ const infoObj = Object.create(null);
471
506
  const xrefInfo = xref.trailer.get("Info") || null;
472
507
 
473
- if (xrefInfo) {
508
+ if (xrefInfo instanceof _primitives.Dict) {
474
509
  xrefInfo.forEach((key, value) => {
475
510
  if ((0, _util.isString)(key) && (0, _util.isString)(value)) {
476
- _info[key] = (0, _util.stringToPDFString)(value);
511
+ infoObj[key] = (0, _util.stringToPDFString)(value);
477
512
  }
478
513
  });
479
514
  }
@@ -483,15 +518,21 @@ class WorkerMessageHandler {
483
518
  encrypt: xref.trailer.getRaw("Encrypt") || null,
484
519
  newRef: xref.getNewRef(),
485
520
  infoRef: xref.trailer.getRaw("Info") || null,
486
- info: _info,
521
+ info: infoObj,
487
522
  fileIds: xref.trailer.getRaw("ID") || null,
488
- startXRef: document.startXRef,
523
+ startXRef,
489
524
  filename
490
525
  };
491
526
  }
492
527
 
493
528
  xref.resetNewRef();
494
- return (0, _writer.incrementalUpdate)(stream.bytes, newXrefInfo, newRefs);
529
+ return (0, _writer.incrementalUpdate)({
530
+ originalData: stream.bytes,
531
+ xrefInfo: newXrefInfo,
532
+ newRefs,
533
+ xref,
534
+ datasetsRef: xfaDatasets
535
+ });
495
536
  });
496
537
  });
497
538
  handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) {
@@ -528,7 +569,7 @@ class WorkerMessageHandler {
528
569
  sink.error(reason);
529
570
  });
530
571
  });
531
- }, this);
572
+ });
532
573
  handler.on("GetTextContent", function wphExtractText(data, sink) {
533
574
  var pageIndex = data.pageIndex;
534
575
 
@@ -24,20 +24,24 @@
24
24
  Object.defineProperty(exports, "__esModule", {
25
25
  value: true
26
26
  });
27
- exports.writeDict = writeDict;
28
27
  exports.incrementalUpdate = incrementalUpdate;
28
+ exports.writeDict = writeDict;
29
29
 
30
30
  var _util = require("../shared/util.js");
31
31
 
32
32
  var _primitives = require("./primitives.js");
33
33
 
34
+ var _core_utils = require("./core_utils.js");
35
+
36
+ var _xml_parser = require("../shared/xml_parser.js");
37
+
34
38
  var _crypto = require("./crypto.js");
35
39
 
36
40
  function writeDict(dict, buffer, transform) {
37
41
  buffer.push("<<");
38
42
 
39
43
  for (const key of dict.getKeys()) {
40
- buffer.push(` /${key} `);
44
+ buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `);
41
45
  writeValue(dict.getRaw(key), buffer, transform);
42
46
  }
43
47
 
@@ -94,7 +98,7 @@ function numberToString(value) {
94
98
 
95
99
  function writeValue(value, buffer, transform) {
96
100
  if ((0, _primitives.isName)(value)) {
97
- buffer.push(`/${value.name}`);
101
+ buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`);
98
102
  } else if ((0, _primitives.isRef)(value)) {
99
103
  buffer.push(`${value.num} ${value.gen} R`);
100
104
  } else if (Array.isArray(value)) {
@@ -151,7 +155,67 @@ function computeMD5(filesize, xrefInfo) {
151
155
  return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
152
156
  }
153
157
 
154
- function incrementalUpdate(originalData, xrefInfo, newRefs) {
158
+ function updateXFA(datasetsRef, newRefs, xref) {
159
+ if (datasetsRef === null || xref === null) {
160
+ return;
161
+ }
162
+
163
+ const datasets = xref.fetchIfRef(datasetsRef);
164
+ const str = (0, _util.bytesToString)(datasets.getBytes());
165
+ const xml = new _xml_parser.SimpleXMLParser({
166
+ hasAttributes: true
167
+ }).parseFromString(str);
168
+
169
+ for (const {
170
+ xfa
171
+ } of newRefs) {
172
+ if (!xfa) {
173
+ continue;
174
+ }
175
+
176
+ const {
177
+ path,
178
+ value
179
+ } = xfa;
180
+
181
+ if (!path) {
182
+ continue;
183
+ }
184
+
185
+ const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0);
186
+
187
+ if (node) {
188
+ node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)];
189
+ } else {
190
+ (0, _util.warn)(`Node not found for path: ${path}`);
191
+ }
192
+ }
193
+
194
+ const buffer = [];
195
+ xml.documentElement.dump(buffer);
196
+ let updatedXml = buffer.join("");
197
+ const encrypt = xref.encrypt;
198
+
199
+ if (encrypt) {
200
+ const transform = encrypt.createCipherTransform(datasetsRef.num, datasetsRef.gen);
201
+ updatedXml = transform.encryptString(updatedXml);
202
+ }
203
+
204
+ const data = `${datasetsRef.num} ${datasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${updatedXml.length}>>\nstream\n` + updatedXml + "\nendstream\nendobj\n";
205
+ newRefs.push({
206
+ ref: datasetsRef,
207
+ data
208
+ });
209
+ }
210
+
211
+ function incrementalUpdate({
212
+ originalData,
213
+ xrefInfo,
214
+ newRefs,
215
+ xref = null,
216
+ datasetsRef = null
217
+ }) {
218
+ updateXFA(datasetsRef, newRefs, xref);
155
219
  const newXref = new _primitives.Dict(null);
156
220
  const refForXrefTable = xrefInfo.newRef;
157
221
  let buffer, baseOffset;