pdf-oxide 0.3.24

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 (62) hide show
  1. package/README.md +218 -0
  2. package/binding.gyp +35 -0
  3. package/package.json +78 -0
  4. package/src/builders/annotation-builder.ts +367 -0
  5. package/src/builders/conversion-options-builder.ts +257 -0
  6. package/src/builders/index.ts +12 -0
  7. package/src/builders/metadata-builder.ts +317 -0
  8. package/src/builders/pdf-builder.ts +386 -0
  9. package/src/builders/search-options-builder.ts +151 -0
  10. package/src/document-editor-manager.ts +318 -0
  11. package/src/errors.ts +1629 -0
  12. package/src/form-field-manager.ts +666 -0
  13. package/src/hybrid-ml-manager.ts +283 -0
  14. package/src/index.ts +453 -0
  15. package/src/managers/accessibility-manager.ts +338 -0
  16. package/src/managers/annotation-manager.ts +439 -0
  17. package/src/managers/barcode-manager.ts +235 -0
  18. package/src/managers/batch-manager.ts +533 -0
  19. package/src/managers/cache-manager.ts +486 -0
  20. package/src/managers/compliance-manager.ts +375 -0
  21. package/src/managers/content-manager.ts +339 -0
  22. package/src/managers/document-utility-manager.ts +922 -0
  23. package/src/managers/dom-pdf-creator.ts +365 -0
  24. package/src/managers/editing-manager.ts +514 -0
  25. package/src/managers/enterprise-manager.ts +478 -0
  26. package/src/managers/extended-managers.ts +437 -0
  27. package/src/managers/extraction-manager.ts +583 -0
  28. package/src/managers/final-utilities.ts +429 -0
  29. package/src/managers/hybrid-ml-advanced.ts +479 -0
  30. package/src/managers/index.ts +239 -0
  31. package/src/managers/layer-manager.ts +500 -0
  32. package/src/managers/metadata-manager.ts +303 -0
  33. package/src/managers/ocr-manager.ts +756 -0
  34. package/src/managers/optimization-manager.ts +262 -0
  35. package/src/managers/outline-manager.ts +196 -0
  36. package/src/managers/page-manager.ts +289 -0
  37. package/src/managers/pattern-detection.ts +440 -0
  38. package/src/managers/rendering-manager.ts +863 -0
  39. package/src/managers/search-manager.ts +385 -0
  40. package/src/managers/security-manager.ts +345 -0
  41. package/src/managers/signature-manager.ts +1664 -0
  42. package/src/managers/streams.ts +618 -0
  43. package/src/managers/xfa-manager.ts +500 -0
  44. package/src/pdf-creator-manager.ts +494 -0
  45. package/src/properties.ts +522 -0
  46. package/src/result-accessors-manager.ts +867 -0
  47. package/src/tests/advanced-features.test.ts +414 -0
  48. package/src/tests/advanced.test.ts +266 -0
  49. package/src/tests/extended-managers.test.ts +316 -0
  50. package/src/tests/final-utilities.test.ts +455 -0
  51. package/src/tests/foundation.test.ts +315 -0
  52. package/src/tests/high-demand.test.ts +257 -0
  53. package/src/tests/specialized.test.ts +97 -0
  54. package/src/thumbnail-manager.ts +272 -0
  55. package/src/types/common.ts +142 -0
  56. package/src/types/document-types.ts +457 -0
  57. package/src/types/index.ts +6 -0
  58. package/src/types/manager-types.ts +284 -0
  59. package/src/types/native-bindings.ts +517 -0
  60. package/src/workers/index.ts +7 -0
  61. package/src/workers/pool.ts +274 -0
  62. package/src/workers/worker.ts +131 -0
