@qrcommunication/gigapdf-lib 0.1.0
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/CHANGELOG.md +30 -0
- package/LICENSE +114 -0
- package/README.md +105 -0
- package/dist/index.cjs +541 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +250 -0
- package/dist/index.d.ts +250 -0
- package/dist/index.js +499 -0
- package/dist/index.js.map +1 -0
- package/gigapdf.wasm +0 -0
- package/package.json +75 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @giga-pdf/wasm-engine — TypeScript SDK for the zero-dependency Rust→WASM PDF
|
|
3
|
+
* engine (gigapdf-engine). Wraps the flat `extern "C"` `gp_*` ABI behind a typed,
|
|
4
|
+
* ergonomic class. No third-party runtime deps; the `.wasm` is self-contained.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* const giga = await GigaPdfEngine.load(wasmBytesOrUrl);
|
|
8
|
+
* const doc = giga.open(pdfBytes);
|
|
9
|
+
* const docx = doc.toDocx();
|
|
10
|
+
* const png = doc.renderPage(1, 2);
|
|
11
|
+
* doc.close();
|
|
12
|
+
*/
|
|
13
|
+
type Exports = {
|
|
14
|
+
memory: WebAssembly.Memory;
|
|
15
|
+
gp_alloc(len: number): number;
|
|
16
|
+
gp_free(ptr: number, len: number): void;
|
|
17
|
+
[k: string]: any;
|
|
18
|
+
};
|
|
19
|
+
/** Loaded engine module. Create documents with {@link open} / {@link openEncrypted}. */
|
|
20
|
+
declare class GigaPdfEngine {
|
|
21
|
+
private readonly ex;
|
|
22
|
+
private constructor();
|
|
23
|
+
/** Instantiate from raw wasm bytes, a URL/path, or a Response. */
|
|
24
|
+
static load(source: ArrayBuffer | Uint8Array | string | Response): Promise<GigaPdfEngine>;
|
|
25
|
+
/**
|
|
26
|
+
* Convenience loader for Node: instantiate from the `gigapdf.wasm` shipped
|
|
27
|
+
* inside this package (resolved relative to the built module). In the browser,
|
|
28
|
+
* pass a URL or bytes to {@link load} instead.
|
|
29
|
+
*
|
|
30
|
+
* In Next.js `output: "standalone"`, add the asset to `outputFileTracingIncludes`
|
|
31
|
+
* for the consuming route so the `.wasm` is copied into the standalone bundle.
|
|
32
|
+
*/
|
|
33
|
+
static loadDefault(): Promise<GigaPdfEngine>;
|
|
34
|
+
private u8;
|
|
35
|
+
private dv;
|
|
36
|
+
/** Copy host bytes into wasm memory; returns the pointer (caller frees). */
|
|
37
|
+
_toWasm(bytes: Uint8Array): number;
|
|
38
|
+
_free(ptr: number, len: number): void;
|
|
39
|
+
/** Call a buffer-returning export `(…, outLenPtr) -> dataPtr`; copies + frees. */
|
|
40
|
+
_buffer(call: (outLenPtr: number) => number): Uint8Array;
|
|
41
|
+
_str(call: (outLenPtr: number) => number): string;
|
|
42
|
+
_json<T = unknown>(call: (outLenPtr: number) => number): T;
|
|
43
|
+
/** Pass a string argument; runs `fn(ptr, len)` then frees. */
|
|
44
|
+
_withStr<T>(s: string, fn: (ptr: number, len: number) => T): T;
|
|
45
|
+
/** Pass a bytes argument; runs `fn(ptr, len)` then frees. */
|
|
46
|
+
_withBytes<T>(bytes: Uint8Array, fn: (ptr: number, len: number) => T): T;
|
|
47
|
+
/** Pass a `u32[]` argument (e.g. page numbers); runs `fn(ptr, count)` then frees. */
|
|
48
|
+
_withU32<T>(values: number[], fn: (ptr: number, count: number) => T): T;
|
|
49
|
+
/** Pass a flat `f64[]` argument (e.g. ink x,y pairs); runs `fn(ptr, count)` then frees. */
|
|
50
|
+
_withF64<T>(values: number[], fn: (ptr: number, count: number) => T): T;
|
|
51
|
+
get raw(): Exports;
|
|
52
|
+
/** Open a PDF. Throws if it can't be parsed. */
|
|
53
|
+
open(pdf: Uint8Array): GigaPdfDoc;
|
|
54
|
+
/** Open an encrypted PDF with a password. Returns null if the password is wrong. */
|
|
55
|
+
openEncrypted(pdf: Uint8Array, password: string): GigaPdfDoc | null;
|
|
56
|
+
txtToPdf(text: string): Uint8Array;
|
|
57
|
+
htmlToPdf(html: string): Uint8Array;
|
|
58
|
+
rtfToPdf(rtf: string): Uint8Array;
|
|
59
|
+
/** Office (DOCX/ODT/PPTX/XLSX/ODS) → PDF, auto-detected. Empty array if unrecognized. */
|
|
60
|
+
officeToPdf(office: Uint8Array): Uint8Array;
|
|
61
|
+
fontCatalog(): FontInfo[];
|
|
62
|
+
/** Google Fonts CSS2 URL for a family/weight/italic (host fetches it). */
|
|
63
|
+
fontRequestUrl(family: string, weight?: number, italic?: boolean): string;
|
|
64
|
+
/** Extract the trusted gstatic font URL from a Google Fonts CSS2 response. */
|
|
65
|
+
parseCssFontUrl(css: string): string;
|
|
66
|
+
}
|
|
67
|
+
interface FontInfo {
|
|
68
|
+
family: string;
|
|
69
|
+
category: string;
|
|
70
|
+
google: boolean;
|
|
71
|
+
weights: number[];
|
|
72
|
+
}
|
|
73
|
+
interface Box {
|
|
74
|
+
x: number;
|
|
75
|
+
y: number;
|
|
76
|
+
w: number;
|
|
77
|
+
h: number;
|
|
78
|
+
}
|
|
79
|
+
interface Element extends Partial<Box> {
|
|
80
|
+
index: number;
|
|
81
|
+
kind: "text" | "image" | "shape";
|
|
82
|
+
label: string;
|
|
83
|
+
}
|
|
84
|
+
interface TextLine extends Box {
|
|
85
|
+
text: string;
|
|
86
|
+
}
|
|
87
|
+
interface SearchHit extends Box {
|
|
88
|
+
page: number;
|
|
89
|
+
text: string;
|
|
90
|
+
}
|
|
91
|
+
interface OcrWord extends Box {
|
|
92
|
+
text: string;
|
|
93
|
+
}
|
|
94
|
+
interface TextRunInfo {
|
|
95
|
+
index: number;
|
|
96
|
+
operator: string;
|
|
97
|
+
text: string;
|
|
98
|
+
}
|
|
99
|
+
/** A markup annotation (rect corners in PDF user space). */
|
|
100
|
+
interface AnnotationInfo {
|
|
101
|
+
index: number;
|
|
102
|
+
subtype: string;
|
|
103
|
+
x0: number;
|
|
104
|
+
y0: number;
|
|
105
|
+
x1: number;
|
|
106
|
+
y1: number;
|
|
107
|
+
contents: string;
|
|
108
|
+
}
|
|
109
|
+
/** A hyperlink annotation; `kind` discriminates the target. */
|
|
110
|
+
interface LinkInfo {
|
|
111
|
+
index: number;
|
|
112
|
+
x0: number;
|
|
113
|
+
y0: number;
|
|
114
|
+
x1: number;
|
|
115
|
+
y1: number;
|
|
116
|
+
kind: "uri" | "page" | "unknown";
|
|
117
|
+
uri?: string;
|
|
118
|
+
page?: number;
|
|
119
|
+
}
|
|
120
|
+
type FieldKind = "text" | "checkbox" | "radio" | "pushbutton" | "combo" | "list" | "signature" | "unknown";
|
|
121
|
+
/** An AcroForm field with its flags and (for choices) options. */
|
|
122
|
+
interface FieldInfo {
|
|
123
|
+
name: string;
|
|
124
|
+
type: string;
|
|
125
|
+
kind: FieldKind;
|
|
126
|
+
flags: number;
|
|
127
|
+
readOnly: boolean;
|
|
128
|
+
required: boolean;
|
|
129
|
+
multiline: boolean;
|
|
130
|
+
fillable: boolean;
|
|
131
|
+
maxLen?: number;
|
|
132
|
+
value: string;
|
|
133
|
+
options: string[];
|
|
134
|
+
}
|
|
135
|
+
/** One outline (bookmark) entry; `level` is the nesting depth (0 = top). */
|
|
136
|
+
interface OutlineEntry {
|
|
137
|
+
level: number;
|
|
138
|
+
title: string;
|
|
139
|
+
page?: number;
|
|
140
|
+
}
|
|
141
|
+
/** An optional-content layer (calque): toggle `visible`/`locked` to persist in the PDF. */
|
|
142
|
+
interface LayerInfo {
|
|
143
|
+
id: number;
|
|
144
|
+
name: string;
|
|
145
|
+
visible: boolean;
|
|
146
|
+
locked: boolean;
|
|
147
|
+
order: number;
|
|
148
|
+
}
|
|
149
|
+
/** A page's geometry: size in points and `/Rotate` (0/90/180/270). */
|
|
150
|
+
interface PageInfo {
|
|
151
|
+
width: number;
|
|
152
|
+
height: number;
|
|
153
|
+
rotation: number;
|
|
154
|
+
}
|
|
155
|
+
/** A live document handle. Call {@link close} when done. */
|
|
156
|
+
declare class GigaPdfDoc {
|
|
157
|
+
private readonly g;
|
|
158
|
+
private readonly h;
|
|
159
|
+
constructor(g: GigaPdfEngine, h: number);
|
|
160
|
+
private ex;
|
|
161
|
+
close(): void;
|
|
162
|
+
pageCount(): number;
|
|
163
|
+
save(): Uint8Array;
|
|
164
|
+
saveCompressed(): Uint8Array;
|
|
165
|
+
textRuns(page: number): TextRunInfo[];
|
|
166
|
+
elements(page: number): Element[];
|
|
167
|
+
structuredText(page: number): TextLine[];
|
|
168
|
+
search(query: string, caseInsensitive?: boolean): SearchHit[];
|
|
169
|
+
/** OCR a (scanned) page → words with PDF-space boxes. `scale` ≥ 2 for small text. */
|
|
170
|
+
ocr(page: number, scale?: number): OcrWord[];
|
|
171
|
+
ocrText(page: number, scale?: number): string;
|
|
172
|
+
replaceText(page: number, index: number, text: string): boolean;
|
|
173
|
+
removeElement(page: number, index: number): boolean;
|
|
174
|
+
moveElement(page: number, index: number, dx: number, dy: number): boolean;
|
|
175
|
+
duplicateElement(page: number, index: number): boolean;
|
|
176
|
+
/** Index of the element at page point `(x, y)`, or -1 if none. */
|
|
177
|
+
elementAt(page: number, x: number, y: number): number;
|
|
178
|
+
/**
|
|
179
|
+
* Draw a vector rectangle. Pass an `0xRRGGBB` colour for `stroke`/`fill`, or
|
|
180
|
+
* `null` to omit that paint. 0 → success.
|
|
181
|
+
*/
|
|
182
|
+
addRectangle(page: number, x: number, y: number, w: number, h: number, stroke?: number | null, fill?: number | null, lineWidth?: number): boolean;
|
|
183
|
+
/** True redaction: delete content intersecting the region (no opaque cover by default). */
|
|
184
|
+
redact(page: number, x: number, y: number, w: number, h: number, coverRgb?: number, hasCover?: boolean): number;
|
|
185
|
+
rotatePage(page: number, degrees: number): boolean;
|
|
186
|
+
deletePage(page: number): boolean;
|
|
187
|
+
movePage(from: number, to: number): boolean;
|
|
188
|
+
appendPages(otherPdf: Uint8Array): boolean;
|
|
189
|
+
/** Extract the given 1-based page numbers into a NEW standalone PDF. */
|
|
190
|
+
extractPages(pages: number[]): Uint8Array;
|
|
191
|
+
/** Resize a page's MediaBox to `width`×`height` points. */
|
|
192
|
+
resizePage(page: number, width: number, height: number): boolean;
|
|
193
|
+
/** Insert a blank page after the 1-based `after` page (0 = front); returns its id. */
|
|
194
|
+
addPage(width: number, height: number, after?: number): number;
|
|
195
|
+
/** Duplicate a page, inserting the copy right after it; returns the new page's id. */
|
|
196
|
+
copyPage(page: number): number;
|
|
197
|
+
/** A page's size (points) and `/Rotate` (0/90/180/270). */
|
|
198
|
+
pageInfo(page: number): PageInfo;
|
|
199
|
+
renderPage(page: number, scale?: number): Uint8Array;
|
|
200
|
+
embedFont(family: string, ttf: Uint8Array): number;
|
|
201
|
+
addText(page: number, x: number, y: number, size: number, text: string, fontObj: number, rgb?: number): boolean;
|
|
202
|
+
neededFonts(): string[];
|
|
203
|
+
toText(): string;
|
|
204
|
+
toHtml(): string;
|
|
205
|
+
toDocx(): Uint8Array;
|
|
206
|
+
toPptx(): Uint8Array;
|
|
207
|
+
toOdt(): Uint8Array;
|
|
208
|
+
toXlsx(): Uint8Array;
|
|
209
|
+
toOds(): Uint8Array;
|
|
210
|
+
toRtf(): Uint8Array;
|
|
211
|
+
toPdfA(): Uint8Array;
|
|
212
|
+
saveEncrypted(password: string, fileId: string, permissions?: number): Uint8Array;
|
|
213
|
+
/** Self-signed digital signature. `random` ≥ 256 bytes from crypto.getRandomValues. */
|
|
214
|
+
sign(fields: string, random: Uint8Array, keyBits?: number): Uint8Array;
|
|
215
|
+
getMetadata(key: string): string;
|
|
216
|
+
/** Set an Info-dictionary entry (e.g. "Title", "Author"). */
|
|
217
|
+
setMetadata(key: string, value: string): boolean;
|
|
218
|
+
annotations(page: number): AnnotationInfo[];
|
|
219
|
+
removeAnnotation(page: number, index: number): boolean;
|
|
220
|
+
addSquare(page: number, x0: number, y0: number, x1: number, y1: number, stroke?: number | null, fill?: number | null, lineWidth?: number): boolean;
|
|
221
|
+
addHighlight(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
222
|
+
addLineAnnotation(page: number, x1: number, y1: number, x2: number, y2: number, rgb?: number, lineWidth?: number): boolean;
|
|
223
|
+
addFreeText(page: number, x0: number, y0: number, x1: number, y1: number, text: string, fontSize?: number, rgb?: number): boolean;
|
|
224
|
+
addUnderline(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
225
|
+
addStrikeOut(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
226
|
+
/** Freehand ink annotation from one polyline (`points` = flat [x0,y0,x1,y1,…]). */
|
|
227
|
+
addInk(page: number, points: number[], rgb?: number, lineWidth?: number): boolean;
|
|
228
|
+
addStamp(page: number, x0: number, y0: number, x1: number, y1: number, label: string, rgb?: number): boolean;
|
|
229
|
+
flattenAnnotations(page: number): number;
|
|
230
|
+
links(page: number): LinkInfo[];
|
|
231
|
+
addUriLink(page: number, x0: number, y0: number, x1: number, y1: number, uri: string): boolean;
|
|
232
|
+
addGotoLink(page: number, x0: number, y0: number, x1: number, y1: number, targetPage: number): boolean;
|
|
233
|
+
layers(): LayerInfo[];
|
|
234
|
+
/** Create a new (visible, unlocked) layer; returns its id (0 on error). */
|
|
235
|
+
addLayer(name: string): number;
|
|
236
|
+
setLayerVisibility(id: number, visible: boolean): boolean;
|
|
237
|
+
setLayerLocked(id: number, locked: boolean): boolean;
|
|
238
|
+
removeLayer(id: number): boolean;
|
|
239
|
+
outline(): OutlineEntry[];
|
|
240
|
+
/** Replace the outline. Each entry: `{level, page?, title}` (page 0/undefined = no dest). */
|
|
241
|
+
setOutline(entries: OutlineEntry[]): boolean;
|
|
242
|
+
fields(): FieldInfo[];
|
|
243
|
+
setTextField(name: string, value: string): boolean;
|
|
244
|
+
setCheckbox(name: string, checked: boolean): boolean;
|
|
245
|
+
setRadio(name: string, value: string): boolean;
|
|
246
|
+
/** Set a choice field's selection (multi-select list boxes accept several values). */
|
|
247
|
+
setChoice(name: string, values: string[]): boolean;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export { type AnnotationInfo, type Box, type Element, type FieldInfo, type FieldKind, type FontInfo, GigaPdfDoc, GigaPdfEngine, type LayerInfo, type LinkInfo, type OcrWord, type OutlineEntry, type PageInfo, type SearchHit, type TextLine, type TextRunInfo };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @giga-pdf/wasm-engine — TypeScript SDK for the zero-dependency Rust→WASM PDF
|
|
3
|
+
* engine (gigapdf-engine). Wraps the flat `extern "C"` `gp_*` ABI behind a typed,
|
|
4
|
+
* ergonomic class. No third-party runtime deps; the `.wasm` is self-contained.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* const giga = await GigaPdfEngine.load(wasmBytesOrUrl);
|
|
8
|
+
* const doc = giga.open(pdfBytes);
|
|
9
|
+
* const docx = doc.toDocx();
|
|
10
|
+
* const png = doc.renderPage(1, 2);
|
|
11
|
+
* doc.close();
|
|
12
|
+
*/
|
|
13
|
+
type Exports = {
|
|
14
|
+
memory: WebAssembly.Memory;
|
|
15
|
+
gp_alloc(len: number): number;
|
|
16
|
+
gp_free(ptr: number, len: number): void;
|
|
17
|
+
[k: string]: any;
|
|
18
|
+
};
|
|
19
|
+
/** Loaded engine module. Create documents with {@link open} / {@link openEncrypted}. */
|
|
20
|
+
declare class GigaPdfEngine {
|
|
21
|
+
private readonly ex;
|
|
22
|
+
private constructor();
|
|
23
|
+
/** Instantiate from raw wasm bytes, a URL/path, or a Response. */
|
|
24
|
+
static load(source: ArrayBuffer | Uint8Array | string | Response): Promise<GigaPdfEngine>;
|
|
25
|
+
/**
|
|
26
|
+
* Convenience loader for Node: instantiate from the `gigapdf.wasm` shipped
|
|
27
|
+
* inside this package (resolved relative to the built module). In the browser,
|
|
28
|
+
* pass a URL or bytes to {@link load} instead.
|
|
29
|
+
*
|
|
30
|
+
* In Next.js `output: "standalone"`, add the asset to `outputFileTracingIncludes`
|
|
31
|
+
* for the consuming route so the `.wasm` is copied into the standalone bundle.
|
|
32
|
+
*/
|
|
33
|
+
static loadDefault(): Promise<GigaPdfEngine>;
|
|
34
|
+
private u8;
|
|
35
|
+
private dv;
|
|
36
|
+
/** Copy host bytes into wasm memory; returns the pointer (caller frees). */
|
|
37
|
+
_toWasm(bytes: Uint8Array): number;
|
|
38
|
+
_free(ptr: number, len: number): void;
|
|
39
|
+
/** Call a buffer-returning export `(…, outLenPtr) -> dataPtr`; copies + frees. */
|
|
40
|
+
_buffer(call: (outLenPtr: number) => number): Uint8Array;
|
|
41
|
+
_str(call: (outLenPtr: number) => number): string;
|
|
42
|
+
_json<T = unknown>(call: (outLenPtr: number) => number): T;
|
|
43
|
+
/** Pass a string argument; runs `fn(ptr, len)` then frees. */
|
|
44
|
+
_withStr<T>(s: string, fn: (ptr: number, len: number) => T): T;
|
|
45
|
+
/** Pass a bytes argument; runs `fn(ptr, len)` then frees. */
|
|
46
|
+
_withBytes<T>(bytes: Uint8Array, fn: (ptr: number, len: number) => T): T;
|
|
47
|
+
/** Pass a `u32[]` argument (e.g. page numbers); runs `fn(ptr, count)` then frees. */
|
|
48
|
+
_withU32<T>(values: number[], fn: (ptr: number, count: number) => T): T;
|
|
49
|
+
/** Pass a flat `f64[]` argument (e.g. ink x,y pairs); runs `fn(ptr, count)` then frees. */
|
|
50
|
+
_withF64<T>(values: number[], fn: (ptr: number, count: number) => T): T;
|
|
51
|
+
get raw(): Exports;
|
|
52
|
+
/** Open a PDF. Throws if it can't be parsed. */
|
|
53
|
+
open(pdf: Uint8Array): GigaPdfDoc;
|
|
54
|
+
/** Open an encrypted PDF with a password. Returns null if the password is wrong. */
|
|
55
|
+
openEncrypted(pdf: Uint8Array, password: string): GigaPdfDoc | null;
|
|
56
|
+
txtToPdf(text: string): Uint8Array;
|
|
57
|
+
htmlToPdf(html: string): Uint8Array;
|
|
58
|
+
rtfToPdf(rtf: string): Uint8Array;
|
|
59
|
+
/** Office (DOCX/ODT/PPTX/XLSX/ODS) → PDF, auto-detected. Empty array if unrecognized. */
|
|
60
|
+
officeToPdf(office: Uint8Array): Uint8Array;
|
|
61
|
+
fontCatalog(): FontInfo[];
|
|
62
|
+
/** Google Fonts CSS2 URL for a family/weight/italic (host fetches it). */
|
|
63
|
+
fontRequestUrl(family: string, weight?: number, italic?: boolean): string;
|
|
64
|
+
/** Extract the trusted gstatic font URL from a Google Fonts CSS2 response. */
|
|
65
|
+
parseCssFontUrl(css: string): string;
|
|
66
|
+
}
|
|
67
|
+
interface FontInfo {
|
|
68
|
+
family: string;
|
|
69
|
+
category: string;
|
|
70
|
+
google: boolean;
|
|
71
|
+
weights: number[];
|
|
72
|
+
}
|
|
73
|
+
interface Box {
|
|
74
|
+
x: number;
|
|
75
|
+
y: number;
|
|
76
|
+
w: number;
|
|
77
|
+
h: number;
|
|
78
|
+
}
|
|
79
|
+
interface Element extends Partial<Box> {
|
|
80
|
+
index: number;
|
|
81
|
+
kind: "text" | "image" | "shape";
|
|
82
|
+
label: string;
|
|
83
|
+
}
|
|
84
|
+
interface TextLine extends Box {
|
|
85
|
+
text: string;
|
|
86
|
+
}
|
|
87
|
+
interface SearchHit extends Box {
|
|
88
|
+
page: number;
|
|
89
|
+
text: string;
|
|
90
|
+
}
|
|
91
|
+
interface OcrWord extends Box {
|
|
92
|
+
text: string;
|
|
93
|
+
}
|
|
94
|
+
interface TextRunInfo {
|
|
95
|
+
index: number;
|
|
96
|
+
operator: string;
|
|
97
|
+
text: string;
|
|
98
|
+
}
|
|
99
|
+
/** A markup annotation (rect corners in PDF user space). */
|
|
100
|
+
interface AnnotationInfo {
|
|
101
|
+
index: number;
|
|
102
|
+
subtype: string;
|
|
103
|
+
x0: number;
|
|
104
|
+
y0: number;
|
|
105
|
+
x1: number;
|
|
106
|
+
y1: number;
|
|
107
|
+
contents: string;
|
|
108
|
+
}
|
|
109
|
+
/** A hyperlink annotation; `kind` discriminates the target. */
|
|
110
|
+
interface LinkInfo {
|
|
111
|
+
index: number;
|
|
112
|
+
x0: number;
|
|
113
|
+
y0: number;
|
|
114
|
+
x1: number;
|
|
115
|
+
y1: number;
|
|
116
|
+
kind: "uri" | "page" | "unknown";
|
|
117
|
+
uri?: string;
|
|
118
|
+
page?: number;
|
|
119
|
+
}
|
|
120
|
+
type FieldKind = "text" | "checkbox" | "radio" | "pushbutton" | "combo" | "list" | "signature" | "unknown";
|
|
121
|
+
/** An AcroForm field with its flags and (for choices) options. */
|
|
122
|
+
interface FieldInfo {
|
|
123
|
+
name: string;
|
|
124
|
+
type: string;
|
|
125
|
+
kind: FieldKind;
|
|
126
|
+
flags: number;
|
|
127
|
+
readOnly: boolean;
|
|
128
|
+
required: boolean;
|
|
129
|
+
multiline: boolean;
|
|
130
|
+
fillable: boolean;
|
|
131
|
+
maxLen?: number;
|
|
132
|
+
value: string;
|
|
133
|
+
options: string[];
|
|
134
|
+
}
|
|
135
|
+
/** One outline (bookmark) entry; `level` is the nesting depth (0 = top). */
|
|
136
|
+
interface OutlineEntry {
|
|
137
|
+
level: number;
|
|
138
|
+
title: string;
|
|
139
|
+
page?: number;
|
|
140
|
+
}
|
|
141
|
+
/** An optional-content layer (calque): toggle `visible`/`locked` to persist in the PDF. */
|
|
142
|
+
interface LayerInfo {
|
|
143
|
+
id: number;
|
|
144
|
+
name: string;
|
|
145
|
+
visible: boolean;
|
|
146
|
+
locked: boolean;
|
|
147
|
+
order: number;
|
|
148
|
+
}
|
|
149
|
+
/** A page's geometry: size in points and `/Rotate` (0/90/180/270). */
|
|
150
|
+
interface PageInfo {
|
|
151
|
+
width: number;
|
|
152
|
+
height: number;
|
|
153
|
+
rotation: number;
|
|
154
|
+
}
|
|
155
|
+
/** A live document handle. Call {@link close} when done. */
|
|
156
|
+
declare class GigaPdfDoc {
|
|
157
|
+
private readonly g;
|
|
158
|
+
private readonly h;
|
|
159
|
+
constructor(g: GigaPdfEngine, h: number);
|
|
160
|
+
private ex;
|
|
161
|
+
close(): void;
|
|
162
|
+
pageCount(): number;
|
|
163
|
+
save(): Uint8Array;
|
|
164
|
+
saveCompressed(): Uint8Array;
|
|
165
|
+
textRuns(page: number): TextRunInfo[];
|
|
166
|
+
elements(page: number): Element[];
|
|
167
|
+
structuredText(page: number): TextLine[];
|
|
168
|
+
search(query: string, caseInsensitive?: boolean): SearchHit[];
|
|
169
|
+
/** OCR a (scanned) page → words with PDF-space boxes. `scale` ≥ 2 for small text. */
|
|
170
|
+
ocr(page: number, scale?: number): OcrWord[];
|
|
171
|
+
ocrText(page: number, scale?: number): string;
|
|
172
|
+
replaceText(page: number, index: number, text: string): boolean;
|
|
173
|
+
removeElement(page: number, index: number): boolean;
|
|
174
|
+
moveElement(page: number, index: number, dx: number, dy: number): boolean;
|
|
175
|
+
duplicateElement(page: number, index: number): boolean;
|
|
176
|
+
/** Index of the element at page point `(x, y)`, or -1 if none. */
|
|
177
|
+
elementAt(page: number, x: number, y: number): number;
|
|
178
|
+
/**
|
|
179
|
+
* Draw a vector rectangle. Pass an `0xRRGGBB` colour for `stroke`/`fill`, or
|
|
180
|
+
* `null` to omit that paint. 0 → success.
|
|
181
|
+
*/
|
|
182
|
+
addRectangle(page: number, x: number, y: number, w: number, h: number, stroke?: number | null, fill?: number | null, lineWidth?: number): boolean;
|
|
183
|
+
/** True redaction: delete content intersecting the region (no opaque cover by default). */
|
|
184
|
+
redact(page: number, x: number, y: number, w: number, h: number, coverRgb?: number, hasCover?: boolean): number;
|
|
185
|
+
rotatePage(page: number, degrees: number): boolean;
|
|
186
|
+
deletePage(page: number): boolean;
|
|
187
|
+
movePage(from: number, to: number): boolean;
|
|
188
|
+
appendPages(otherPdf: Uint8Array): boolean;
|
|
189
|
+
/** Extract the given 1-based page numbers into a NEW standalone PDF. */
|
|
190
|
+
extractPages(pages: number[]): Uint8Array;
|
|
191
|
+
/** Resize a page's MediaBox to `width`×`height` points. */
|
|
192
|
+
resizePage(page: number, width: number, height: number): boolean;
|
|
193
|
+
/** Insert a blank page after the 1-based `after` page (0 = front); returns its id. */
|
|
194
|
+
addPage(width: number, height: number, after?: number): number;
|
|
195
|
+
/** Duplicate a page, inserting the copy right after it; returns the new page's id. */
|
|
196
|
+
copyPage(page: number): number;
|
|
197
|
+
/** A page's size (points) and `/Rotate` (0/90/180/270). */
|
|
198
|
+
pageInfo(page: number): PageInfo;
|
|
199
|
+
renderPage(page: number, scale?: number): Uint8Array;
|
|
200
|
+
embedFont(family: string, ttf: Uint8Array): number;
|
|
201
|
+
addText(page: number, x: number, y: number, size: number, text: string, fontObj: number, rgb?: number): boolean;
|
|
202
|
+
neededFonts(): string[];
|
|
203
|
+
toText(): string;
|
|
204
|
+
toHtml(): string;
|
|
205
|
+
toDocx(): Uint8Array;
|
|
206
|
+
toPptx(): Uint8Array;
|
|
207
|
+
toOdt(): Uint8Array;
|
|
208
|
+
toXlsx(): Uint8Array;
|
|
209
|
+
toOds(): Uint8Array;
|
|
210
|
+
toRtf(): Uint8Array;
|
|
211
|
+
toPdfA(): Uint8Array;
|
|
212
|
+
saveEncrypted(password: string, fileId: string, permissions?: number): Uint8Array;
|
|
213
|
+
/** Self-signed digital signature. `random` ≥ 256 bytes from crypto.getRandomValues. */
|
|
214
|
+
sign(fields: string, random: Uint8Array, keyBits?: number): Uint8Array;
|
|
215
|
+
getMetadata(key: string): string;
|
|
216
|
+
/** Set an Info-dictionary entry (e.g. "Title", "Author"). */
|
|
217
|
+
setMetadata(key: string, value: string): boolean;
|
|
218
|
+
annotations(page: number): AnnotationInfo[];
|
|
219
|
+
removeAnnotation(page: number, index: number): boolean;
|
|
220
|
+
addSquare(page: number, x0: number, y0: number, x1: number, y1: number, stroke?: number | null, fill?: number | null, lineWidth?: number): boolean;
|
|
221
|
+
addHighlight(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
222
|
+
addLineAnnotation(page: number, x1: number, y1: number, x2: number, y2: number, rgb?: number, lineWidth?: number): boolean;
|
|
223
|
+
addFreeText(page: number, x0: number, y0: number, x1: number, y1: number, text: string, fontSize?: number, rgb?: number): boolean;
|
|
224
|
+
addUnderline(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
225
|
+
addStrikeOut(page: number, x0: number, y0: number, x1: number, y1: number, rgb?: number): boolean;
|
|
226
|
+
/** Freehand ink annotation from one polyline (`points` = flat [x0,y0,x1,y1,…]). */
|
|
227
|
+
addInk(page: number, points: number[], rgb?: number, lineWidth?: number): boolean;
|
|
228
|
+
addStamp(page: number, x0: number, y0: number, x1: number, y1: number, label: string, rgb?: number): boolean;
|
|
229
|
+
flattenAnnotations(page: number): number;
|
|
230
|
+
links(page: number): LinkInfo[];
|
|
231
|
+
addUriLink(page: number, x0: number, y0: number, x1: number, y1: number, uri: string): boolean;
|
|
232
|
+
addGotoLink(page: number, x0: number, y0: number, x1: number, y1: number, targetPage: number): boolean;
|
|
233
|
+
layers(): LayerInfo[];
|
|
234
|
+
/** Create a new (visible, unlocked) layer; returns its id (0 on error). */
|
|
235
|
+
addLayer(name: string): number;
|
|
236
|
+
setLayerVisibility(id: number, visible: boolean): boolean;
|
|
237
|
+
setLayerLocked(id: number, locked: boolean): boolean;
|
|
238
|
+
removeLayer(id: number): boolean;
|
|
239
|
+
outline(): OutlineEntry[];
|
|
240
|
+
/** Replace the outline. Each entry: `{level, page?, title}` (page 0/undefined = no dest). */
|
|
241
|
+
setOutline(entries: OutlineEntry[]): boolean;
|
|
242
|
+
fields(): FieldInfo[];
|
|
243
|
+
setTextField(name: string, value: string): boolean;
|
|
244
|
+
setCheckbox(name: string, checked: boolean): boolean;
|
|
245
|
+
setRadio(name: string, value: string): boolean;
|
|
246
|
+
/** Set a choice field's selection (multi-select list boxes accept several values). */
|
|
247
|
+
setChoice(name: string, values: string[]): boolean;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export { type AnnotationInfo, type Box, type Element, type FieldInfo, type FieldKind, type FontInfo, GigaPdfDoc, GigaPdfEngine, type LayerInfo, type LinkInfo, type OcrWord, type OutlineEntry, type PageInfo, type SearchHit, type TextLine, type TextRunInfo };
|