@lexmata/micropdf 0.4.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 (170) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +985 -0
  3. package/binding.gyp +73 -0
  4. package/dist/annot.d.ts +458 -0
  5. package/dist/annot.d.ts.map +1 -0
  6. package/dist/annot.js +697 -0
  7. package/dist/annot.js.map +1 -0
  8. package/dist/archive.d.ts +128 -0
  9. package/dist/archive.d.ts.map +1 -0
  10. package/dist/archive.js +268 -0
  11. package/dist/archive.js.map +1 -0
  12. package/dist/buffer.d.ts +572 -0
  13. package/dist/buffer.d.ts.map +1 -0
  14. package/dist/buffer.js +971 -0
  15. package/dist/buffer.js.map +1 -0
  16. package/dist/colorspace.d.ts +287 -0
  17. package/dist/colorspace.d.ts.map +1 -0
  18. package/dist/colorspace.js +542 -0
  19. package/dist/colorspace.js.map +1 -0
  20. package/dist/context.d.ts +184 -0
  21. package/dist/context.d.ts.map +1 -0
  22. package/dist/context.js +320 -0
  23. package/dist/context.js.map +1 -0
  24. package/dist/cookie.d.ts +164 -0
  25. package/dist/cookie.d.ts.map +1 -0
  26. package/dist/cookie.js +306 -0
  27. package/dist/cookie.js.map +1 -0
  28. package/dist/device.d.ts +169 -0
  29. package/dist/device.d.ts.map +1 -0
  30. package/dist/device.js +350 -0
  31. package/dist/device.js.map +1 -0
  32. package/dist/display-list.d.ts +202 -0
  33. package/dist/display-list.d.ts.map +1 -0
  34. package/dist/display-list.js +410 -0
  35. package/dist/display-list.js.map +1 -0
  36. package/dist/document.d.ts +637 -0
  37. package/dist/document.d.ts.map +1 -0
  38. package/dist/document.js +902 -0
  39. package/dist/document.js.map +1 -0
  40. package/dist/easy.d.ts +423 -0
  41. package/dist/easy.d.ts.map +1 -0
  42. package/dist/easy.js +644 -0
  43. package/dist/easy.js.map +1 -0
  44. package/dist/enhanced.d.ts +226 -0
  45. package/dist/enhanced.d.ts.map +1 -0
  46. package/dist/enhanced.js +368 -0
  47. package/dist/enhanced.js.map +1 -0
  48. package/dist/filter.d.ts +51 -0
  49. package/dist/filter.d.ts.map +1 -0
  50. package/dist/filter.js +381 -0
  51. package/dist/filter.js.map +1 -0
  52. package/dist/font.d.ts +222 -0
  53. package/dist/font.d.ts.map +1 -0
  54. package/dist/font.js +381 -0
  55. package/dist/font.js.map +1 -0
  56. package/dist/form.d.ts +214 -0
  57. package/dist/form.d.ts.map +1 -0
  58. package/dist/form.js +497 -0
  59. package/dist/form.js.map +1 -0
  60. package/dist/geometry.d.ts +469 -0
  61. package/dist/geometry.d.ts.map +1 -0
  62. package/dist/geometry.js +780 -0
  63. package/dist/geometry.js.map +1 -0
  64. package/dist/image.d.ts +172 -0
  65. package/dist/image.d.ts.map +1 -0
  66. package/dist/image.js +348 -0
  67. package/dist/image.js.map +1 -0
  68. package/dist/index.d.ts +171 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +339 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/link.d.ts +168 -0
  73. package/dist/link.d.ts.map +1 -0
  74. package/dist/link.js +343 -0
  75. package/dist/link.js.map +1 -0
  76. package/dist/micropdf.d.ts +40 -0
  77. package/dist/micropdf.d.ts.map +1 -0
  78. package/dist/micropdf.js +45 -0
  79. package/dist/micropdf.js.map +1 -0
  80. package/dist/nanopdf.d.ts +40 -0
  81. package/dist/nanopdf.d.ts.map +1 -0
  82. package/dist/nanopdf.js +45 -0
  83. package/dist/nanopdf.js.map +1 -0
  84. package/dist/native.d.ts +242 -0
  85. package/dist/native.d.ts.map +1 -0
  86. package/dist/native.js +509 -0
  87. package/dist/native.js.map +1 -0
  88. package/dist/output.d.ts +166 -0
  89. package/dist/output.d.ts.map +1 -0
  90. package/dist/output.js +365 -0
  91. package/dist/output.js.map +1 -0
  92. package/dist/path.d.ts +420 -0
  93. package/dist/path.d.ts.map +1 -0
  94. package/dist/path.js +687 -0
  95. package/dist/path.js.map +1 -0
  96. package/dist/pdf/object.d.ts +489 -0
  97. package/dist/pdf/object.d.ts.map +1 -0
  98. package/dist/pdf/object.js +1045 -0
  99. package/dist/pdf/object.js.map +1 -0
  100. package/dist/pixmap.d.ts +315 -0
  101. package/dist/pixmap.d.ts.map +1 -0
  102. package/dist/pixmap.js +590 -0
  103. package/dist/pixmap.js.map +1 -0
  104. package/dist/profiler.d.ts +159 -0
  105. package/dist/profiler.d.ts.map +1 -0
  106. package/dist/profiler.js +380 -0
  107. package/dist/profiler.js.map +1 -0
  108. package/dist/render-options.d.ts +227 -0
  109. package/dist/render-options.d.ts.map +1 -0
  110. package/dist/render-options.js +130 -0
  111. package/dist/render-options.js.map +1 -0
  112. package/dist/resource-tracking.d.ts +332 -0
  113. package/dist/resource-tracking.d.ts.map +1 -0
  114. package/dist/resource-tracking.js +653 -0
  115. package/dist/resource-tracking.js.map +1 -0
  116. package/dist/simple.d.ts +276 -0
  117. package/dist/simple.d.ts.map +1 -0
  118. package/dist/simple.js +343 -0
  119. package/dist/simple.js.map +1 -0
  120. package/dist/stext.d.ts +290 -0
  121. package/dist/stext.d.ts.map +1 -0
  122. package/dist/stext.js +312 -0
  123. package/dist/stext.js.map +1 -0
  124. package/dist/stream.d.ts +174 -0
  125. package/dist/stream.d.ts.map +1 -0
  126. package/dist/stream.js +476 -0
  127. package/dist/stream.js.map +1 -0
  128. package/dist/text.d.ts +337 -0
  129. package/dist/text.d.ts.map +1 -0
  130. package/dist/text.js +454 -0
  131. package/dist/text.js.map +1 -0
  132. package/dist/typed-arrays.d.ts +127 -0
  133. package/dist/typed-arrays.d.ts.map +1 -0
  134. package/dist/typed-arrays.js +410 -0
  135. package/dist/typed-arrays.js.map +1 -0
  136. package/dist/types.d.ts +358 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +216 -0
  139. package/dist/types.js.map +1 -0
  140. package/native/annot.cc +557 -0
  141. package/native/buffer.cc +204 -0
  142. package/native/colorspace.cc +166 -0
  143. package/native/context.cc +84 -0
  144. package/native/cookie.cc +179 -0
  145. package/native/device.cc +179 -0
  146. package/native/display_list.cc +179 -0
  147. package/native/document.cc +268 -0
  148. package/native/enhanced.cc +70 -0
  149. package/native/font.cc +282 -0
  150. package/native/form.cc +523 -0
  151. package/native/geometry.cc +255 -0
  152. package/native/image.cc +216 -0
  153. package/native/include/micropdf/enhanced.h +38 -0
  154. package/native/include/micropdf/types.h +36 -0
  155. package/native/include/micropdf.h +106 -0
  156. package/native/include/mupdf-ffi.h +39 -0
  157. package/native/include/mupdf.h +11 -0
  158. package/native/include/mupdf_minimal.h +381 -0
  159. package/native/lib/linux-x64/libmicropdf.a +0 -0
  160. package/native/link.cc +234 -0
  161. package/native/micropdf.cc +71 -0
  162. package/native/output.cc +229 -0
  163. package/native/page.cc +572 -0
  164. package/native/path.cc +259 -0
  165. package/native/pixmap.cc +240 -0
  166. package/native/stext.cc +610 -0
  167. package/native/stream.cc +239 -0
  168. package/package.json +120 -0
  169. package/scripts/build-from-rust.js +97 -0
  170. package/scripts/install.js +184 -0
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Enhanced - MicroPDF high-level convenience API
3
+ *
4
+ * This module provides MicroPDF-specific high-level functions for common PDF operations.
5
+ * These are convenience wrappers that simplify complex workflows and provide a more
6
+ * user-friendly API for common tasks.
7
+ *
8
+ * The Enhanced API includes operations like:
9
+ * - Adding blank pages
10
+ * - Adding watermarks
11
+ * - Drawing shapes (rectangles, circles, lines)
12
+ * - Merging and splitting PDFs
13
+ * - Optimizing and linearizing PDFs
14
+ *
15
+ * @module enhanced
16
+ * @example
17
+ * ```typescript
18
+ * import { Enhanced, Document } from 'micropdf';
19
+ *
20
+ * const enhanced = new Enhanced();
21
+ * const doc = Document.open('document.pdf');
22
+ *
23
+ * // Add a blank page
24
+ * enhanced.addBlankPage(doc, 612, 792); // US Letter size
25
+ *
26
+ * // Add a watermark
27
+ * enhanced.addWatermark(
28
+ * doc,
29
+ * 'CONFIDENTIAL',
30
+ * { x: 300, y: 400 },
31
+ * 12,
32
+ * 0.3 // 30% opacity
33
+ * );
34
+ *
35
+ * // Draw shapes
36
+ * enhanced.drawRectangle(
37
+ * doc,
38
+ * 0, // page index
39
+ * { x0: 100, y0: 100, x1: 200, y1: 200 },
40
+ * [255, 0, 0], // red
41
+ * 0.5, // opacity
42
+ * 2, // line width
43
+ * true // fill
44
+ * );
45
+ *
46
+ * // Save
47
+ * doc.save('output.pdf');
48
+ * doc.close();
49
+ * ```
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // Merge multiple PDFs
54
+ * const enhanced = new Enhanced();
55
+ * enhanced.mergePdfs(
56
+ * ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'],
57
+ * 'merged.pdf'
58
+ * );
59
+ *
60
+ * // Split a PDF
61
+ * enhanced.splitPdf(
62
+ * 'document.pdf',
63
+ * 'output-dir',
64
+ * { startPage: 0, endPage: 10 }
65
+ * );
66
+ *
67
+ * // Optimize a PDF
68
+ * enhanced.optimizePdf('large.pdf', 'optimized.pdf');
69
+ *
70
+ * // Linearize for web viewing
71
+ * enhanced.linearizePdf('document.pdf', 'web-optimized.pdf');
72
+ * ```
73
+ */
74
+ import { Context } from './context.js';
75
+ import { Document } from './document.js';
76
+ import { type ColorLike } from './geometry.js';
77
+ /**
78
+ * Enhanced MicroPDF API for high-level PDF operations.
79
+ *
80
+ * Provides convenient methods for common PDF manipulation tasks that would
81
+ * otherwise require multiple lower-level API calls.
82
+ *
83
+ * @class Enhanced
84
+ * @example
85
+ * ```typescript
86
+ * const enhanced = new Enhanced();
87
+ * const doc = Document.open('document.pdf');
88
+ *
89
+ * // Add a watermark to all pages
90
+ * for (let i = 0; i < doc.pageCount; i++) {
91
+ * enhanced.addWatermark(
92
+ * doc,
93
+ * 'DRAFT',
94
+ * { x: 300, y: 400 },
95
+ * 48,
96
+ * 0.2
97
+ * );
98
+ * }
99
+ *
100
+ * doc.save('watermarked.pdf');
101
+ * doc.close();
102
+ * ```
103
+ */
104
+ export declare class Enhanced {
105
+ private _ctx;
106
+ constructor(ctx?: Context);
107
+ /**
108
+ * Get the context
109
+ */
110
+ get context(): Context;
111
+ /**
112
+ * Add a blank page to a document using FFI
113
+ * @returns Page number of newly added page
114
+ * @throws Error when native bindings are not available
115
+ */
116
+ addBlankPage(_doc: Document, width: number, height: number): number;
117
+ /**
118
+ * Draw a line on a page using FFI
119
+ * @throws Error when native bindings are not available
120
+ */
121
+ drawLine(page: unknown, x0: number, y0: number, x1: number, y1: number, color: ColorLike, alpha?: number, lineWidth?: number): void;
122
+ /**
123
+ * Draw a rectangle on a page using FFI
124
+ * @throws Error when native bindings are not available
125
+ */
126
+ drawRectangle(page: unknown, x: number, y: number, width: number, height: number, color: ColorLike, alpha?: number, fill?: boolean): void;
127
+ /**
128
+ * Draw a circle on a page using FFI
129
+ * @throws Error when native bindings are not available
130
+ */
131
+ drawCircle(page: unknown, x: number, y: number, radius: number, color: ColorLike, alpha?: number, fill?: boolean): void;
132
+ /**
133
+ * Add watermark to PDF using FFI
134
+ * @throws Error when native bindings are not available
135
+ */
136
+ addWatermark(inputPath: string, _outputPath: string, text: string, _x?: number, _y?: number, fontSize?: number, opacity?: number): Promise<void>;
137
+ /**
138
+ * Merge multiple PDFs into one using FFI
139
+ * @throws Error when native bindings are not available
140
+ */
141
+ mergePDFs(inputPaths: string[], outputPath: string): Promise<void>;
142
+ /**
143
+ * Split PDF into separate files using FFI
144
+ * @returns Array of output file paths
145
+ * @throws Error when native bindings are not available
146
+ */
147
+ splitPDF(inputPath: string, outputDir: string): Promise<string[]>;
148
+ /**
149
+ * Optimize PDF (compress, remove unused objects) using FFI
150
+ * @throws Error when native bindings are not available
151
+ */
152
+ optimizePDF(path: string): Promise<void>;
153
+ /**
154
+ * Linearize PDF for fast web viewing using FFI
155
+ * @throws Error when native bindings are not available
156
+ */
157
+ linearizePDF(inputPath: string, outputPath: string): Promise<void>;
158
+ /**
159
+ * Write document to PDF file using FFI
160
+ * @throws Error when native bindings are not available
161
+ */
162
+ writePDF(doc: Document, path: string): Promise<void>;
163
+ /**
164
+ * Merge multiple PDF files into a single output file
165
+ *
166
+ * @param inputPaths Array of PDF file paths to merge (in order)
167
+ * @param outputPath Path where the merged PDF will be saved
168
+ * @returns Promise that resolves to the number of pages in the merged PDF
169
+ * @throws Error if any input file is invalid, not found, or merge fails
170
+ * @throws Error when native bindings are not available
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * import { Enhanced } from 'micropdf';
175
+ *
176
+ * const enhanced = new Enhanced();
177
+ * const pageCount = await enhanced.mergePDF(
178
+ * ['document1.pdf', 'document2.pdf', 'document3.pdf'],
179
+ * 'merged.pdf'
180
+ * );
181
+ * console.log(`Merged ${pageCount} pages`);
182
+ * ```
183
+ *
184
+ * @example Large document handling
185
+ * ```typescript
186
+ * // Works with large documents (5000+ pages)
187
+ * const pageCount = await enhanced.mergePDF(
188
+ * ['large_doc1.pdf', 'large_doc2.pdf'],
189
+ * 'combined.pdf'
190
+ * );
191
+ * ```
192
+ */
193
+ mergePDF(inputPaths: string[], outputPath: string): Promise<number>;
194
+ /**
195
+ * Create a new blank PDF document
196
+ * @param width Page width in points (default A4 width: 595)
197
+ * @param height Page height in points (default A4 height: 842)
198
+ * @throws Error This is a static method that requires instance context
199
+ */
200
+ static createBlankDocument(_width?: number, _height?: number): Document;
201
+ /**
202
+ * Quick create PDF with text
203
+ * @throws Error This is a static method that requires instance context
204
+ */
205
+ static createTextPDF(_text: string, _outputPath: string, _options?: {
206
+ fontSize?: number;
207
+ fontName?: string;
208
+ pageWidth?: number;
209
+ pageHeight?: number;
210
+ }): Promise<void>;
211
+ }
212
+ /**
213
+ * Get global enhanced API
214
+ */
215
+ export declare function getEnhanced(): Enhanced;
216
+ /**
217
+ * Convenience functions (use global instance)
218
+ */
219
+ export declare function addWatermark(inputPath: string, outputPath: string, text: string, x?: number, y?: number, fontSize?: number, opacity?: number): Promise<void>;
220
+ export declare function mergePDFs(inputPaths: string[], outputPath: string): Promise<void>;
221
+ export declare function splitPDF(inputPath: string, outputDir: string): Promise<string[]>;
222
+ export declare function optimizePDF(path: string): Promise<void>;
223
+ export declare function linearizePDF(inputPath: string, outputPath: string): Promise<void>;
224
+ export declare function createBlankDocument(width?: number, height?: number): Document;
225
+ export declare function createTextPDF(text: string, outputPath: string, options?: Parameters<typeof Enhanced.createTextPDF>[2]): Promise<void>;
226
+ //# sourceMappingURL=enhanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced.d.ts","sourceRoot":"","sources":["../src/enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Enhanced - MicroPDF high-level convenience API
3
+ *
4
+ * This module provides MicroPDF-specific high-level functions for common PDF operations.
5
+ * These are convenience wrappers that simplify complex workflows and provide a more
6
+ * user-friendly API for common tasks.
7
+ *
8
+ * The Enhanced API includes operations like:
9
+ * - Adding blank pages
10
+ * - Adding watermarks
11
+ * - Drawing shapes (rectangles, circles, lines)
12
+ * - Merging and splitting PDFs
13
+ * - Optimizing and linearizing PDFs
14
+ *
15
+ * @module enhanced
16
+ * @example
17
+ * ```typescript
18
+ * import { Enhanced, Document } from 'micropdf';
19
+ *
20
+ * const enhanced = new Enhanced();
21
+ * const doc = Document.open('document.pdf');
22
+ *
23
+ * // Add a blank page
24
+ * enhanced.addBlankPage(doc, 612, 792); // US Letter size
25
+ *
26
+ * // Add a watermark
27
+ * enhanced.addWatermark(
28
+ * doc,
29
+ * 'CONFIDENTIAL',
30
+ * { x: 300, y: 400 },
31
+ * 12,
32
+ * 0.3 // 30% opacity
33
+ * );
34
+ *
35
+ * // Draw shapes
36
+ * enhanced.drawRectangle(
37
+ * doc,
38
+ * 0, // page index
39
+ * { x0: 100, y0: 100, x1: 200, y1: 200 },
40
+ * [255, 0, 0], // red
41
+ * 0.5, // opacity
42
+ * 2, // line width
43
+ * true // fill
44
+ * );
45
+ *
46
+ * // Save
47
+ * doc.save('output.pdf');
48
+ * doc.close();
49
+ * ```
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // Merge multiple PDFs
54
+ * const enhanced = new Enhanced();
55
+ * enhanced.mergePdfs(
56
+ * ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'],
57
+ * 'merged.pdf'
58
+ * );
59
+ *
60
+ * // Split a PDF
61
+ * enhanced.splitPdf(
62
+ * 'document.pdf',
63
+ * 'output-dir',
64
+ * { startPage: 0, endPage: 10 }
65
+ * );
66
+ *
67
+ * // Optimize a PDF
68
+ * enhanced.optimizePdf('large.pdf', 'optimized.pdf');
69
+ *
70
+ * // Linearize for web viewing
71
+ * enhanced.linearizePdf('document.pdf', 'web-optimized.pdf');
72
+ * ```
73
+ */
74
+ import { getDefaultContext } from './context.js';
75
+ import { Color } from './geometry.js';
76
+ import { native } from './native.js';
77
+ /**
78
+ * Enhanced MicroPDF API for high-level PDF operations.
79
+ *
80
+ * Provides convenient methods for common PDF manipulation tasks that would
81
+ * otherwise require multiple lower-level API calls.
82
+ *
83
+ * @class Enhanced
84
+ * @example
85
+ * ```typescript
86
+ * const enhanced = new Enhanced();
87
+ * const doc = Document.open('document.pdf');
88
+ *
89
+ * // Add a watermark to all pages
90
+ * for (let i = 0; i < doc.pageCount; i++) {
91
+ * enhanced.addWatermark(
92
+ * doc,
93
+ * 'DRAFT',
94
+ * { x: 300, y: 400 },
95
+ * 48,
96
+ * 0.2
97
+ * );
98
+ * }
99
+ *
100
+ * doc.save('watermarked.pdf');
101
+ * doc.close();
102
+ * ```
103
+ */
104
+ export class Enhanced {
105
+ _ctx;
106
+ constructor(ctx) {
107
+ this._ctx = ctx || getDefaultContext();
108
+ }
109
+ /**
110
+ * Get the context
111
+ */
112
+ get context() {
113
+ return this._ctx;
114
+ }
115
+ // ============================================================================
116
+ // Page Operations
117
+ // ============================================================================
118
+ /**
119
+ * Add a blank page to a document using FFI
120
+ * @returns Page number of newly added page
121
+ * @throws Error when native bindings are not available
122
+ */
123
+ addBlankPage(_doc, width, height) {
124
+ // Get native handles (will be available when Document exposes them)
125
+ const ctx = this._ctx?._nativeCtx;
126
+ const nativeDoc = _doc?._doc;
127
+ if (!ctx || !nativeDoc) {
128
+ throw new Error('Adding blank page requires native FFI bindings (mp_add_blank_page)');
129
+ }
130
+ return native.npAddBlankPage(ctx, nativeDoc, width, height);
131
+ }
132
+ // ============================================================================
133
+ // Drawing Operations
134
+ // ============================================================================
135
+ /**
136
+ * Draw a line on a page using FFI
137
+ * @throws Error when native bindings are not available
138
+ */
139
+ drawLine(page, x0, y0, x1, y1, color, alpha = 1.0, lineWidth = 1.0) {
140
+ const ctx = this._ctx?._nativeCtx;
141
+ const nativePage = page?._page;
142
+ if (!ctx || !nativePage) {
143
+ throw new Error('Drawing line requires native FFI bindings (mp_draw_line)');
144
+ }
145
+ const c = Color.from(color);
146
+ const colorArray = [c.r, c.g, c.b];
147
+ native.npDrawLine(ctx, nativePage, x0, y0, x1, y1, colorArray, alpha, lineWidth);
148
+ }
149
+ /**
150
+ * Draw a rectangle on a page using FFI
151
+ * @throws Error when native bindings are not available
152
+ */
153
+ drawRectangle(page, x, y, width, height, color, alpha = 1.0, fill = false) {
154
+ const ctx = this._ctx?._nativeCtx;
155
+ const nativePage = page?._page;
156
+ if (!ctx || !nativePage) {
157
+ throw new Error('Drawing rectangle requires native FFI bindings (mp_draw_rectangle)');
158
+ }
159
+ const c = Color.from(color);
160
+ const colorArray = [c.r, c.g, c.b];
161
+ native.npDrawRectangle(ctx, nativePage, x, y, width, height, colorArray, alpha, fill);
162
+ }
163
+ /**
164
+ * Draw a circle on a page using FFI
165
+ * @throws Error when native bindings are not available
166
+ */
167
+ drawCircle(page, x, y, radius, color, alpha = 1.0, fill = false) {
168
+ const ctx = this._ctx?._nativeCtx;
169
+ const nativePage = page?._page;
170
+ if (!ctx || !nativePage) {
171
+ throw new Error('Drawing circle requires native FFI bindings (mp_draw_circle)');
172
+ }
173
+ const c = Color.from(color);
174
+ const colorArray = [c.r, c.g, c.b];
175
+ native.npDrawCircle(ctx, nativePage, x, y, radius, colorArray, alpha, fill);
176
+ }
177
+ // ============================================================================
178
+ // Watermark Operations
179
+ // ============================================================================
180
+ /**
181
+ * Add watermark to PDF using FFI
182
+ * @throws Error when native bindings are not available
183
+ */
184
+ async addWatermark(inputPath, _outputPath, text, _x = 100, _y = 100, fontSize = 48, opacity = 0.3) {
185
+ const ctx = this._ctx?._nativeCtx;
186
+ if (!ctx) {
187
+ throw new Error('Watermark requires native FFI bindings (mp_add_watermark)');
188
+ }
189
+ // Open document
190
+ const doc = native.openDocumentFromPath(ctx, inputPath);
191
+ native.npAddWatermark(ctx, doc, text, fontSize, opacity);
192
+ native.dropDocument(ctx, doc);
193
+ }
194
+ // ============================================================================
195
+ // PDF Manipulation
196
+ // ============================================================================
197
+ /**
198
+ * Merge multiple PDFs into one using FFI
199
+ * @throws Error when native bindings are not available
200
+ */
201
+ async mergePDFs(inputPaths, outputPath) {
202
+ const ctx = this._ctx?._nativeCtx;
203
+ if (!ctx) {
204
+ throw new Error('PDF merging requires native FFI bindings (mp_merge_pdfs)');
205
+ }
206
+ native.npMergePDFs(ctx, inputPaths, inputPaths.length, outputPath);
207
+ }
208
+ /**
209
+ * Split PDF into separate files using FFI
210
+ * @returns Array of output file paths
211
+ * @throws Error when native bindings are not available
212
+ */
213
+ async splitPDF(inputPath, outputDir) {
214
+ const ctx = this._ctx?._nativeCtx;
215
+ if (!ctx) {
216
+ throw new Error('PDF splitting requires native FFI bindings (mp_split_pdf)');
217
+ }
218
+ return native.npSplitPDF(ctx, inputPath, outputDir);
219
+ }
220
+ /**
221
+ * Optimize PDF (compress, remove unused objects) using FFI
222
+ * @throws Error when native bindings are not available
223
+ */
224
+ async optimizePDF(path) {
225
+ const ctx = this._ctx?._nativeCtx;
226
+ if (!ctx) {
227
+ throw new Error('PDF optimization requires native FFI bindings (mp_optimize_pdf)');
228
+ }
229
+ native.npOptimizePDF(ctx, path);
230
+ }
231
+ /**
232
+ * Linearize PDF for fast web viewing using FFI
233
+ * @throws Error when native bindings are not available
234
+ */
235
+ async linearizePDF(inputPath, outputPath) {
236
+ const ctx = this._ctx?._nativeCtx;
237
+ if (!ctx) {
238
+ throw new Error('PDF linearization requires native FFI bindings (mp_linearize_pdf)');
239
+ }
240
+ native.npLinearizePDF(ctx, inputPath, outputPath);
241
+ }
242
+ /**
243
+ * Write document to PDF file using FFI
244
+ * @throws Error when native bindings are not available
245
+ */
246
+ async writePDF(doc, path) {
247
+ const ctx = this._ctx?._nativeCtx;
248
+ const nativeDoc = doc?._doc;
249
+ if (!ctx || !nativeDoc) {
250
+ throw new Error('Writing PDF requires native FFI bindings (pdf_save_document)');
251
+ }
252
+ native.saveDocument(ctx, nativeDoc, path);
253
+ }
254
+ /**
255
+ * Merge multiple PDF files into a single output file
256
+ *
257
+ * @param inputPaths Array of PDF file paths to merge (in order)
258
+ * @param outputPath Path where the merged PDF will be saved
259
+ * @returns Promise that resolves to the number of pages in the merged PDF
260
+ * @throws Error if any input file is invalid, not found, or merge fails
261
+ * @throws Error when native bindings are not available
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * import { Enhanced } from 'micropdf';
266
+ *
267
+ * const enhanced = new Enhanced();
268
+ * const pageCount = await enhanced.mergePDF(
269
+ * ['document1.pdf', 'document2.pdf', 'document3.pdf'],
270
+ * 'merged.pdf'
271
+ * );
272
+ * console.log(`Merged ${pageCount} pages`);
273
+ * ```
274
+ *
275
+ * @example Large document handling
276
+ * ```typescript
277
+ * // Works with large documents (5000+ pages)
278
+ * const pageCount = await enhanced.mergePDF(
279
+ * ['large_doc1.pdf', 'large_doc2.pdf'],
280
+ * 'combined.pdf'
281
+ * );
282
+ * ```
283
+ */
284
+ async mergePDF(inputPaths, outputPath) {
285
+ const ctx = this._ctx?._nativeCtx;
286
+ if (!ctx) {
287
+ throw new Error('Merging PDFs requires native FFI bindings (mp_merge_pdfs)');
288
+ }
289
+ if (!inputPaths || inputPaths.length === 0) {
290
+ throw new Error('At least one input PDF path is required');
291
+ }
292
+ if (!outputPath) {
293
+ throw new Error('Output path is required');
294
+ }
295
+ try {
296
+ const pageCount = native.npMergePDFs(ctx, inputPaths, inputPaths.length, outputPath);
297
+ if (pageCount < 0) {
298
+ throw new Error('PDF merge failed');
299
+ }
300
+ return pageCount;
301
+ }
302
+ catch (error) {
303
+ if (error instanceof Error) {
304
+ throw new Error(`Failed to merge PDFs: ${error.message}`);
305
+ }
306
+ throw new Error('Failed to merge PDFs: Unknown error');
307
+ }
308
+ }
309
+ // ============================================================================
310
+ // Convenience Factory Methods
311
+ // ============================================================================
312
+ /**
313
+ * Create a new blank PDF document
314
+ * @param width Page width in points (default A4 width: 595)
315
+ * @param height Page height in points (default A4 height: 842)
316
+ * @throws Error This is a static method that requires instance context
317
+ */
318
+ static createBlankDocument(_width = 595, _height = 842) {
319
+ throw new Error('Document creation requires native FFI bindings (fz_new_document). ' +
320
+ 'Use Document.fromBuffer() or Enhanced instance methods instead.');
321
+ }
322
+ /**
323
+ * Quick create PDF with text
324
+ * @throws Error This is a static method that requires instance context
325
+ */
326
+ static async createTextPDF(_text, _outputPath, _options) {
327
+ throw new Error('PDF text creation requires native FFI bindings (fz_new_document, fz_show_string). ' +
328
+ 'Use Enhanced instance methods instead.');
329
+ }
330
+ }
331
+ /**
332
+ * Global enhanced API instance
333
+ */
334
+ let globalEnhanced = null;
335
+ /**
336
+ * Get global enhanced API
337
+ */
338
+ export function getEnhanced() {
339
+ if (!globalEnhanced) {
340
+ globalEnhanced = new Enhanced();
341
+ }
342
+ return globalEnhanced;
343
+ }
344
+ /**
345
+ * Convenience functions (use global instance)
346
+ */
347
+ export async function addWatermark(inputPath, outputPath, text, x, y, fontSize, opacity) {
348
+ return getEnhanced().addWatermark(inputPath, outputPath, text, x, y, fontSize, opacity);
349
+ }
350
+ export async function mergePDFs(inputPaths, outputPath) {
351
+ return getEnhanced().mergePDFs(inputPaths, outputPath);
352
+ }
353
+ export async function splitPDF(inputPath, outputDir) {
354
+ return getEnhanced().splitPDF(inputPath, outputDir);
355
+ }
356
+ export async function optimizePDF(path) {
357
+ return getEnhanced().optimizePDF(path);
358
+ }
359
+ export async function linearizePDF(inputPath, outputPath) {
360
+ return getEnhanced().linearizePDF(inputPath, outputPath);
361
+ }
362
+ export function createBlankDocument(width, height) {
363
+ return Enhanced.createBlankDocument(width, height);
364
+ }
365
+ export async function createTextPDF(text, outputPath, options) {
366
+ return Enhanced.createTextPDF(text, outputPath, options);
367
+ }
368
+ //# sourceMappingURL=enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced.js","sourceRoot":"","sources":["../src/enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Filter - PDF compression and decompression filters
3
+ *
4
+ * This implementation mirrors the Rust `pdf::filter` module for 100% API compatibility.
5
+ */
6
+ import { type FilterType } from './types.js';
7
+ /**
8
+ * Compress data using FlateDecode (zlib deflate)
9
+ */
10
+ export declare function flateEncode(data: Uint8Array): Uint8Array;
11
+ /**
12
+ * Decompress FlateDecode (zlib inflate) data
13
+ */
14
+ export declare function flateDecode(data: Uint8Array): Uint8Array;
15
+ /**
16
+ * Encode data to ASCII hex
17
+ */
18
+ export declare function asciiHexEncode(data: Uint8Array): Uint8Array;
19
+ /**
20
+ * Decode ASCII hex data
21
+ */
22
+ export declare function asciiHexDecode(data: Uint8Array): Uint8Array;
23
+ /**
24
+ * Encode data to ASCII85
25
+ */
26
+ export declare function ascii85Encode(data: Uint8Array): Uint8Array;
27
+ /**
28
+ * Decode ASCII85 data
29
+ */
30
+ export declare function ascii85Decode(data: Uint8Array): Uint8Array;
31
+ /**
32
+ * Encode data using Run-Length Encoding
33
+ */
34
+ export declare function runLengthEncode(data: Uint8Array): Uint8Array;
35
+ /**
36
+ * Decode Run-Length encoded data
37
+ */
38
+ export declare function runLengthDecode(data: Uint8Array): Uint8Array;
39
+ /**
40
+ * Decode LZW compressed data
41
+ */
42
+ export declare function lzwDecode(data: Uint8Array, earlyChange?: boolean): Uint8Array;
43
+ /**
44
+ * Decode data using the specified filter
45
+ */
46
+ export declare function decodeFilter(filter: FilterType, data: Uint8Array, params?: Record<string, unknown>): Uint8Array;
47
+ /**
48
+ * Encode data using the specified filter
49
+ */
50
+ export declare function encodeFilter(filter: FilterType, data: Uint8Array, _params?: Record<string, unknown>): Uint8Array;
51
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAM5D;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAUxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAUxD;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAG3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAiB3D;AAUD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAyC1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA6D1D;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA0C5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA8B5D;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,GAAE,OAAc,GAAG,UAAU,CAoFnF;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,UAAU,CAyBZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,UAAU,CAyBZ"}