@@ -0,0 +1,517 @@
1
+ /**
2
+ * Type definitions for PDF Oxide native bindings (C++ module via NAPI)
3
+ *
4
+ * These interfaces describe the structure of objects returned from the native module.
5
+ * They are used for type checking and IDE auto-completion when working with the binding layer.
6
+ */
7
+
8
+ // ===== Geometry Types =====
9
+
10
+ /**
11
+ * Represents a rectangular area with coordinates and dimensions
12
+ */
13
+ export interface Rect {
14
+ x: number;
15
+ y: number;
16
+ width: number;
17
+ height: number;
18
+ }
19
+
20
+ /**
21
+ * Represents a 2D point coordinate
22
+ */
23
+ export interface Point {
24
+ x: number;
25
+ y: number;
26
+ }
27
+
28
+ /**
29
+ * Represents an RGB color value
30
+ */
31
+ export interface Color {
32
+ red: number;
33
+ green: number;
34
+ blue: number;
35
+ alpha?: number;
36
+ }
37
+
38
+ // ===== Document Info Types =====
39
+
40
+ /**
41
+ * Document metadata and properties
42
+ */
43
+ export interface DocumentInfo {
44
+ title?: string;
45
+ author?: string;
46
+ subject?: string;
47
+ keywords?: string[];
48
+ creator?: string;
49
+ producer?: string;
50
+ creationDate?: Date;
51
+ modificationDate?: Date;
52
+ encrypted?: boolean;
53
+ pages?: number;
54
+ }
55
+
56
+ /**
57
+ * PDF document metadata
58
+ */
59
+ export interface Metadata {
60
+ [key: string]: string | number | boolean | Date | undefined;
61
+ }
62
+
63
+ /**
64
+ * Embedded file information
65
+ */
66
+ export interface EmbeddedFile {
67
+ filename: string;
68
+ mimeType?: string;
69
+ size?: number;
70
+ data?: Buffer;
71
+ }
72
+
73
+ // ===== Search Types =====
74
+
75
+ /**
76
+ * Result of a text search operation
77
+ */
78
+ export interface SearchResult {
79
+ pageIndex: number;
80
+ text: string;
81
+ x: number;
82
+ y: number;
83
+ width: number;
84
+ height: number;
85
+ confidence?: number;
86
+ }
87
+
88
+ /**
89
+ * Options for text search operations
90
+ */
91
+ export interface SearchOptions {
92
+ caseSensitive?: boolean;
93
+ wholeWords?: boolean;
94
+ regex?: boolean;
95
+ startPage?: number;
96
+ endPage?: number;
97
+ maxResults?: number;
98
+ }
99
+
100
+ /**
101
+ * Options for document conversion
102
+ */
103
+ export interface ConversionOptions {
104
+ format?: 'markdown' | 'text' | 'html';
105
+ includeImages?: boolean;
106
+ includeMetadata?: boolean;
107
+ preserveLayout?: boolean;
108
+ encoding?: string;
109
+ }
110
+
111
+ // ===== PDF Element Types =====
112
+
113
+ /**
114
+ * Base class for PDF elements (text, images, paths, etc.)
115
+ */
116
+ export interface PdfElement {
117
+ type: string;
118
+ bounds: Rect;
119
+ rotation?: number;
120
+ opacity?: number;
121
+ blendMode?: string;
122
+ }
123
+
124
+ /**
125
+ * Text element extracted from PDF
126
+ */
127
+ export interface PdfText extends PdfElement {
128
+ type: 'text';
129
+ content: string;
130
+ fontSize?: number;
131
+ fontName?: string;
132
+ fontFamily?: string;
133
+ bold?: boolean;
134
+ italic?: boolean;
135
+ color?: Color;
136
+ }
137
+
138
+ /**
139
+ * Image element from PDF
140
+ */
141
+ export interface PdfImage extends PdfElement {
142
+ type: 'image';
143
+ width: number;
144
+ height: number;
145
+ colorSpace?: string;
146
+ bitsPerComponent?: number;
147
+ data?: Buffer;
148
+ }
149
+
150
+ /**
151
+ * Vector path (graphics)
152
+ */
153
+ export interface PdfPath extends PdfElement {
154
+ type: 'path';
155
+ points: Point[];
156
+ strokeColor?: Color;
157
+ fillColor?: Color;
158
+ lineWidth?: number;
159
+ }
160
+
161
+ /**
162
+ * Table extracted from PDF
163
+ */
164
+ export interface PdfTable extends PdfElement {
165
+ type: 'table';
166
+ rows: number;
167
+ columns: number;
168
+ cells: PdfTableCell[][];
169
+ }
170
+
171
+ /**
172
+ * Individual table cell
173
+ */
174
+ export interface PdfTableCell {
175
+ text: string;
176
+ rowSpan?: number;
177
+ colSpan?: number;
178
+ backgroundColor?: Color;
179
+ borderColor?: Color;
180
+ }
181
+
182
+ // ===== Annotation Types =====
183
+
184
+ /**
185
+ * Base annotation interface
186
+ */
187
+ export interface Annotation {
188
+ type: string;
189
+ page: number;
190
+ bounds: Rect;
191
+ author?: string;
192
+ content?: string;
193
+ creationDate?: Date;
194
+ modificationDate?: Date;
195
+ flags?: number;
196
+ }
197
+
198
+ /**
199
+ * Text annotation (sticky note style)
200
+ */
201
+ export interface TextAnnotation extends Annotation {
202
+ type: 'text';
203
+ icon?: string;
204
+ color?: Color;
205
+ }
206
+
207
+ /**
208
+ * Highlight annotation
209
+ */
210
+ export interface HighlightAnnotation extends Annotation {
211
+ type: 'highlight';
212
+ color?: Color;
213
+ quadPoints?: Point[][];
214
+ }
215
+
216
+ /**
217
+ * Link annotation
218
+ */
219
+ export interface LinkAnnotation extends Annotation {
220
+ type: 'link';
221
+ url?: string;
222
+ destination?: {
223
+ page: number;
224
+ x?: number;
225
+ y?: number;
226
+ zoom?: number;
227
+ };
228
+ action?: string;
229
+ }
230
+
231
+ /**
232
+ * Ink annotation (drawing/handwriting)
233
+ */
234
+ export interface InkAnnotation extends Annotation {
235
+ type: 'ink';
236
+ strokes: Point[][];
237
+ color?: Color;
238
+ thickness?: number;
239
+ }
240
+
241
+ /**
242
+ * Square annotation
243
+ */
244
+ export interface SquareAnnotation extends Annotation {
245
+ type: 'square';
246
+ fillColor?: Color;
247
+ strokeColor?: Color;
248
+ lineWidth?: number;
249
+ }
250
+
251
+ /**
252
+ * Circle annotation
253
+ */
254
+ export interface CircleAnnotation extends Annotation {
255
+ type: 'circle';
256
+ fillColor?: Color;
257
+ strokeColor?: Color;
258
+ lineWidth?: number;
259
+ }
260
+
261
+ /**
262
+ * Line annotation
263
+ */
264
+ export interface LineAnnotation extends Annotation {
265
+ type: 'line';
266
+ startPoint: Point;
267
+ endPoint: Point;
268
+ color?: Color;
269
+ lineWidth?: number;
270
+ startLineStyle?: string;
271
+ endLineStyle?: string;
272
+ }
273
+
274
+ /**
275
+ * Polygon annotation
276
+ */
277
+ export interface PolygonAnnotation extends Annotation {
278
+ type: 'polygon';
279
+ vertices: Point[];
280
+ fillColor?: Color;
281
+ strokeColor?: Color;
282
+ lineWidth?: number;
283
+ }
284
+
285
+ // ===== Native Class Interfaces =====
286
+
287
+ /**
288
+ * Native PdfDocument class interface
289
+ */
290
+ export interface NativePdfDocument {
291
+ // Version info
292
+ getVersion(): string;
293
+ getPdfOxideVersion(): string;
294
+
295
+ // Document properties
296
+ getPageCount(): number;
297
+ getTitle(): string | null;
298
+ getAuthor(): string | null;
299
+ getSubject(): string | null;
300
+ getKeywords(): string[] | null;
301
+ getCreationDate(): Date | null;
302
+ getModificationDate(): Date | null;
303
+ isEncrypted(): boolean;
304
+ isLinearized(): boolean;
305
+
306
+ // Metadata operations
307
+ getMetadata(): Metadata;
308
+ setMetadata(metadata: Metadata): void;
309
+ getDocumentInfo(): DocumentInfo;
310
+
311
+ // Text extraction
312
+ extractText(pageIndex: number): string;
313
+ extractTextAsync(pageIndex: number): Promise<string>;
314
+ toMarkdown(): string;
315
+ toMarkdownAsync(): Promise<string>;
316
+ toHtml(): string;
317
+
318
+ // Search operations
319
+ search(text: string, options?: SearchOptions): SearchResult[];
320
+ hasText(text: string, caseSensitive?: boolean): boolean;
321
+
322
+ // Page access
323
+ getPage(pageIndex: number): NativePdfPage;
324
+ getPages(): NativePdfPage[];
325
+
326
+ // Document manipulation
327
+ saveToPath(path: string): void;
328
+ saveToPdf(format?: string): Buffer;
329
+ save_async(path: string): Promise<void>;
330
+ saveToStream(stream: NodeJS.WritableStream): void;
331
+
332
+ // Form operations
333
+ getForms(): any;
334
+ fillForms(values: Record<string, string>): void;
335
+
336
+ // Embedded files
337
+ getEmbeddedFiles(): EmbeddedFile[];
338
+ extractEmbeddedFile(filename: string): Buffer;
339
+
340
+ // Security operations
341
+ encrypt(userPassword: string, ownerPassword?: string, permissions?: number): void;
342
+ decrypt(password: string): boolean;
343
+ setPermissions(permissions: number): void;
344
+
345
+ // Outline/Bookmarks
346
+ getOutline(): any[];
347
+ setOutline(outline: any[]): void;
348
+
349
+ // Document structure
350
+ getStructure(): any;
351
+ getPageLabels(): string[];
352
+ setPageLabels(labels: string[]): void;
353
+
354
+ // Layers (Optional Content)
355
+ getLayers(): any[];
356
+ setLayerVisibility(layerId: string, visible: boolean): void;
357
+
358
+ // Cleanup
359
+ close(): void;
360
+ }
361
+
362
+ /**
363
+ * Native Pdf class interface (represents a PDF file)
364
+ */
365
+ export interface NativePdf {
366
+ // Properties
367
+ getPageCount(): number;
368
+ getPageSizes(): Array<{ width: number; height: number }>;
369
+ getPageSize(pageIndex: number): { width: number; height: number };
370
+
371
+ // Page access
372
+ getPage(pageIndex: number): NativePdfPage;
373
+
374
+ // Rendering
375
+ renderPage(pageIndex: number, options?: any): Buffer;
376
+ renderPageToCanvas(pageIndex: number, canvas: any): void;
377
+
378
+ // Manipulation
379
+ addPage(width: number, height: number): NativePdfPage;
380
+ removePage(pageIndex: number): void;
381
+ insertPage(pageIndex: number, width: number, height: number): NativePdfPage;
382
+ rotatePage(pageIndex: number, rotation: number): void;
383
+
384
+ // Saving
385
+ save_async(path: string): Promise<void>;
386
+ saveToBuffer(): Buffer;
387
+
388
+ // Cleanup
389
+ close(): void;
390
+ }
391
+
392
+ /**
393
+ * Native PdfPage class interface
394
+ */
395
+ export interface NativePdfPage {
396
+ // Properties
397
+ getIndex(): number;
398
+ getWidth(): number;
399
+ getHeight(): number;
400
+ getRotation(): number;
401
+ getMediaBox(): Rect;
402
+ getCropBox(): Rect;
403
+
404
+ // Content extraction
405
+ extractText(): string;
406
+ extractElements(): PdfElement[];
407
+ getImages(): PdfImage[];
408
+ getTables(): PdfTable[];
409
+
410
+ // Rendering
411
+ render(options?: any): Buffer;
412
+ renderToCanvas(canvas: any): void;
413
+
414
+ // Annotations
415
+ getAnnotations(): Annotation[];
416
+ addAnnotation(annotation: Annotation): void;
417
+ removeAnnotation(annotationIndex: number): void;
418
+
419
+ // Manipulation
420
+ setMediaBox(rect: Rect): void;
421
+ setCropBox(rect: Rect): void;
422
+ rotate(rotation: number): void;
423
+
424
+ // Drawing
425
+ drawText(text: string, x: number, y: number, options?: any): void;
426
+ drawImage(image: Buffer, x: number, y: number, width: number, height: number): void;
427
+ drawPath(points: Point[], options?: any): void;
428
+
429
+ // Search
430
+ searchText(text: string, options?: SearchOptions): SearchResult[];
431
+
432
+ // Cleanup
433
+ close(): void;
434
+ }
435
+
436
+ /**
437
+ * Native builder class interface
438
+ */
439
+ export interface NativePdfBuilder {
440
+ // Fluent methods
441
+ title(title: string): NativePdfBuilder;
442
+ author(author: string): NativePdfBuilder;
443
+ subject(subject: string): NativePdfBuilder;
444
+ keywords(keywords: string[]): NativePdfBuilder;
445
+ creator(creator: string): NativePdfBuilder;
446
+ producer(producer: string): NativePdfBuilder;
447
+
448
+ // Build method
449
+ build(): NativePdf;
450
+ }
451
+
452
+ /**
453
+ * Native text searcher interface
454
+ */
455
+ export interface NativeTextSearcher {
456
+ search(text: string, options?: SearchOptions): SearchResult[];
457
+ replaceAll(searchText: string, replaceText: string): number;
458
+ getMatches(text: string): SearchResult[];
459
+ }
460
+
461
+ /**
462
+ * Page size constants
463
+ */
464
+ export interface PageSizeConstants {
465
+ A0: { width: number; height: number };
466
+ A1: { width: number; height: number };
467
+ A2: { width: number; height: number };
468
+ A3: { width: number; height: number };
469
+ A4: { width: number; height: number };
470
+ A5: { width: number; height: number };
471
+ Letter: { width: number; height: number };
472
+ Legal: { width: number; height: number };
473
+ Tabloid: { width: number; height: number };
474
+ }
475
+
476
+ /**
477
+ * Complete native module interface
478
+ */
479
+ export interface NativeModule {
480
+ // Version functions
481
+ getVersion(): string;
482
+ getPdfOxideVersion(): string;
483
+
484
+ // Classes
485
+ PdfDocument: new (...args: any[]) => NativePdfDocument;
486
+ Pdf: new (...args: any[]) => NativePdf;
487
+ PdfPage: new (...args: any[]) => NativePdfPage;
488
+ PdfBuilder: new (...args: any[]) => NativePdfBuilder;
489
+ TextSearcher: new (...args: any[]) => NativeTextSearcher;
490
+
491
+ // Element types
492
+ PdfElement: new (...args: any[]) => PdfElement;
493
+ PdfText: new (...args: any[]) => PdfText;
494
+ PdfImage: new (...args: any[]) => PdfImage;
495
+ PdfPath: new (...args: any[]) => PdfPath;
496
+ PdfTable: new (...args: any[]) => PdfTable;
497
+ PdfStructure: new (...args: any[]) => any;
498
+
499
+ // Annotation types
500
+ Annotation: new (...args: any[]) => Annotation;
501
+ TextAnnotation: new (...args: any[]) => TextAnnotation;
502
+ HighlightAnnotation: new (...args: any[]) => HighlightAnnotation;
503
+ LinkAnnotation: new (...args: any[]) => LinkAnnotation;
504
+
505
+ // Type constants
506
+ PageSize: PageSizeConstants;
507
+ Rect: new (x: number, y: number, width: number, height: number) => Rect;
508
+ Point: new (x: number, y: number) => Point;
509
+ Color: new (red: number, green: number, blue: number, alpha?: number) => Color;
510
+
511
+ // Options
512
+ ConversionOptions: new (...args: any[]) => ConversionOptions;
513
+ SearchOptions: new (...args: any[]) => SearchOptions;
514
+ SearchResult: new (...args: any[]) => SearchResult;
515
+
516
+ [key: string]: any;
517
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Worker Threads Module
3
+ * Exports worker pool and types for parallel PDF processing
4
+ */
5
+
6
+ export { WorkerPool, workerPool } from './pool.js';
7
+ export type { WorkerTask, WorkerResult } from './pool.js';