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/web/app_options.js
CHANGED
@@ -64,6 +64,10 @@ const defaultOptions = {
|
|
64
64
|
value: false,
|
65
65
|
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
66
66
|
},
|
67
|
+
enableScripting: {
|
68
|
+
value: false,
|
69
|
+
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
70
|
+
},
|
67
71
|
enableWebGL: {
|
68
72
|
value: false,
|
69
73
|
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
@@ -129,6 +133,10 @@ const defaultOptions = {
|
|
129
133
|
value: false,
|
130
134
|
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
131
135
|
},
|
136
|
+
viewerCssTheme: {
|
137
|
+
value: 0,
|
138
|
+
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
139
|
+
},
|
132
140
|
viewOnLoad: {
|
133
141
|
value: 0,
|
134
142
|
kind: OptionKind.VIEWER + OptionKind.PREFERENCE
|
@@ -249,6 +257,12 @@ class AppOptions {
|
|
249
257
|
userOptions[name] = value;
|
250
258
|
}
|
251
259
|
|
260
|
+
static setAll(options) {
|
261
|
+
for (const name in options) {
|
262
|
+
userOptions[name] = options[name];
|
263
|
+
}
|
264
|
+
}
|
265
|
+
|
252
266
|
static remove(name) {
|
253
267
|
delete userOptions[name];
|
254
268
|
}
|
@@ -28,6 +28,9 @@ exports.BaseTreeViewer = void 0;
|
|
28
28
|
|
29
29
|
var _pdf = require("../pdf");
|
30
30
|
|
31
|
+
const TREEITEM_OFFSET_TOP = -100;
|
32
|
+
const TREEITEM_SELECTED_CLASS = "selected";
|
33
|
+
|
31
34
|
class BaseTreeViewer {
|
32
35
|
constructor(options) {
|
33
36
|
if (this.constructor === BaseTreeViewer) {
|
@@ -40,7 +43,9 @@ class BaseTreeViewer {
|
|
40
43
|
}
|
41
44
|
|
42
45
|
reset() {
|
46
|
+
this._pdfDocument = null;
|
43
47
|
this._lastToggleIsShow = true;
|
48
|
+
this._currentTreeItem = null;
|
44
49
|
this.container.textContent = "";
|
45
50
|
this.container.classList.remove("treeWithDeepNesting");
|
46
51
|
}
|
@@ -91,10 +96,55 @@ class BaseTreeViewer {
|
|
91
96
|
this._toggleTreeItem(this.container, !this._lastToggleIsShow);
|
92
97
|
}
|
93
98
|
|
99
|
+
_finishRendering(fragment, count, hasAnyNesting = false) {
|
100
|
+
if (hasAnyNesting) {
|
101
|
+
this.container.classList.add("treeWithDeepNesting");
|
102
|
+
this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden");
|
103
|
+
}
|
104
|
+
|
105
|
+
this.container.appendChild(fragment);
|
106
|
+
|
107
|
+
this._dispatchEvent(count);
|
108
|
+
}
|
109
|
+
|
94
110
|
render(params) {
|
95
111
|
throw new Error("Not implemented: render");
|
96
112
|
}
|
97
113
|
|
114
|
+
_updateCurrentTreeItem(treeItem = null) {
|
115
|
+
if (this._currentTreeItem) {
|
116
|
+
this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);
|
117
|
+
|
118
|
+
this._currentTreeItem = null;
|
119
|
+
}
|
120
|
+
|
121
|
+
if (treeItem) {
|
122
|
+
treeItem.classList.add(TREEITEM_SELECTED_CLASS);
|
123
|
+
this._currentTreeItem = treeItem;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
_scrollToCurrentTreeItem(treeItem) {
|
128
|
+
if (!treeItem) {
|
129
|
+
return;
|
130
|
+
}
|
131
|
+
|
132
|
+
let currentNode = treeItem.parentNode;
|
133
|
+
|
134
|
+
while (currentNode && currentNode !== this.container) {
|
135
|
+
if (currentNode.classList.contains("treeItem")) {
|
136
|
+
const toggler = currentNode.firstElementChild;
|
137
|
+
toggler?.classList.remove("treeItemsHidden");
|
138
|
+
}
|
139
|
+
|
140
|
+
currentNode = currentNode.parentNode;
|
141
|
+
}
|
142
|
+
|
143
|
+
this._updateCurrentTreeItem(treeItem);
|
144
|
+
|
145
|
+
this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);
|
146
|
+
}
|
147
|
+
|
98
148
|
}
|
99
149
|
|
100
150
|
exports.BaseTreeViewer = BaseTreeViewer;
|
package/lib/web/base_viewer.js
CHANGED
@@ -26,14 +26,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
26
26
|
});
|
27
27
|
exports.BaseViewer = void 0;
|
28
28
|
|
29
|
+
var _pdf = require("../pdf");
|
30
|
+
|
29
31
|
var _ui_utils = require("./ui_utils.js");
|
30
32
|
|
31
33
|
var _pdf_rendering_queue = require("./pdf_rendering_queue.js");
|
32
34
|
|
33
35
|
var _annotation_layer_builder = require("./annotation_layer_builder.js");
|
34
36
|
|
35
|
-
var _pdf = require("../pdf");
|
36
|
-
|
37
37
|
var _pdf_page_view = require("./pdf_page_view.js");
|
38
38
|
|
39
39
|
var _pdf_link_service = require("./pdf_link_service.js");
|
@@ -78,6 +78,10 @@ function PDFPageViewBuffer(size) {
|
|
78
78
|
data.shift().destroy();
|
79
79
|
}
|
80
80
|
};
|
81
|
+
|
82
|
+
this.has = function (view) {
|
83
|
+
return data.includes(view);
|
84
|
+
};
|
81
85
|
}
|
82
86
|
|
83
87
|
function isSameScale(oldScale, newScale) {
|
@@ -98,14 +102,24 @@ class BaseViewer {
|
|
98
102
|
throw new Error("Cannot initialize BaseViewer.");
|
99
103
|
}
|
100
104
|
|
105
|
+
const viewerVersion = '2.7.570';
|
106
|
+
|
107
|
+
if (_pdf.version !== viewerVersion) {
|
108
|
+
throw new Error(`The API version "${_pdf.version}" does not match the Viewer version "${viewerVersion}".`);
|
109
|
+
}
|
110
|
+
|
101
111
|
this._name = this.constructor.name;
|
102
112
|
this.container = options.container;
|
103
113
|
this.viewer = options.viewer || options.container.firstElementChild;
|
104
114
|
|
105
|
-
if (!(this.container
|
115
|
+
if (!(this.container?.tagName.toUpperCase() === "DIV" && this.viewer?.tagName.toUpperCase() === "DIV")) {
|
106
116
|
throw new Error("Invalid `container` and/or `viewer` option.");
|
107
117
|
}
|
108
118
|
|
119
|
+
if (getComputedStyle(this.container).position !== "absolute") {
|
120
|
+
throw new Error("The `container` must be absolutely positioned.");
|
121
|
+
}
|
122
|
+
|
109
123
|
this.eventBus = options.eventBus;
|
110
124
|
this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
|
111
125
|
this.downloadManager = options.downloadManager || null;
|
@@ -120,6 +134,8 @@ class BaseViewer {
|
|
120
134
|
this.useOnlyCssZoom = options.useOnlyCssZoom || false;
|
121
135
|
this.maxCanvasPixels = options.maxCanvasPixels;
|
122
136
|
this.l10n = options.l10n || _ui_utils.NullL10n;
|
137
|
+
this.enableScripting = options.enableScripting || false;
|
138
|
+
this._mouseState = options.mouseState || null;
|
123
139
|
this.defaultRenderingQueue = !options.renderingQueue;
|
124
140
|
|
125
141
|
if (this.defaultRenderingQueue) {
|
@@ -195,11 +211,13 @@ class BaseViewer {
|
|
195
211
|
return false;
|
196
212
|
}
|
197
213
|
|
214
|
+
const previous = this._currentPageNumber;
|
198
215
|
this._currentPageNumber = val;
|
199
216
|
this.eventBus.dispatch("pagechanging", {
|
200
217
|
source: this,
|
201
218
|
pageNumber: val,
|
202
|
-
pageLabel: this._pageLabels && this._pageLabels[val - 1]
|
219
|
+
pageLabel: this._pageLabels && this._pageLabels[val - 1],
|
220
|
+
previous
|
203
221
|
});
|
204
222
|
|
205
223
|
if (resetCurrentPageView) {
|
@@ -327,6 +345,10 @@ class BaseViewer {
|
|
327
345
|
|
328
346
|
setDocument(pdfDocument) {
|
329
347
|
if (this.pdfDocument) {
|
348
|
+
this.eventBus.dispatch("pagesdestroy", {
|
349
|
+
source: this
|
350
|
+
});
|
351
|
+
|
330
352
|
this._cancelRendering();
|
331
353
|
|
332
354
|
this._resetView();
|
@@ -344,7 +366,6 @@ class BaseViewer {
|
|
344
366
|
|
345
367
|
const pagesCount = pdfDocument.numPages;
|
346
368
|
const firstPagePromise = pdfDocument.getPage(1);
|
347
|
-
const annotationStorage = pdfDocument.annotationStorage;
|
348
369
|
const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();
|
349
370
|
|
350
371
|
this._pagesCapability.promise.then(() => {
|
@@ -397,7 +418,6 @@ class BaseViewer {
|
|
397
418
|
id: pageNum,
|
398
419
|
scale,
|
399
420
|
defaultViewport: viewport.clone(),
|
400
|
-
annotationStorage,
|
401
421
|
optionalContentConfigPromise,
|
402
422
|
renderingQueue: this.renderingQueue,
|
403
423
|
textLayerFactory,
|
@@ -409,7 +429,8 @@ class BaseViewer {
|
|
409
429
|
enableWebGL: this.enableWebGL,
|
410
430
|
useOnlyCssZoom: this.useOnlyCssZoom,
|
411
431
|
maxCanvasPixels: this.maxCanvasPixels,
|
412
|
-
l10n: this.l10n
|
432
|
+
l10n: this.l10n,
|
433
|
+
enableScripting: this.enableScripting
|
413
434
|
});
|
414
435
|
|
415
436
|
this._pages.push(pageView);
|
@@ -530,6 +551,8 @@ class BaseViewer {
|
|
530
551
|
this._onAfterDraw = null;
|
531
552
|
}
|
532
553
|
|
554
|
+
this._resetScriptingEvents();
|
555
|
+
|
533
556
|
this.viewer.textContent = "";
|
534
557
|
|
535
558
|
this._updateScrollMode();
|
@@ -601,6 +624,14 @@ class BaseViewer {
|
|
601
624
|
}
|
602
625
|
}
|
603
626
|
|
627
|
+
get _pageWidthScaleFactor() {
|
628
|
+
if (this.spreadMode !== _ui_utils.SpreadMode.NONE && this.scrollMode !== _ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) {
|
629
|
+
return 2;
|
630
|
+
}
|
631
|
+
|
632
|
+
return 1;
|
633
|
+
}
|
634
|
+
|
604
635
|
_setScale(value, noScroll = false) {
|
605
636
|
let scale = parseFloat(value);
|
606
637
|
|
@@ -621,7 +652,7 @@ class BaseViewer {
|
|
621
652
|
[hPadding, vPadding] = [vPadding, hPadding];
|
622
653
|
}
|
623
654
|
|
624
|
-
const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
|
655
|
+
const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor;
|
625
656
|
const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
|
626
657
|
|
627
658
|
switch (value) {
|
@@ -667,6 +698,20 @@ class BaseViewer {
|
|
667
698
|
});
|
668
699
|
}
|
669
700
|
|
701
|
+
pageLabelToPageNumber(label) {
|
702
|
+
if (!this._pageLabels) {
|
703
|
+
return null;
|
704
|
+
}
|
705
|
+
|
706
|
+
const i = this._pageLabels.indexOf(label);
|
707
|
+
|
708
|
+
if (i < 0) {
|
709
|
+
return null;
|
710
|
+
}
|
711
|
+
|
712
|
+
return i + 1;
|
713
|
+
}
|
714
|
+
|
670
715
|
scrollPageIntoView({
|
671
716
|
pageNumber,
|
672
717
|
destArray = null,
|
@@ -723,6 +768,8 @@ class BaseViewer {
|
|
723
768
|
if (y === null && this._location) {
|
724
769
|
x = this._location.left;
|
725
770
|
y = this._location.top;
|
771
|
+
} else if (typeof y !== "number") {
|
772
|
+
y = pageHeight;
|
726
773
|
}
|
727
774
|
|
728
775
|
break;
|
@@ -853,6 +900,10 @@ class BaseViewer {
|
|
853
900
|
return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
|
854
901
|
}
|
855
902
|
|
903
|
+
get _isContainerRtl() {
|
904
|
+
return getComputedStyle(this.container).direction === "rtl";
|
905
|
+
}
|
906
|
+
|
856
907
|
get isInPresentationMode() {
|
857
908
|
return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
|
858
909
|
}
|
@@ -892,7 +943,13 @@ class BaseViewer {
|
|
892
943
|
}
|
893
944
|
|
894
945
|
_getVisiblePages() {
|
895
|
-
return (0, _ui_utils.getVisibleElements)(
|
946
|
+
return (0, _ui_utils.getVisibleElements)({
|
947
|
+
scrollEl: this.container,
|
948
|
+
views: this._pages,
|
949
|
+
sortByVisibility: true,
|
950
|
+
horizontal: this._isScrollModeHorizontal,
|
951
|
+
rtl: this._isScrollModeHorizontal && this._isContainerRtl
|
952
|
+
});
|
896
953
|
}
|
897
954
|
|
898
955
|
isPageVisible(pageNumber) {
|
@@ -900,8 +957,8 @@ class BaseViewer {
|
|
900
957
|
return false;
|
901
958
|
}
|
902
959
|
|
903
|
-
if (pageNumber
|
904
|
-
console.error(`${this._name}.isPageVisible: "${pageNumber}" is
|
960
|
+
if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
|
961
|
+
console.error(`${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`);
|
905
962
|
return false;
|
906
963
|
}
|
907
964
|
|
@@ -910,6 +967,25 @@ class BaseViewer {
|
|
910
967
|
});
|
911
968
|
}
|
912
969
|
|
970
|
+
isPageCached(pageNumber) {
|
971
|
+
if (!this.pdfDocument || !this._buffer) {
|
972
|
+
return false;
|
973
|
+
}
|
974
|
+
|
975
|
+
if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
|
976
|
+
console.error(`${this._name}.isPageCached: "${pageNumber}" is not a valid page.`);
|
977
|
+
return false;
|
978
|
+
}
|
979
|
+
|
980
|
+
const pageView = this._pages[pageNumber - 1];
|
981
|
+
|
982
|
+
if (!pageView) {
|
983
|
+
return false;
|
984
|
+
}
|
985
|
+
|
986
|
+
return this._buffer.has(pageView);
|
987
|
+
}
|
988
|
+
|
913
989
|
cleanup() {
|
914
990
|
for (let i = 0, ii = this._pages.length; i < ii; i++) {
|
915
991
|
if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
|
@@ -982,16 +1058,19 @@ class BaseViewer {
|
|
982
1058
|
});
|
983
1059
|
}
|
984
1060
|
|
985
|
-
createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
|
1061
|
+
createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n, enableScripting = false, hasJSActionsPromise = null, mouseState = null) {
|
986
1062
|
return new _annotation_layer_builder.AnnotationLayerBuilder({
|
987
1063
|
pageDiv,
|
988
1064
|
pdfPage,
|
989
|
-
annotationStorage,
|
1065
|
+
annotationStorage: annotationStorage || this.pdfDocument?.annotationStorage,
|
990
1066
|
imageResourcesPath,
|
991
1067
|
renderInteractiveForms,
|
992
1068
|
linkService: this.linkService,
|
993
1069
|
downloadManager: this.downloadManager,
|
994
|
-
l10n
|
1070
|
+
l10n,
|
1071
|
+
enableScripting,
|
1072
|
+
hasJSActionsPromise: hasJSActionsPromise || this.pdfDocument?.hasJSActions(),
|
1073
|
+
mouseState: mouseState || this._mouseState
|
995
1074
|
});
|
996
1075
|
}
|
997
1076
|
|
@@ -1174,11 +1253,268 @@ class BaseViewer {
|
|
1174
1253
|
return;
|
1175
1254
|
}
|
1176
1255
|
|
1256
|
+
if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
|
1257
|
+
this._setScale(this._currentScaleValue, true);
|
1258
|
+
}
|
1259
|
+
|
1177
1260
|
this._setCurrentPageNumber(pageNumber, true);
|
1178
1261
|
|
1179
1262
|
this.update();
|
1180
1263
|
}
|
1181
1264
|
|
1265
|
+
_getPageAdvance(currentPageNumber, previous = false) {
|
1266
|
+
if (this.isInPresentationMode) {
|
1267
|
+
return 1;
|
1268
|
+
}
|
1269
|
+
|
1270
|
+
switch (this._scrollMode) {
|
1271
|
+
case _ui_utils.ScrollMode.WRAPPED:
|
1272
|
+
{
|
1273
|
+
const {
|
1274
|
+
views
|
1275
|
+
} = this._getVisiblePages(),
|
1276
|
+
pageLayout = new Map();
|
1277
|
+
|
1278
|
+
for (const {
|
1279
|
+
id,
|
1280
|
+
y,
|
1281
|
+
percent,
|
1282
|
+
widthPercent
|
1283
|
+
} of views) {
|
1284
|
+
if (percent === 0 || widthPercent < 100) {
|
1285
|
+
continue;
|
1286
|
+
}
|
1287
|
+
|
1288
|
+
let yArray = pageLayout.get(y);
|
1289
|
+
|
1290
|
+
if (!yArray) {
|
1291
|
+
pageLayout.set(y, yArray || (yArray = []));
|
1292
|
+
}
|
1293
|
+
|
1294
|
+
yArray.push(id);
|
1295
|
+
}
|
1296
|
+
|
1297
|
+
for (const yArray of pageLayout.values()) {
|
1298
|
+
const currentIndex = yArray.indexOf(currentPageNumber);
|
1299
|
+
|
1300
|
+
if (currentIndex === -1) {
|
1301
|
+
continue;
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
const numPages = yArray.length;
|
1305
|
+
|
1306
|
+
if (numPages === 1) {
|
1307
|
+
break;
|
1308
|
+
}
|
1309
|
+
|
1310
|
+
if (previous) {
|
1311
|
+
for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {
|
1312
|
+
const currentId = yArray[i],
|
1313
|
+
expectedId = yArray[i + 1] - 1;
|
1314
|
+
|
1315
|
+
if (currentId < expectedId) {
|
1316
|
+
return currentPageNumber - expectedId;
|
1317
|
+
}
|
1318
|
+
}
|
1319
|
+
} else {
|
1320
|
+
for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {
|
1321
|
+
const currentId = yArray[i],
|
1322
|
+
expectedId = yArray[i - 1] + 1;
|
1323
|
+
|
1324
|
+
if (currentId > expectedId) {
|
1325
|
+
return expectedId - currentPageNumber;
|
1326
|
+
}
|
1327
|
+
}
|
1328
|
+
}
|
1329
|
+
|
1330
|
+
if (previous) {
|
1331
|
+
const firstId = yArray[0];
|
1332
|
+
|
1333
|
+
if (firstId < currentPageNumber) {
|
1334
|
+
return currentPageNumber - firstId + 1;
|
1335
|
+
}
|
1336
|
+
} else {
|
1337
|
+
const lastId = yArray[numPages - 1];
|
1338
|
+
|
1339
|
+
if (lastId > currentPageNumber) {
|
1340
|
+
return lastId - currentPageNumber + 1;
|
1341
|
+
}
|
1342
|
+
}
|
1343
|
+
|
1344
|
+
break;
|
1345
|
+
}
|
1346
|
+
|
1347
|
+
break;
|
1348
|
+
}
|
1349
|
+
|
1350
|
+
case _ui_utils.ScrollMode.HORIZONTAL:
|
1351
|
+
{
|
1352
|
+
break;
|
1353
|
+
}
|
1354
|
+
|
1355
|
+
case _ui_utils.ScrollMode.VERTICAL:
|
1356
|
+
{
|
1357
|
+
if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
|
1358
|
+
break;
|
1359
|
+
}
|
1360
|
+
|
1361
|
+
const parity = this._spreadMode - 1;
|
1362
|
+
|
1363
|
+
if (previous && currentPageNumber % 2 !== parity) {
|
1364
|
+
break;
|
1365
|
+
} else if (!previous && currentPageNumber % 2 === parity) {
|
1366
|
+
break;
|
1367
|
+
}
|
1368
|
+
|
1369
|
+
const {
|
1370
|
+
views
|
1371
|
+
} = this._getVisiblePages(),
|
1372
|
+
expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;
|
1373
|
+
|
1374
|
+
for (const {
|
1375
|
+
id,
|
1376
|
+
percent,
|
1377
|
+
widthPercent
|
1378
|
+
} of views) {
|
1379
|
+
if (id !== expectedId) {
|
1380
|
+
continue;
|
1381
|
+
}
|
1382
|
+
|
1383
|
+
if (percent > 0 && widthPercent === 100) {
|
1384
|
+
return 2;
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
break;
|
1388
|
+
}
|
1389
|
+
|
1390
|
+
break;
|
1391
|
+
}
|
1392
|
+
}
|
1393
|
+
|
1394
|
+
return 1;
|
1395
|
+
}
|
1396
|
+
|
1397
|
+
nextPage() {
|
1398
|
+
const currentPageNumber = this._currentPageNumber,
|
1399
|
+
pagesCount = this.pagesCount;
|
1400
|
+
|
1401
|
+
if (currentPageNumber >= pagesCount) {
|
1402
|
+
return false;
|
1403
|
+
}
|
1404
|
+
|
1405
|
+
const advance = this._getPageAdvance(currentPageNumber, false) || 1;
|
1406
|
+
this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);
|
1407
|
+
return true;
|
1408
|
+
}
|
1409
|
+
|
1410
|
+
previousPage() {
|
1411
|
+
const currentPageNumber = this._currentPageNumber;
|
1412
|
+
|
1413
|
+
if (currentPageNumber <= 1) {
|
1414
|
+
return false;
|
1415
|
+
}
|
1416
|
+
|
1417
|
+
const advance = this._getPageAdvance(currentPageNumber, true) || 1;
|
1418
|
+
this.currentPageNumber = Math.max(currentPageNumber - advance, 1);
|
1419
|
+
return true;
|
1420
|
+
}
|
1421
|
+
|
1422
|
+
initializeScriptingEvents() {
|
1423
|
+
if (!this.enableScripting || this._pageOpenPendingSet) {
|
1424
|
+
return;
|
1425
|
+
}
|
1426
|
+
|
1427
|
+
const eventBus = this.eventBus,
|
1428
|
+
pageOpenPendingSet = this._pageOpenPendingSet = new Set(),
|
1429
|
+
scriptingEvents = this._scriptingEvents || (this._scriptingEvents = Object.create(null));
|
1430
|
+
|
1431
|
+
const dispatchPageClose = pageNumber => {
|
1432
|
+
if (pageOpenPendingSet.has(pageNumber)) {
|
1433
|
+
return;
|
1434
|
+
}
|
1435
|
+
|
1436
|
+
eventBus.dispatch("pageclose", {
|
1437
|
+
source: this,
|
1438
|
+
pageNumber
|
1439
|
+
});
|
1440
|
+
};
|
1441
|
+
|
1442
|
+
const dispatchPageOpen = pageNumber => {
|
1443
|
+
const pageView = this._pages[pageNumber - 1];
|
1444
|
+
|
1445
|
+
if (pageView?.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
|
1446
|
+
pageOpenPendingSet.delete(pageNumber);
|
1447
|
+
eventBus.dispatch("pageopen", {
|
1448
|
+
source: this,
|
1449
|
+
pageNumber,
|
1450
|
+
actionsPromise: pageView.pdfPage?.getJSActions()
|
1451
|
+
});
|
1452
|
+
} else {
|
1453
|
+
pageOpenPendingSet.add(pageNumber);
|
1454
|
+
}
|
1455
|
+
};
|
1456
|
+
|
1457
|
+
scriptingEvents.onPageChanging = ({
|
1458
|
+
pageNumber,
|
1459
|
+
previous
|
1460
|
+
}) => {
|
1461
|
+
if (pageNumber === previous) {
|
1462
|
+
return;
|
1463
|
+
}
|
1464
|
+
|
1465
|
+
dispatchPageClose(previous);
|
1466
|
+
dispatchPageOpen(pageNumber);
|
1467
|
+
};
|
1468
|
+
|
1469
|
+
eventBus._on("pagechanging", scriptingEvents.onPageChanging);
|
1470
|
+
|
1471
|
+
scriptingEvents.onPageRendered = ({
|
1472
|
+
pageNumber
|
1473
|
+
}) => {
|
1474
|
+
if (!pageOpenPendingSet.has(pageNumber)) {
|
1475
|
+
return;
|
1476
|
+
}
|
1477
|
+
|
1478
|
+
if (pageNumber !== this._currentPageNumber) {
|
1479
|
+
return;
|
1480
|
+
}
|
1481
|
+
|
1482
|
+
dispatchPageOpen(pageNumber);
|
1483
|
+
};
|
1484
|
+
|
1485
|
+
eventBus._on("pagerendered", scriptingEvents.onPageRendered);
|
1486
|
+
|
1487
|
+
scriptingEvents.onPagesDestroy = () => {
|
1488
|
+
dispatchPageClose(this._currentPageNumber);
|
1489
|
+
};
|
1490
|
+
|
1491
|
+
eventBus._on("pagesdestroy", scriptingEvents.onPagesDestroy);
|
1492
|
+
|
1493
|
+
dispatchPageOpen(this._currentPageNumber);
|
1494
|
+
}
|
1495
|
+
|
1496
|
+
_resetScriptingEvents() {
|
1497
|
+
if (!this.enableScripting || !this._pageOpenPendingSet) {
|
1498
|
+
return;
|
1499
|
+
}
|
1500
|
+
|
1501
|
+
const eventBus = this.eventBus,
|
1502
|
+
scriptingEvents = this._scriptingEvents;
|
1503
|
+
|
1504
|
+
eventBus._off("pagechanging", scriptingEvents.onPageChanging);
|
1505
|
+
|
1506
|
+
scriptingEvents.onPageChanging = null;
|
1507
|
+
|
1508
|
+
eventBus._off("pagerendered", scriptingEvents.onPageRendered);
|
1509
|
+
|
1510
|
+
scriptingEvents.onPageRendered = null;
|
1511
|
+
|
1512
|
+
eventBus._off("pagesdestroy", scriptingEvents.onPagesDestroy);
|
1513
|
+
|
1514
|
+
scriptingEvents.onPagesDestroy = null;
|
1515
|
+
this._pageOpenPendingSet = null;
|
1516
|
+
}
|
1517
|
+
|
1182
1518
|
}
|
1183
1519
|
|
1184
1520
|
exports.BaseViewer = BaseViewer;
|
package/lib/web/chromecom.js
CHANGED
@@ -36,6 +36,8 @@ var _download_manager = require("./download_manager.js");
|
|
36
36
|
|
37
37
|
var _genericl10n = require("./genericl10n.js");
|
38
38
|
|
39
|
+
var _generic_scripting = require("./generic_scripting.js");
|
40
|
+
|
39
41
|
{
|
40
42
|
throw new Error('Module "pdfjs-web/chromecom" shall not be used outside CHROME build.');
|
41
43
|
}
|
@@ -376,7 +378,7 @@ class ChromeExternalServices extends _app.DefaultExternalServices {
|
|
376
378
|
}
|
377
379
|
|
378
380
|
static createDownloadManager(options) {
|
379
|
-
return new _download_manager.DownloadManager(
|
381
|
+
return new _download_manager.DownloadManager();
|
380
382
|
}
|
381
383
|
|
382
384
|
static createPreferences() {
|
@@ -387,6 +389,12 @@ class ChromeExternalServices extends _app.DefaultExternalServices {
|
|
387
389
|
return new _genericl10n.GenericL10n(navigator.language);
|
388
390
|
}
|
389
391
|
|
392
|
+
static createScripting({
|
393
|
+
sandboxBundleSrc
|
394
|
+
}) {
|
395
|
+
return new _generic_scripting.GenericScripting(sandboxBundleSrc);
|
396
|
+
}
|
397
|
+
|
390
398
|
}
|
391
399
|
|
392
400
|
_app.PDFViewerApplication.externalServices = ChromeExternalServices;
|
package/lib/web/debugger.js
CHANGED
@@ -132,7 +132,7 @@ var FontInspector = function FontInspectorClosure() {
|
|
132
132
|
var download = document.createElement("a");
|
133
133
|
|
134
134
|
if (url) {
|
135
|
-
url = /url\(['"]?([
|
135
|
+
url = /url\(['"]?([^)"']+)/.exec(url);
|
136
136
|
download.href = url[1];
|
137
137
|
} else if (fontObj.data) {
|
138
138
|
download.href = URL.createObjectURL(new Blob([fontObj.data], {
|
@@ -415,7 +415,6 @@ var Stepper = function StepperClosure() {
|
|
415
415
|
}
|
416
416
|
|
417
417
|
if (operatorsToDisplay < operatorList.fnArray.length) {
|
418
|
-
line = c("tr");
|
419
418
|
var lastCell = c("td", "...");
|
420
419
|
lastCell.colspan = 4;
|
421
420
|
chunk.appendChild(lastCell);
|
@@ -61,26 +61,11 @@ class DownloadManager {
|
|
61
61
|
}
|
62
62
|
|
63
63
|
downloadData(data, filename, contentType) {
|
64
|
-
if (navigator.msSaveBlob) {
|
65
|
-
navigator.msSaveBlob(new Blob([data], {
|
66
|
-
type: contentType
|
67
|
-
}), filename);
|
68
|
-
return;
|
69
|
-
}
|
70
|
-
|
71
64
|
const blobUrl = (0, _pdf.createObjectURL)(data, contentType, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL);
|
72
65
|
download(blobUrl, filename);
|
73
66
|
}
|
74
67
|
|
75
68
|
download(blob, url, filename, sourceEventType = "download") {
|
76
|
-
if (navigator.msSaveBlob) {
|
77
|
-
if (!navigator.msSaveBlob(blob, filename)) {
|
78
|
-
this.downloadUrl(url, filename);
|
79
|
-
}
|
80
|
-
|
81
|
-
return;
|
82
|
-
}
|
83
|
-
|
84
69
|
if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
|
85
70
|
this.downloadUrl(url, filename);
|
86
71
|
return;
|