@docmentis/udoc-viewer 0.5.3 → 0.5.6
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/dist/package.json +57 -0
- package/dist/src/UDocClient.d.ts +383 -0
- package/dist/src/UDocClient.d.ts.map +1 -0
- package/dist/src/UDocClient.js +441 -0
- package/dist/src/UDocClient.js.map +1 -0
- package/dist/src/UDocViewer.d.ts +275 -0
- package/dist/src/UDocViewer.d.ts.map +1 -0
- package/dist/src/UDocViewer.js +796 -0
- package/dist/src/UDocViewer.js.map +1 -0
- package/dist/src/fonts.d.ts +29 -0
- package/dist/src/fonts.d.ts.map +1 -0
- package/dist/src/fonts.js +30 -0
- package/dist/src/fonts.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +8 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/performance/PerformanceCounter.d.ts +132 -0
- package/dist/src/performance/PerformanceCounter.d.ts.map +1 -0
- package/dist/src/performance/PerformanceCounter.js +129 -0
- package/dist/src/performance/PerformanceCounter.js.map +1 -0
- package/dist/src/performance/index.d.ts +2 -0
- package/dist/src/performance/index.d.ts.map +1 -0
- package/dist/src/performance/index.js +2 -0
- package/dist/src/performance/index.js.map +1 -0
- package/dist/src/ui/framework/component.d.ts +68 -0
- package/dist/src/ui/framework/component.d.ts.map +1 -0
- package/dist/src/ui/framework/component.js +97 -0
- package/dist/src/ui/framework/component.js.map +1 -0
- package/dist/src/ui/framework/dom.d.ts +19 -0
- package/dist/src/ui/framework/dom.d.ts.map +1 -0
- package/dist/src/ui/framework/dom.js +29 -0
- package/dist/src/ui/framework/dom.js.map +1 -0
- package/dist/src/ui/framework/events.d.ts +18 -0
- package/dist/src/ui/framework/events.d.ts.map +1 -0
- package/dist/src/ui/framework/events.js +23 -0
- package/dist/src/ui/framework/events.js.map +1 -0
- package/dist/src/ui/framework/index.d.ts +15 -0
- package/dist/src/ui/framework/index.d.ts.map +1 -0
- package/dist/src/ui/framework/index.js +15 -0
- package/dist/src/ui/framework/index.js.map +1 -0
- package/dist/src/ui/framework/selectors.d.ts +51 -0
- package/dist/src/ui/framework/selectors.d.ts.map +1 -0
- package/dist/src/ui/framework/selectors.js +30 -0
- package/dist/src/ui/framework/selectors.js.map +1 -0
- package/dist/src/ui/framework/store.d.ts +37 -0
- package/dist/src/ui/framework/store.d.ts.map +1 -0
- package/dist/src/ui/framework/store.js +66 -0
- package/dist/src/ui/framework/store.js.map +1 -0
- package/dist/src/ui/viewer/actions.d.ts +132 -0
- package/dist/src/ui/viewer/actions.d.ts.map +1 -0
- package/dist/src/ui/viewer/actions.js +2 -0
- package/dist/src/ui/viewer/actions.js.map +1 -0
- package/dist/src/ui/viewer/annotation/LinkRenderer.d.ts +9 -0
- package/dist/src/ui/viewer/annotation/LinkRenderer.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/LinkRenderer.js +17 -0
- package/dist/src/ui/viewer/annotation/LinkRenderer.js.map +1 -0
- package/dist/src/ui/viewer/annotation/MarkupRenderer.d.ts +21 -0
- package/dist/src/ui/viewer/annotation/MarkupRenderer.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/MarkupRenderer.js +138 -0
- package/dist/src/ui/viewer/annotation/MarkupRenderer.js.map +1 -0
- package/dist/src/ui/viewer/annotation/ShapeRenderer.d.ts +33 -0
- package/dist/src/ui/viewer/annotation/ShapeRenderer.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/ShapeRenderer.js +378 -0
- package/dist/src/ui/viewer/annotation/ShapeRenderer.js.map +1 -0
- package/dist/src/ui/viewer/annotation/TextRenderer.d.ts +23 -0
- package/dist/src/ui/viewer/annotation/TextRenderer.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/TextRenderer.js +196 -0
- package/dist/src/ui/viewer/annotation/TextRenderer.js.map +1 -0
- package/dist/src/ui/viewer/annotation/index.d.ts +8 -0
- package/dist/src/ui/viewer/annotation/index.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/index.js +8 -0
- package/dist/src/ui/viewer/annotation/index.js.map +1 -0
- package/dist/src/ui/viewer/annotation/render.d.ts +24 -0
- package/dist/src/ui/viewer/annotation/render.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/render.js +184 -0
- package/dist/src/ui/viewer/annotation/render.js.map +1 -0
- package/dist/src/ui/viewer/annotation/types.d.ts +239 -0
- package/dist/src/ui/viewer/annotation/types.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/types.js +7 -0
- package/dist/src/ui/viewer/annotation/types.js.map +1 -0
- package/dist/src/ui/viewer/annotation/utils.d.ts +37 -0
- package/dist/src/ui/viewer/annotation/utils.d.ts.map +1 -0
- package/dist/src/ui/viewer/annotation/utils.js +82 -0
- package/dist/src/ui/viewer/annotation/utils.js.map +1 -0
- package/dist/src/ui/viewer/components/AnnotationPanel.d.ts +19 -0
- package/dist/src/ui/viewer/components/AnnotationPanel.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/AnnotationPanel.js +284 -0
- package/dist/src/ui/viewer/components/AnnotationPanel.js.map +1 -0
- package/dist/src/ui/viewer/components/FloatingToolbar.d.ts +9 -0
- package/dist/src/ui/viewer/components/FloatingToolbar.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/FloatingToolbar.js +305 -0
- package/dist/src/ui/viewer/components/FloatingToolbar.js.map +1 -0
- package/dist/src/ui/viewer/components/LeftPanel.d.ts +10 -0
- package/dist/src/ui/viewer/components/LeftPanel.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/LeftPanel.js +165 -0
- package/dist/src/ui/viewer/components/LeftPanel.js.map +1 -0
- package/dist/src/ui/viewer/components/LoadingOverlay.d.ts +12 -0
- package/dist/src/ui/viewer/components/LoadingOverlay.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/LoadingOverlay.js +88 -0
- package/dist/src/ui/viewer/components/LoadingOverlay.js.map +1 -0
- package/dist/src/ui/viewer/components/OutlinePanel.d.ts +10 -0
- package/dist/src/ui/viewer/components/OutlinePanel.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/OutlinePanel.js +169 -0
- package/dist/src/ui/viewer/components/OutlinePanel.js.map +1 -0
- package/dist/src/ui/viewer/components/PasswordDialog.d.ts +15 -0
- package/dist/src/ui/viewer/components/PasswordDialog.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/PasswordDialog.js +143 -0
- package/dist/src/ui/viewer/components/PasswordDialog.js.map +1 -0
- package/dist/src/ui/viewer/components/RightPanel.d.ts +9 -0
- package/dist/src/ui/viewer/components/RightPanel.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/RightPanel.js +102 -0
- package/dist/src/ui/viewer/components/RightPanel.js.map +1 -0
- package/dist/src/ui/viewer/components/Spread.d.ts +43 -0
- package/dist/src/ui/viewer/components/Spread.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/Spread.js +345 -0
- package/dist/src/ui/viewer/components/Spread.js.map +1 -0
- package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts +11 -0
- package/dist/src/ui/viewer/components/ThumbnailPanel.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/ThumbnailPanel.js +240 -0
- package/dist/src/ui/viewer/components/ThumbnailPanel.js.map +1 -0
- package/dist/src/ui/viewer/components/Toolbar.d.ts +9 -0
- package/dist/src/ui/viewer/components/Toolbar.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/Toolbar.js +93 -0
- package/dist/src/ui/viewer/components/Toolbar.js.map +1 -0
- package/dist/src/ui/viewer/components/ViewModeMenu.d.ts +9 -0
- package/dist/src/ui/viewer/components/ViewModeMenu.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/ViewModeMenu.js +178 -0
- package/dist/src/ui/viewer/components/ViewModeMenu.js.map +1 -0
- package/dist/src/ui/viewer/components/Viewport.d.ts +10 -0
- package/dist/src/ui/viewer/components/Viewport.d.ts.map +1 -0
- package/dist/src/ui/viewer/components/Viewport.js +1082 -0
- package/dist/src/ui/viewer/components/Viewport.js.map +1 -0
- package/dist/src/ui/viewer/effects.d.ts +8 -0
- package/dist/src/ui/viewer/effects.d.ts.map +1 -0
- package/dist/src/ui/viewer/effects.js +240 -0
- package/dist/src/ui/viewer/effects.js.map +1 -0
- package/dist/src/ui/viewer/icons.d.ts +32 -0
- package/dist/src/ui/viewer/icons.d.ts.map +1 -0
- package/dist/src/ui/viewer/icons.js +44 -0
- package/dist/src/ui/viewer/icons.js.map +1 -0
- package/dist/src/ui/viewer/index.d.ts +6 -0
- package/dist/src/ui/viewer/index.d.ts.map +1 -0
- package/dist/src/ui/viewer/index.js +6 -0
- package/dist/src/ui/viewer/index.js.map +1 -0
- package/dist/src/ui/viewer/layout/index.d.ts +3 -0
- package/dist/src/ui/viewer/layout/index.d.ts.map +1 -0
- package/dist/src/ui/viewer/layout/index.js +3 -0
- package/dist/src/ui/viewer/layout/index.js.map +1 -0
- package/dist/src/ui/viewer/layout/pixelAlign.d.ts +7 -0
- package/dist/src/ui/viewer/layout/pixelAlign.d.ts.map +1 -0
- package/dist/src/ui/viewer/layout/pixelAlign.js +22 -0
- package/dist/src/ui/viewer/layout/pixelAlign.js.map +1 -0
- package/dist/src/ui/viewer/layout/spreadLayout.d.ts +93 -0
- package/dist/src/ui/viewer/layout/spreadLayout.d.ts.map +1 -0
- package/dist/src/ui/viewer/layout/spreadLayout.js +315 -0
- package/dist/src/ui/viewer/layout/spreadLayout.js.map +1 -0
- package/dist/src/ui/viewer/navigation.d.ts +80 -0
- package/dist/src/ui/viewer/navigation.d.ts.map +1 -0
- package/dist/src/ui/viewer/navigation.js +59 -0
- package/dist/src/ui/viewer/navigation.js.map +1 -0
- package/dist/src/ui/viewer/reducer.d.ts +4 -0
- package/dist/src/ui/viewer/reducer.d.ts.map +1 -0
- package/dist/src/ui/viewer/reducer.js +317 -0
- package/dist/src/ui/viewer/reducer.js.map +1 -0
- package/dist/src/ui/viewer/shell.d.ts +34 -0
- package/dist/src/ui/viewer/shell.d.ts.map +1 -0
- package/dist/src/ui/viewer/shell.js +101 -0
- package/dist/src/ui/viewer/shell.js.map +1 -0
- package/dist/src/ui/viewer/state.d.ts +105 -0
- package/dist/src/ui/viewer/state.d.ts.map +1 -0
- package/dist/src/ui/viewer/state.js +65 -0
- package/dist/src/ui/viewer/state.js.map +1 -0
- package/dist/src/ui/viewer/styles-inline.d.ts +2 -0
- package/dist/src/ui/viewer/styles-inline.d.ts.map +1 -0
- package/dist/src/ui/viewer/styles-inline.js +1584 -0
- package/dist/src/ui/viewer/styles-inline.js.map +1 -0
- package/dist/src/ui/viewer/text/index.d.ts +7 -0
- package/dist/src/ui/viewer/text/index.d.ts.map +1 -0
- package/dist/src/ui/viewer/text/index.js +3 -0
- package/dist/src/ui/viewer/text/index.js.map +1 -0
- package/dist/src/ui/viewer/text/render.d.ts +19 -0
- package/dist/src/ui/viewer/text/render.d.ts.map +1 -0
- package/dist/src/ui/viewer/text/render.js +228 -0
- package/dist/src/ui/viewer/text/render.js.map +1 -0
- package/dist/src/ui/viewer/text/selection.d.ts +12 -0
- package/dist/src/ui/viewer/text/selection.d.ts.map +1 -0
- package/dist/src/ui/viewer/text/selection.js +70 -0
- package/dist/src/ui/viewer/text/selection.js.map +1 -0
- package/dist/src/ui/viewer/text/types.d.ts +37 -0
- package/dist/src/ui/viewer/text/types.d.ts.map +1 -0
- package/dist/src/ui/viewer/text/types.js +7 -0
- package/dist/src/ui/viewer/text/types.js.map +1 -0
- package/dist/src/wasm/LICENSE +104 -0
- package/dist/src/wasm/udoc.d.ts +480 -0
- package/dist/src/wasm/udoc.js +1738 -0
- package/dist/src/wasm/udoc_bg.wasm +0 -0
- package/dist/src/wasm/udoc_bg.wasm.d.ts +45 -0
- package/dist/src/worker/WorkerClient.d.ts +335 -0
- package/dist/src/worker/WorkerClient.d.ts.map +1 -0
- package/dist/src/worker/WorkerClient.js +906 -0
- package/dist/src/worker/WorkerClient.js.map +1 -0
- package/dist/src/worker/index.d.ts +4 -0
- package/dist/src/worker/index.d.ts.map +1 -0
- package/dist/src/worker/index.js +2 -0
- package/dist/src/worker/index.js.map +1 -0
- package/dist/src/worker/worker.d.ts +437 -0
- package/dist/src/worker/worker.d.ts.map +1 -0
- package/dist/src/worker/worker.js +237 -0
- package/dist/src/worker/worker.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UDocClient - SDK entry point for document viewing.
|
|
3
|
+
*
|
|
4
|
+
* Manages the WASM engine and provides document operations.
|
|
5
|
+
*/
|
|
6
|
+
import { WorkerClient } from "./worker/index.js";
|
|
7
|
+
import { UDocViewer } from "./UDocViewer.js";
|
|
8
|
+
import pkg from "../package.json" with { type: "json" };
|
|
9
|
+
/**
|
|
10
|
+
* SDK entry point for document viewing.
|
|
11
|
+
*
|
|
12
|
+
* Manages the WASM engine, creates viewers, and provides document operations.
|
|
13
|
+
*/
|
|
14
|
+
export class UDocClient {
|
|
15
|
+
/**
|
|
16
|
+
* SDK version string.
|
|
17
|
+
*/
|
|
18
|
+
static version = pkg.version;
|
|
19
|
+
workerClient;
|
|
20
|
+
options;
|
|
21
|
+
viewers = new Set();
|
|
22
|
+
destroyed = false;
|
|
23
|
+
licenseInfo = {
|
|
24
|
+
valid: true,
|
|
25
|
+
tier: "free",
|
|
26
|
+
features: [],
|
|
27
|
+
limits: {},
|
|
28
|
+
};
|
|
29
|
+
constructor(workerClient, options) {
|
|
30
|
+
this.workerClient = workerClient;
|
|
31
|
+
this.options = options;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create and initialize a client instance.
|
|
35
|
+
* Loads the WASM engine.
|
|
36
|
+
*/
|
|
37
|
+
static async create(options = {}) {
|
|
38
|
+
// Create worker client - use custom URL if provided, otherwise use bundled worker
|
|
39
|
+
const workerClient = options.baseUrl
|
|
40
|
+
? WorkerClient.createWithUrl(new URL("worker.js", options.baseUrl))
|
|
41
|
+
: WorkerClient.create();
|
|
42
|
+
// Initialize WASM in the worker
|
|
43
|
+
const wasmUrl = options.baseUrl
|
|
44
|
+
? new URL("udoc_bg.wasm", options.baseUrl).href
|
|
45
|
+
: undefined;
|
|
46
|
+
await workerClient.init(wasmUrl);
|
|
47
|
+
const client = new UDocClient(workerClient, options);
|
|
48
|
+
// Validate license if provided
|
|
49
|
+
if (options.license) {
|
|
50
|
+
const domain = typeof window !== "undefined"
|
|
51
|
+
? window.location.hostname
|
|
52
|
+
: "localhost";
|
|
53
|
+
const result = await workerClient.setLicense(options.license, domain);
|
|
54
|
+
client.licenseInfo = licenseResultToInfo(result);
|
|
55
|
+
if (!result.valid) {
|
|
56
|
+
console.warn(`[udoc-viewer] License validation failed: ${result.error}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return client;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get current license information.
|
|
63
|
+
*/
|
|
64
|
+
get license() {
|
|
65
|
+
return { ...this.licenseInfo };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if a feature is available with the current license.
|
|
69
|
+
* @param feature - Feature name (e.g., "merge")
|
|
70
|
+
*/
|
|
71
|
+
hasFeature(feature) {
|
|
72
|
+
return this.licenseInfo.features.includes(feature);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a viewer instance.
|
|
76
|
+
*
|
|
77
|
+
* - With container: Full UI mode
|
|
78
|
+
* - Without container: Headless mode (same API, no UI)
|
|
79
|
+
*/
|
|
80
|
+
async createViewer(options = {}) {
|
|
81
|
+
this.ensureNotDestroyed();
|
|
82
|
+
const viewer = new UDocViewer(this.workerClient, options);
|
|
83
|
+
this.viewers.add(viewer);
|
|
84
|
+
return viewer;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Compose new documents by cherry-picking pages from source documents.
|
|
88
|
+
*
|
|
89
|
+
* This is a powerful method that allows creating new documents by selecting
|
|
90
|
+
* specific pages from multiple source documents in any order. Pages can
|
|
91
|
+
* optionally be rotated during composition.
|
|
92
|
+
*
|
|
93
|
+
* @param compositions - Array of compositions. Each composition creates one output document.
|
|
94
|
+
* Each composition is an array of picks specifying which pages from which documents.
|
|
95
|
+
* @returns Array of viewers containing the composed documents
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* // Create a document with pages 1-3 from viewer A and page 5 from viewer B
|
|
100
|
+
* const [newDoc] = await client.compose([
|
|
101
|
+
* [
|
|
102
|
+
* { doc: viewerA, pages: "1-3" },
|
|
103
|
+
* { doc: viewerB, pages: "5" }
|
|
104
|
+
* ]
|
|
105
|
+
* ]);
|
|
106
|
+
*
|
|
107
|
+
* // Create multiple documents at once
|
|
108
|
+
* const [doc1, doc2] = await client.compose([
|
|
109
|
+
* [{ doc: viewerA, pages: "1" }], // doc1: page 1 from A
|
|
110
|
+
* [{ doc: viewerA, pages: "2" }, { doc: viewerB, pages: "1" }] // doc2: page 2 from A + page 1 from B
|
|
111
|
+
* ]);
|
|
112
|
+
*
|
|
113
|
+
* // Rotate pages during composition
|
|
114
|
+
* const [rotated] = await client.compose([
|
|
115
|
+
* [
|
|
116
|
+
* { doc: viewerA, pages: "1", rotation: 90 }, // rotate page 1 by 90 degrees
|
|
117
|
+
* { doc: viewerA, pages: "2", rotation: 180 } // rotate page 2 by 180 degrees
|
|
118
|
+
* ]
|
|
119
|
+
* ]);
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
async compose(compositions) {
|
|
123
|
+
this.ensureNotDestroyed();
|
|
124
|
+
if (compositions.length === 0) {
|
|
125
|
+
throw new Error("At least one composition is required");
|
|
126
|
+
}
|
|
127
|
+
// Collect all unique document sources and load them
|
|
128
|
+
const sourceMap = new Map(); // source -> docId
|
|
129
|
+
const docIds = [];
|
|
130
|
+
for (const composition of compositions) {
|
|
131
|
+
for (const pick of composition) {
|
|
132
|
+
if (!sourceMap.has(pick.doc)) {
|
|
133
|
+
const docId = await this.loadSource(pick.doc);
|
|
134
|
+
sourceMap.set(pick.doc, docId);
|
|
135
|
+
docIds.push(docId);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Build source index map (source -> index in docIds array)
|
|
140
|
+
const sourceIndexMap = new Map();
|
|
141
|
+
let index = 0;
|
|
142
|
+
for (const source of sourceMap.keys()) {
|
|
143
|
+
sourceIndexMap.set(source, index++);
|
|
144
|
+
}
|
|
145
|
+
// Convert to low-level format
|
|
146
|
+
const lowLevelCompositions = compositions.map(composition => composition.map(pick => ({
|
|
147
|
+
doc: sourceIndexMap.get(pick.doc),
|
|
148
|
+
pages: this.normalizePages(pick.pages),
|
|
149
|
+
rotation: pick.rotation,
|
|
150
|
+
})));
|
|
151
|
+
// Execute compose
|
|
152
|
+
const newDocIds = await this.workerClient.pdfCompose(lowLevelCompositions, docIds);
|
|
153
|
+
// Unload temporary sources that weren't from viewers
|
|
154
|
+
for (const [source, docId] of sourceMap) {
|
|
155
|
+
if (!(source instanceof UDocViewer)) {
|
|
156
|
+
await this.workerClient.unloadPdf(docId);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Create viewers for the composed documents
|
|
160
|
+
const viewers = [];
|
|
161
|
+
for (const docId of newDocIds) {
|
|
162
|
+
const viewer = new UDocViewer(this.workerClient, {});
|
|
163
|
+
await viewer.initializeFromDocId(docId);
|
|
164
|
+
this.viewers.add(viewer);
|
|
165
|
+
viewers.push(viewer);
|
|
166
|
+
}
|
|
167
|
+
return viewers;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Split a document by its outline (bookmarks) structure.
|
|
171
|
+
*
|
|
172
|
+
* Creates multiple documents, one for each outline section at the specified level.
|
|
173
|
+
* The original document remains unchanged.
|
|
174
|
+
*
|
|
175
|
+
* @param source - Document source (viewer, URL, File, or bytes)
|
|
176
|
+
* @param options - Split options
|
|
177
|
+
* @param options.maxLevel - Maximum outline level to consider (1 = top level only, default: 1)
|
|
178
|
+
* @param options.splitMidPage - When true, filters page content when sections share a page (default: false)
|
|
179
|
+
* @returns Object with viewers array and sections metadata
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* // Split a document by top-level bookmarks
|
|
184
|
+
* const result = await client.splitByOutline(viewer);
|
|
185
|
+
* console.log(`Split into ${result.viewers.length} documents`);
|
|
186
|
+
* result.sections.forEach((section, i) => {
|
|
187
|
+
* console.log(`Document ${i}: ${section.title}`);
|
|
188
|
+
* });
|
|
189
|
+
*
|
|
190
|
+
* // Split with mid-page content filtering
|
|
191
|
+
* const result = await client.splitByOutline(viewer, { maxLevel: 2, splitMidPage: true });
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
async splitByOutline(source, options = {}) {
|
|
195
|
+
this.ensureNotDestroyed();
|
|
196
|
+
const { maxLevel = 1, splitMidPage = false } = options;
|
|
197
|
+
const docId = await this.loadSource(source);
|
|
198
|
+
const isTemporary = !(source instanceof UDocViewer);
|
|
199
|
+
try {
|
|
200
|
+
const result = await this.workerClient.pdfSplitByOutline(docId, maxLevel, splitMidPage);
|
|
201
|
+
// Create viewers for the split documents
|
|
202
|
+
const viewers = [];
|
|
203
|
+
for (const newDocId of result.documentIds) {
|
|
204
|
+
const viewer = new UDocViewer(this.workerClient, {});
|
|
205
|
+
await viewer.initializeFromDocId(newDocId);
|
|
206
|
+
this.viewers.add(viewer);
|
|
207
|
+
viewers.push(viewer);
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
viewers,
|
|
211
|
+
sections: result.sections,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
finally {
|
|
215
|
+
// Unload temporary source
|
|
216
|
+
if (isTemporary) {
|
|
217
|
+
await this.workerClient.unloadPdf(docId);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Extract all embedded images from a document.
|
|
223
|
+
*
|
|
224
|
+
* @param source - Document source (viewer, URL, File, or bytes)
|
|
225
|
+
* @param options - Extract options
|
|
226
|
+
* @param options.convertRawToPng - When true, converts raw pixel data to PNG format (default: false)
|
|
227
|
+
* @returns Array of extracted images with metadata and data
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```ts
|
|
231
|
+
* const images = await client.extractImages(viewer);
|
|
232
|
+
* for (const image of images) {
|
|
233
|
+
* console.log(`${image.name}: ${image.format} (${image.width}x${image.height})`);
|
|
234
|
+
* // image.data contains the raw image bytes
|
|
235
|
+
* }
|
|
236
|
+
*
|
|
237
|
+
* // Convert raw images to PNG for easier viewing
|
|
238
|
+
* const pngImages = await client.extractImages(viewer, { convertRawToPng: true });
|
|
239
|
+
* ```
|
|
240
|
+
*/
|
|
241
|
+
async extractImages(source, options = {}) {
|
|
242
|
+
this.ensureNotDestroyed();
|
|
243
|
+
const { convertRawToPng = false } = options;
|
|
244
|
+
const docId = await this.loadSource(source);
|
|
245
|
+
const isTemporary = !(source instanceof UDocViewer);
|
|
246
|
+
try {
|
|
247
|
+
return await this.workerClient.pdfExtractImages(docId, convertRawToPng);
|
|
248
|
+
}
|
|
249
|
+
finally {
|
|
250
|
+
if (isTemporary) {
|
|
251
|
+
await this.workerClient.unloadPdf(docId);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Extract all embedded fonts from a document.
|
|
257
|
+
*
|
|
258
|
+
* @param source - Document source (viewer, URL, File, or bytes)
|
|
259
|
+
* @returns Array of extracted fonts with metadata and data
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```ts
|
|
263
|
+
* const fonts = await client.extractFonts(viewer);
|
|
264
|
+
* for (const font of fonts) {
|
|
265
|
+
* console.log(`${font.name}: ${font.fontType} (.${font.extension})`);
|
|
266
|
+
* // font.data contains the raw font bytes
|
|
267
|
+
* }
|
|
268
|
+
* ```
|
|
269
|
+
*/
|
|
270
|
+
async extractFonts(source) {
|
|
271
|
+
this.ensureNotDestroyed();
|
|
272
|
+
const docId = await this.loadSource(source);
|
|
273
|
+
const isTemporary = !(source instanceof UDocViewer);
|
|
274
|
+
try {
|
|
275
|
+
return await this.workerClient.pdfExtractFonts(docId);
|
|
276
|
+
}
|
|
277
|
+
finally {
|
|
278
|
+
if (isTemporary) {
|
|
279
|
+
await this.workerClient.unloadPdf(docId);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Compress a document.
|
|
285
|
+
*
|
|
286
|
+
* Saves the document with full compression options enabled:
|
|
287
|
+
* - Compress stream data using FlateDecode
|
|
288
|
+
* - Pack objects into compressed object streams (PDF 1.5+)
|
|
289
|
+
* - Use compressed xref streams (PDF 1.5+)
|
|
290
|
+
* - Remove unreferenced objects
|
|
291
|
+
*
|
|
292
|
+
* @param source - Document source (viewer, URL, File, or bytes)
|
|
293
|
+
* @returns Compressed PDF data as Uint8Array
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```ts
|
|
297
|
+
* const compressedBytes = await client.compress(viewer);
|
|
298
|
+
* // Save to file or download
|
|
299
|
+
* const blob = new Blob([compressedBytes], { type: 'application/pdf' });
|
|
300
|
+
* ```
|
|
301
|
+
*/
|
|
302
|
+
async compress(source) {
|
|
303
|
+
this.ensureNotDestroyed();
|
|
304
|
+
const docId = await this.loadSource(source);
|
|
305
|
+
const isTemporary = !(source instanceof UDocViewer);
|
|
306
|
+
try {
|
|
307
|
+
return await this.workerClient.pdfCompress(docId);
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
if (isTemporary) {
|
|
311
|
+
await this.workerClient.unloadPdf(docId);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Decompress a document.
|
|
317
|
+
*
|
|
318
|
+
* Removes all filter encodings from streams, resulting in raw,
|
|
319
|
+
* uncompressed stream data. Useful for debugging or inspection.
|
|
320
|
+
*
|
|
321
|
+
* @param source - Document source (viewer, URL, File, or bytes)
|
|
322
|
+
* @returns Decompressed PDF data as Uint8Array
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```ts
|
|
326
|
+
* const decompressedBytes = await client.decompress(viewer);
|
|
327
|
+
* // Save to file for inspection
|
|
328
|
+
* const blob = new Blob([decompressedBytes], { type: 'application/pdf' });
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
331
|
+
async decompress(source) {
|
|
332
|
+
this.ensureNotDestroyed();
|
|
333
|
+
const docId = await this.loadSource(source);
|
|
334
|
+
const isTemporary = !(source instanceof UDocViewer);
|
|
335
|
+
try {
|
|
336
|
+
return await this.workerClient.pdfDecompress(docId);
|
|
337
|
+
}
|
|
338
|
+
finally {
|
|
339
|
+
if (isTemporary) {
|
|
340
|
+
await this.workerClient.unloadPdf(docId);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Load a document source and return its ID.
|
|
346
|
+
* Note: This is only used for PDF operations (compose, split, etc.)
|
|
347
|
+
*/
|
|
348
|
+
async loadSource(source) {
|
|
349
|
+
if (source instanceof UDocViewer) {
|
|
350
|
+
const docId = source.documentId;
|
|
351
|
+
if (!docId) {
|
|
352
|
+
throw new Error("Viewer has no loaded document");
|
|
353
|
+
}
|
|
354
|
+
return docId;
|
|
355
|
+
}
|
|
356
|
+
let bytes;
|
|
357
|
+
if (typeof source === "string") {
|
|
358
|
+
const controller = new AbortController();
|
|
359
|
+
const timeoutId = setTimeout(() => controller.abort(), 60_000);
|
|
360
|
+
try {
|
|
361
|
+
const response = await fetch(source, { signal: controller.signal });
|
|
362
|
+
if (!response.ok) {
|
|
363
|
+
throw new Error(`Failed to fetch ${source}: ${response.statusText}`);
|
|
364
|
+
}
|
|
365
|
+
bytes = new Uint8Array(await response.arrayBuffer());
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
369
|
+
throw new Error(`Fetch timed out for ${source}`);
|
|
370
|
+
}
|
|
371
|
+
throw error;
|
|
372
|
+
}
|
|
373
|
+
finally {
|
|
374
|
+
clearTimeout(timeoutId);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
else if (source instanceof File) {
|
|
378
|
+
bytes = new Uint8Array(await source.arrayBuffer());
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
bytes = source;
|
|
382
|
+
}
|
|
383
|
+
return this.workerClient.loadPdf(bytes);
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Normalize page specification to a string format.
|
|
387
|
+
*/
|
|
388
|
+
normalizePages(pages) {
|
|
389
|
+
if (typeof pages === "string") {
|
|
390
|
+
return pages;
|
|
391
|
+
}
|
|
392
|
+
if (typeof pages === "number") {
|
|
393
|
+
return String(pages);
|
|
394
|
+
}
|
|
395
|
+
return pages.join(",");
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Destroy the client and release all resources.
|
|
399
|
+
* All viewers created by this client become invalid.
|
|
400
|
+
*/
|
|
401
|
+
destroy() {
|
|
402
|
+
if (this.destroyed)
|
|
403
|
+
return;
|
|
404
|
+
this.destroyed = true;
|
|
405
|
+
// Destroy all viewers
|
|
406
|
+
for (const viewer of this.viewers) {
|
|
407
|
+
viewer.destroy();
|
|
408
|
+
}
|
|
409
|
+
this.viewers.clear();
|
|
410
|
+
// Terminate the worker (also cleans up render resources)
|
|
411
|
+
this.workerClient.terminate();
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get the underlying worker client (for internal use).
|
|
415
|
+
* @internal
|
|
416
|
+
*/
|
|
417
|
+
getWorkerClient() {
|
|
418
|
+
return this.workerClient;
|
|
419
|
+
}
|
|
420
|
+
ensureNotDestroyed() {
|
|
421
|
+
if (this.destroyed) {
|
|
422
|
+
throw new Error("UDocClient has been destroyed");
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Convert WASM license result to LicenseInfo.
|
|
428
|
+
*/
|
|
429
|
+
function licenseResultToInfo(result) {
|
|
430
|
+
const hasLicensedFeatures = result.features.length > 0 || Object.keys(result.limits).length > 0;
|
|
431
|
+
return {
|
|
432
|
+
valid: result.valid,
|
|
433
|
+
tier: result.valid && hasLicensedFeatures ? "licensed" : "free",
|
|
434
|
+
features: result.features,
|
|
435
|
+
limits: result.limits,
|
|
436
|
+
organization: result.organization,
|
|
437
|
+
expiresAt: result.expiresAt ? new Date(result.expiresAt * 1000) : undefined,
|
|
438
|
+
error: result.error,
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=UDocClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UDocClient.js","sourceRoot":"","sources":["../../src/UDocClient.ts"],"names":[],"mappings":"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"}
|