pdfnova 1.0.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.
Files changed (76) hide show
  1. package/README.md +336 -0
  2. package/dist/AnnotationReader-ADHPZ3V5.mjs +3 -0
  3. package/dist/AnnotationReader-ADHPZ3V5.mjs.map +1 -0
  4. package/dist/AnnotationReader-C5XLXGWS.cjs +12 -0
  5. package/dist/AnnotationReader-C5XLXGWS.cjs.map +1 -0
  6. package/dist/AnnotationWriter-N3Y4KTPI.cjs +12 -0
  7. package/dist/AnnotationWriter-N3Y4KTPI.cjs.map +1 -0
  8. package/dist/AnnotationWriter-XWY5N6AZ.mjs +3 -0
  9. package/dist/AnnotationWriter-XWY5N6AZ.mjs.map +1 -0
  10. package/dist/FormFiller-2O4MOQYV.cjs +12 -0
  11. package/dist/FormFiller-2O4MOQYV.cjs.map +1 -0
  12. package/dist/FormFiller-6DLWMRN5.mjs +3 -0
  13. package/dist/FormFiller-6DLWMRN5.mjs.map +1 -0
  14. package/dist/FormFlattener-5MWLLH7W.cjs +12 -0
  15. package/dist/FormFlattener-5MWLLH7W.cjs.map +1 -0
  16. package/dist/FormFlattener-YQRQ3QOY.mjs +3 -0
  17. package/dist/FormFlattener-YQRQ3QOY.mjs.map +1 -0
  18. package/dist/FormReader-QAEDFD77.cjs +13 -0
  19. package/dist/FormReader-QAEDFD77.cjs.map +1 -0
  20. package/dist/FormReader-XEF3T5LD.mjs +4 -0
  21. package/dist/FormReader-XEF3T5LD.mjs.map +1 -0
  22. package/dist/SignatureVerifier-2IR7UQGU.mjs +3 -0
  23. package/dist/SignatureVerifier-2IR7UQGU.mjs.map +1 -0
  24. package/dist/SignatureVerifier-4KWQA7X6.cjs +12 -0
  25. package/dist/SignatureVerifier-4KWQA7X6.cjs.map +1 -0
  26. package/dist/WasmMock-2I3GVRQF.mjs +397 -0
  27. package/dist/WasmMock-2I3GVRQF.mjs.map +1 -0
  28. package/dist/WasmMock-OYPV4J6B.cjs +399 -0
  29. package/dist/WasmMock-OYPV4J6B.cjs.map +1 -0
  30. package/dist/chunk-2OWW5BYD.mjs +1847 -0
  31. package/dist/chunk-2OWW5BYD.mjs.map +1 -0
  32. package/dist/chunk-2YFCKMVK.cjs +72 -0
  33. package/dist/chunk-2YFCKMVK.cjs.map +1 -0
  34. package/dist/chunk-7FGOUG4Z.cjs +51 -0
  35. package/dist/chunk-7FGOUG4Z.cjs.map +1 -0
  36. package/dist/chunk-CPMUWWNS.cjs +44 -0
  37. package/dist/chunk-CPMUWWNS.cjs.map +1 -0
  38. package/dist/chunk-DVMAQ62T.cjs +109 -0
  39. package/dist/chunk-DVMAQ62T.cjs.map +1 -0
  40. package/dist/chunk-ETSUOY4U.cjs +104 -0
  41. package/dist/chunk-ETSUOY4U.cjs.map +1 -0
  42. package/dist/chunk-FD5RTJ5W.mjs +60 -0
  43. package/dist/chunk-FD5RTJ5W.mjs.map +1 -0
  44. package/dist/chunk-FO3DQLVB.mjs +42 -0
  45. package/dist/chunk-FO3DQLVB.mjs.map +1 -0
  46. package/dist/chunk-G2FA6VKV.cjs +62 -0
  47. package/dist/chunk-G2FA6VKV.cjs.map +1 -0
  48. package/dist/chunk-G7575D5X.mjs +67 -0
  49. package/dist/chunk-G7575D5X.mjs.map +1 -0
  50. package/dist/chunk-I7OBHZLB.mjs +75 -0
  51. package/dist/chunk-I7OBHZLB.mjs.map +1 -0
  52. package/dist/chunk-INA3KRJK.cjs +1863 -0
  53. package/dist/chunk-INA3KRJK.cjs.map +1 -0
  54. package/dist/chunk-RZFKZ2CA.cjs +77 -0
  55. package/dist/chunk-RZFKZ2CA.cjs.map +1 -0
  56. package/dist/chunk-VRJQZOCH.mjs +107 -0
  57. package/dist/chunk-VRJQZOCH.mjs.map +1 -0
  58. package/dist/chunk-X53667JS.mjs +102 -0
  59. package/dist/chunk-X53667JS.mjs.map +1 -0
  60. package/dist/chunk-XEHKVFPJ.mjs +49 -0
  61. package/dist/chunk-XEHKVFPJ.mjs.map +1 -0
  62. package/dist/index.cjs +112 -0
  63. package/dist/index.cjs.map +1 -0
  64. package/dist/index.d.cts +103 -0
  65. package/dist/index.d.ts +103 -0
  66. package/dist/index.mjs +14 -0
  67. package/dist/index.mjs.map +1 -0
  68. package/dist/lite-CMz-Yosm.d.cts +662 -0
  69. package/dist/lite-CMz-Yosm.d.ts +662 -0
  70. package/dist/lite.cjs +70 -0
  71. package/dist/lite.cjs.map +1 -0
  72. package/dist/lite.d.cts +1 -0
  73. package/dist/lite.d.ts +1 -0
  74. package/dist/lite.mjs +8 -0
  75. package/dist/lite.mjs.map +1 -0
  76. package/package.json +68 -0
