pdfjs-dist 2.5.207 → 2.6.347
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/bower.json +1 -1
- package/build/pdf.js +867 -216
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +10214 -8547
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/es5/build/pdf.js +2023 -1046
- package/es5/build/pdf.js.map +1 -1
- package/es5/build/pdf.min.js +22 -0
- package/es5/build/pdf.worker.js +11136 -8144
- package/es5/build/pdf.worker.js.map +1 -1
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/pdf_viewer.css +8 -5
- package/es5/web/pdf_viewer.js +195 -51
- package/es5/web/pdf_viewer.js.map +1 -1
- package/image_decoders/pdf.image_decoders.js +24 -16
- 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 +479 -43
- package/lib/core/cff_parser.js +643 -615
- package/lib/core/chunked_stream.js +64 -50
- package/lib/core/colorspace.js +126 -104
- package/lib/core/crypto.js +37 -0
- package/lib/core/document.js +128 -75
- package/lib/core/evaluator.js +3015 -2754
- package/lib/core/fonts.js +47 -46
- package/lib/core/function.js +79 -6
- package/lib/core/image.js +364 -357
- package/lib/core/image_utils.js +109 -8
- package/lib/core/jpg.js +8 -3
- package/lib/core/obj.js +255 -34
- package/lib/core/operator_list.js +17 -15
- package/lib/core/parser.js +40 -3
- package/lib/core/pattern.js +24 -11
- package/lib/core/primitives.js +112 -53
- package/lib/core/type1_parser.js +2 -0
- package/lib/core/worker.js +102 -37
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +51 -10
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +140 -54
- package/lib/display/canvas.js +215 -46
- package/lib/display/display_utils.js +55 -18
- package/lib/display/fetch_stream.js +6 -0
- package/lib/display/font_loader.js +26 -15
- package/lib/display/metadata.js +1 -7
- package/lib/display/network.js +0 -14
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/svg.js +1 -1
- package/lib/display/text_layer.js +4 -1
- package/lib/pdf.js +2 -2
- package/lib/pdf.worker.js +2 -2
- package/lib/shared/is_node.js +1 -1
- package/lib/shared/util.js +13 -10
- package/lib/test/unit/annotation_spec.js +520 -50
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +16 -6
- package/lib/test/unit/cmap_spec.js +4 -4
- package/lib/test/unit/colorspace_spec.js +216 -24
- package/lib/test/unit/crypto_spec.js +51 -4
- package/lib/test/unit/custom_spec.js +129 -1
- package/lib/test/unit/document_spec.js +112 -1
- package/lib/test/unit/evaluator_spec.js +29 -10
- package/lib/test/unit/jasmine-boot.js +1 -1
- package/lib/test/unit/metadata_spec.js +3 -3
- package/lib/test/unit/primitives_spec.js +242 -63
- package/lib/test/unit/test_utils.js +42 -89
- package/lib/test/unit/testreporter.js +17 -6
- package/lib/test/unit/util_spec.js +13 -12
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +13 -9
- package/lib/web/app.js +231 -26
- package/lib/web/app_options.js +1 -6
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +53 -4
- package/lib/web/download_manager.js +3 -10
- package/lib/web/firefox_print_service.js +32 -12
- package/lib/web/firefoxcom.js +20 -6
- package/lib/web/interfaces.js +1 -1
- package/lib/web/pdf_attachment_viewer.js +80 -38
- package/lib/web/pdf_find_controller.js +2 -1
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_outline_viewer.js +24 -57
- package/lib/web/pdf_page_view.js +29 -6
- package/lib/web/pdf_print_service.js +13 -11
- package/lib/web/pdf_sidebar.js +46 -25
- package/lib/web/pdf_thumbnail_view.js +16 -3
- package/lib/web/pdf_thumbnail_viewer.js +17 -1
- package/lib/web/pdf_viewer.component.js +2 -2
- package/lib/web/preferences.js +1 -1
- package/lib/web/toolbar.js +1 -1
- package/lib/web/ui_utils.js +7 -1
- package/package.json +3 -1
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +8 -5
- package/web/pdf_viewer.js +109 -33
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +1 -9
- package/es5/web/images/texture.png +0 -0
- package/web/images/texture.png +0 -0
package/lib/core/image_utils.js
CHANGED
@@ -24,16 +24,23 @@
|
|
24
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.GlobalImageCache = exports.LocalImageCache = void 0;
|
27
|
+
exports.GlobalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.LocalImageCache = void 0;
|
28
28
|
|
29
29
|
var _util = require("../shared/util.js");
|
30
30
|
|
31
31
|
var _primitives = require("./primitives.js");
|
32
32
|
|
33
|
-
class
|
34
|
-
constructor() {
|
35
|
-
this.
|
36
|
-
|
33
|
+
class BaseLocalCache {
|
34
|
+
constructor(options) {
|
35
|
+
if (this.constructor === BaseLocalCache) {
|
36
|
+
(0, _util.unreachable)("Cannot initialize BaseLocalCache.");
|
37
|
+
}
|
38
|
+
|
39
|
+
if (!options || !options.onlyRefs) {
|
40
|
+
this._nameRefMap = new Map();
|
41
|
+
this._imageMap = new Map();
|
42
|
+
}
|
43
|
+
|
37
44
|
this._imageCache = new _primitives.RefSetCache();
|
38
45
|
}
|
39
46
|
|
@@ -51,6 +58,13 @@ class LocalImageCache {
|
|
51
58
|
return this._imageCache.get(ref) || null;
|
52
59
|
}
|
53
60
|
|
61
|
+
set(name, ref, data) {
|
62
|
+
(0, _util.unreachable)("Abstract method `set` called.");
|
63
|
+
}
|
64
|
+
|
65
|
+
}
|
66
|
+
|
67
|
+
class LocalImageCache extends BaseLocalCache {
|
54
68
|
set(name, ref = null, data) {
|
55
69
|
if (!name) {
|
56
70
|
throw new Error('LocalImageCache.set - expected "name" argument.');
|
@@ -79,6 +93,93 @@ class LocalImageCache {
|
|
79
93
|
|
80
94
|
exports.LocalImageCache = LocalImageCache;
|
81
95
|
|
96
|
+
class LocalColorSpaceCache extends BaseLocalCache {
|
97
|
+
set(name = null, ref = null, data) {
|
98
|
+
if (!name && !ref) {
|
99
|
+
throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');
|
100
|
+
}
|
101
|
+
|
102
|
+
if (ref) {
|
103
|
+
if (this._imageCache.has(ref)) {
|
104
|
+
return;
|
105
|
+
}
|
106
|
+
|
107
|
+
if (name) {
|
108
|
+
this._nameRefMap.set(name, ref);
|
109
|
+
}
|
110
|
+
|
111
|
+
this._imageCache.put(ref, data);
|
112
|
+
|
113
|
+
return;
|
114
|
+
}
|
115
|
+
|
116
|
+
if (this._imageMap.has(name)) {
|
117
|
+
return;
|
118
|
+
}
|
119
|
+
|
120
|
+
this._imageMap.set(name, data);
|
121
|
+
}
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
exports.LocalColorSpaceCache = LocalColorSpaceCache;
|
126
|
+
|
127
|
+
class LocalFunctionCache extends BaseLocalCache {
|
128
|
+
constructor(options) {
|
129
|
+
super({
|
130
|
+
onlyRefs: true
|
131
|
+
});
|
132
|
+
}
|
133
|
+
|
134
|
+
getByName(name) {
|
135
|
+
(0, _util.unreachable)("Should not call `getByName` method.");
|
136
|
+
}
|
137
|
+
|
138
|
+
set(name = null, ref, data) {
|
139
|
+
if (!ref) {
|
140
|
+
throw new Error('LocalFunctionCache.set - expected "ref" argument.');
|
141
|
+
}
|
142
|
+
|
143
|
+
if (this._imageCache.has(ref)) {
|
144
|
+
return;
|
145
|
+
}
|
146
|
+
|
147
|
+
this._imageCache.put(ref, data);
|
148
|
+
}
|
149
|
+
|
150
|
+
}
|
151
|
+
|
152
|
+
exports.LocalFunctionCache = LocalFunctionCache;
|
153
|
+
|
154
|
+
class LocalGStateCache extends BaseLocalCache {
|
155
|
+
set(name, ref = null, data) {
|
156
|
+
if (!name) {
|
157
|
+
throw new Error('LocalGStateCache.set - expected "name" argument.');
|
158
|
+
}
|
159
|
+
|
160
|
+
if (ref) {
|
161
|
+
if (this._imageCache.has(ref)) {
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
|
165
|
+
this._nameRefMap.set(name, ref);
|
166
|
+
|
167
|
+
this._imageCache.put(ref, data);
|
168
|
+
|
169
|
+
return;
|
170
|
+
}
|
171
|
+
|
172
|
+
if (this._imageMap.has(name)) {
|
173
|
+
return;
|
174
|
+
}
|
175
|
+
|
176
|
+
this._imageMap.set(name, data);
|
177
|
+
}
|
178
|
+
|
179
|
+
}
|
180
|
+
|
181
|
+
exports.LocalGStateCache = LocalGStateCache;
|
182
|
+
|
82
183
|
class GlobalImageCache {
|
83
184
|
static get NUM_PAGES_THRESHOLD() {
|
84
185
|
return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
|
@@ -122,12 +223,12 @@ class GlobalImageCache {
|
|
122
223
|
}
|
123
224
|
|
124
225
|
getData(ref, pageIndex) {
|
125
|
-
|
226
|
+
const pageIndexSet = this._refCache.get(ref);
|
227
|
+
|
228
|
+
if (!pageIndexSet) {
|
126
229
|
return null;
|
127
230
|
}
|
128
231
|
|
129
|
-
const pageIndexSet = this._refCache.get(ref);
|
130
|
-
|
131
232
|
if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
|
132
233
|
return null;
|
133
234
|
}
|
package/lib/core/jpg.js
CHANGED
@@ -154,9 +154,9 @@ var JpegImage = function JpegImageClosure() {
|
|
154
154
|
}
|
155
155
|
} else if (nextByte === 0xd9) {
|
156
156
|
if (parseDNLMarker) {
|
157
|
-
const maybeScanLines = blockRow * 8;
|
157
|
+
const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);
|
158
158
|
|
159
|
-
if (maybeScanLines > 0 &&
|
159
|
+
if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) {
|
160
160
|
throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
|
161
161
|
}
|
162
162
|
}
|
@@ -976,8 +976,10 @@ var JpegImage = function JpegImageClosure() {
|
|
976
976
|
component;
|
977
977
|
|
978
978
|
for (i = 0; i < selectorsCount; i++) {
|
979
|
-
|
979
|
+
const index = data[offset++];
|
980
|
+
var componentIndex = frame.componentIds[index];
|
980
981
|
component = frame.components[componentIndex];
|
982
|
+
component.index = index;
|
981
983
|
var tableSpec = data[offset++];
|
982
984
|
component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
|
983
985
|
component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
|
@@ -1054,6 +1056,7 @@ var JpegImage = function JpegImageClosure() {
|
|
1054
1056
|
}
|
1055
1057
|
|
1056
1058
|
this.components.push({
|
1059
|
+
index: component.index,
|
1057
1060
|
output: buildComponentData(frame, component),
|
1058
1061
|
scaleX: component.h / frame.maxH,
|
1059
1062
|
scaleY: component.v / frame.maxV,
|
@@ -1134,6 +1137,8 @@ var JpegImage = function JpegImageClosure() {
|
|
1134
1137
|
if (this.numComponents === 3) {
|
1135
1138
|
if (this._colorTransform === 0) {
|
1136
1139
|
return false;
|
1140
|
+
} else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {
|
1141
|
+
return false;
|
1137
1142
|
}
|
1138
1143
|
|
1139
1144
|
return true;
|
package/lib/core/obj.js
CHANGED
@@ -48,9 +48,9 @@ class Catalog {
|
|
48
48
|
constructor(pdfManager, xref) {
|
49
49
|
this.pdfManager = pdfManager;
|
50
50
|
this.xref = xref;
|
51
|
-
this.
|
51
|
+
this._catDict = xref.getCatalogObj();
|
52
52
|
|
53
|
-
if (!(0, _primitives.isDict)(this.
|
53
|
+
if (!(0, _primitives.isDict)(this._catDict)) {
|
54
54
|
throw new _util.FormatError("Catalog object is not a dictionary.");
|
55
55
|
}
|
56
56
|
|
@@ -60,8 +60,58 @@ class Catalog {
|
|
60
60
|
this.pageKidsCountCache = new _primitives.RefSetCache();
|
61
61
|
}
|
62
62
|
|
63
|
+
get version() {
|
64
|
+
const version = this._catDict.get("Version");
|
65
|
+
|
66
|
+
if (!(0, _primitives.isName)(version)) {
|
67
|
+
return (0, _util.shadow)(this, "version", null);
|
68
|
+
}
|
69
|
+
|
70
|
+
return (0, _util.shadow)(this, "version", version.name);
|
71
|
+
}
|
72
|
+
|
73
|
+
get collection() {
|
74
|
+
let collection = null;
|
75
|
+
|
76
|
+
try {
|
77
|
+
const obj = this._catDict.get("Collection");
|
78
|
+
|
79
|
+
if ((0, _primitives.isDict)(obj) && obj.size > 0) {
|
80
|
+
collection = obj;
|
81
|
+
}
|
82
|
+
} catch (ex) {
|
83
|
+
if (ex instanceof _core_utils.MissingDataException) {
|
84
|
+
throw ex;
|
85
|
+
}
|
86
|
+
|
87
|
+
(0, _util.info)("Cannot fetch Collection entry; assuming no collection is present.");
|
88
|
+
}
|
89
|
+
|
90
|
+
return (0, _util.shadow)(this, "collection", collection);
|
91
|
+
}
|
92
|
+
|
93
|
+
get acroForm() {
|
94
|
+
let acroForm = null;
|
95
|
+
|
96
|
+
try {
|
97
|
+
const obj = this._catDict.get("AcroForm");
|
98
|
+
|
99
|
+
if ((0, _primitives.isDict)(obj) && obj.size > 0) {
|
100
|
+
acroForm = obj;
|
101
|
+
}
|
102
|
+
} catch (ex) {
|
103
|
+
if (ex instanceof _core_utils.MissingDataException) {
|
104
|
+
throw ex;
|
105
|
+
}
|
106
|
+
|
107
|
+
(0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present.");
|
108
|
+
}
|
109
|
+
|
110
|
+
return (0, _util.shadow)(this, "acroForm", acroForm);
|
111
|
+
}
|
112
|
+
|
63
113
|
get metadata() {
|
64
|
-
const streamRef = this.
|
114
|
+
const streamRef = this._catDict.getRaw("Metadata");
|
65
115
|
|
66
116
|
if (!(0, _primitives.isRef)(streamRef)) {
|
67
117
|
return (0, _util.shadow)(this, "metadata", null);
|
@@ -92,7 +142,7 @@ class Catalog {
|
|
92
142
|
}
|
93
143
|
|
94
144
|
get toplevelPagesDict() {
|
95
|
-
const pagesObj = this.
|
145
|
+
const pagesObj = this._catDict.get("Pages");
|
96
146
|
|
97
147
|
if (!(0, _primitives.isDict)(pagesObj)) {
|
98
148
|
throw new _util.FormatError("Invalid top-level pages dictionary.");
|
@@ -118,7 +168,7 @@ class Catalog {
|
|
118
168
|
}
|
119
169
|
|
120
170
|
_readDocumentOutline() {
|
121
|
-
let obj = this.
|
171
|
+
let obj = this._catDict.get("Outlines");
|
122
172
|
|
123
173
|
if (!(0, _primitives.isDict)(obj)) {
|
124
174
|
return null;
|
@@ -253,6 +303,166 @@ class Catalog {
|
|
253
303
|
return permissions;
|
254
304
|
}
|
255
305
|
|
306
|
+
get optionalContentConfig() {
|
307
|
+
let config = null;
|
308
|
+
|
309
|
+
try {
|
310
|
+
const properties = this._catDict.get("OCProperties");
|
311
|
+
|
312
|
+
if (!properties) {
|
313
|
+
return (0, _util.shadow)(this, "optionalContentConfig", null);
|
314
|
+
}
|
315
|
+
|
316
|
+
const defaultConfig = properties.get("D");
|
317
|
+
|
318
|
+
if (!defaultConfig) {
|
319
|
+
return (0, _util.shadow)(this, "optionalContentConfig", null);
|
320
|
+
}
|
321
|
+
|
322
|
+
const groupsData = properties.get("OCGs");
|
323
|
+
|
324
|
+
if (!Array.isArray(groupsData)) {
|
325
|
+
return (0, _util.shadow)(this, "optionalContentConfig", null);
|
326
|
+
}
|
327
|
+
|
328
|
+
const groups = [];
|
329
|
+
const groupRefs = [];
|
330
|
+
|
331
|
+
for (const groupRef of groupsData) {
|
332
|
+
if (!(0, _primitives.isRef)(groupRef)) {
|
333
|
+
continue;
|
334
|
+
}
|
335
|
+
|
336
|
+
groupRefs.push(groupRef);
|
337
|
+
const group = this.xref.fetchIfRef(groupRef);
|
338
|
+
groups.push({
|
339
|
+
id: groupRef.toString(),
|
340
|
+
name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null,
|
341
|
+
intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null
|
342
|
+
});
|
343
|
+
}
|
344
|
+
|
345
|
+
config = this._readOptionalContentConfig(defaultConfig, groupRefs);
|
346
|
+
config.groups = groups;
|
347
|
+
} catch (ex) {
|
348
|
+
if (ex instanceof _core_utils.MissingDataException) {
|
349
|
+
throw ex;
|
350
|
+
}
|
351
|
+
|
352
|
+
(0, _util.warn)(`Unable to read optional content config: ${ex}`);
|
353
|
+
}
|
354
|
+
|
355
|
+
return (0, _util.shadow)(this, "optionalContentConfig", config);
|
356
|
+
}
|
357
|
+
|
358
|
+
_readOptionalContentConfig(config, contentGroupRefs) {
|
359
|
+
function parseOnOff(refs) {
|
360
|
+
const onParsed = [];
|
361
|
+
|
362
|
+
if (Array.isArray(refs)) {
|
363
|
+
for (const value of refs) {
|
364
|
+
if (!(0, _primitives.isRef)(value)) {
|
365
|
+
continue;
|
366
|
+
}
|
367
|
+
|
368
|
+
if (contentGroupRefs.includes(value)) {
|
369
|
+
onParsed.push(value.toString());
|
370
|
+
}
|
371
|
+
}
|
372
|
+
}
|
373
|
+
|
374
|
+
return onParsed;
|
375
|
+
}
|
376
|
+
|
377
|
+
function parseOrder(refs, nestedLevels = 0) {
|
378
|
+
if (!Array.isArray(refs)) {
|
379
|
+
return null;
|
380
|
+
}
|
381
|
+
|
382
|
+
const order = [];
|
383
|
+
|
384
|
+
for (const value of refs) {
|
385
|
+
if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) {
|
386
|
+
parsedOrderRefs.put(value);
|
387
|
+
order.push(value.toString());
|
388
|
+
continue;
|
389
|
+
}
|
390
|
+
|
391
|
+
const nestedOrder = parseNestedOrder(value, nestedLevels);
|
392
|
+
|
393
|
+
if (nestedOrder) {
|
394
|
+
order.push(nestedOrder);
|
395
|
+
}
|
396
|
+
}
|
397
|
+
|
398
|
+
if (nestedLevels > 0) {
|
399
|
+
return order;
|
400
|
+
}
|
401
|
+
|
402
|
+
const hiddenGroups = [];
|
403
|
+
|
404
|
+
for (const groupRef of contentGroupRefs) {
|
405
|
+
if (parsedOrderRefs.has(groupRef)) {
|
406
|
+
continue;
|
407
|
+
}
|
408
|
+
|
409
|
+
hiddenGroups.push(groupRef.toString());
|
410
|
+
}
|
411
|
+
|
412
|
+
if (hiddenGroups.length) {
|
413
|
+
order.push({
|
414
|
+
name: null,
|
415
|
+
order: hiddenGroups
|
416
|
+
});
|
417
|
+
}
|
418
|
+
|
419
|
+
return order;
|
420
|
+
}
|
421
|
+
|
422
|
+
function parseNestedOrder(ref, nestedLevels) {
|
423
|
+
if (++nestedLevels > MAX_NESTED_LEVELS) {
|
424
|
+
(0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS.");
|
425
|
+
return null;
|
426
|
+
}
|
427
|
+
|
428
|
+
const value = xref.fetchIfRef(ref);
|
429
|
+
|
430
|
+
if (!Array.isArray(value)) {
|
431
|
+
return null;
|
432
|
+
}
|
433
|
+
|
434
|
+
const nestedName = xref.fetchIfRef(value[0]);
|
435
|
+
|
436
|
+
if (typeof nestedName !== "string") {
|
437
|
+
return null;
|
438
|
+
}
|
439
|
+
|
440
|
+
const nestedOrder = parseOrder(value.slice(1), nestedLevels);
|
441
|
+
|
442
|
+
if (!nestedOrder || !nestedOrder.length) {
|
443
|
+
return null;
|
444
|
+
}
|
445
|
+
|
446
|
+
return {
|
447
|
+
name: (0, _util.stringToPDFString)(nestedName),
|
448
|
+
order: nestedOrder
|
449
|
+
};
|
450
|
+
}
|
451
|
+
|
452
|
+
const xref = this.xref,
|
453
|
+
parsedOrderRefs = new _primitives.RefSet(),
|
454
|
+
MAX_NESTED_LEVELS = 10;
|
455
|
+
return {
|
456
|
+
name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null,
|
457
|
+
creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null,
|
458
|
+
baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null,
|
459
|
+
on: parseOnOff(config.get("ON")),
|
460
|
+
off: parseOnOff(config.get("OFF")),
|
461
|
+
order: parseOrder(config.get("Order")),
|
462
|
+
groups: null
|
463
|
+
};
|
464
|
+
}
|
465
|
+
|
256
466
|
get numPages() {
|
257
467
|
const obj = this.toplevelPagesDict.get("Count");
|
258
468
|
|
@@ -295,12 +505,12 @@ class Catalog {
|
|
295
505
|
}
|
296
506
|
|
297
507
|
_readDests() {
|
298
|
-
const obj = this.
|
508
|
+
const obj = this._catDict.get("Names");
|
299
509
|
|
300
510
|
if (obj && obj.has("Dests")) {
|
301
511
|
return new NameTree(obj.getRaw("Dests"), this.xref);
|
302
|
-
} else if (this.
|
303
|
-
return this.
|
512
|
+
} else if (this._catDict.has("Dests")) {
|
513
|
+
return this._catDict.get("Dests");
|
304
514
|
}
|
305
515
|
|
306
516
|
return undefined;
|
@@ -323,7 +533,7 @@ class Catalog {
|
|
323
533
|
}
|
324
534
|
|
325
535
|
_readPageLabels() {
|
326
|
-
const obj = this.
|
536
|
+
const obj = this._catDict.getRaw("PageLabels");
|
327
537
|
|
328
538
|
if (!obj) {
|
329
539
|
return null;
|
@@ -429,7 +639,8 @@ class Catalog {
|
|
429
639
|
}
|
430
640
|
|
431
641
|
get pageLayout() {
|
432
|
-
const obj = this.
|
642
|
+
const obj = this._catDict.get("PageLayout");
|
643
|
+
|
433
644
|
let pageLayout = "";
|
434
645
|
|
435
646
|
if ((0, _primitives.isName)(obj)) {
|
@@ -448,7 +659,8 @@ class Catalog {
|
|
448
659
|
}
|
449
660
|
|
450
661
|
get pageMode() {
|
451
|
-
const obj = this.
|
662
|
+
const obj = this._catDict.get("PageMode");
|
663
|
+
|
452
664
|
let pageMode = "UseNone";
|
453
665
|
|
454
666
|
if ((0, _primitives.isName)(obj)) {
|
@@ -486,7 +698,9 @@ class Catalog {
|
|
486
698
|
PrintPageRange: Array.isArray,
|
487
699
|
NumCopies: Number.isInteger
|
488
700
|
};
|
489
|
-
|
701
|
+
|
702
|
+
const obj = this._catDict.get("ViewerPreferences");
|
703
|
+
|
490
704
|
let prefs = null;
|
491
705
|
|
492
706
|
if ((0, _primitives.isDict)(obj)) {
|
@@ -627,7 +841,8 @@ class Catalog {
|
|
627
841
|
}
|
628
842
|
|
629
843
|
get openAction() {
|
630
|
-
const obj = this.
|
844
|
+
const obj = this._catDict.get("OpenAction");
|
845
|
+
|
631
846
|
let openAction = null;
|
632
847
|
|
633
848
|
if ((0, _primitives.isDict)(obj)) {
|
@@ -668,7 +883,8 @@ class Catalog {
|
|
668
883
|
}
|
669
884
|
|
670
885
|
get attachments() {
|
671
|
-
const obj = this.
|
886
|
+
const obj = this._catDict.get("Names");
|
887
|
+
|
672
888
|
let attachments = null;
|
673
889
|
|
674
890
|
if (obj && obj.has("EmbeddedFiles")) {
|
@@ -690,7 +906,8 @@ class Catalog {
|
|
690
906
|
}
|
691
907
|
|
692
908
|
get javaScript() {
|
693
|
-
const obj = this.
|
909
|
+
const obj = this._catDict.get("Names");
|
910
|
+
|
694
911
|
let javaScript = null;
|
695
912
|
|
696
913
|
function appendIfJavaScriptDict(jsDict) {
|
@@ -728,7 +945,7 @@ class Catalog {
|
|
728
945
|
}
|
729
946
|
}
|
730
947
|
|
731
|
-
const openAction = this.
|
948
|
+
const openAction = this._catDict.get("OpenAction");
|
732
949
|
|
733
950
|
if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) {
|
734
951
|
appendIfJavaScriptDict(openAction);
|
@@ -774,7 +991,7 @@ class Catalog {
|
|
774
991
|
|
775
992
|
getPageDict(pageIndex) {
|
776
993
|
const capability = (0, _util.createPromiseCapability)();
|
777
|
-
const nodesToVisit = [this.
|
994
|
+
const nodesToVisit = [this._catDict.getRaw("Pages")];
|
778
995
|
const visitedNodes = new _primitives.RefSet();
|
779
996
|
const xref = this.xref,
|
780
997
|
pageKidsCountCache = this.pageKidsCountCache;
|
@@ -1139,9 +1356,20 @@ var XRef = function XRefClosure() {
|
|
1139
1356
|
streamTypes: Object.create(null),
|
1140
1357
|
fontTypes: Object.create(null)
|
1141
1358
|
};
|
1359
|
+
this._newRefNum = null;
|
1142
1360
|
}
|
1143
1361
|
|
1144
1362
|
XRef.prototype = {
|
1363
|
+
getNewRef: function XRef_getNewRef() {
|
1364
|
+
if (this._newRefNum === null) {
|
1365
|
+
this._newRefNum = this.entries.length;
|
1366
|
+
}
|
1367
|
+
|
1368
|
+
return _primitives.Ref.get(this._newRefNum++, 0);
|
1369
|
+
},
|
1370
|
+
resetNewRef: function XRef_resetNewRef() {
|
1371
|
+
this._newRefNum = null;
|
1372
|
+
},
|
1145
1373
|
setStartXRef: function XRef_setStartXRef(startXRef) {
|
1146
1374
|
this.startXRefQueue = [startXRef];
|
1147
1375
|
},
|
@@ -2143,24 +2371,17 @@ const ObjectLoader = function () {
|
|
2143
2371
|
}
|
2144
2372
|
|
2145
2373
|
function addChildren(node, nodesToVisit) {
|
2146
|
-
if (node instanceof _primitives.Dict
|
2147
|
-
|
2148
|
-
|
2149
|
-
|
2150
|
-
|
2151
|
-
|
2152
|
-
|
2153
|
-
if (mayHaveChildren(rawValue)) {
|
2154
|
-
nodesToVisit.push(rawValue);
|
2155
|
-
}
|
2156
|
-
}
|
2157
|
-
} else if (Array.isArray(node)) {
|
2158
|
-
for (let i = 0, ii = node.length; i < ii; i++) {
|
2159
|
-
const value = node[i];
|
2374
|
+
if (node instanceof _primitives.Dict) {
|
2375
|
+
node = node.getRawValues();
|
2376
|
+
} else if ((0, _primitives.isStream)(node)) {
|
2377
|
+
node = node.dict.getRawValues();
|
2378
|
+
} else if (!Array.isArray(node)) {
|
2379
|
+
return;
|
2380
|
+
}
|
2160
2381
|
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2382
|
+
for (const rawValue of node) {
|
2383
|
+
if (mayHaveChildren(rawValue)) {
|
2384
|
+
nodesToVisit.push(rawValue);
|
2164
2385
|
}
|
2165
2386
|
}
|
2166
2387
|
}
|
@@ -212,18 +212,20 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
212
212
|
var isSameImage = false;
|
213
213
|
var iTransform, transformArgs;
|
214
214
|
var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
|
215
|
+
const firstTransformArg0 = argsArray[iFirstTransform][0],
|
216
|
+
firstTransformArg1 = argsArray[iFirstTransform][1],
|
217
|
+
firstTransformArg2 = argsArray[iFirstTransform][2],
|
218
|
+
firstTransformArg3 = argsArray[iFirstTransform][3];
|
215
219
|
|
216
|
-
if (
|
220
|
+
if (firstTransformArg1 === firstTransformArg2) {
|
217
221
|
isSameImage = true;
|
218
|
-
var firstTransformArg0 = argsArray[iFirstTransform][0];
|
219
|
-
var firstTransformArg3 = argsArray[iFirstTransform][3];
|
220
222
|
iTransform = iFirstTransform + 4;
|
221
223
|
var iPIMXO = iFirstPIMXO + 4;
|
222
224
|
|
223
225
|
for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
|
224
226
|
transformArgs = argsArray[iTransform];
|
225
227
|
|
226
|
-
if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !==
|
228
|
+
if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {
|
227
229
|
if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
|
228
230
|
isSameImage = false;
|
229
231
|
} else {
|
@@ -247,7 +249,7 @@ var QueueOptimizer = function QueueOptimizerClosure() {
|
|
247
249
|
}
|
248
250
|
|
249
251
|
fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
|
250
|
-
argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
|
252
|
+
argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);
|
251
253
|
} else {
|
252
254
|
count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
|
253
255
|
var images = [];
|
@@ -543,7 +545,7 @@ var OperatorList = function OperatorListClosure() {
|
|
543
545
|
var CHUNK_SIZE = 1000;
|
544
546
|
var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
|
545
547
|
|
546
|
-
function OperatorList(intent, streamSink
|
548
|
+
function OperatorList(intent, streamSink) {
|
547
549
|
this._streamSink = streamSink;
|
548
550
|
this.fnArray = [];
|
549
551
|
this.argsArray = [];
|
@@ -554,10 +556,8 @@ var OperatorList = function OperatorListClosure() {
|
|
554
556
|
this.optimizer = new NullOptimizer(this);
|
555
557
|
}
|
556
558
|
|
557
|
-
this.dependencies =
|
559
|
+
this.dependencies = new Set();
|
558
560
|
this._totalLength = 0;
|
559
|
-
this.pageIndex = pageIndex;
|
560
|
-
this.intent = intent;
|
561
561
|
this.weight = 0;
|
562
562
|
this._resolved = streamSink ? null : Promise.resolve();
|
563
563
|
}
|
@@ -589,17 +589,17 @@ var OperatorList = function OperatorListClosure() {
|
|
589
589
|
},
|
590
590
|
|
591
591
|
addDependency(dependency) {
|
592
|
-
if (
|
592
|
+
if (this.dependencies.has(dependency)) {
|
593
593
|
return;
|
594
594
|
}
|
595
595
|
|
596
|
-
this.dependencies
|
596
|
+
this.dependencies.add(dependency);
|
597
597
|
this.addOp(_util.OPS.dependency, [dependency]);
|
598
598
|
},
|
599
599
|
|
600
600
|
addDependencies(dependencies) {
|
601
|
-
for (
|
602
|
-
this.addDependency(
|
601
|
+
for (const dependency of dependencies) {
|
602
|
+
this.addDependency(dependency);
|
603
603
|
}
|
604
604
|
},
|
605
605
|
|
@@ -609,7 +609,9 @@ var OperatorList = function OperatorListClosure() {
|
|
609
609
|
return;
|
610
610
|
}
|
611
611
|
|
612
|
-
|
612
|
+
for (const dependency of opList.dependencies) {
|
613
|
+
this.dependencies.add(dependency);
|
614
|
+
}
|
613
615
|
|
614
616
|
for (var i = 0, ii = opList.length; i < ii; i++) {
|
615
617
|
this.addOp(opList.fnArray[i], opList.argsArray[i]);
|
@@ -663,7 +665,7 @@ var OperatorList = function OperatorListClosure() {
|
|
663
665
|
length
|
664
666
|
}, 1, this._transfers);
|
665
667
|
|
666
|
-
this.dependencies
|
668
|
+
this.dependencies.clear();
|
667
669
|
this.fnArray.length = 0;
|
668
670
|
this.argsArray.length = 0;
|
669
671
|
this.weight = 0;
|