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.
- package/README.md +3 -3
- package/bower.json +1 -1
- package/build/pdf.js +2050 -1087
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +18219 -10436
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/es5/build/pdf.d.ts +1 -0
- package/es5/build/pdf.js +6623 -6654
- package/es5/build/pdf.js.map +1 -1
- package/es5/build/pdf.min.js +1 -1
- package/es5/build/pdf.worker.js +20815 -13888
- package/es5/build/pdf.worker.js.map +1 -1
- package/es5/build/pdf.worker.min.js +1 -1
- package/es5/image_decoders/pdf.image_decoders.js +3817 -4946
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -1
- package/es5/image_decoders/pdf.image_decoders.min.js +1 -1
- package/es5/web/pdf_viewer.css +18 -15
- package/es5/web/pdf_viewer.js +1094 -514
- package/es5/web/pdf_viewer.js.map +1 -1
- package/image_decoders/pdf.image_decoders.js +774 -168
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +556 -108
- package/lib/core/cff_parser.js +7 -1
- package/lib/core/charsets.js +1 -1
- package/lib/core/cmap.js +20 -1
- package/lib/core/core_utils.js +162 -3
- package/lib/core/crypto.js +1 -1
- package/lib/core/default_appearance.js +132 -0
- package/lib/core/document.js +115 -9
- package/lib/core/encodings.js +1 -1
- package/lib/core/evaluator.js +168 -74
- package/lib/core/fonts.js +97 -11
- package/lib/core/function.js +5 -10
- package/lib/core/glyphlist.js +11 -4529
- package/lib/core/image_utils.js +30 -1
- package/lib/core/jpg.js +1 -1
- package/lib/core/jpx.js +5 -5
- package/lib/core/murmurhash3.js +1 -1
- package/lib/core/obj.js +123 -39
- package/lib/core/pattern.js +4 -4
- package/lib/core/primitives.js +24 -5
- package/lib/core/standard_fonts.js +1 -1
- package/lib/core/stream.js +5 -1
- package/lib/core/unicode.js +15 -1387
- package/lib/core/worker.js +58 -17
- package/lib/core/writer.js +68 -4
- package/lib/display/annotation_layer.js +712 -119
- package/lib/display/annotation_storage.js +21 -4
- package/lib/display/api.js +88 -18
- package/lib/display/canvas.js +414 -375
- package/lib/display/display_utils.js +11 -4
- package/lib/display/fetch_stream.js +3 -3
- package/lib/display/font_loader.js +2 -3
- package/lib/display/metadata.js +54 -20
- package/lib/display/node_stream.js +1 -1
- package/lib/display/optional_content_config.js +1 -1
- package/lib/display/pattern_helper.js +109 -113
- package/lib/display/svg.js +5 -5
- package/lib/display/text_layer.js +54 -54
- package/lib/display/transport_stream.js +4 -4
- package/lib/display/webgl.js +65 -68
- package/lib/examples/node/domstubs.js +9 -4
- package/lib/pdf.js +2 -2
- package/lib/pdf.sandbox.js +311 -0
- package/lib/pdf.worker.js +2 -2
- package/lib/shared/scripting_utils.js +84 -0
- package/lib/shared/util.js +129 -14
- package/lib/{display → shared}/xml_parser.js +112 -4
- package/lib/test/unit/annotation_spec.js +831 -109
- package/lib/test/unit/annotation_storage_spec.js +28 -10
- package/lib/test/unit/api_spec.js +190 -160
- package/lib/test/unit/bidi_spec.js +6 -6
- package/lib/test/unit/cff_parser_spec.js +73 -73
- package/lib/test/unit/clitests_helper.js +2 -0
- package/lib/test/unit/cmap_spec.js +48 -74
- package/lib/test/unit/core_utils_spec.js +34 -0
- package/lib/test/unit/crypto_spec.js +162 -199
- package/lib/test/unit/custom_spec.js +7 -18
- package/lib/test/unit/default_appearance_spec.js +54 -0
- package/lib/test/unit/display_svg_spec.js +24 -19
- package/lib/test/unit/display_utils_spec.js +1 -1
- package/lib/test/unit/document_spec.js +187 -20
- package/lib/test/unit/evaluator_spec.js +30 -30
- package/lib/test/unit/function_spec.js +165 -165
- package/lib/test/unit/jasmine-boot.js +52 -53
- package/lib/test/unit/metadata_spec.js +2 -2
- package/lib/test/unit/murmurhash3_spec.js +29 -16
- package/lib/test/unit/network_spec.js +21 -21
- package/lib/test/unit/pdf_find_controller_spec.js +131 -69
- package/lib/test/unit/pdf_find_utils_spec.js +10 -10
- package/lib/test/unit/scripting_spec.js +1104 -0
- package/lib/test/unit/stream_spec.js +8 -8
- package/lib/test/unit/test_utils.js +16 -19
- package/lib/test/unit/testreporter.js +11 -4
- package/lib/test/unit/type1_parser_spec.js +23 -23
- package/lib/test/unit/ui_utils_spec.js +78 -35
- package/lib/test/unit/unicode_spec.js +7 -7
- package/lib/test/unit/util_spec.js +26 -3
- package/lib/test/unit/writer_spec.js +16 -1
- package/lib/test/unit/xml_spec.js +117 -0
- package/lib/web/annotation_layer_builder.js +18 -6
- package/lib/web/app.js +579 -161
- package/lib/web/app_options.js +14 -0
- package/lib/web/base_tree_viewer.js +50 -0
- package/lib/web/base_viewer.js +350 -14
- package/lib/web/chromecom.js +9 -1
- package/lib/web/debugger.js +1 -2
- package/lib/web/download_manager.js +0 -15
- package/lib/web/firefox_print_service.js +6 -4
- package/lib/web/firefoxcom.js +84 -69
- package/lib/web/generic_scripting.js +55 -0
- package/lib/web/genericcom.js +9 -1
- package/lib/web/grab_to_pan.js +1 -1
- package/lib/web/interfaces.js +9 -3
- package/lib/web/pdf_attachment_viewer.js +1 -3
- package/lib/web/pdf_cursor_tools.js +20 -13
- package/lib/web/pdf_document_properties.js +48 -61
- package/lib/web/pdf_find_bar.js +1 -3
- package/lib/web/pdf_find_controller.js +58 -12
- package/lib/web/pdf_history.js +43 -21
- package/lib/web/pdf_layer_viewer.js +1 -9
- package/lib/web/pdf_link_service.js +108 -78
- package/lib/web/pdf_outline_viewer.js +166 -10
- package/lib/web/pdf_page_view.js +14 -14
- package/lib/web/pdf_presentation_mode.js +21 -31
- package/lib/web/pdf_rendering_queue.js +8 -1
- package/lib/web/pdf_sidebar.js +62 -107
- package/lib/web/pdf_sidebar_resizer.js +11 -21
- package/lib/web/pdf_single_page_viewer.js +8 -0
- package/lib/web/pdf_thumbnail_view.js +26 -26
- package/lib/web/pdf_thumbnail_viewer.js +13 -2
- package/lib/web/pdf_viewer.component.js +2 -2
- package/lib/web/pdf_viewer.js +3 -1
- package/lib/web/preferences.js +33 -44
- package/lib/web/text_layer_builder.js +2 -9
- package/lib/web/ui_utils.js +78 -46
- package/lib/web/viewer_compatibility.js +1 -2
- package/package.json +4 -1
- package/types/display/annotation_layer.d.ts +18 -3
- package/types/display/api.d.ts +110 -54
- package/types/display/canvas.d.ts +1 -1
- package/types/display/display_utils.d.ts +96 -95
- package/types/display/fetch_stream.d.ts +2 -2
- package/types/display/metadata.d.ts +4 -0
- package/types/display/pattern_helper.d.ts +1 -1
- package/types/display/text_layer.d.ts +7 -7
- package/types/display/transport_stream.d.ts +1 -1
- package/types/shared/scripting_utils.d.ts +12 -0
- package/types/shared/util.d.ts +281 -250
- package/types/shared/xml_parser.d.ts +64 -0
- package/web/pdf_viewer.css +18 -15
- package/web/pdf_viewer.js +809 -408
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +1 -1
- package/types/display/xml_parser.d.ts +0 -35
package/lib/core/worker.js
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.
|
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.
|
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"
|
127
|
-
throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g.
|
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
|
-
|
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
|
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
|
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
|
-
|
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:
|
521
|
+
info: infoObj,
|
487
522
|
fileIds: xref.trailer.getRaw("ID") || null,
|
488
|
-
startXRef
|
523
|
+
startXRef,
|
489
524
|
filename
|
490
525
|
};
|
491
526
|
}
|
492
527
|
|
493
528
|
xref.resetNewRef();
|
494
|
-
return (0, _writer.incrementalUpdate)(
|
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
|
-
}
|
572
|
+
});
|
532
573
|
handler.on("GetTextContent", function wphExtractText(data, sink) {
|
533
574
|
var pageIndex = data.pageIndex;
|
534
575
|
|
package/lib/core/writer.js
CHANGED
@@ -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
|
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;
|