@@ -0,0 +1,662 @@
1
+ type WasmTier = 'lite' | 'full';
2
+ interface WasmModule {
3
+ HEAPU8: Uint8Array;
4
+ HEAPU32: Uint32Array;
5
+ HEAP32: Int32Array;
6
+ HEAPF32: Float32Array;
7
+ HEAPF64: Float64Array;
8
+ _malloc(size: number): number;
9
+ _free(ptr: number): void;
10
+ _FPDF_InitLibraryWithConfig(configPtr: number): void;
11
+ _FPDF_DestroyLibrary(): void;
12
+ _FPDF_LoadMemDocument(buf: number, size: number, password: number): number;
13
+ _FPDF_CloseDocument(doc: number): void;
14
+ _FPDF_GetLastError(): number;
15
+ _FPDF_GetPageCount(doc: number): number;
16
+ _FPDF_LoadPage(doc: number, pageIndex: number): number;
17
+ _FPDF_ClosePage(page: number): void;
18
+ _FPDF_GetPageWidthF(page: number): number;
19
+ _FPDF_GetPageHeightF(page: number): number;
20
+ _FPDFBitmap_Create(width: number, height: number, alpha: number): number;
21
+ _FPDFBitmap_FillRect(bitmap: number, left: number, top: number, width: number, height: number, color: number): void;
22
+ _FPDFBitmap_GetBuffer(bitmap: number): number;
23
+ _FPDFBitmap_GetStride(bitmap: number): number;
24
+ _FPDFBitmap_Destroy(bitmap: number): void;
25
+ _FPDF_RenderPageBitmap(bitmap: number, page: number, startX: number, startY: number, sizeX: number, sizeY: number, rotate: number, flags: number): void;
26
+ _FPDFText_LoadPage(page: number): number;
27
+ _FPDFText_ClosePage(textPage: number): void;
28
+ _FPDFText_CountChars(textPage: number): number;
29
+ _FPDFText_GetUnicode(textPage: number, index: number): number;
30
+ _FPDFText_GetFontSize(textPage: number, index: number): number;
31
+ _FPDFText_GetCharBox(textPage: number, index: number, left: number, right: number, bottom: number, top: number): number;
32
+ _FPDFText_GetText(textPage: number, startIndex: number, count: number, buf: number): number;
33
+ _FPDFText_FindStart(textPage: number, findWhat: number, flags: number, startIndex: number): number;
34
+ _FPDFText_FindNext(findHandle: number): number;
35
+ _FPDFText_FindClose(findHandle: number): void;
36
+ _FPDFText_GetSchResultIndex(findHandle: number): number;
37
+ _FPDFText_GetSchCount(findHandle: number): number;
38
+ _FPDFText_CountRects(textPage: number, startIndex: number, count: number): number;
39
+ _FPDFText_GetRect(textPage: number, rectIndex: number, left: number, top: number, right: number, bottom: number): number;
40
+ _FPDF_GetMetaText(doc: number, tag: number, buf: number, bufLen: number): number;
41
+ _FPDFBookmark_GetFirstChild(doc: number, bookmark: number): number;
42
+ _FPDFBookmark_GetNextSibling(doc: number, bookmark: number): number;
43
+ _FPDFBookmark_GetTitle(bookmark: number, buf: number, bufLen: number): number;
44
+ _FPDFBookmark_GetAction(bookmark: number): number;
45
+ _FPDFBookmark_GetDest(doc: number, bookmark: number): number;
46
+ _FPDFDest_GetDestPageIndex(doc: number, dest: number): number;
47
+ _FPDFLink_LoadWebLinks(textPage: number): number;
48
+ _FPDFLink_CountWebLinks(linkPage: number): number;
49
+ _FPDFLink_GetURL(linkPage: number, linkIndex: number, buf: number, bufLen: number): number;
50
+ _FPDFLink_CountRects(linkPage: number, linkIndex: number): number;
51
+ _FPDFLink_GetRect(linkPage: number, linkIndex: number, rectIndex: number, left: number, top: number, right: number, bottom: number): void;
52
+ _FPDFLink_CloseWebLinks(linkPage: number): void;
53
+ _FPDFPage_GetAnnotCount?(page: number): number;
54
+ _FPDFPage_GetAnnot?(page: number, index: number): number;
55
+ _FPDFPage_CreateAnnot?(page: number, subtype: number): number;
56
+ _FPDFPage_RemoveAnnot?(page: number, index: number): number;
57
+ _FPDFAnnot_GetSubtype?(annot: number): number;
58
+ _FPDFAnnot_GetRect?(annot: number, rect: number): number;
59
+ _FPDFAnnot_SetRect?(annot: number, rect: number): number;
60
+ _FPDFAnnot_GetColor?(annot: number, type: number, r: number, g: number, b: number, a: number): number;
61
+ _FPDFAnnot_SetColor?(annot: number, type: number, r: number, g: number, b: number, a: number): number;
62
+ _FPDFAnnot_GetStringValue?(annot: number, key: number, buf: number, bufLen: number): number;
63
+ _FPDFAnnot_SetStringValue?(annot: number, key: number, value: number): number;
64
+ _FPDFAnnot_AppendAttachmentPoints?(annot: number, points: number): number;
65
+ _FPDFAnnot_CountAttachmentPoints?(annot: number): number;
66
+ _FPDFAnnot_GetAttachmentPoints?(annot: number, index: number, points: number): number;
67
+ _FPDFPage_CloseAnnot?(annot: number): void;
68
+ _FPDFDOC_InitFormFillEnvironment?(doc: number, formInfo: number): number;
69
+ _FPDFDOC_ExitFormFillEnvironment?(formHandle: number): void;
70
+ _FPDF_GetFormType?(doc: number): number;
71
+ _FPDFPage_HasFormFieldAtPoint?(formHandle: number, page: number, x: number, y: number): number;
72
+ _FORM_OnMouseMove?(formHandle: number, page: number, modifier: number, x: number, y: number): void;
73
+ _FPDFAnnot_GetFormFieldType?(formHandle: number, annot: number): number;
74
+ _FPDFAnnot_GetFormFieldName?(formHandle: number, annot: number, buf: number, bufLen: number): number;
75
+ _FPDFAnnot_GetFormFieldValue?(formHandle: number, annot: number, buf: number, bufLen: number): number;
76
+ _FPDFAnnot_SetFormFieldValue?(formHandle: number, annot: number, value: number): void;
77
+ _FPDFAnnot_GetFormFieldFlags?(formHandle: number, annot: number): number;
78
+ _FPDFAnnot_IsChecked?(formHandle: number, annot: number): number;
79
+ _FPDFPage_Flatten?(page: number, usage: number): number;
80
+ _FPDF_SaveAsCopy?(doc: number, writer: number, flags: number): number;
81
+ _FPDF_SaveWithVersion?(doc: number, writer: number, flags: number, version: number): number;
82
+ _FPDF_GetSignatureCount?(doc: number): number;
83
+ _FPDF_GetSignatureObject?(doc: number, index: number): number;
84
+ _FPDFSignObj_GetContents?(sig: number, buf: number, bufLen: number): number;
85
+ _FPDFSignObj_GetByteRange?(sig: number, buf: number, bufLen: number): number;
86
+ _FPDFSignObj_GetSubFilter?(sig: number, buf: number, bufLen: number): number;
87
+ _FPDFSignObj_GetReason?(sig: number, buf: number, bufLen: number): number;
88
+ _FPDFSignObj_GetTime?(sig: number, buf: number, bufLen: number): number;
89
+ _FPDFSignObj_GetDocMDPPermission?(sig: number): number;
90
+ UTF8ToString(ptr: number): string;
91
+ UTF16ToString(ptr: number): string;
92
+ stringToUTF8(str: string, outPtr: number, maxBytesToWrite: number): void;
93
+ stringToUTF16(str: string, outPtr: number, maxBytesToWrite: number): void;
94
+ lengthBytesUTF8(str: string): number;
95
+ lengthBytesUTF16(str: string): number;
96
+ }
97
+ interface PDFNovaConfig {
98
+ wasmUrl?: string;
99
+ worker?: boolean;
100
+ maxWorkers?: number;
101
+ }
102
+ interface OpenOptions {
103
+ password?: string;
104
+ headers?: Record<string, string>;
105
+ credentials?: RequestCredentials;
106
+ wasmUrl?: string;
107
+ worker?: boolean;
108
+ }
109
+ interface PDFMetadata {
110
+ title: string;
111
+ author: string;
112
+ subject: string;
113
+ keywords: string;
114
+ creator: string;
115
+ producer: string;
116
+ creationDate: string;
117
+ modDate: string;
118
+ }
119
+ interface PDFPermissions {
120
+ print: boolean;
121
+ copy: boolean;
122
+ modify: boolean;
123
+ annotate: boolean;
124
+ fillForms: boolean;
125
+ extractForAccessibility: boolean;
126
+ assemble: boolean;
127
+ printHighQuality: boolean;
128
+ }
129
+ interface RenderOptions {
130
+ scale?: number;
131
+ rotation?: 0 | 90 | 180 | 270;
132
+ background?: string;
133
+ flags?: number;
134
+ }
135
+ declare const RENDER_FLAG: {
136
+ readonly ANNOT: 1;
137
+ readonly LCD_TEXT: 2;
138
+ readonly NO_NATIVETEXT: 4;
139
+ readonly GRAYSCALE: 8;
140
+ readonly REVERSE_BYTE_ORDER: 16;
141
+ readonly DEBUG_INFO: 128;
142
+ readonly NO_CATCH: 256;
143
+ readonly RENDER_LIMITEDIMAGECACHE: 512;
144
+ readonly RENDER_FORCEHALFTONE: 1024;
145
+ readonly PRINTING: 2048;
146
+ readonly RENDER_NO_SMOOTHTEXT: 4096;
147
+ readonly RENDER_NO_SMOOTHIMAGE: 8192;
148
+ readonly RENDER_NO_SMOOTHPATH: 16384;
149
+ };
150
+ interface TextSpan {
151
+ text: string;
152
+ x: number;
153
+ y: number;
154
+ width: number;
155
+ height: number;
156
+ fontSize: number;
157
+ charIndex: number;
158
+ charCount: number;
159
+ }
160
+ interface CharBox {
161
+ char: string;
162
+ charCode: number;
163
+ left: number;
164
+ right: number;
165
+ top: number;
166
+ bottom: number;
167
+ fontSize: number;
168
+ index: number;
169
+ }
170
+ interface SearchResult {
171
+ pageIndex: number;
172
+ matchIndex: number;
173
+ charIndex: number;
174
+ charCount: number;
175
+ rects: TextRect[];
176
+ text: string;
177
+ }
178
+ interface SearchOptions {
179
+ caseSensitive?: boolean;
180
+ wholeWord?: boolean;
181
+ }
182
+ interface TextRect {
183
+ left: number;
184
+ top: number;
185
+ right: number;
186
+ bottom: number;
187
+ }
188
+ interface OutlineItem {
189
+ title: string;
190
+ pageIndex: number;
191
+ children: OutlineItem[];
192
+ }
193
+ interface LinkInfo {
194
+ url: string;
195
+ rects: TextRect[];
196
+ pageIndex: number;
197
+ }
198
+ declare enum AnnotationType {
199
+ Unknown = 0,
200
+ Text = 1,
201
+ Link = 2,
202
+ FreeText = 3,
203
+ Line = 4,
204
+ Square = 5,
205
+ Circle = 6,
206
+ Polygon = 7,
207
+ Polyline = 8,
208
+ Highlight = 9,
209
+ Underline = 10,
210
+ Squiggly = 11,
211
+ StrikeOut = 12,
212
+ Stamp = 13,
213
+ Caret = 14,
214
+ Ink = 15,
215
+ Popup = 16,
216
+ FileAttachment = 17,
217
+ Sound = 18,
218
+ Movie = 19,
219
+ Widget = 20,
220
+ Screen = 21,
221
+ PrinterMark = 22,
222
+ TrapNet = 23,
223
+ Watermark = 24,
224
+ ThreeD = 25,
225
+ RichMedia = 26,
226
+ XFAWidget = 27,
227
+ Redact = 28
228
+ }
229
+ interface AnnotationColor {
230
+ r: number;
231
+ g: number;
232
+ b: number;
233
+ a: number;
234
+ }
235
+ interface AnnotationRect {
236
+ left: number;
237
+ top: number;
238
+ right: number;
239
+ bottom: number;
240
+ }
241
+ interface AttachmentPoint {
242
+ x1: number;
243
+ y1: number;
244
+ x2: number;
245
+ y2: number;
246
+ x3: number;
247
+ y3: number;
248
+ x4: number;
249
+ y4: number;
250
+ }
251
+ interface AnnotationData {
252
+ index: number;
253
+ type: AnnotationType;
254
+ rect: AnnotationRect;
255
+ color?: AnnotationColor;
256
+ contents?: string;
257
+ author?: string;
258
+ modificationDate?: string;
259
+ attachmentPoints?: AttachmentPoint[];
260
+ }
261
+ interface CreateAnnotationOptions {
262
+ type: AnnotationType;
263
+ rect: AnnotationRect;
264
+ color?: AnnotationColor;
265
+ contents?: string;
266
+ attachmentPoints?: AttachmentPoint[];
267
+ }
268
+ declare enum FormFieldType {
269
+ Unknown = -1,
270
+ PushButton = 0,
271
+ CheckBox = 1,
272
+ RadioButton = 2,
273
+ ComboBox = 3,
274
+ ListBox = 4,
275
+ TextField = 5,
276
+ Signature = 6
277
+ }
278
+ interface FormFieldData {
279
+ name: string;
280
+ type: FormFieldType;
281
+ value: string;
282
+ flags: number;
283
+ isChecked?: boolean;
284
+ pageIndex: number;
285
+ annotIndex: number;
286
+ }
287
+ declare const FLATTEN_USAGE: {
288
+ readonly NORMALONLY: 0;
289
+ readonly PRINT: 1;
290
+ };
291
+ interface SignatureData {
292
+ index: number;
293
+ contents: Uint8Array;
294
+ byteRange: number[];
295
+ subFilter: string;
296
+ reason: string;
297
+ signingTime: string;
298
+ docMDPPermission: number;
299
+ }
300
+ interface SignatureVerificationResult {
301
+ valid: boolean;
302
+ signer: string;
303
+ reason: string;
304
+ timestamp: string;
305
+ subFilter: string;
306
+ docMDPPermission: number;
307
+ rawContents: Uint8Array;
308
+ }
309
+ interface VirtualRendererOptions {
310
+ container: HTMLElement;
311
+ overscan?: number;
312
+ cacheSize?: number;
313
+ scale?: number;
314
+ gap?: number;
315
+ }
316
+
317
+ /**
318
+ * Low-level bridge providing typed helpers around raw PDFium C API calls.
319
+ * All pointer management goes through this layer.
320
+ */
321
+ declare class WasmBridge {
322
+ private wasm;
323
+ constructor(wasm?: WasmModule);
324
+ get module(): WasmModule;
325
+ allocateString(str: string): number;
326
+ allocateUTF16String(str: string): number;
327
+ readString(ptr: number): string;
328
+ readUTF16String(ptr: number): string;
329
+ copyToHeap(data: Uint8Array): number;
330
+ copyFromHeap(ptr: number, size: number): Uint8Array;
331
+ allocateF64(): number;
332
+ readF64(ptr: number): number;
333
+ allocateI32(): number;
334
+ readI32(ptr: number): number;
335
+ free(ptr: number): void;
336
+ freeAll(...ptrs: number[]): void;
337
+ getMetaText(docPtr: number, tag: string): string;
338
+ getBookmarkTitle(bookmark: number): string;
339
+ getLinkURL(linkPage: number, linkIndex: number): string;
340
+ getAnnotStringValue(annot: number, key: string): string;
341
+ getFormFieldName(formHandle: number, annot: number): string;
342
+ getFormFieldValue(formHandle: number, annot: number): string;
343
+ getSignatureStringField(sig: number, getter: (sig: number, buf: number, bufLen: number) => number): string;
344
+ getSignatureBinaryField(sig: number, getter: (sig: number, buf: number, bufLen: number) => number): Uint8Array;
345
+ }
346
+
347
+ declare class PDFPage {
348
+ private wasm;
349
+ private bridge;
350
+ private docPtr;
351
+ private _pageIndex;
352
+ private pagePtr;
353
+ private textPagePtr;
354
+ private _formHandle;
355
+ private _closed;
356
+ private mem;
357
+ constructor(wasm: WasmModule, bridge: WasmBridge, docPtr: number, pageIndex: number, formHandle: number | null);
358
+ private _load;
359
+ get pageIndex(): number;
360
+ get formHandle(): number | null;
361
+ get width(): number;
362
+ get height(): number;
363
+ render(canvas: HTMLCanvasElement | OffscreenCanvas, options?: RenderOptions): Promise<void>;
364
+ renderToImageData(options?: RenderOptions): Promise<ImageData>;
365
+ getText(): string;
366
+ getTextSpans(): TextSpan[];
367
+ getCharBoxes(): CharBox[];
368
+ createTextLayer(container: HTMLElement): HTMLElement;
369
+ search(query: string, options?: SearchOptions): SearchResult[];
370
+ getLinks(): LinkInfo[];
371
+ getAnnotations(): Promise<AnnotationData[]>;
372
+ addAnnotation(opts: CreateAnnotationOptions): Promise<void>;
373
+ removeAnnotation(index: number): Promise<void>;
374
+ close(): void;
375
+ [Symbol.dispose](): void;
376
+ private _ensureTextPage;
377
+ private _assertOpen;
378
+ private static _parseColor;
379
+ }
380
+
381
+ declare class PDFDocument {
382
+ private wasm;
383
+ private bridge;
384
+ private mem;
385
+ private docPtr;
386
+ private _pageCount;
387
+ private _pages;
388
+ private _formHandle;
389
+ private _closed;
390
+ private _dataPtr;
391
+ private constructor();
392
+ static open(source: ArrayBuffer | Uint8Array | File | Blob | string, options?: OpenOptions): Promise<PDFDocument>;
393
+ private static _resolveSource;
394
+ get pageCount(): number;
395
+ get metadata(): PDFMetadata;
396
+ get permissions(): PDFPermissions;
397
+ get outline(): OutlineItem[];
398
+ get isClosed(): boolean;
399
+ getPage(index: number): PDFPage;
400
+ search(query: string, options?: SearchOptions): SearchResult[];
401
+ initFormEnvironment(): void;
402
+ getFormFields(): Promise<FormFieldData[]>;
403
+ setFormField(name: string, value: string): Promise<void>;
404
+ flattenForms(usage?: number): Promise<void>;
405
+ getSignatures(): Promise<SignatureData[]>;
406
+ save(): Promise<Uint8Array>;
407
+ close(): void;
408
+ [Symbol.dispose](): void;
409
+ /** @internal */
410
+ get _docPtr(): number;
411
+ /** @internal */
412
+ get _wasmModule(): WasmModule;
413
+ /** @internal */
414
+ get _wasmBridge(): WasmBridge;
415
+ private _assertOpen;
416
+ }
417
+
418
+ /**
419
+ * Standalone rendering utility that can render a page to various targets.
420
+ * Useful for server-side rendering or generating thumbnails.
421
+ */
422
+ declare class PageRenderer {
423
+ /**
424
+ * Render a page to an HTMLCanvasElement or OffscreenCanvas.
425
+ */
426
+ static renderToCanvas(page: PDFPage, canvas: HTMLCanvasElement | OffscreenCanvas, options?: RenderOptions): Promise<void>;
427
+ /**
428
+ * Render a page to raw ImageData (no DOM required).
429
+ */
430
+ static renderToImageData(page: PDFPage, options?: RenderOptions): Promise<ImageData>;
431
+ /**
432
+ * Generate a thumbnail at a specific maximum dimension.
433
+ */
434
+ static renderThumbnail(page: PDFPage, canvas: HTMLCanvasElement | OffscreenCanvas, maxDimension?: number): Promise<void>;
435
+ /**
436
+ * Calculate the scale needed to fit a page within given dimensions.
437
+ */
438
+ static fitScale(page: PDFPage, containerWidth: number, containerHeight: number): number;
439
+ /**
440
+ * Calculate the scale needed to fit page width within container width.
441
+ */
442
+ static fitWidthScale(page: PDFPage, containerWidth: number): number;
443
+ }
444
+
445
+ /**
446
+ * Viewport-aware lazy page renderer using IntersectionObserver.
447
+ * Only renders pages visible in (or near) the viewport; uses an LRU cache
448
+ * to bound memory usage for large documents.
449
+ */
450
+ declare class VirtualRenderer {
451
+ private doc;
452
+ private container;
453
+ private wrapper;
454
+ private slots;
455
+ private observer;
456
+ private lru;
457
+ private scale;
458
+ private overscan;
459
+ private cacheSize;
460
+ private gap;
461
+ private _destroyed;
462
+ constructor(options: VirtualRendererOptions);
463
+ setDocument(doc: PDFDocument): Promise<void>;
464
+ setScale(scale: number): void;
465
+ getScale(): number;
466
+ scrollToPage(pageIndex: number, behavior?: ScrollBehavior): void;
467
+ /**
468
+ * Returns the index of the page most visible in the viewport.
469
+ */
470
+ getCurrentPage(): number;
471
+ destroy(): void;
472
+ private _buildSlots;
473
+ private _setupObserver;
474
+ private _renderSlot;
475
+ private _touchLRU;
476
+ private _evictLRU;
477
+ private _rebuildAllSlots;
478
+ private _cleanup;
479
+ }
480
+
481
+ /**
482
+ * Extracts text content from a PDF page with character-level bounding boxes.
483
+ * Uses FPDFText_* APIs for precise glyph positioning.
484
+ */
485
+ declare class TextExtractor {
486
+ private wasm;
487
+ private bridge;
488
+ constructor(wasm: WasmModule, bridge: WasmBridge);
489
+ extractText(textPagePtr: number): string;
490
+ extractCharBoxes(textPagePtr: number): CharBox[];
491
+ /**
492
+ * Groups consecutive characters into text spans based on spatial proximity
493
+ * and font size. Spans represent logical "words" or "runs" of text.
494
+ */
495
+ extractSpans(textPagePtr: number): TextSpan[];
496
+ private _isContinuation;
497
+ }
498
+
499
+ /**
500
+ * Generates a positioned DOM text layer over a rendered PDF page.
501
+ * Uses character-level bounding boxes for pixel-perfect text selection and copy-paste.
502
+ */
503
+ declare class TextLayerBuilder {
504
+ private wasm;
505
+ private bridge;
506
+ constructor(wasm: WasmModule, bridge: WasmBridge);
507
+ /**
508
+ * Build a text layer DOM structure inside the given container.
509
+ * Spans are absolutely positioned to match the rendered PDF pixels.
510
+ *
511
+ * @param textPagePtr - PDFium text page handle
512
+ * @param container - DOM element to append text layer into
513
+ * @param pageWidth - PDF page width in points
514
+ * @param pageHeight - PDF page height in points
515
+ * @param scale - Rendering scale factor (default 1.0)
516
+ */
517
+ build(textPagePtr: number, container: HTMLElement, pageWidth: number, pageHeight: number, scale?: number): HTMLElement;
518
+ /**
519
+ * Build a text layer using character-level positioning for maximum accuracy.
520
+ * Slower but pixel-perfect — use when precise text selection is critical.
521
+ */
522
+ buildCharLevel(textPagePtr: number, container: HTMLElement, pageWidth: number, pageHeight: number, scale?: number): HTMLElement;
523
+ private _createSpanElement;
524
+ private _groupIntoRuns;
525
+ }
526
+
527
+ /**
528
+ * Full-text search engine that uses PDFium's native FPDFText_Find* APIs
529
+ * for accurate search with character-index-based results and highlight rects.
530
+ */
531
+ declare class SearchEngine {
532
+ private wasm;
533
+ private bridge;
534
+ constructor(wasm: WasmModule, bridge: WasmBridge);
535
+ /**
536
+ * Search across all pages of a document.
537
+ */
538
+ searchDocument(docPtr: number, pageCount: number, query: string, options?: SearchOptions): SearchResult[];
539
+ /**
540
+ * Search within a single page's text content.
541
+ */
542
+ searchPage(textPagePtr: number, pageIndex: number, query: string, options?: SearchOptions): SearchResult[];
543
+ private _getMatchRects;
544
+ private _getMatchText;
545
+ }
546
+
547
+ /**
548
+ * Extracts the document outline (bookmarks/TOC) from a PDF.
549
+ * Recursively walks the bookmark tree using PDFium's FPDFBookmark_* APIs.
550
+ */
551
+ declare class OutlineExtractor {
552
+ private wasm;
553
+ private bridge;
554
+ constructor(wasm: WasmModule, bridge: WasmBridge);
555
+ extract(docPtr: number): OutlineItem[];
556
+ private _walkBookmarks;
557
+ }
558
+
559
+ /**
560
+ * Extracts web links and their bounding rectangles from a PDF page.
561
+ * Uses FPDFLink_* APIs for link detection.
562
+ */
563
+ declare class LinkExtractor {
564
+ private wasm;
565
+ private bridge;
566
+ constructor(wasm: WasmModule, bridge: WasmBridge);
567
+ extractLinks(textPagePtr: number, pageIndex: number): LinkInfo[];
568
+ private _getLinkRects;
569
+ }
570
+
571
+ /**
572
+ * Web Worker wrapper for off-main-thread PDF operations.
573
+ * Communicates with a dedicated worker that runs the WASM module.
574
+ */
575
+ declare class PDFWorker {
576
+ private worker;
577
+ private nextId;
578
+ private pending;
579
+ private _ready;
580
+ init(options?: {
581
+ wasmUrl?: string;
582
+ tier?: 'lite' | 'full';
583
+ }): Promise<void>;
584
+ get ready(): boolean;
585
+ openDocument(data: ArrayBuffer, password?: string): Promise<{
586
+ pageCount: number;
587
+ }>;
588
+ renderPage(pageIndex: number, options?: RenderOptions): Promise<ImageData>;
589
+ getText(pageIndex: number): Promise<string>;
590
+ getTextSpans(pageIndex: number): Promise<TextSpan[]>;
591
+ search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
592
+ closeDocument(): Promise<void>;
593
+ destroy(): void;
594
+ private _send;
595
+ private _getWorkerScript;
596
+ }
597
+
598
+ /**
599
+ * Pool of PDFWorker instances for concurrent page rendering.
600
+ * Distributes rendering tasks across multiple workers to maximize
601
+ * throughput on multi-core machines.
602
+ */
603
+ declare class WorkerPool {
604
+ private workers;
605
+ private queue;
606
+ private activeCount;
607
+ private maxWorkers;
608
+ private _initialized;
609
+ private initOptions?;
610
+ constructor(maxWorkers?: number);
611
+ init(options?: {
612
+ wasmUrl?: string;
613
+ tier?: 'lite' | 'full';
614
+ }): Promise<void>;
615
+ get workerCount(): number;
616
+ get pendingTasks(): number;
617
+ renderPage(pageIndex: number, options?: RenderOptions): Promise<ImageData>;
618
+ getText(pageIndex: number): Promise<string>;
619
+ getTextSpans(pageIndex: number): Promise<TextSpan[]>;
620
+ search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
621
+ /**
622
+ * Render multiple pages concurrently, returning results in order.
623
+ */
624
+ renderPages(pageIndices: number[], options?: RenderOptions): Promise<ImageData[]>;
625
+ destroy(): void;
626
+ private _enqueue;
627
+ private _processQueue;
628
+ private _getLeastBusyWorker;
629
+ private _maybeExpandPool;
630
+ }
631
+
632
+ declare class WasmLoader {
633
+ static load(options?: {
634
+ wasmUrl?: string;
635
+ tier?: WasmTier;
636
+ }): Promise<WasmModule>;
637
+ static isLoaded(): boolean;
638
+ static getInstance(): WasmModule | null;
639
+ static reset(): void;
640
+ /** Force mock mode (for unit tests in non-browser environments). */
641
+ static enableMock(): void;
642
+ static disableMock(): void;
643
+ /** Clear the cached WASM binary from IndexedDB. */
644
+ static clearCache(): Promise<void>;
645
+ private static _doLoad;
646
+ private static _canLoadWasm;
647
+ private static _loadRealPdfium;
648
+ private static _openIDB;
649
+ private static _loadFromCache;
650
+ private static _saveToCache;
651
+ /**
652
+ * Adapts an @embedpdf/pdfium WrappedPdfiumModule to our WasmModule interface.
653
+ * Uses cwrap with all-number signatures for raw C-level pointer-based access,
654
+ * matching the interface that WasmBridge and all downstream code expects.
655
+ */
656
+ private static _adaptModule;
657
+ }
658
+
659
+ declare function getTier(): WasmTier;
660
+ declare function isFullTier(): boolean;
661
+
662
+ export { type AnnotationData as A, WasmLoader as B, type CreateAnnotationOptions as C, type WasmTier as D, WorkerPool as E, type FormFieldData as F, getTier as G, isFullTier as H, LinkExtractor as L, type OpenOptions as O, PDFDocument as P, RENDER_FLAG as R, type SignatureData as S, TextExtractor as T, VirtualRenderer as V, type WasmModule as W, WasmBridge as a, type SignatureVerificationResult as b, type AnnotationColor as c, type AnnotationRect as d, AnnotationType as e, type AttachmentPoint as f, type CharBox as g, FLATTEN_USAGE as h, FormFieldType as i, type LinkInfo as j, OutlineExtractor as k, type OutlineItem as l, type PDFMetadata as m, type PDFNovaConfig as n, PDFPage as o, type PDFPermissions as p, PDFWorker as q, PageRenderer as r, type RenderOptions as s, SearchEngine as t, type SearchOptions as u, type SearchResult as v, TextLayerBuilder as w, type TextRect as x, type TextSpan as y, type VirtualRendererOptions as z };