pdf-oxide 0.3.24 → 0.3.28
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.
- package/lib/builders/annotation-builder.d.ts +199 -0
- package/lib/builders/annotation-builder.d.ts.map +1 -0
- package/lib/builders/annotation-builder.js +318 -0
- package/lib/builders/annotation-builder.js.map +1 -0
- package/lib/builders/conversion-options-builder.d.ts +107 -0
- package/lib/builders/conversion-options-builder.d.ts.map +1 -0
- package/lib/builders/conversion-options-builder.js +215 -0
- package/lib/builders/conversion-options-builder.js.map +1 -0
- package/{src/builders/index.ts → lib/builders/index.d.ts} +1 -1
- package/lib/builders/index.d.ts.map +1 -0
- package/lib/builders/index.js +12 -0
- package/lib/builders/index.js.map +1 -0
- package/lib/builders/metadata-builder.d.ts +202 -0
- package/lib/builders/metadata-builder.d.ts.map +1 -0
- package/lib/builders/metadata-builder.js +286 -0
- package/lib/builders/metadata-builder.js.map +1 -0
- package/lib/builders/pdf-builder.d.ts +215 -0
- package/lib/builders/pdf-builder.d.ts.map +1 -0
- package/lib/builders/pdf-builder.js +339 -0
- package/lib/builders/pdf-builder.js.map +1 -0
- package/lib/builders/search-options-builder.d.ts +74 -0
- package/lib/builders/search-options-builder.d.ts.map +1 -0
- package/lib/builders/search-options-builder.js +130 -0
- package/lib/builders/search-options-builder.js.map +1 -0
- package/lib/document-editor-manager.d.ts +140 -0
- package/lib/document-editor-manager.d.ts.map +1 -0
- package/lib/document-editor-manager.js +257 -0
- package/lib/document-editor-manager.js.map +1 -0
- package/lib/errors.d.ts +383 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +1117 -0
- package/lib/errors.js.map +1 -0
- package/lib/form-field-manager.d.ts +300 -0
- package/lib/form-field-manager.d.ts.map +1 -0
- package/lib/form-field-manager.js +567 -0
- package/lib/form-field-manager.js.map +1 -0
- package/lib/hybrid-ml-manager.d.ts +143 -0
- package/lib/hybrid-ml-manager.d.ts.map +1 -0
- package/lib/hybrid-ml-manager.js +209 -0
- package/lib/hybrid-ml-manager.js.map +1 -0
- package/lib/index.d.ts +23 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +280 -0
- package/lib/index.js.map +1 -0
- package/lib/managers/accessibility-manager.d.ts +149 -0
- package/lib/managers/accessibility-manager.d.ts.map +1 -0
- package/lib/managers/accessibility-manager.js +224 -0
- package/lib/managers/accessibility-manager.js.map +1 -0
- package/lib/managers/annotation-manager.d.ts +220 -0
- package/lib/managers/annotation-manager.d.ts.map +1 -0
- package/lib/managers/annotation-manager.js +360 -0
- package/lib/managers/annotation-manager.js.map +1 -0
- package/lib/managers/barcode-manager.d.ts +80 -0
- package/lib/managers/barcode-manager.d.ts.map +1 -0
- package/lib/managers/barcode-manager.js +226 -0
- package/lib/managers/barcode-manager.js.map +1 -0
- package/lib/managers/batch-manager.d.ts +186 -0
- package/lib/managers/batch-manager.d.ts.map +1 -0
- package/lib/managers/batch-manager.js +389 -0
- package/lib/managers/batch-manager.js.map +1 -0
- package/lib/managers/cache-manager.d.ts +182 -0
- package/lib/managers/cache-manager.d.ts.map +1 -0
- package/lib/managers/cache-manager.js +387 -0
- package/lib/managers/cache-manager.js.map +1 -0
- package/lib/managers/compliance-manager.d.ts +104 -0
- package/lib/managers/compliance-manager.d.ts.map +1 -0
- package/lib/managers/compliance-manager.js +415 -0
- package/lib/managers/compliance-manager.js.map +1 -0
- package/lib/managers/content-manager.d.ts +121 -0
- package/lib/managers/content-manager.d.ts.map +1 -0
- package/lib/managers/content-manager.js +295 -0
- package/lib/managers/content-manager.js.map +1 -0
- package/lib/managers/document-utility-manager.d.ts +370 -0
- package/lib/managers/document-utility-manager.d.ts.map +1 -0
- package/lib/managers/document-utility-manager.js +731 -0
- package/lib/managers/document-utility-manager.js.map +1 -0
- package/lib/managers/dom-pdf-creator.d.ts +105 -0
- package/lib/managers/dom-pdf-creator.d.ts.map +1 -0
- package/lib/managers/dom-pdf-creator.js +300 -0
- package/lib/managers/dom-pdf-creator.js.map +1 -0
- package/lib/managers/editing-manager.d.ts +249 -0
- package/lib/managers/editing-manager.d.ts.map +1 -0
- package/lib/managers/editing-manager.js +388 -0
- package/lib/managers/editing-manager.js.map +1 -0
- package/lib/managers/enterprise-manager.d.ts +193 -0
- package/lib/managers/enterprise-manager.d.ts.map +1 -0
- package/lib/managers/enterprise-manager.js +305 -0
- package/lib/managers/enterprise-manager.js.map +1 -0
- package/lib/managers/extended-managers.d.ts +123 -0
- package/lib/managers/extended-managers.d.ts.map +1 -0
- package/lib/managers/extended-managers.js +658 -0
- package/lib/managers/extended-managers.js.map +1 -0
- package/lib/managers/extraction-manager.d.ts +247 -0
- package/lib/managers/extraction-manager.d.ts.map +1 -0
- package/lib/managers/extraction-manager.js +478 -0
- package/lib/managers/extraction-manager.js.map +1 -0
- package/lib/managers/final-utilities.d.ts +128 -0
- package/lib/managers/final-utilities.d.ts.map +1 -0
- package/lib/managers/final-utilities.js +653 -0
- package/lib/managers/final-utilities.js.map +1 -0
- package/lib/managers/hybrid-ml-advanced.d.ts +137 -0
- package/lib/managers/hybrid-ml-advanced.d.ts.map +1 -0
- package/lib/managers/hybrid-ml-advanced.js +707 -0
- package/lib/managers/hybrid-ml-advanced.js.map +1 -0
- package/lib/managers/index.d.ts +65 -0
- package/lib/managers/index.d.ts.map +1 -0
- package/lib/managers/index.js +70 -0
- package/lib/managers/index.js.map +1 -0
- package/lib/managers/layer-manager.d.ts +204 -0
- package/lib/managers/layer-manager.d.ts.map +1 -0
- package/lib/managers/layer-manager.js +403 -0
- package/lib/managers/layer-manager.js.map +1 -0
- package/lib/managers/metadata-manager.d.ts +149 -0
- package/lib/managers/metadata-manager.d.ts.map +1 -0
- package/lib/managers/metadata-manager.js +281 -0
- package/lib/managers/metadata-manager.js.map +1 -0
- package/lib/managers/ocr-manager.d.ts +195 -0
- package/lib/managers/ocr-manager.d.ts.map +1 -0
- package/lib/managers/ocr-manager.js +583 -0
- package/lib/managers/ocr-manager.js.map +1 -0
- package/lib/managers/optimization-manager.d.ts +103 -0
- package/lib/managers/optimization-manager.d.ts.map +1 -0
- package/lib/managers/optimization-manager.js +194 -0
- package/lib/managers/optimization-manager.js.map +1 -0
- package/lib/managers/outline-manager.d.ts +102 -0
- package/lib/managers/outline-manager.d.ts.map +1 -0
- package/lib/managers/outline-manager.js +170 -0
- package/lib/managers/outline-manager.js.map +1 -0
- package/lib/managers/page-manager.d.ts +143 -0
- package/lib/managers/page-manager.d.ts.map +1 -0
- package/lib/managers/page-manager.js +237 -0
- package/lib/managers/page-manager.js.map +1 -0
- package/lib/managers/pattern-detection.d.ts +170 -0
- package/lib/managers/pattern-detection.d.ts.map +1 -0
- package/lib/managers/pattern-detection.js +325 -0
- package/lib/managers/pattern-detection.js.map +1 -0
- package/lib/managers/rendering-manager.d.ts +354 -0
- package/lib/managers/rendering-manager.d.ts.map +1 -0
- package/lib/managers/rendering-manager.js +680 -0
- package/lib/managers/rendering-manager.js.map +1 -0
- package/lib/managers/search-manager.d.ts +236 -0
- package/lib/managers/search-manager.d.ts.map +1 -0
- package/lib/managers/search-manager.js +330 -0
- package/lib/managers/search-manager.js.map +1 -0
- package/lib/managers/security-manager.d.ts +162 -0
- package/lib/managers/security-manager.d.ts.map +1 -0
- package/lib/managers/security-manager.js +293 -0
- package/lib/managers/security-manager.js.map +1 -0
- package/lib/managers/signature-manager.d.ts +725 -0
- package/lib/managers/signature-manager.d.ts.map +1 -0
- package/lib/managers/signature-manager.js +1365 -0
- package/lib/managers/signature-manager.js.map +1 -0
- package/lib/managers/streams.d.ts +263 -0
- package/lib/managers/streams.d.ts.map +1 -0
- package/lib/managers/streams.js +472 -0
- package/lib/managers/streams.js.map +1 -0
- package/lib/managers/xfa-manager.d.ts +228 -0
- package/lib/managers/xfa-manager.d.ts.map +1 -0
- package/lib/managers/xfa-manager.js +490 -0
- package/lib/managers/xfa-manager.js.map +1 -0
- package/lib/pdf-creator-manager.d.ts +201 -0
- package/lib/pdf-creator-manager.d.ts.map +1 -0
- package/lib/pdf-creator-manager.js +379 -0
- package/lib/pdf-creator-manager.js.map +1 -0
- package/lib/properties.d.ts +80 -0
- package/lib/properties.d.ts.map +1 -0
- package/lib/properties.js +455 -0
- package/lib/properties.js.map +1 -0
- package/lib/result-accessors-manager.d.ts +347 -0
- package/lib/result-accessors-manager.d.ts.map +1 -0
- package/lib/result-accessors-manager.js +705 -0
- package/lib/result-accessors-manager.js.map +1 -0
- package/lib/thumbnail-manager.d.ts +122 -0
- package/lib/thumbnail-manager.d.ts.map +1 -0
- package/lib/thumbnail-manager.js +206 -0
- package/lib/thumbnail-manager.js.map +1 -0
- package/lib/types/common.d.ts +93 -0
- package/lib/types/common.d.ts.map +1 -0
- package/lib/types/common.js +5 -0
- package/lib/types/common.js.map +1 -0
- package/lib/types/document-types.d.ts +353 -0
- package/lib/types/document-types.d.ts.map +1 -0
- package/lib/types/document-types.js +83 -0
- package/lib/types/document-types.js.map +1 -0
- package/{src/types/index.ts → lib/types/index.d.ts} +1 -1
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +6 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/manager-types.d.ts +180 -0
- package/lib/types/manager-types.d.ts.map +1 -0
- package/lib/types/manager-types.js +99 -0
- package/lib/types/manager-types.js.map +1 -0
- package/lib/types/native-bindings.d.ts +440 -0
- package/lib/types/native-bindings.d.ts.map +1 -0
- package/lib/types/native-bindings.js +8 -0
- package/lib/types/native-bindings.js.map +1 -0
- package/{src/workers/index.ts → lib/workers/index.d.ts} +1 -1
- package/lib/workers/index.d.ts.map +1 -0
- package/lib/workers/index.js +6 -0
- package/lib/workers/index.js.map +1 -0
- package/lib/workers/pool.d.ts +65 -0
- package/lib/workers/pool.d.ts.map +1 -0
- package/lib/workers/pool.js +195 -0
- package/lib/workers/pool.js.map +1 -0
- package/lib/workers/worker.d.ts +6 -0
- package/lib/workers/worker.d.ts.map +1 -0
- package/lib/workers/worker.js +100 -0
- package/lib/workers/worker.js.map +1 -0
- package/package.json +12 -22
- package/prebuilds/darwin-arm64/pdf_oxide.node +0 -0
- package/prebuilds/darwin-x64/pdf_oxide.node +0 -0
- package/prebuilds/linux-arm64/pdf_oxide.node +0 -0
- package/prebuilds/linux-x64/pdf_oxide.node +0 -0
- package/prebuilds/win32-x64/pdf_oxide.node +0 -0
- package/binding.gyp +0 -35
- package/src/builders/annotation-builder.ts +0 -367
- package/src/builders/conversion-options-builder.ts +0 -257
- package/src/builders/metadata-builder.ts +0 -317
- package/src/builders/pdf-builder.ts +0 -386
- package/src/builders/search-options-builder.ts +0 -151
- package/src/document-editor-manager.ts +0 -318
- package/src/errors.ts +0 -1629
- package/src/form-field-manager.ts +0 -666
- package/src/hybrid-ml-manager.ts +0 -283
- package/src/index.ts +0 -453
- package/src/managers/accessibility-manager.ts +0 -338
- package/src/managers/annotation-manager.ts +0 -439
- package/src/managers/barcode-manager.ts +0 -235
- package/src/managers/batch-manager.ts +0 -533
- package/src/managers/cache-manager.ts +0 -486
- package/src/managers/compliance-manager.ts +0 -375
- package/src/managers/content-manager.ts +0 -339
- package/src/managers/document-utility-manager.ts +0 -922
- package/src/managers/dom-pdf-creator.ts +0 -365
- package/src/managers/editing-manager.ts +0 -514
- package/src/managers/enterprise-manager.ts +0 -478
- package/src/managers/extended-managers.ts +0 -437
- package/src/managers/extraction-manager.ts +0 -583
- package/src/managers/final-utilities.ts +0 -429
- package/src/managers/hybrid-ml-advanced.ts +0 -479
- package/src/managers/index.ts +0 -239
- package/src/managers/layer-manager.ts +0 -500
- package/src/managers/metadata-manager.ts +0 -303
- package/src/managers/ocr-manager.ts +0 -756
- package/src/managers/optimization-manager.ts +0 -262
- package/src/managers/outline-manager.ts +0 -196
- package/src/managers/page-manager.ts +0 -289
- package/src/managers/pattern-detection.ts +0 -440
- package/src/managers/rendering-manager.ts +0 -863
- package/src/managers/search-manager.ts +0 -385
- package/src/managers/security-manager.ts +0 -345
- package/src/managers/signature-manager.ts +0 -1664
- package/src/managers/streams.ts +0 -618
- package/src/managers/xfa-manager.ts +0 -500
- package/src/pdf-creator-manager.ts +0 -494
- package/src/properties.ts +0 -522
- package/src/result-accessors-manager.ts +0 -867
- package/src/tests/advanced-features.test.ts +0 -414
- package/src/tests/advanced.test.ts +0 -266
- package/src/tests/extended-managers.test.ts +0 -316
- package/src/tests/final-utilities.test.ts +0 -455
- package/src/tests/foundation.test.ts +0 -315
- package/src/tests/high-demand.test.ts +0 -257
- package/src/tests/specialized.test.ts +0 -97
- package/src/thumbnail-manager.ts +0 -272
- package/src/types/common.ts +0 -142
- package/src/types/document-types.ts +0 -457
- package/src/types/manager-types.ts +0 -284
- package/src/types/native-bindings.ts +0 -517
- package/src/workers/pool.ts +0 -274
- package/src/workers/worker.ts +0 -131
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager for PDF layers (Optional Content Groups - OCG)
|
|
3
|
+
*
|
|
4
|
+
* Provides methods to manage and interact with PDF layers which are used
|
|
5
|
+
* for optional content groups in PDF documents.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { LayerManager } from 'pdf_oxide';
|
|
10
|
+
*
|
|
11
|
+
* const doc = PdfDocument.open('document.pdf');
|
|
12
|
+
* const layerManager = new LayerManager(doc);
|
|
13
|
+
*
|
|
14
|
+
* // Check if document has layers
|
|
15
|
+
* if (layerManager.hasLayers()) {
|
|
16
|
+
* const layers = layerManager.getLayers();
|
|
17
|
+
* console.log(`Document has ${layers.length} layers`);
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class LayerManager {
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new LayerManager for the given document
|
|
24
|
+
* @param document - The PDF document
|
|
25
|
+
* @throws Error if document is null or undefined
|
|
26
|
+
*/
|
|
27
|
+
constructor(document) {
|
|
28
|
+
if (!document) {
|
|
29
|
+
throw new Error('Document is required');
|
|
30
|
+
}
|
|
31
|
+
this._document = document;
|
|
32
|
+
// Performance optimization: cache layer data
|
|
33
|
+
this._layerCache = null;
|
|
34
|
+
this._hierarchyCache = null;
|
|
35
|
+
this._statisticsCache = null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Clears the layer cache
|
|
39
|
+
* Useful when document content might have changed
|
|
40
|
+
*/
|
|
41
|
+
clearCache() {
|
|
42
|
+
this._layerCache = null;
|
|
43
|
+
this._hierarchyCache = null;
|
|
44
|
+
this._statisticsCache = null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Checks if document has layers
|
|
48
|
+
* @returns True if document contains layers
|
|
49
|
+
*/
|
|
50
|
+
hasLayers() {
|
|
51
|
+
try {
|
|
52
|
+
return this.getLayerCount() > 0;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Gets number of layers in document
|
|
60
|
+
* @returns Number of layers
|
|
61
|
+
*/
|
|
62
|
+
getLayerCount() {
|
|
63
|
+
const layers = this.getLayers();
|
|
64
|
+
return layers.length;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Gets all layers in document
|
|
68
|
+
* @returns Array of layer objects with id, name, visible, etc.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const layers = manager.getLayers();
|
|
73
|
+
* layers.forEach(layer => {
|
|
74
|
+
* console.log(`Layer: ${layer.name} (visible: ${layer.visible})`);
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
getLayers() {
|
|
79
|
+
// Performance optimization: cache layer data
|
|
80
|
+
if (this._layerCache !== null) {
|
|
81
|
+
return this._layerCache;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const rawLayers = this._document.getLayers();
|
|
85
|
+
// Convert native LayerInfo to the expected JS format
|
|
86
|
+
const layers = rawLayers.map((layer) => ({
|
|
87
|
+
id: layer.id,
|
|
88
|
+
name: layer.name,
|
|
89
|
+
visible: layer.visible,
|
|
90
|
+
index: layer.index,
|
|
91
|
+
parentId: null, // OCGs don't have hierarchy in PDF spec
|
|
92
|
+
printable: true, // Default assumption
|
|
93
|
+
export: true, // Default assumption
|
|
94
|
+
}));
|
|
95
|
+
this._layerCache = layers;
|
|
96
|
+
return layers;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Gets layer by name
|
|
104
|
+
* @param name - Layer name to find
|
|
105
|
+
* @returns Layer object or null if not found
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const layer = manager.getLayerByName('Background');
|
|
110
|
+
* if (layer) {
|
|
111
|
+
* console.log(`Found layer: ${layer.name}`);
|
|
112
|
+
* }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
getLayerByName(name) {
|
|
116
|
+
if (!name || typeof name !== 'string') {
|
|
117
|
+
throw new Error('Layer name must be a non-empty string');
|
|
118
|
+
}
|
|
119
|
+
const layers = this.getLayers();
|
|
120
|
+
return layers.find(layer => layer.name === name) || null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Gets layer by ID
|
|
124
|
+
* @param id - Layer ID to find
|
|
125
|
+
* @returns Layer object or null if not found
|
|
126
|
+
*/
|
|
127
|
+
getLayerById(id) {
|
|
128
|
+
if (!id || typeof id !== 'string') {
|
|
129
|
+
throw new Error('Layer ID must be a non-empty string');
|
|
130
|
+
}
|
|
131
|
+
const layers = this.getLayers();
|
|
132
|
+
return layers.find(layer => layer.id === id) || null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Gets root-level layers (not nested under other layers)
|
|
136
|
+
* @returns Array of root-level layers
|
|
137
|
+
*/
|
|
138
|
+
getRootLayers() {
|
|
139
|
+
const layers = this.getLayers();
|
|
140
|
+
return layers.filter(layer => !layer.parentId);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Gets the full layer hierarchy as a tree structure
|
|
144
|
+
* @returns Layer hierarchy tree
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const hierarchy = manager.getLayerHierarchy();
|
|
149
|
+
* // { root: [{ name: 'Layer1', children: [...] }, ...] }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
getLayerHierarchy() {
|
|
153
|
+
// Performance optimization: cache hierarchy
|
|
154
|
+
if (this._hierarchyCache !== null) {
|
|
155
|
+
return this._hierarchyCache;
|
|
156
|
+
}
|
|
157
|
+
const layers = this.getLayers();
|
|
158
|
+
const hierarchy = { root: [] };
|
|
159
|
+
// Build parent-child relationships
|
|
160
|
+
const layerMap = new Map(layers.map((l) => [l.id, { ...l, children: [] }]));
|
|
161
|
+
for (const layer of layerMap.values()) {
|
|
162
|
+
if (layer.parentId) {
|
|
163
|
+
const parent = layerMap.get(layer.parentId);
|
|
164
|
+
if (parent) {
|
|
165
|
+
parent.children.push(layer);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
hierarchy.root.push(layer);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
this._hierarchyCache = hierarchy;
|
|
173
|
+
return hierarchy;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Gets child layers of a parent layer
|
|
177
|
+
* @param parentId - Parent layer ID
|
|
178
|
+
* @returns Array of child layers
|
|
179
|
+
*/
|
|
180
|
+
getChildLayers(parentId) {
|
|
181
|
+
if (!parentId || typeof parentId !== 'string') {
|
|
182
|
+
throw new Error('Parent layer ID must be a non-empty string');
|
|
183
|
+
}
|
|
184
|
+
const layers = this.getLayers();
|
|
185
|
+
return layers.filter(layer => layer.parentId === parentId);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Gets parent layer of a layer
|
|
189
|
+
* @param layerId - Layer ID
|
|
190
|
+
* @returns Parent layer object or null if no parent
|
|
191
|
+
*/
|
|
192
|
+
getParentLayer(layerId) {
|
|
193
|
+
if (!layerId || typeof layerId !== 'string') {
|
|
194
|
+
throw new Error('Layer ID must be a non-empty string');
|
|
195
|
+
}
|
|
196
|
+
const layer = this.getLayerById(layerId);
|
|
197
|
+
if (!layer || !layer.parentId) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return this.getLayerById(layer.parentId);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Checks if a layer is visible
|
|
204
|
+
* @param layerId - Layer ID
|
|
205
|
+
* @returns True if layer is visible
|
|
206
|
+
*/
|
|
207
|
+
isLayerVisible(layerId) {
|
|
208
|
+
const layer = this.getLayerById(layerId);
|
|
209
|
+
return layer ? layer.visible !== false : false;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Gets visibility chain from root to layer
|
|
213
|
+
* Shows visibility state of all parent layers
|
|
214
|
+
* @param layerId - Layer ID
|
|
215
|
+
* @returns Array of layers from root to target
|
|
216
|
+
*/
|
|
217
|
+
getVisibilityChain(layerId) {
|
|
218
|
+
const chain = [];
|
|
219
|
+
let current = this.getLayerById(layerId);
|
|
220
|
+
while (current) {
|
|
221
|
+
chain.unshift(current);
|
|
222
|
+
current = current.parentId ? this.getLayerById(current.parentId) : null;
|
|
223
|
+
}
|
|
224
|
+
return chain;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Gets layer usage information
|
|
228
|
+
* @returns Layer usage { view, print, export }
|
|
229
|
+
*/
|
|
230
|
+
getLayerUsages() {
|
|
231
|
+
const layers = this.getLayers();
|
|
232
|
+
return {
|
|
233
|
+
view: layers.filter(l => l.printable === false).length,
|
|
234
|
+
print: layers.filter(l => l.printable === true).length,
|
|
235
|
+
export: layers.filter(l => l.export !== false).length,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Gets statistics about layers
|
|
240
|
+
* @returns Layer statistics
|
|
241
|
+
*
|
|
242
|
+
* @example
|
|
243
|
+
* ```typescript
|
|
244
|
+
* const stats = manager.getLayerStatistics();
|
|
245
|
+
* console.log(`Total layers: ${stats.count}`);
|
|
246
|
+
* console.log(`Max depth: ${stats.maxDepth}`);
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
getLayerStatistics() {
|
|
250
|
+
// Performance optimization: cache statistics
|
|
251
|
+
if (this._statisticsCache !== null) {
|
|
252
|
+
return this._statisticsCache;
|
|
253
|
+
}
|
|
254
|
+
const layers = this.getLayers();
|
|
255
|
+
const hierarchy = this.getLayerHierarchy();
|
|
256
|
+
// Calculate max depth
|
|
257
|
+
const calculateDepth = (node, depth = 0) => {
|
|
258
|
+
if (!node.children || node.children.length === 0) {
|
|
259
|
+
return depth;
|
|
260
|
+
}
|
|
261
|
+
return Math.max(...node.children.map((child) => calculateDepth(child, depth + 1)));
|
|
262
|
+
};
|
|
263
|
+
let maxDepth = 0;
|
|
264
|
+
for (const rootLayer of hierarchy.root) {
|
|
265
|
+
maxDepth = Math.max(maxDepth, calculateDepth(rootLayer));
|
|
266
|
+
}
|
|
267
|
+
const stats = {
|
|
268
|
+
count: layers.length,
|
|
269
|
+
rootCount: hierarchy.root.length,
|
|
270
|
+
maxDepth,
|
|
271
|
+
visible: layers.filter(l => l.visible !== false).length,
|
|
272
|
+
hidden: layers.filter(l => l.visible === false).length,
|
|
273
|
+
printable: layers.filter(l => l.printable !== false).length,
|
|
274
|
+
exportable: layers.filter(l => l.export !== false).length,
|
|
275
|
+
hasConflicts: this._detectLayerConflicts().length > 0,
|
|
276
|
+
};
|
|
277
|
+
this._statisticsCache = stats;
|
|
278
|
+
return stats;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Gets layer dependencies
|
|
282
|
+
* @returns Layer dependencies map
|
|
283
|
+
* @private
|
|
284
|
+
*/
|
|
285
|
+
getLayerDependencies() {
|
|
286
|
+
const layers = this.getLayers();
|
|
287
|
+
const dependencies = {};
|
|
288
|
+
layers.forEach(layer => {
|
|
289
|
+
dependencies[layer.id] = {
|
|
290
|
+
dependsOn: layer.dependsOn || [],
|
|
291
|
+
dependents: [],
|
|
292
|
+
};
|
|
293
|
+
});
|
|
294
|
+
// Build reverse dependencies
|
|
295
|
+
Object.entries(dependencies).forEach(([layerId, deps]) => {
|
|
296
|
+
deps.dependsOn.forEach((depId) => {
|
|
297
|
+
if (dependencies[depId]) {
|
|
298
|
+
dependencies[depId].dependents.push(layerId);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
return dependencies;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Finds layers by pattern
|
|
306
|
+
* @param pattern - Pattern to match
|
|
307
|
+
* @returns Matching layers
|
|
308
|
+
*
|
|
309
|
+
* @example
|
|
310
|
+
* ```typescript
|
|
311
|
+
* const backgroundLayers = manager.findLayersByPattern(/background/i);
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
314
|
+
findLayersByPattern(pattern) {
|
|
315
|
+
if (!pattern) {
|
|
316
|
+
throw new Error('Pattern must be provided');
|
|
317
|
+
}
|
|
318
|
+
const regex = pattern instanceof RegExp ? pattern : new RegExp(pattern, 'i');
|
|
319
|
+
const layers = this.getLayers();
|
|
320
|
+
return layers.filter(layer => regex.test(layer.name) ||
|
|
321
|
+
(layer.description && regex.test(layer.description)));
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Validates layer state for conflicts and issues
|
|
325
|
+
* @returns Validation result { isValid, issues }
|
|
326
|
+
*/
|
|
327
|
+
validateLayerState() {
|
|
328
|
+
const issues = [];
|
|
329
|
+
const conflicts = this._detectLayerConflicts();
|
|
330
|
+
const cycles = this._detectLayerCycles();
|
|
331
|
+
if (conflicts.length > 0) {
|
|
332
|
+
issues.push(...conflicts.map(c => `Conflict: ${c}`));
|
|
333
|
+
}
|
|
334
|
+
if (cycles.length > 0) {
|
|
335
|
+
issues.push(...cycles.map(c => `Cycle detected: ${c}`));
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
isValid: issues.length === 0,
|
|
339
|
+
issues,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Detects layer conflicts
|
|
344
|
+
* @returns Array of conflict descriptions
|
|
345
|
+
* @private
|
|
346
|
+
*/
|
|
347
|
+
_detectLayerConflicts() {
|
|
348
|
+
const conflicts = [];
|
|
349
|
+
const layers = this.getLayers();
|
|
350
|
+
// Check for layers with same name
|
|
351
|
+
const nameMap = new Map();
|
|
352
|
+
layers.forEach(layer => {
|
|
353
|
+
if (nameMap.has(layer.name)) {
|
|
354
|
+
conflicts.push(`Duplicate layer name: ${layer.name}`);
|
|
355
|
+
}
|
|
356
|
+
nameMap.set(layer.name, layer.id);
|
|
357
|
+
});
|
|
358
|
+
// Check for orphaned layers
|
|
359
|
+
const parentIds = new Set(layers.map(l => l.parentId).filter(id => id));
|
|
360
|
+
const layerIds = new Set(layers.map(l => l.id));
|
|
361
|
+
parentIds.forEach(parentId => {
|
|
362
|
+
if (!layerIds.has(parentId)) {
|
|
363
|
+
conflicts.push(`Orphaned layer reference: ${parentId}`);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
return conflicts;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Detects cycles in layer hierarchy
|
|
370
|
+
* @returns Array of cycle descriptions
|
|
371
|
+
* @private
|
|
372
|
+
*/
|
|
373
|
+
_detectLayerCycles() {
|
|
374
|
+
const cycles = [];
|
|
375
|
+
const layers = this.getLayers();
|
|
376
|
+
const visited = new Set();
|
|
377
|
+
const stack = new Set();
|
|
378
|
+
const detectCycle = (layerId, path = []) => {
|
|
379
|
+
if (stack.has(layerId)) {
|
|
380
|
+
cycles.push(`Cycle detected: ${path.join(' -> ')} -> ${layerId}`);
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (visited.has(layerId)) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
visited.add(layerId);
|
|
387
|
+
stack.add(layerId);
|
|
388
|
+
path.push(layerId);
|
|
389
|
+
const layer = this.getLayerById(layerId);
|
|
390
|
+
if (layer && layer.parentId) {
|
|
391
|
+
detectCycle(layer.parentId, [...path]);
|
|
392
|
+
}
|
|
393
|
+
stack.delete(layerId);
|
|
394
|
+
};
|
|
395
|
+
layers.forEach(layer => {
|
|
396
|
+
if (!visited.has(layer.id)) {
|
|
397
|
+
detectCycle(layer.id);
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
return cycles;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=layer-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-manager.js","sourceRoot":"","sources":["../../src/managers/layer-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager for PDF document metadata
|
|
3
|
+
*
|
|
4
|
+
* Provides access to document metadata properties such as title, author,
|
|
5
|
+
* subject, keywords, creation and modification dates, and custom properties.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { MetadataManager } from 'pdf_oxide';
|
|
10
|
+
*
|
|
11
|
+
* const doc = PdfDocument.open('document.pdf');
|
|
12
|
+
* const metadataManager = new MetadataManager(doc);
|
|
13
|
+
*
|
|
14
|
+
* console.log(`Title: ${metadataManager.getTitle()}`);
|
|
15
|
+
* console.log(`Author: ${metadataManager.getAuthor()}`);
|
|
16
|
+
* console.log(`Created: ${metadataManager.getCreationDate()}`);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export interface MetadataComparison {
|
|
20
|
+
matching: Record<string, any>;
|
|
21
|
+
differing: Record<string, {
|
|
22
|
+
document1: any;
|
|
23
|
+
document2: any;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface ValidationResult {
|
|
27
|
+
isComplete: boolean;
|
|
28
|
+
issues: string[];
|
|
29
|
+
missingFieldCount: number;
|
|
30
|
+
}
|
|
31
|
+
export declare class MetadataManager {
|
|
32
|
+
private _document;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new MetadataManager for the given document
|
|
35
|
+
* @param document - The PDF document
|
|
36
|
+
* @throws Error if document is null or undefined
|
|
37
|
+
*/
|
|
38
|
+
constructor(document: any);
|
|
39
|
+
/**
|
|
40
|
+
* Gets the document title
|
|
41
|
+
* @returns Document title or null if not set
|
|
42
|
+
*/
|
|
43
|
+
getTitle(): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Gets the document author
|
|
46
|
+
* @returns Document author or null if not set
|
|
47
|
+
*/
|
|
48
|
+
getAuthor(): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Gets the document subject
|
|
51
|
+
* @returns Document subject or null if not set
|
|
52
|
+
*/
|
|
53
|
+
getSubject(): string | null;
|
|
54
|
+
/**
|
|
55
|
+
* Gets the document keywords
|
|
56
|
+
* @returns Array of document keywords (empty if none)
|
|
57
|
+
*/
|
|
58
|
+
getKeywords(): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Gets the document creator application
|
|
61
|
+
* @returns Creator application or null if not set
|
|
62
|
+
*/
|
|
63
|
+
getCreator(): string | null;
|
|
64
|
+
/**
|
|
65
|
+
* Gets the document producer application
|
|
66
|
+
* @returns Producer application or null if not set
|
|
67
|
+
*/
|
|
68
|
+
getProducer(): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Gets the document creation date
|
|
71
|
+
* @returns Creation date or null if not set
|
|
72
|
+
*/
|
|
73
|
+
getCreationDate(): Date | null;
|
|
74
|
+
/**
|
|
75
|
+
* Gets the document modification date
|
|
76
|
+
* @returns Modification date or null if not set
|
|
77
|
+
*/
|
|
78
|
+
getModificationDate(): Date | null;
|
|
79
|
+
/**
|
|
80
|
+
* Gets all metadata as a single object
|
|
81
|
+
* @returns Complete metadata object
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const metadata = manager.getAllMetadata();
|
|
86
|
+
* console.log(JSON.stringify(metadata, null, 2));
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
getAllMetadata(): Record<string, any>;
|
|
90
|
+
/**
|
|
91
|
+
* Checks if metadata has been set
|
|
92
|
+
* @returns True if any metadata is present
|
|
93
|
+
*/
|
|
94
|
+
hasMetadata(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Gets a summary of key metadata fields
|
|
97
|
+
* @returns Formatted metadata summary
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* console.log(manager.getMetadataSummary());
|
|
102
|
+
* // Output: Title: My Document, Author: John Doe, Pages: 42
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
getMetadataSummary(): string;
|
|
106
|
+
/**
|
|
107
|
+
* Checks if a specific keyword is present
|
|
108
|
+
* @param keyword - Keyword to search for
|
|
109
|
+
* @returns True if keyword is found
|
|
110
|
+
*/
|
|
111
|
+
hasKeyword(keyword: string): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Gets the number of keywords
|
|
114
|
+
* @returns Keyword count
|
|
115
|
+
*/
|
|
116
|
+
getKeywordCount(): number;
|
|
117
|
+
/**
|
|
118
|
+
* Gets metadata comparison with another document
|
|
119
|
+
* @param otherDocument - Document to compare with
|
|
120
|
+
* @returns Comparison object with matching and differing fields
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const doc1 = PdfDocument.open('file1.pdf');
|
|
125
|
+
* const doc2 = PdfDocument.open('file2.pdf');
|
|
126
|
+
* const mgr1 = new MetadataManager(doc1);
|
|
127
|
+
* const comparison = mgr1.compareWith(doc2);
|
|
128
|
+
* console.log(comparison.matching); // Fields that match
|
|
129
|
+
* console.log(comparison.differing); // Fields that differ
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
compareWith(otherDocument: any): MetadataComparison;
|
|
133
|
+
/**
|
|
134
|
+
* Validates metadata completeness
|
|
135
|
+
* @returns Validation result with issues array
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const validation = manager.validate();
|
|
140
|
+
* if (validation.isComplete) {
|
|
141
|
+
* console.log('Metadata is complete');
|
|
142
|
+
* } else {
|
|
143
|
+
* console.log('Issues:', validation.issues);
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
validate(): ValidationResult;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=metadata-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-manager.d.ts","sourceRoot":"","sources":["../../src/managers/metadata-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,GAAG,CAAC;QAAC,SAAS,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAM;IAEvB;;;;OAIG;gBACS,QAAQ,EAAE,GAAG;IAOzB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAQzB;;;OAGG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAQ1B;;;OAGG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAQvB;;;OAGG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;IAQ3B;;;OAGG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,eAAe,IAAI,IAAI,GAAG,IAAI;IAQ9B;;;OAGG;IACH,mBAAmB,IAAI,IAAI,GAAG,IAAI;IAQlC;;;;;;;;;OASG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAQrC;;;OAGG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;;;;;;OASG;IACH,kBAAkB,IAAI,MAAM;IA2B5B;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASpC;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,aAAa,EAAE,GAAG,GAAG,kBAAkB;IA+BnD;;;;;;;;;;;;;OAaG;IACH,QAAQ,IAAI,gBAAgB;CAe7B"}
|