@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
package/dist/easy.js ADDED
@@ -0,0 +1,644 @@
1
+ /**
2
+ * Easy API - Simplified, ergonomic API for common PDF tasks
3
+ *
4
+ * This module provides a high-level, user-friendly interface for the most common
5
+ * PDF operations, with automatic resource management and intuitive method chaining.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { EasyPDF } from 'micropdf/easy';
10
+ *
11
+ * // Simple text extraction
12
+ * const text = await EasyPDF.extractText('document.pdf');
13
+ *
14
+ * // Render to PNG
15
+ * const buffer = await EasyPDF.renderPage('document.pdf', 0, { dpi: 300 });
16
+ *
17
+ * // Chain operations
18
+ * await EasyPDF.open('input.pdf')
19
+ * .getMetadata()
20
+ * .extractText()
21
+ * .renderPages({ dpi: 150 })
22
+ * .save('output.pdf');
23
+ * ```
24
+ */
25
+ import { Document } from './document.js';
26
+ import { Matrix } from './geometry.js';
27
+ import { Colorspace } from './colorspace.js';
28
+ import { dpiToScale } from './render-options.js';
29
+ import * as fs from 'fs/promises';
30
+ /**
31
+ * EasyPDF - Fluent builder for PDF operations
32
+ */
33
+ export class EasyPDF {
34
+ doc = null;
35
+ autoClose = true;
36
+ constructor(doc) {
37
+ this.doc = doc;
38
+ }
39
+ /**
40
+ * Open a PDF document
41
+ *
42
+ * @param path - Path to PDF file
43
+ * @param password - Optional password for encrypted PDFs
44
+ * @returns EasyPDF instance for chaining
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const pdf = EasyPDF.open('document.pdf');
49
+ * ```
50
+ */
51
+ static open(path, password) {
52
+ const doc = Document.open(path, password);
53
+ return new EasyPDF(doc);
54
+ }
55
+ /**
56
+ * Open a PDF from a buffer
57
+ *
58
+ * @param buffer - Buffer containing PDF data
59
+ * @param password - Optional password for encrypted PDFs
60
+ * @returns EasyPDF instance for chaining
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const buffer = await fs.readFile('document.pdf');
65
+ * const pdf = EasyPDF.fromBuffer(buffer);
66
+ * ```
67
+ */
68
+ static fromBuffer(buffer, password) {
69
+ const doc = Document.fromBuffer(buffer, password);
70
+ return new EasyPDF(doc);
71
+ }
72
+ /**
73
+ * Extract text from a PDF file (static helper)
74
+ *
75
+ * @param path - Path to PDF file
76
+ * @param pageNumber - Optional page number (0-indexed), or undefined for all pages
77
+ * @returns Extracted text
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * // Extract all text
82
+ * const allText = await EasyPDF.extractText('document.pdf');
83
+ *
84
+ * // Extract from specific page
85
+ * const pageText = await EasyPDF.extractText('document.pdf', 0);
86
+ * ```
87
+ */
88
+ static async extractText(path, pageNumber) {
89
+ const pdf = EasyPDF.open(path);
90
+ try {
91
+ if (pageNumber !== undefined) {
92
+ return pdf.extractPageText(pageNumber);
93
+ }
94
+ return pdf.extractAllText();
95
+ }
96
+ finally {
97
+ pdf.close();
98
+ }
99
+ }
100
+ /**
101
+ * Render a specific page to an image buffer (static helper)
102
+ *
103
+ * @param path - Path to PDF file
104
+ * @param pageNumber - Page number (0-indexed)
105
+ * @param options - Render options
106
+ * @returns Image buffer
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const pngBuffer = await EasyPDF.renderPage('document.pdf', 0, {
111
+ * dpi: 300,
112
+ * format: 'png'
113
+ * });
114
+ * await fs.writeFile('page.png', pngBuffer);
115
+ * ```
116
+ */
117
+ static async renderPage(path, pageNumber, options = {}) {
118
+ const pdf = EasyPDF.open(path);
119
+ try {
120
+ return pdf.renderToBuffer(pageNumber, options);
121
+ }
122
+ finally {
123
+ pdf.close();
124
+ }
125
+ }
126
+ /**
127
+ * Get document information (static helper)
128
+ *
129
+ * @param path - Path to PDF file
130
+ * @returns Document information
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * const info = await EasyPDF.getInfo('document.pdf');
135
+ * console.log(`Pages: ${info.pageCount}`);
136
+ * console.log(`Title: ${info.metadata.title}`);
137
+ * ```
138
+ */
139
+ static async getInfo(path) {
140
+ const pdf = EasyPDF.open(path);
141
+ try {
142
+ return pdf.getInfo();
143
+ }
144
+ finally {
145
+ pdf.close();
146
+ }
147
+ }
148
+ /**
149
+ * Search for text in a PDF (static helper)
150
+ *
151
+ * @param path - Path to PDF file
152
+ * @param query - Text to search for
153
+ * @param pageNumber - Optional page number (0-indexed), or undefined for all pages
154
+ * @returns Array of search results
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * const results = await EasyPDF.search('document.pdf', 'important');
159
+ * console.log(`Found ${results.length} occurrences`);
160
+ * ```
161
+ */
162
+ static async search(path, query, pageNumber) {
163
+ const pdf = EasyPDF.open(path);
164
+ try {
165
+ return pdf.search(query, pageNumber);
166
+ }
167
+ finally {
168
+ pdf.close();
169
+ }
170
+ }
171
+ /**
172
+ * Get the number of pages
173
+ *
174
+ * @returns Page count
175
+ */
176
+ get pageCount() {
177
+ this.ensureOpen();
178
+ return this.doc.pageCount;
179
+ }
180
+ /**
181
+ * Check if document is encrypted
182
+ *
183
+ * @returns True if encrypted
184
+ */
185
+ get isEncrypted() {
186
+ this.ensureOpen();
187
+ return this.doc.needsPassword;
188
+ }
189
+ /**
190
+ * Get document metadata
191
+ *
192
+ * @returns Metadata object
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * const metadata = pdf.getMetadata();
197
+ * console.log(metadata.title);
198
+ * console.log(metadata.author);
199
+ * ```
200
+ */
201
+ getMetadata() {
202
+ this.ensureOpen();
203
+ const doc = this.doc;
204
+ const parseDate = (dateStr) => {
205
+ if (!dateStr)
206
+ return undefined;
207
+ try {
208
+ // PDF date format: D:YYYYMMDDHHmmSSOHH'mm
209
+ const match = dateStr.match(/^D:(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/);
210
+ if (match) {
211
+ const [, year, month, day, hour, min, sec] = match;
212
+ return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hour), parseInt(min), parseInt(sec));
213
+ }
214
+ return new Date(dateStr);
215
+ }
216
+ catch {
217
+ return undefined;
218
+ }
219
+ };
220
+ const metadata = {};
221
+ const title = doc.getMetadata('Title');
222
+ if (title)
223
+ metadata.title = title;
224
+ const author = doc.getMetadata('Author');
225
+ if (author)
226
+ metadata.author = author;
227
+ const subject = doc.getMetadata('Subject');
228
+ if (subject)
229
+ metadata.subject = subject;
230
+ const keywords = doc.getMetadata('Keywords');
231
+ if (keywords)
232
+ metadata.keywords = keywords;
233
+ const creator = doc.getMetadata('Creator');
234
+ if (creator)
235
+ metadata.creator = creator;
236
+ const producer = doc.getMetadata('Producer');
237
+ if (producer)
238
+ metadata.producer = producer;
239
+ const creationDate = parseDate(doc.getMetadata('CreationDate'));
240
+ if (creationDate)
241
+ metadata.creationDate = creationDate;
242
+ const modDate = parseDate(doc.getMetadata('ModDate'));
243
+ if (modDate)
244
+ metadata.modDate = modDate;
245
+ return metadata;
246
+ }
247
+ /**
248
+ * Get document information
249
+ *
250
+ * @returns Complete document information
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * const info = pdf.getInfo();
255
+ * console.log(`Document has ${info.pageCount} pages`);
256
+ * info.pages.forEach((page, i) => {
257
+ * console.log(`Page ${i}: ${page.width}x${page.height}`);
258
+ * });
259
+ * ```
260
+ */
261
+ getInfo() {
262
+ this.ensureOpen();
263
+ const doc = this.doc;
264
+ const pages = [];
265
+ for (let i = 0; i < doc.pageCount; i++) {
266
+ const page = doc.getPage(i);
267
+ try {
268
+ const bounds = page.bounds();
269
+ pages.push({
270
+ pageNumber: i,
271
+ width: bounds.width,
272
+ height: bounds.height,
273
+ rotation: 0 // TODO: Get rotation from page
274
+ });
275
+ }
276
+ finally {
277
+ page.drop();
278
+ }
279
+ }
280
+ return {
281
+ pageCount: doc.pageCount,
282
+ metadata: this.getMetadata(),
283
+ isEncrypted: doc.needsPassword,
284
+ hasXfa: false, // TODO: Check for XFA forms
285
+ pages
286
+ };
287
+ }
288
+ /**
289
+ * Extract text from a specific page
290
+ *
291
+ * @param pageNumber - Page number (0-indexed)
292
+ * @returns Extracted text
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const text = pdf.extractPageText(0);
297
+ * console.log(text);
298
+ * ```
299
+ */
300
+ extractPageText(pageNumber) {
301
+ this.ensureOpen();
302
+ const page = this.doc.getPage(pageNumber);
303
+ try {
304
+ return page.extractText();
305
+ }
306
+ finally {
307
+ page.drop();
308
+ }
309
+ }
310
+ /**
311
+ * Extract text from all pages
312
+ *
313
+ * @param separator - Separator between pages (default: '\n\n---\n\n')
314
+ * @returns Extracted text
315
+ *
316
+ * @example
317
+ * ```typescript
318
+ * const allText = pdf.extractAllText();
319
+ * ```
320
+ */
321
+ extractAllText(separator = '\n\n---\n\n') {
322
+ this.ensureOpen();
323
+ const texts = [];
324
+ for (let i = 0; i < this.doc.pageCount; i++) {
325
+ texts.push(this.extractPageText(i));
326
+ }
327
+ return texts.join(separator);
328
+ }
329
+ /**
330
+ * Extract structured text with bounding boxes
331
+ *
332
+ * @param pageNumber - Page number (0-indexed), or undefined for all pages
333
+ * @returns Array of extracted text with structure
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * const structured = pdf.extractStructuredText(0);
338
+ * structured.forEach(block => {
339
+ * console.log(`Text: ${block.text}`);
340
+ * console.log(`Position: ${block.bbox.x}, ${block.bbox.y}`);
341
+ * });
342
+ * ```
343
+ */
344
+ extractStructuredText(pageNumber) {
345
+ this.ensureOpen();
346
+ const results = [];
347
+ const processPage = (pNum) => {
348
+ const page = this.doc.getPage(pNum);
349
+ try {
350
+ const stext = page.extractStructuredText();
351
+ const blocks = stext.blocks.map((block) => ({
352
+ text: block.text || '',
353
+ bbox: {
354
+ x: block.bbox.x,
355
+ y: block.bbox.y,
356
+ width: block.bbox.width,
357
+ height: block.bbox.height
358
+ }
359
+ }));
360
+ results.push({
361
+ text: page.extractText(),
362
+ pageNumber: pNum,
363
+ blocks
364
+ });
365
+ }
366
+ finally {
367
+ page.drop();
368
+ }
369
+ };
370
+ if (pageNumber !== undefined) {
371
+ processPage(pageNumber);
372
+ }
373
+ else {
374
+ for (let i = 0; i < this.doc.pageCount; i++) {
375
+ processPage(i);
376
+ }
377
+ }
378
+ return results;
379
+ }
380
+ /**
381
+ * Search for text in the document
382
+ *
383
+ * @param query - Text to search for
384
+ * @param pageNumber - Optional page number (0-indexed), or undefined for all pages
385
+ * @returns Array of search results
386
+ *
387
+ * @example
388
+ * ```typescript
389
+ * const results = pdf.search('important');
390
+ * results.forEach(result => {
391
+ * console.log(`Found on page ${result.pageNumber}: ${result.text}`);
392
+ * });
393
+ * ```
394
+ */
395
+ search(query, pageNumber) {
396
+ this.ensureOpen();
397
+ const results = [];
398
+ const searchPage = (pNum) => {
399
+ const page = this.doc.getPage(pNum);
400
+ try {
401
+ const hits = page.searchText(query);
402
+ hits.forEach((hit) => {
403
+ results.push({
404
+ text: query,
405
+ pageNumber: pNum,
406
+ bbox: {
407
+ x: hit.x,
408
+ y: hit.y,
409
+ width: hit.width,
410
+ height: hit.height
411
+ }
412
+ });
413
+ });
414
+ }
415
+ finally {
416
+ page.drop();
417
+ }
418
+ };
419
+ if (pageNumber !== undefined) {
420
+ searchPage(pageNumber);
421
+ }
422
+ else {
423
+ for (let i = 0; i < this.doc.pageCount; i++) {
424
+ searchPage(i);
425
+ }
426
+ }
427
+ return results;
428
+ }
429
+ /**
430
+ * Render a page to a buffer
431
+ *
432
+ * @param pageNumber - Page number (0-indexed)
433
+ * @param options - Render options
434
+ * @returns Image buffer
435
+ *
436
+ * @example
437
+ * ```typescript
438
+ * const pngBuffer = pdf.renderToBuffer(0, { dpi: 300 });
439
+ * await fs.writeFile('page.png', pngBuffer);
440
+ * ```
441
+ */
442
+ renderToBuffer(pageNumber, options = {}) {
443
+ this.ensureOpen();
444
+ const page = this.doc.getPage(pageNumber);
445
+ try {
446
+ // Calculate transform matrix
447
+ let matrix = Matrix.IDENTITY;
448
+ if (options.dpi) {
449
+ const scale = dpiToScale(options.dpi);
450
+ matrix = Matrix.scale(scale, scale);
451
+ }
452
+ else if (options.width || options.height) {
453
+ const bounds = page.bounds();
454
+ const scaleX = options.width ? options.width / bounds.width : 1;
455
+ const scaleY = options.height ? options.height / bounds.height : 1;
456
+ const scale = Math.min(scaleX, scaleY);
457
+ matrix = Matrix.scale(scale, scale);
458
+ }
459
+ // Determine colorspace
460
+ let colorspace;
461
+ switch (options.colorspace) {
462
+ case 'gray':
463
+ colorspace = Colorspace.deviceGray();
464
+ break;
465
+ case 'cmyk':
466
+ colorspace = Colorspace.deviceCMYK();
467
+ break;
468
+ case 'rgb':
469
+ default:
470
+ colorspace = Colorspace.deviceRGB();
471
+ break;
472
+ }
473
+ // Render to pixmap
474
+ const pixmap = page.toPixmap(matrix, colorspace, options.alpha ?? false);
475
+ try {
476
+ // Convert to buffer
477
+ const format = options.format || 'png';
478
+ return pixmap.toBuffer(format);
479
+ }
480
+ finally {
481
+ pixmap.drop();
482
+ }
483
+ }
484
+ finally {
485
+ page.drop();
486
+ }
487
+ }
488
+ /**
489
+ * Render a page to a file
490
+ *
491
+ * @param pageNumber - Page number (0-indexed)
492
+ * @param outputPath - Output file path
493
+ * @param options - Render options
494
+ *
495
+ * @example
496
+ * ```typescript
497
+ * await pdf.renderToFile(0, 'page.png', { dpi: 300 });
498
+ * ```
499
+ */
500
+ async renderToFile(pageNumber, outputPath, options = {}) {
501
+ const buffer = this.renderToBuffer(pageNumber, options);
502
+ await fs.writeFile(outputPath, buffer);
503
+ }
504
+ /**
505
+ * Render all pages
506
+ *
507
+ * @param options - Render options
508
+ * @returns Array of image buffers
509
+ *
510
+ * @example
511
+ * ```typescript
512
+ * const pages = pdf.renderAll({ dpi: 150 });
513
+ * pages.forEach((buffer, i) => {
514
+ * fs.writeFileSync(`page-${i}.png`, buffer);
515
+ * });
516
+ * ```
517
+ */
518
+ renderAll(options = {}) {
519
+ this.ensureOpen();
520
+ const buffers = [];
521
+ for (let i = 0; i < this.doc.pageCount; i++) {
522
+ buffers.push(this.renderToBuffer(i, options));
523
+ }
524
+ return buffers;
525
+ }
526
+ /**
527
+ * Render all pages to files
528
+ *
529
+ * @param outputPattern - Output file pattern (use {page} for page number)
530
+ * @param options - Render options
531
+ *
532
+ * @example
533
+ * ```typescript
534
+ * await pdf.renderAllToFiles('output/page-{page}.png', { dpi: 150 });
535
+ * ```
536
+ */
537
+ async renderAllToFiles(outputPattern, options = {}) {
538
+ this.ensureOpen();
539
+ for (let i = 0; i < this.doc.pageCount; i++) {
540
+ const outputPath = outputPattern.replace('{page}', i.toString());
541
+ await this.renderToFile(i, outputPath, options);
542
+ }
543
+ }
544
+ /**
545
+ * Disable automatic closing (for manual resource management)
546
+ *
547
+ * @returns this for chaining
548
+ */
549
+ keepOpen() {
550
+ this.autoClose = false;
551
+ return this;
552
+ }
553
+ /**
554
+ * Close the document and free resources
555
+ *
556
+ * @example
557
+ * ```typescript
558
+ * const pdf = EasyPDF.open('document.pdf');
559
+ * try {
560
+ * // Use pdf...
561
+ * } finally {
562
+ * pdf.close();
563
+ * }
564
+ * ```
565
+ */
566
+ close() {
567
+ // Documents don't require explicit cleanup in this implementation
568
+ this.doc = null;
569
+ }
570
+ /**
571
+ * Use the PDF document within a callback, automatically closing it
572
+ *
573
+ * @param callback - Callback function
574
+ * @returns Result of callback
575
+ *
576
+ * @example
577
+ * ```typescript
578
+ * const text = await EasyPDF.open('document.pdf').use(pdf => {
579
+ * return pdf.extractAllText();
580
+ * });
581
+ * ```
582
+ */
583
+ use(callback) {
584
+ try {
585
+ return callback(this);
586
+ }
587
+ finally {
588
+ if (this.autoClose) {
589
+ this.close();
590
+ }
591
+ }
592
+ }
593
+ /**
594
+ * Use the PDF document within an async callback, automatically closing it
595
+ *
596
+ * @param callback - Async callback function
597
+ * @returns Promise with result of callback
598
+ *
599
+ * @example
600
+ * ```typescript
601
+ * const info = await EasyPDF.open('document.pdf').useAsync(async pdf => {
602
+ * return pdf.getInfo();
603
+ * });
604
+ * ```
605
+ */
606
+ async useAsync(callback) {
607
+ try {
608
+ return await callback(this);
609
+ }
610
+ finally {
611
+ if (this.autoClose) {
612
+ this.close();
613
+ }
614
+ }
615
+ }
616
+ ensureOpen() {
617
+ if (!this.doc) {
618
+ throw new Error('PDF document is closed');
619
+ }
620
+ }
621
+ }
622
+ /**
623
+ * Namespace for quick utility functions
624
+ */
625
+ export var PDFUtils;
626
+ (function (PDFUtils) {
627
+ /**
628
+ * Extract text from a PDF file
629
+ */
630
+ PDFUtils.extractText = EasyPDF.extractText;
631
+ /**
632
+ * Render a page to buffer
633
+ */
634
+ PDFUtils.renderPage = EasyPDF.renderPage;
635
+ /**
636
+ * Get document information
637
+ */
638
+ PDFUtils.getInfo = EasyPDF.getInfo;
639
+ /**
640
+ * Search for text
641
+ */
642
+ PDFUtils.search = EasyPDF.search;
643
+ })(PDFUtils || (PDFUtils = {}));
644
+ //# sourceMappingURL=easy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"easy.js","sourceRoot":"","sources":["../src/easy.ts"],"names":[],"mappings":"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"}