pdf-oxide-wasm 0.3.16 → 0.3.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pdf-oxide-wasm",
3
- "version": "0.3.16",
3
+ "version": "0.3.18",
4
4
  "description": "Fast, zero-dependency PDF toolkit for Node.js, browsers, and edge runtimes — text extraction, markdown/HTML conversion, search, form filling, creation, and editing. Rust core compiled to WebAssembly.",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "repository": {
package/pdf_oxide.d.ts CHANGED
@@ -143,6 +143,13 @@ export class WasmPdf {
143
143
  * @param images_array - Array of Uint8Arrays, each containing image file bytes (PNG/JPEG)
144
144
  */
145
145
  static fromMultipleImageBytes(images_array: any): WasmPdf;
146
+ /**
147
+ * Merge multiple PDF byte arrays into a single PDF.
148
+ *
149
+ * @param pdfs - Array of Uint8Array, each containing a PDF
150
+ * @returns WasmPdf containing all pages
151
+ */
152
+ static merge(pdfs: Uint8Array[]): WasmPdf;
146
153
  /**
147
154
  * Get the PDF as a Uint8Array.
148
155
  */
@@ -194,6 +201,10 @@ export class WasmPdfDocument {
194
201
  * Set the document author.
195
202
  */
196
203
  setAuthor(author: string): void;
204
+ /**
205
+ * Delete a page by index (0-based).
206
+ */
207
+ deletePage(index: number): void;
197
208
  /**
198
209
  * Deprecated: Use eraseFooter instead.
199
210
  */
@@ -324,6 +335,10 @@ export class WasmPdfDocument {
324
335
  * @returns Array of path objects
325
336
  */
326
337
  extractLines(page_index: number, region?: Float32Array | null): any;
338
+ /**
339
+ * Extract specific pages to a new PDF (returns bytes).
340
+ */
341
+ extractPages(pages: Uint32Array): Uint8Array;
327
342
  /**
328
343
  * Extract vector paths (lines, curves, shapes) from a page.
329
344
  *
@@ -371,7 +386,8 @@ export class WasmPdfDocument {
371
386
  */
372
387
  pageRotation(page_index: number): number;
373
388
  /**
374
- * Save all edits and return the resulting PDF as bytes.
389
+ * Save the modified PDF and return as bytes.
390
+ * `saveToBytes()` is the original method; `save()` is a convenience alias.
375
391
  *
376
392
  * @returns Uint8Array containing the modified PDF
377
393
  */
@@ -419,6 +435,10 @@ export class WasmPdfDocument {
419
435
  * @param threshold - Fraction of pages (0.0-1.0) where text must repeat (heuristic mode)
420
436
  */
421
437
  removeHeaders(threshold: number): number;
438
+ /**
439
+ * Validate PDF/A compliance. Level: "1b", "2b", etc.
440
+ */
441
+ validatePdfA(level: string): any;
422
442
  /**
423
443
  * Erase both header and footer content.
424
444
  *
@@ -569,10 +589,17 @@ export class WasmPdfDocument {
569
589
  /**
570
590
  * Load a PDF document from raw bytes.
571
591
  *
572
- * @param data - The PDF file contents as a Uint8Array
592
+ * @param data - PDF file contents as Uint8Array
593
+ * @param password - Optional password for encrypted PDFs
573
594
  * @throws Error if the PDF is invalid or cannot be parsed
574
595
  */
575
- constructor(data: Uint8Array);
596
+ constructor(data: Uint8Array, password?: string | null);
597
+ /**
598
+ * Save all edits and return the resulting PDF as bytes.
599
+ *
600
+ * @returns Uint8Array containing the modified PDF
601
+ */
602
+ save(): Uint8Array;
576
603
  /**
577
604
  * Search for text across all pages.
578
605
  *
package/pdf_oxide.js CHANGED
@@ -119,6 +119,14 @@ function getStringFromWasm0(ptr, len) {
119
119
  return decodeText(ptr, len);
120
120
  }
121
121
 
122
+ let cachedUint32ArrayMemory0 = null;
123
+ function getUint32ArrayMemory0() {
124
+ if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
125
+ cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
126
+ }
127
+ return cachedUint32ArrayMemory0;
128
+ }
129
+
122
130
  let cachedUint8ArrayMemory0 = null;
123
131
  function getUint8ArrayMemory0() {
124
132
  if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
@@ -146,6 +154,13 @@ function isLikeNone(x) {
146
154
  return x === undefined || x === null;
147
155
  }
148
156
 
157
+ function passArray32ToWasm0(arg, malloc) {
158
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
159
+ getUint32ArrayMemory0().set(arg, ptr / 4);
160
+ WASM_VECTOR_LEN = arg.length;
161
+ return ptr;
162
+ }
163
+
149
164
  function passArray8ToWasm0(arg, malloc) {
150
165
  const ptr = malloc(arg.length * 1, 1) >>> 0;
151
166
  getUint8ArrayMemory0().set(arg, ptr / 1);
@@ -160,6 +175,16 @@ function passArrayF32ToWasm0(arg, malloc) {
160
175
  return ptr;
161
176
  }
162
177
 
178
+ function passArrayJsValueToWasm0(array, malloc) {
179
+ const ptr = malloc(array.length * 4, 4) >>> 0;
180
+ const mem = getDataViewMemory0();
181
+ for (let i = 0; i < array.length; i++) {
182
+ mem.setUint32(ptr + 4 * i, addHeapObject(array[i]), true);
183
+ }
184
+ WASM_VECTOR_LEN = array.length;
185
+ return ptr;
186
+ }
187
+
163
188
  function passStringToWasm0(arg, malloc, realloc) {
164
189
  if (realloc === undefined) {
165
190
  const buf = cachedTextEncoder.encode(arg);
@@ -831,6 +856,31 @@ class WasmPdf {
831
856
  const ret = wasm.wasmpdf_size(this.__wbg_ptr);
832
857
  return ret >>> 0;
833
858
  }
859
+ /**
860
+ * Merge multiple PDF byte arrays into a single PDF.
861
+ *
862
+ * @param pdfs - Array of Uint8Array, each containing a PDF
863
+ * @returns WasmPdf containing all pages
864
+ * @param {Uint8Array[]} pdfs
865
+ * @returns {WasmPdf}
866
+ */
867
+ static merge(pdfs) {
868
+ try {
869
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
870
+ const ptr0 = passArrayJsValueToWasm0(pdfs, wasm.__wbindgen_export);
871
+ const len0 = WASM_VECTOR_LEN;
872
+ wasm.wasmpdf_merge(retptr, ptr0, len0);
873
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
874
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
875
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
876
+ if (r2) {
877
+ throw takeObject(r1);
878
+ }
879
+ return WasmPdf.__wrap(r0);
880
+ } finally {
881
+ wasm.__wbindgen_add_to_stack_pointer(16);
882
+ }
883
+ }
834
884
  /**
835
885
  * Get the PDF as a Uint8Array.
836
886
  * @returns {Uint8Array}
@@ -1021,6 +1071,23 @@ class WasmPdfDocument {
1021
1071
  wasm.__wbindgen_add_to_stack_pointer(16);
1022
1072
  }
1023
1073
  }
1074
+ /**
1075
+ * Delete a page by index (0-based).
1076
+ * @param {number} index
1077
+ */
1078
+ deletePage(index) {
1079
+ try {
1080
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1081
+ wasm.wasmpdfdocument_deletePage(retptr, this.__wbg_ptr, index);
1082
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1083
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1084
+ if (r1) {
1085
+ throw takeObject(r0);
1086
+ }
1087
+ } finally {
1088
+ wasm.__wbindgen_add_to_stack_pointer(16);
1089
+ }
1090
+ }
1024
1091
  /**
1025
1092
  * Deprecated: Use eraseFooter instead.
1026
1093
  * @param {number} page_index
@@ -1535,6 +1602,31 @@ class WasmPdfDocument {
1535
1602
  wasm.__wbindgen_add_to_stack_pointer(16);
1536
1603
  }
1537
1604
  }
1605
+ /**
1606
+ * Extract specific pages to a new PDF (returns bytes).
1607
+ * @param {Uint32Array} pages
1608
+ * @returns {Uint8Array}
1609
+ */
1610
+ extractPages(pages) {
1611
+ try {
1612
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1613
+ const ptr0 = passArray32ToWasm0(pages, wasm.__wbindgen_export);
1614
+ const len0 = WASM_VECTOR_LEN;
1615
+ wasm.wasmpdfdocument_extractPages(retptr, this.__wbg_ptr, ptr0, len0);
1616
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1617
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1618
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1619
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
1620
+ if (r3) {
1621
+ throw takeObject(r2);
1622
+ }
1623
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
1624
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
1625
+ return v2;
1626
+ } finally {
1627
+ wasm.__wbindgen_add_to_stack_pointer(16);
1628
+ }
1629
+ }
1538
1630
  /**
1539
1631
  * Extract vector paths (lines, curves, shapes) from a page.
1540
1632
  *
@@ -1702,7 +1794,8 @@ class WasmPdfDocument {
1702
1794
  }
1703
1795
  }
1704
1796
  /**
1705
- * Save all edits and return the resulting PDF as bytes.
1797
+ * Save the modified PDF and return as bytes.
1798
+ * `saveToBytes()` is the original method; `save()` is a convenience alias.
1706
1799
  *
1707
1800
  * @returns Uint8Array containing the modified PDF
1708
1801
  * @returns {Uint8Array}
@@ -1710,7 +1803,7 @@ class WasmPdfDocument {
1710
1803
  saveToBytes() {
1711
1804
  try {
1712
1805
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1713
- wasm.wasmpdfdocument_saveToBytes(retptr, this.__wbg_ptr);
1806
+ wasm.wasmpdfdocument_save(retptr, this.__wbg_ptr);
1714
1807
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1715
1808
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1716
1809
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -1882,6 +1975,28 @@ class WasmPdfDocument {
1882
1975
  wasm.__wbindgen_add_to_stack_pointer(16);
1883
1976
  }
1884
1977
  }
1978
+ /**
1979
+ * Validate PDF/A compliance. Level: "1b", "2b", etc.
1980
+ * @param {string} level
1981
+ * @returns {any}
1982
+ */
1983
+ validatePdfA(level) {
1984
+ try {
1985
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
1986
+ const ptr0 = passStringToWasm0(level, wasm.__wbindgen_export, wasm.__wbindgen_export2);
1987
+ const len0 = WASM_VECTOR_LEN;
1988
+ wasm.wasmpdfdocument_validatePdfA(retptr, this.__wbg_ptr, ptr0, len0);
1989
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
1990
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
1991
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
1992
+ if (r2) {
1993
+ throw takeObject(r1);
1994
+ }
1995
+ return takeObject(r0);
1996
+ } finally {
1997
+ wasm.__wbindgen_add_to_stack_pointer(16);
1998
+ }
1999
+ }
1885
2000
  /**
1886
2001
  * Erase both header and footer content.
1887
2002
  *
@@ -2506,16 +2621,20 @@ class WasmPdfDocument {
2506
2621
  /**
2507
2622
  * Load a PDF document from raw bytes.
2508
2623
  *
2509
- * @param data - The PDF file contents as a Uint8Array
2624
+ * @param data - PDF file contents as Uint8Array
2625
+ * @param password - Optional password for encrypted PDFs
2510
2626
  * @throws Error if the PDF is invalid or cannot be parsed
2511
2627
  * @param {Uint8Array} data
2628
+ * @param {string | null} [password]
2512
2629
  */
2513
- constructor(data) {
2630
+ constructor(data, password) {
2514
2631
  try {
2515
2632
  const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2516
2633
  const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
2517
2634
  const len0 = WASM_VECTOR_LEN;
2518
- wasm.wasmpdfdocument_new(retptr, ptr0, len0);
2635
+ var ptr1 = isLikeNone(password) ? 0 : passStringToWasm0(password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
2636
+ var len1 = WASM_VECTOR_LEN;
2637
+ wasm.wasmpdfdocument_new(retptr, ptr0, len0, ptr1, len1);
2519
2638
  var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2520
2639
  var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2521
2640
  var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
@@ -2529,6 +2648,30 @@ class WasmPdfDocument {
2529
2648
  wasm.__wbindgen_add_to_stack_pointer(16);
2530
2649
  }
2531
2650
  }
2651
+ /**
2652
+ * Save all edits and return the resulting PDF as bytes.
2653
+ *
2654
+ * @returns Uint8Array containing the modified PDF
2655
+ * @returns {Uint8Array}
2656
+ */
2657
+ save() {
2658
+ try {
2659
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
2660
+ wasm.wasmpdfdocument_save(retptr, this.__wbg_ptr);
2661
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
2662
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
2663
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
2664
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
2665
+ if (r3) {
2666
+ throw takeObject(r2);
2667
+ }
2668
+ var v1 = getArrayU8FromWasm0(r0, r1).slice();
2669
+ wasm.__wbindgen_export4(r0, r1 * 1, 1);
2670
+ return v1;
2671
+ } finally {
2672
+ wasm.__wbindgen_add_to_stack_pointer(16);
2673
+ }
2674
+ }
2532
2675
  /**
2533
2676
  * Search for text across all pages.
2534
2677
  *
package/pdf_oxide_bg.wasm CHANGED
Binary file
@@ -28,6 +28,7 @@ export const wasmpdf_fromImageBytes: (a: number, b: number, c: number) => void;
28
28
  export const wasmpdf_fromMarkdown: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
29
29
  export const wasmpdf_fromMultipleImageBytes: (a: number, b: number) => void;
30
30
  export const wasmpdf_fromText: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
31
+ export const wasmpdf_merge: (a: number, b: number, c: number) => void;
31
32
  export const wasmpdf_size: (a: number) => number;
32
33
  export const wasmpdf_toBytes: (a: number, b: number) => void;
33
34
  export const wasmpdfdocument_applyAllRedactions: (a: number, b: number) => void;
@@ -35,6 +36,7 @@ export const wasmpdfdocument_applyPageRedactions: (a: number, b: number, c: numb
35
36
  export const wasmpdfdocument_authenticate: (a: number, b: number, c: number, d: number) => void;
36
37
  export const wasmpdfdocument_clearEraseRegions: (a: number, b: number, c: number) => void;
37
38
  export const wasmpdfdocument_cropMargins: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
39
+ export const wasmpdfdocument_deletePage: (a: number, b: number, c: number) => void;
38
40
  export const wasmpdfdocument_editFooter: (a: number, b: number, c: number) => void;
39
41
  export const wasmpdfdocument_editHeader: (a: number, b: number, c: number) => void;
40
42
  export const wasmpdfdocument_embedFile: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
@@ -49,6 +51,7 @@ export const wasmpdfdocument_extractChars: (a: number, b: number, c: number, d:
49
51
  export const wasmpdfdocument_extractImageBytes: (a: number, b: number, c: number) => void;
50
52
  export const wasmpdfdocument_extractImages: (a: number, b: number, c: number, d: number, e: number) => void;
51
53
  export const wasmpdfdocument_extractLines: (a: number, b: number, c: number, d: number, e: number) => void;
54
+ export const wasmpdfdocument_extractPages: (a: number, b: number, c: number, d: number) => void;
52
55
  export const wasmpdfdocument_extractPaths: (a: number, b: number, c: number, d: number, e: number) => void;
53
56
  export const wasmpdfdocument_extractRects: (a: number, b: number, c: number, d: number, e: number) => void;
54
57
  export const wasmpdfdocument_extractSpans: (a: number, b: number, c: number, d: number, e: number) => void;
@@ -68,7 +71,7 @@ export const wasmpdfdocument_getOutline: (a: number, b: number) => void;
68
71
  export const wasmpdfdocument_hasStructureTree: (a: number, b: number) => void;
69
72
  export const wasmpdfdocument_hasXfa: (a: number, b: number) => void;
70
73
  export const wasmpdfdocument_mergeFrom: (a: number, b: number, c: number, d: number) => void;
71
- export const wasmpdfdocument_new: (a: number, b: number, c: number) => void;
74
+ export const wasmpdfdocument_new: (a: number, b: number, c: number, d: number, e: number) => void;
72
75
  export const wasmpdfdocument_pageCount: (a: number, b: number) => void;
73
76
  export const wasmpdfdocument_pageCropBox: (a: number, b: number, c: number) => void;
74
77
  export const wasmpdfdocument_pageImages: (a: number, b: number, c: number) => void;
@@ -82,8 +85,8 @@ export const wasmpdfdocument_repositionImage: (a: number, b: number, c: number,
82
85
  export const wasmpdfdocument_resizeImage: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
83
86
  export const wasmpdfdocument_rotateAllPages: (a: number, b: number, c: number) => void;
84
87
  export const wasmpdfdocument_rotatePage: (a: number, b: number, c: number, d: number) => void;
88
+ export const wasmpdfdocument_save: (a: number, b: number) => void;
85
89
  export const wasmpdfdocument_saveEncryptedToBytes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => void;
86
- export const wasmpdfdocument_saveToBytes: (a: number, b: number) => void;
87
90
  export const wasmpdfdocument_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
88
91
  export const wasmpdfdocument_searchPage: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
89
92
  export const wasmpdfdocument_setAuthor: (a: number, b: number, c: number, d: number) => void;
@@ -101,6 +104,7 @@ export const wasmpdfdocument_toMarkdown: (a: number, b: number, c: number, d: nu
101
104
  export const wasmpdfdocument_toMarkdownAll: (a: number, b: number, c: number, d: number, e: number) => void;
102
105
  export const wasmpdfdocument_toPlainText: (a: number, b: number, c: number) => void;
103
106
  export const wasmpdfdocument_toPlainTextAll: (a: number, b: number) => void;
107
+ export const wasmpdfdocument_validatePdfA: (a: number, b: number, c: number, d: number) => void;
104
108
  export const wasmpdfdocument_version: (a: number, b: number) => void;
105
109
  export const wasmpdfdocument_within: (a: number, b: number, c: number, d: number, e: number) => void;
106
110
  export const wasmpdfdocument_xmpMetadata: (a: number, b: number) => void;
@@ -120,6 +124,7 @@ export const wasmfooter_right: (a: number, b: number) => number;
120
124
  export const wasmheader_center: (a: number, b: number) => number;
121
125
  export const wasmheader_left: (a: number, b: number) => number;
122
126
  export const wasmheader_right: (a: number, b: number) => number;
127
+ export const wasmpdfdocument_saveToBytes: (a: number, b: number) => void;
123
128
  export const wasmfooter_new: () => number;
124
129
  export const wasmheader_new: () => number;
125
130
  export const __wbg_wasmocrengine_free: (a: number, b: number) => void;