pdf-oxide 0.3.24 → 0.3.28

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 (271) hide show
  1. package/lib/builders/annotation-builder.d.ts +199 -0
  2. package/lib/builders/annotation-builder.d.ts.map +1 -0
  3. package/lib/builders/annotation-builder.js +318 -0
  4. package/lib/builders/annotation-builder.js.map +1 -0
  5. package/lib/builders/conversion-options-builder.d.ts +107 -0
  6. package/lib/builders/conversion-options-builder.d.ts.map +1 -0
  7. package/lib/builders/conversion-options-builder.js +215 -0
  8. package/lib/builders/conversion-options-builder.js.map +1 -0
  9. package/{src/builders/index.ts → lib/builders/index.d.ts} +1 -1
  10. package/lib/builders/index.d.ts.map +1 -0
  11. package/lib/builders/index.js +12 -0
  12. package/lib/builders/index.js.map +1 -0
  13. package/lib/builders/metadata-builder.d.ts +202 -0
  14. package/lib/builders/metadata-builder.d.ts.map +1 -0
  15. package/lib/builders/metadata-builder.js +286 -0
  16. package/lib/builders/metadata-builder.js.map +1 -0
  17. package/lib/builders/pdf-builder.d.ts +215 -0
  18. package/lib/builders/pdf-builder.d.ts.map +1 -0
  19. package/lib/builders/pdf-builder.js +339 -0
  20. package/lib/builders/pdf-builder.js.map +1 -0
  21. package/lib/builders/search-options-builder.d.ts +74 -0
  22. package/lib/builders/search-options-builder.d.ts.map +1 -0
  23. package/lib/builders/search-options-builder.js +130 -0
  24. package/lib/builders/search-options-builder.js.map +1 -0
  25. package/lib/document-editor-manager.d.ts +140 -0
  26. package/lib/document-editor-manager.d.ts.map +1 -0
  27. package/lib/document-editor-manager.js +257 -0
  28. package/lib/document-editor-manager.js.map +1 -0
  29. package/lib/errors.d.ts +383 -0
  30. package/lib/errors.d.ts.map +1 -0
  31. package/lib/errors.js +1117 -0
  32. package/lib/errors.js.map +1 -0
  33. package/lib/form-field-manager.d.ts +300 -0
  34. package/lib/form-field-manager.d.ts.map +1 -0
  35. package/lib/form-field-manager.js +567 -0
  36. package/lib/form-field-manager.js.map +1 -0
  37. package/lib/hybrid-ml-manager.d.ts +143 -0
  38. package/lib/hybrid-ml-manager.d.ts.map +1 -0
  39. package/lib/hybrid-ml-manager.js +209 -0
  40. package/lib/hybrid-ml-manager.js.map +1 -0
  41. package/lib/index.d.ts +23 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +280 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/managers/accessibility-manager.d.ts +149 -0
  46. package/lib/managers/accessibility-manager.d.ts.map +1 -0
  47. package/lib/managers/accessibility-manager.js +224 -0
  48. package/lib/managers/accessibility-manager.js.map +1 -0
  49. package/lib/managers/annotation-manager.d.ts +220 -0
  50. package/lib/managers/annotation-manager.d.ts.map +1 -0
  51. package/lib/managers/annotation-manager.js +360 -0
  52. package/lib/managers/annotation-manager.js.map +1 -0
  53. package/lib/managers/barcode-manager.d.ts +80 -0
  54. package/lib/managers/barcode-manager.d.ts.map +1 -0
  55. package/lib/managers/barcode-manager.js +226 -0
  56. package/lib/managers/barcode-manager.js.map +1 -0
  57. package/lib/managers/batch-manager.d.ts +186 -0
  58. package/lib/managers/batch-manager.d.ts.map +1 -0
  59. package/lib/managers/batch-manager.js +389 -0
  60. package/lib/managers/batch-manager.js.map +1 -0
  61. package/lib/managers/cache-manager.d.ts +182 -0
  62. package/lib/managers/cache-manager.d.ts.map +1 -0
  63. package/lib/managers/cache-manager.js +387 -0
  64. package/lib/managers/cache-manager.js.map +1 -0
  65. package/lib/managers/compliance-manager.d.ts +104 -0
  66. package/lib/managers/compliance-manager.d.ts.map +1 -0
  67. package/lib/managers/compliance-manager.js +415 -0
  68. package/lib/managers/compliance-manager.js.map +1 -0
  69. package/lib/managers/content-manager.d.ts +121 -0
  70. package/lib/managers/content-manager.d.ts.map +1 -0
  71. package/lib/managers/content-manager.js +295 -0
  72. package/lib/managers/content-manager.js.map +1 -0
  73. package/lib/managers/document-utility-manager.d.ts +370 -0
  74. package/lib/managers/document-utility-manager.d.ts.map +1 -0
  75. package/lib/managers/document-utility-manager.js +731 -0
  76. package/lib/managers/document-utility-manager.js.map +1 -0
  77. package/lib/managers/dom-pdf-creator.d.ts +105 -0
  78. package/lib/managers/dom-pdf-creator.d.ts.map +1 -0
  79. package/lib/managers/dom-pdf-creator.js +300 -0
  80. package/lib/managers/dom-pdf-creator.js.map +1 -0
  81. package/lib/managers/editing-manager.d.ts +249 -0
  82. package/lib/managers/editing-manager.d.ts.map +1 -0
  83. package/lib/managers/editing-manager.js +388 -0
  84. package/lib/managers/editing-manager.js.map +1 -0
  85. package/lib/managers/enterprise-manager.d.ts +193 -0
  86. package/lib/managers/enterprise-manager.d.ts.map +1 -0
  87. package/lib/managers/enterprise-manager.js +305 -0
  88. package/lib/managers/enterprise-manager.js.map +1 -0
  89. package/lib/managers/extended-managers.d.ts +123 -0
  90. package/lib/managers/extended-managers.d.ts.map +1 -0
  91. package/lib/managers/extended-managers.js +658 -0
  92. package/lib/managers/extended-managers.js.map +1 -0
  93. package/lib/managers/extraction-manager.d.ts +247 -0
  94. package/lib/managers/extraction-manager.d.ts.map +1 -0
  95. package/lib/managers/extraction-manager.js +478 -0
  96. package/lib/managers/extraction-manager.js.map +1 -0
  97. package/lib/managers/final-utilities.d.ts +128 -0
  98. package/lib/managers/final-utilities.d.ts.map +1 -0
  99. package/lib/managers/final-utilities.js +653 -0
  100. package/lib/managers/final-utilities.js.map +1 -0
  101. package/lib/managers/hybrid-ml-advanced.d.ts +137 -0
  102. package/lib/managers/hybrid-ml-advanced.d.ts.map +1 -0
  103. package/lib/managers/hybrid-ml-advanced.js +707 -0
  104. package/lib/managers/hybrid-ml-advanced.js.map +1 -0
  105. package/lib/managers/index.d.ts +65 -0
  106. package/lib/managers/index.d.ts.map +1 -0
  107. package/lib/managers/index.js +70 -0
  108. package/lib/managers/index.js.map +1 -0
  109. package/lib/managers/layer-manager.d.ts +204 -0
  110. package/lib/managers/layer-manager.d.ts.map +1 -0
  111. package/lib/managers/layer-manager.js +403 -0
  112. package/lib/managers/layer-manager.js.map +1 -0
  113. package/lib/managers/metadata-manager.d.ts +149 -0
  114. package/lib/managers/metadata-manager.d.ts.map +1 -0
  115. package/lib/managers/metadata-manager.js +281 -0
  116. package/lib/managers/metadata-manager.js.map +1 -0
  117. package/lib/managers/ocr-manager.d.ts +195 -0
  118. package/lib/managers/ocr-manager.d.ts.map +1 -0
  119. package/lib/managers/ocr-manager.js +583 -0
  120. package/lib/managers/ocr-manager.js.map +1 -0
  121. package/lib/managers/optimization-manager.d.ts +103 -0
  122. package/lib/managers/optimization-manager.d.ts.map +1 -0
  123. package/lib/managers/optimization-manager.js +194 -0
  124. package/lib/managers/optimization-manager.js.map +1 -0
  125. package/lib/managers/outline-manager.d.ts +102 -0
  126. package/lib/managers/outline-manager.d.ts.map +1 -0
  127. package/lib/managers/outline-manager.js +170 -0
  128. package/lib/managers/outline-manager.js.map +1 -0
  129. package/lib/managers/page-manager.d.ts +143 -0
  130. package/lib/managers/page-manager.d.ts.map +1 -0
  131. package/lib/managers/page-manager.js +237 -0
  132. package/lib/managers/page-manager.js.map +1 -0
  133. package/lib/managers/pattern-detection.d.ts +170 -0
  134. package/lib/managers/pattern-detection.d.ts.map +1 -0
  135. package/lib/managers/pattern-detection.js +325 -0
  136. package/lib/managers/pattern-detection.js.map +1 -0
  137. package/lib/managers/rendering-manager.d.ts +354 -0
  138. package/lib/managers/rendering-manager.d.ts.map +1 -0
  139. package/lib/managers/rendering-manager.js +680 -0
  140. package/lib/managers/rendering-manager.js.map +1 -0
  141. package/lib/managers/search-manager.d.ts +236 -0
  142. package/lib/managers/search-manager.d.ts.map +1 -0
  143. package/lib/managers/search-manager.js +330 -0
  144. package/lib/managers/search-manager.js.map +1 -0
  145. package/lib/managers/security-manager.d.ts +162 -0
  146. package/lib/managers/security-manager.d.ts.map +1 -0
  147. package/lib/managers/security-manager.js +293 -0
  148. package/lib/managers/security-manager.js.map +1 -0
  149. package/lib/managers/signature-manager.d.ts +725 -0
  150. package/lib/managers/signature-manager.d.ts.map +1 -0
  151. package/lib/managers/signature-manager.js +1365 -0
  152. package/lib/managers/signature-manager.js.map +1 -0
  153. package/lib/managers/streams.d.ts +263 -0
  154. package/lib/managers/streams.d.ts.map +1 -0
  155. package/lib/managers/streams.js +472 -0
  156. package/lib/managers/streams.js.map +1 -0
  157. package/lib/managers/xfa-manager.d.ts +228 -0
  158. package/lib/managers/xfa-manager.d.ts.map +1 -0
  159. package/lib/managers/xfa-manager.js +490 -0
  160. package/lib/managers/xfa-manager.js.map +1 -0
  161. package/lib/pdf-creator-manager.d.ts +201 -0
  162. package/lib/pdf-creator-manager.d.ts.map +1 -0
  163. package/lib/pdf-creator-manager.js +379 -0
  164. package/lib/pdf-creator-manager.js.map +1 -0
  165. package/lib/properties.d.ts +80 -0
  166. package/lib/properties.d.ts.map +1 -0
  167. package/lib/properties.js +455 -0
  168. package/lib/properties.js.map +1 -0
  169. package/lib/result-accessors-manager.d.ts +347 -0
  170. package/lib/result-accessors-manager.d.ts.map +1 -0
  171. package/lib/result-accessors-manager.js +705 -0
  172. package/lib/result-accessors-manager.js.map +1 -0
  173. package/lib/thumbnail-manager.d.ts +122 -0
  174. package/lib/thumbnail-manager.d.ts.map +1 -0
  175. package/lib/thumbnail-manager.js +206 -0
  176. package/lib/thumbnail-manager.js.map +1 -0
  177. package/lib/types/common.d.ts +93 -0
  178. package/lib/types/common.d.ts.map +1 -0
  179. package/lib/types/common.js +5 -0
  180. package/lib/types/common.js.map +1 -0
  181. package/lib/types/document-types.d.ts +353 -0
  182. package/lib/types/document-types.d.ts.map +1 -0
  183. package/lib/types/document-types.js +83 -0
  184. package/lib/types/document-types.js.map +1 -0
  185. package/{src/types/index.ts → lib/types/index.d.ts} +1 -1
  186. package/lib/types/index.d.ts.map +1 -0
  187. package/lib/types/index.js +6 -0
  188. package/lib/types/index.js.map +1 -0
  189. package/lib/types/manager-types.d.ts +180 -0
  190. package/lib/types/manager-types.d.ts.map +1 -0
  191. package/lib/types/manager-types.js +99 -0
  192. package/lib/types/manager-types.js.map +1 -0
  193. package/lib/types/native-bindings.d.ts +440 -0
  194. package/lib/types/native-bindings.d.ts.map +1 -0
  195. package/lib/types/native-bindings.js +8 -0
  196. package/lib/types/native-bindings.js.map +1 -0
  197. package/{src/workers/index.ts → lib/workers/index.d.ts} +1 -1
  198. package/lib/workers/index.d.ts.map +1 -0
  199. package/lib/workers/index.js +6 -0
  200. package/lib/workers/index.js.map +1 -0
  201. package/lib/workers/pool.d.ts +65 -0
  202. package/lib/workers/pool.d.ts.map +1 -0
  203. package/lib/workers/pool.js +195 -0
  204. package/lib/workers/pool.js.map +1 -0
  205. package/lib/workers/worker.d.ts +6 -0
  206. package/lib/workers/worker.d.ts.map +1 -0
  207. package/lib/workers/worker.js +100 -0
  208. package/lib/workers/worker.js.map +1 -0
  209. package/package.json +12 -22
  210. package/prebuilds/darwin-arm64/pdf_oxide.node +0 -0
  211. package/prebuilds/darwin-x64/pdf_oxide.node +0 -0
  212. package/prebuilds/linux-arm64/pdf_oxide.node +0 -0
  213. package/prebuilds/linux-x64/pdf_oxide.node +0 -0
  214. package/prebuilds/win32-x64/pdf_oxide.node +0 -0
  215. package/binding.gyp +0 -35
  216. package/src/builders/annotation-builder.ts +0 -367
  217. package/src/builders/conversion-options-builder.ts +0 -257
  218. package/src/builders/metadata-builder.ts +0 -317
  219. package/src/builders/pdf-builder.ts +0 -386
  220. package/src/builders/search-options-builder.ts +0 -151
  221. package/src/document-editor-manager.ts +0 -318
  222. package/src/errors.ts +0 -1629
  223. package/src/form-field-manager.ts +0 -666
  224. package/src/hybrid-ml-manager.ts +0 -283
  225. package/src/index.ts +0 -453
  226. package/src/managers/accessibility-manager.ts +0 -338
  227. package/src/managers/annotation-manager.ts +0 -439
  228. package/src/managers/barcode-manager.ts +0 -235
  229. package/src/managers/batch-manager.ts +0 -533
  230. package/src/managers/cache-manager.ts +0 -486
  231. package/src/managers/compliance-manager.ts +0 -375
  232. package/src/managers/content-manager.ts +0 -339
  233. package/src/managers/document-utility-manager.ts +0 -922
  234. package/src/managers/dom-pdf-creator.ts +0 -365
  235. package/src/managers/editing-manager.ts +0 -514
  236. package/src/managers/enterprise-manager.ts +0 -478
  237. package/src/managers/extended-managers.ts +0 -437
  238. package/src/managers/extraction-manager.ts +0 -583
  239. package/src/managers/final-utilities.ts +0 -429
  240. package/src/managers/hybrid-ml-advanced.ts +0 -479
  241. package/src/managers/index.ts +0 -239
  242. package/src/managers/layer-manager.ts +0 -500
  243. package/src/managers/metadata-manager.ts +0 -303
  244. package/src/managers/ocr-manager.ts +0 -756
  245. package/src/managers/optimization-manager.ts +0 -262
  246. package/src/managers/outline-manager.ts +0 -196
  247. package/src/managers/page-manager.ts +0 -289
  248. package/src/managers/pattern-detection.ts +0 -440
  249. package/src/managers/rendering-manager.ts +0 -863
  250. package/src/managers/search-manager.ts +0 -385
  251. package/src/managers/security-manager.ts +0 -345
  252. package/src/managers/signature-manager.ts +0 -1664
  253. package/src/managers/streams.ts +0 -618
  254. package/src/managers/xfa-manager.ts +0 -500
  255. package/src/pdf-creator-manager.ts +0 -494
  256. package/src/properties.ts +0 -522
  257. package/src/result-accessors-manager.ts +0 -867
  258. package/src/tests/advanced-features.test.ts +0 -414
  259. package/src/tests/advanced.test.ts +0 -266
  260. package/src/tests/extended-managers.test.ts +0 -316
  261. package/src/tests/final-utilities.test.ts +0 -455
  262. package/src/tests/foundation.test.ts +0 -315
  263. package/src/tests/high-demand.test.ts +0 -257
  264. package/src/tests/specialized.test.ts +0 -97
  265. package/src/thumbnail-manager.ts +0 -272
  266. package/src/types/common.ts +0 -142
  267. package/src/types/document-types.ts +0 -457
  268. package/src/types/manager-types.ts +0 -284
  269. package/src/types/native-bindings.ts +0 -517
  270. package/src/workers/pool.ts +0 -274
  271. package/src/workers/worker.ts +0 -131
@@ -0,0 +1,249 @@
1
+ /**
2
+ * EditingManager - Document Editing Manager for redaction and flattening operations
3
+ *
4
+ * Provides PDF document editing capabilities:
5
+ * - Content redaction (add, apply, count redaction areas)
6
+ * - Metadata scrubbing (remove Info, XMP, JavaScript)
7
+ * - Form flattening (all pages or single page)
8
+ * - Annotation flattening (all pages or single page)
9
+ *
10
+ * Uses native FFI functions:
11
+ * - pdf_redaction_add, pdf_redaction_apply, pdf_redaction_scrub_metadata, pdf_redaction_count
12
+ * - pdf_document_editor_flatten_forms, pdf_document_editor_flatten_forms_page
13
+ * - pdf_document_editor_flatten_annotations, pdf_document_editor_flatten_annotations_page
14
+ */
15
+ import { EventEmitter } from 'events';
16
+ /**
17
+ * Rectangle coordinates for a redaction area.
18
+ */
19
+ export interface RedactionRect {
20
+ x1: number;
21
+ y1: number;
22
+ x2: number;
23
+ y2: number;
24
+ }
25
+ /**
26
+ * RGB color specification (values 0.0-1.0).
27
+ */
28
+ export interface RgbColor {
29
+ r: number;
30
+ g: number;
31
+ b: number;
32
+ }
33
+ /**
34
+ * Options for applying redactions.
35
+ */
36
+ export interface ApplyRedactionsOptions {
37
+ /** Whether to also scrub document metadata when applying redactions. */
38
+ scrubMetadata?: boolean;
39
+ /** Default fill color for redacted areas. Defaults to black (0, 0, 0). */
40
+ fillColor?: RgbColor;
41
+ }
42
+ /**
43
+ * Options for scrubbing document metadata.
44
+ */
45
+ export interface ScrubMetadataOptions {
46
+ /** Remove /Info dictionary entries (Title, Author, etc.). Default: true */
47
+ removeInfo?: boolean;
48
+ /** Remove XMP metadata stream. Default: true */
49
+ removeXmp?: boolean;
50
+ /** Remove JavaScript actions. Default: true */
51
+ removeJs?: boolean;
52
+ }
53
+ /**
54
+ * Manages document editing operations including redaction and flattening.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * import { EditingManager } from 'pdf_oxide';
59
+ *
60
+ * const editor = new EditingManager(document);
61
+ *
62
+ * // Add redaction areas
63
+ * editor.addRedaction(0, { x1: 100, y1: 200, x2: 300, y2: 250 });
64
+ * editor.addRedaction(0, { x1: 50, y1: 400, x2: 200, y2: 450 }, { r: 0, g: 0, b: 0 });
65
+ *
66
+ * // Apply all queued redactions
67
+ * const count = editor.applyRedactions({ scrubMetadata: true });
68
+ * console.log(`Applied ${count} redactions`);
69
+ *
70
+ * // Flatten forms and annotations
71
+ * editor.flattenForms();
72
+ * editor.flattenAnnotations();
73
+ * ```
74
+ */
75
+ export declare class EditingManager extends EventEmitter {
76
+ private document;
77
+ private native;
78
+ constructor(document: any);
79
+ /**
80
+ * Adds a redaction area to the document.
81
+ *
82
+ * Queues a rectangular region on a page for redaction. The content within
83
+ * the rectangle will be permanently removed when {@link applyRedactions}
84
+ * is called.
85
+ *
86
+ * @param page - Zero-based page index
87
+ * @param rect - Rectangle coordinates defining the redaction area
88
+ * @param color - Optional fill color for the redacted area (defaults to black)
89
+ * @throws {PdfException} If the document handle is invalid or page is out of range
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * // Redact a region with default black fill
94
+ * editor.addRedaction(0, { x1: 100, y1: 200, x2: 300, y2: 250 });
95
+ *
96
+ * // Redact with a custom gray fill
97
+ * editor.addRedaction(1, { x1: 50, y1: 100, x2: 200, y2: 150 }, { r: 0.5, g: 0.5, b: 0.5 });
98
+ * ```
99
+ */
100
+ addRedaction(page: number, rect: RedactionRect, color?: RgbColor): void;
101
+ /**
102
+ * Applies all queued redactions to the document.
103
+ *
104
+ * Permanently removes content within all previously added redaction
105
+ * rectangles. Optionally scrubs document metadata and applies a
106
+ * fill color overlay.
107
+ *
108
+ * @param options - Options controlling redaction behavior
109
+ * @returns Number of redactions applied
110
+ * @throws {PdfException} If redaction application fails
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * // Apply with metadata scrubbing
115
+ * const count = editor.applyRedactions({ scrubMetadata: true });
116
+ *
117
+ * // Apply with custom fill color
118
+ * const count = editor.applyRedactions({
119
+ * fillColor: { r: 1.0, g: 1.0, b: 1.0 }
120
+ * });
121
+ * ```
122
+ */
123
+ applyRedactions(options?: ApplyRedactionsOptions): number;
124
+ /**
125
+ * Scrubs sensitive metadata from the document.
126
+ *
127
+ * Removes document metadata fields that may contain sensitive information,
128
+ * such as author names, creation tools, and JavaScript.
129
+ *
130
+ * @param options - Options controlling which metadata to remove
131
+ * @throws {PdfException} If metadata scrubbing fails
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * // Remove all metadata
136
+ * editor.scrubMetadata();
137
+ *
138
+ * // Remove only Info dictionary and JavaScript
139
+ * editor.scrubMetadata({ removeInfo: true, removeXmp: false, removeJs: true });
140
+ * ```
141
+ */
142
+ scrubMetadata(options?: ScrubMetadataOptions): void;
143
+ /**
144
+ * Gets the number of queued (pending) redaction areas.
145
+ *
146
+ * @returns Number of redaction areas queued for application
147
+ * @throws {PdfException} If the document handle is invalid
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * editor.addRedaction(0, { x1: 10, y1: 20, x2: 100, y2: 50 });
152
+ * editor.addRedaction(1, { x1: 30, y1: 40, x2: 200, y2: 80 });
153
+ * console.log(editor.getRedactionCount()); // 2
154
+ * ```
155
+ */
156
+ getRedactionCount(): number;
157
+ /**
158
+ * Flattens all form fields in the document.
159
+ *
160
+ * Renders form field widgets into page content and removes the AcroForm
161
+ * dictionary. After flattening, form fields become static content and
162
+ * can no longer be edited interactively.
163
+ *
164
+ * @throws {PdfException} If flattening fails
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * editor.flattenForms();
169
+ * ```
170
+ */
171
+ flattenForms(): void;
172
+ /**
173
+ * Flattens form fields on a specific page.
174
+ *
175
+ * Only flattens form field widgets located on the specified page,
176
+ * leaving form fields on other pages editable.
177
+ *
178
+ * @param page - Zero-based page index
179
+ * @throws {PdfException} If flattening fails or page is out of range
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * // Flatten forms on first page only
184
+ * editor.flattenFormsPage(0);
185
+ * ```
186
+ */
187
+ flattenFormsPage(page: number): void;
188
+ /**
189
+ * Flattens all annotations in the document.
190
+ *
191
+ * Renders annotations into page content and removes them from
192
+ * annotation arrays. After flattening, annotations become static
193
+ * content and can no longer be edited or deleted.
194
+ *
195
+ * @throws {PdfException} If flattening fails
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * editor.flattenAnnotations();
200
+ * ```
201
+ */
202
+ flattenAnnotations(): void;
203
+ /**
204
+ * Flattens annotations on a specific page.
205
+ *
206
+ * Only flattens annotations located on the specified page,
207
+ * leaving annotations on other pages editable.
208
+ *
209
+ * @param page - Zero-based page index
210
+ * @throws {PdfException} If flattening fails or page is out of range
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * // Flatten annotations on page 2
215
+ * editor.flattenAnnotationsPage(1);
216
+ * ```
217
+ */
218
+ flattenAnnotationsPage(page: number): void;
219
+ /**
220
+ * Import form data from a file (FDF or XFDF, auto-detected by extension).
221
+ * @param filePath Path to the FDF or XFDF file
222
+ * @returns Number of fields imported
223
+ */
224
+ importFormDataFromFile(filePath: string): number;
225
+ /**
226
+ * Import FDF form data from in-memory bytes.
227
+ * @param data FDF data bytes
228
+ * @returns Number of fields imported
229
+ */
230
+ importFdfBytes(data: Buffer): number;
231
+ /**
232
+ * Import XFDF form data from in-memory bytes.
233
+ * @param data XFDF data bytes
234
+ * @returns Number of fields imported
235
+ */
236
+ importXfdfBytes(data: Buffer): number;
237
+ /**
238
+ * Export form data to in-memory bytes.
239
+ * @param format 0 for FDF, 1 for XFDF
240
+ * @returns Exported form data bytes
241
+ */
242
+ exportFormDataToBytes(format?: 0 | 1): Buffer;
243
+ /**
244
+ * Releases resources held by this manager.
245
+ */
246
+ destroy(): void;
247
+ }
248
+ export default EditingManager;
249
+ //# sourceMappingURL=editing-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editing-manager.d.ts","sourceRoot":"","sources":["../../src/managers/editing-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,MAAM,CAAM;gBAER,QAAQ,EAAE,GAAG;IAczB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,EACnB,KAAK,CAAC,EAAE,QAAQ,GACf,IAAI;IA4BP;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM;IA8BzD;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI;IAyBnD;;;;;;;;;;;;OAYG;IACH,iBAAiB,IAAI,MAAM;IAwB3B;;;;;;;;;;;;;OAaG;IACH,YAAY,IAAI,IAAI;IAkBpB;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuBpC;;;;;;;;;;;;;OAaG;IACH,kBAAkB,IAAI,IAAI;IAkB1B;;;;;;;;;;;;;;OAcG;IACH,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuB1C;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAYhD;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAYpC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAYrC;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,GAAE,CAAC,GAAG,CAAK,GAAG,MAAM;IAiBhD;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,388 @@
1
+ /**
2
+ * EditingManager - Document Editing Manager for redaction and flattening operations
3
+ *
4
+ * Provides PDF document editing capabilities:
5
+ * - Content redaction (add, apply, count redaction areas)
6
+ * - Metadata scrubbing (remove Info, XMP, JavaScript)
7
+ * - Form flattening (all pages or single page)
8
+ * - Annotation flattening (all pages or single page)
9
+ *
10
+ * Uses native FFI functions:
11
+ * - pdf_redaction_add, pdf_redaction_apply, pdf_redaction_scrub_metadata, pdf_redaction_count
12
+ * - pdf_document_editor_flatten_forms, pdf_document_editor_flatten_forms_page
13
+ * - pdf_document_editor_flatten_annotations, pdf_document_editor_flatten_annotations_page
14
+ */
15
+ import { EventEmitter } from 'events';
16
+ import { mapFfiErrorCode } from '../errors.js';
17
+ // =============================================================================
18
+ // Canonical EditingManager
19
+ // =============================================================================
20
+ /**
21
+ * Manages document editing operations including redaction and flattening.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * import { EditingManager } from 'pdf_oxide';
26
+ *
27
+ * const editor = new EditingManager(document);
28
+ *
29
+ * // Add redaction areas
30
+ * editor.addRedaction(0, { x1: 100, y1: 200, x2: 300, y2: 250 });
31
+ * editor.addRedaction(0, { x1: 50, y1: 400, x2: 200, y2: 450 }, { r: 0, g: 0, b: 0 });
32
+ *
33
+ * // Apply all queued redactions
34
+ * const count = editor.applyRedactions({ scrubMetadata: true });
35
+ * console.log(`Applied ${count} redactions`);
36
+ *
37
+ * // Flatten forms and annotations
38
+ * editor.flattenForms();
39
+ * editor.flattenAnnotations();
40
+ * ```
41
+ */
42
+ export class EditingManager extends EventEmitter {
43
+ constructor(document) {
44
+ super();
45
+ this.document = document;
46
+ try {
47
+ this.native = require('../../index.node');
48
+ }
49
+ catch {
50
+ this.native = null;
51
+ }
52
+ }
53
+ // ===========================================================================
54
+ // Redaction Operations
55
+ // ===========================================================================
56
+ /**
57
+ * Adds a redaction area to the document.
58
+ *
59
+ * Queues a rectangular region on a page for redaction. The content within
60
+ * the rectangle will be permanently removed when {@link applyRedactions}
61
+ * is called.
62
+ *
63
+ * @param page - Zero-based page index
64
+ * @param rect - Rectangle coordinates defining the redaction area
65
+ * @param color - Optional fill color for the redacted area (defaults to black)
66
+ * @throws {PdfException} If the document handle is invalid or page is out of range
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * // Redact a region with default black fill
71
+ * editor.addRedaction(0, { x1: 100, y1: 200, x2: 300, y2: 250 });
72
+ *
73
+ * // Redact with a custom gray fill
74
+ * editor.addRedaction(1, { x1: 50, y1: 100, x2: 200, y2: 150 }, { r: 0.5, g: 0.5, b: 0.5 });
75
+ * ```
76
+ */
77
+ addRedaction(page, rect, color) {
78
+ const fillColor = color ?? { r: 0, g: 0, b: 0 };
79
+ if (this.native?.pdf_redaction_add) {
80
+ const errorCode = { value: 0 };
81
+ const result = this.native.pdf_redaction_add(this.document?.handle ?? this.document, page, rect.x1, rect.y1, rect.x2, rect.y2, fillColor.r, fillColor.g, fillColor.b, errorCode);
82
+ if (result < 0 && errorCode.value !== 0) {
83
+ throw mapFfiErrorCode(errorCode.value, 'Failed to add redaction area');
84
+ }
85
+ }
86
+ else if (this.document?.addRedaction) {
87
+ this.document.addRedaction(page, rect, fillColor);
88
+ }
89
+ this.emit('redactionAdded', { page, rect, color: fillColor });
90
+ }
91
+ /**
92
+ * Applies all queued redactions to the document.
93
+ *
94
+ * Permanently removes content within all previously added redaction
95
+ * rectangles. Optionally scrubs document metadata and applies a
96
+ * fill color overlay.
97
+ *
98
+ * @param options - Options controlling redaction behavior
99
+ * @returns Number of redactions applied
100
+ * @throws {PdfException} If redaction application fails
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * // Apply with metadata scrubbing
105
+ * const count = editor.applyRedactions({ scrubMetadata: true });
106
+ *
107
+ * // Apply with custom fill color
108
+ * const count = editor.applyRedactions({
109
+ * fillColor: { r: 1.0, g: 1.0, b: 1.0 }
110
+ * });
111
+ * ```
112
+ */
113
+ applyRedactions(options) {
114
+ const scrubMetadata = options?.scrubMetadata ?? false;
115
+ const fillColor = options?.fillColor ?? { r: 0, g: 0, b: 0 };
116
+ if (this.native?.pdf_redaction_apply) {
117
+ const errorCode = { value: 0 };
118
+ const result = this.native.pdf_redaction_apply(this.document?.handle ?? this.document, scrubMetadata, fillColor.r, fillColor.g, fillColor.b, errorCode);
119
+ if (result < 0 && errorCode.value !== 0) {
120
+ throw mapFfiErrorCode(errorCode.value, 'Failed to apply redactions');
121
+ }
122
+ this.emit('redactionsApplied', { count: result, scrubMetadata });
123
+ return result;
124
+ }
125
+ else if (this.document?.applyRedactions) {
126
+ const count = this.document.applyRedactions(options);
127
+ this.emit('redactionsApplied', { count, scrubMetadata });
128
+ return count ?? 0;
129
+ }
130
+ return 0;
131
+ }
132
+ /**
133
+ * Scrubs sensitive metadata from the document.
134
+ *
135
+ * Removes document metadata fields that may contain sensitive information,
136
+ * such as author names, creation tools, and JavaScript.
137
+ *
138
+ * @param options - Options controlling which metadata to remove
139
+ * @throws {PdfException} If metadata scrubbing fails
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * // Remove all metadata
144
+ * editor.scrubMetadata();
145
+ *
146
+ * // Remove only Info dictionary and JavaScript
147
+ * editor.scrubMetadata({ removeInfo: true, removeXmp: false, removeJs: true });
148
+ * ```
149
+ */
150
+ scrubMetadata(options) {
151
+ const removeInfo = options?.removeInfo ?? true;
152
+ const removeXmp = options?.removeXmp ?? true;
153
+ const removeJs = options?.removeJs ?? true;
154
+ if (this.native?.pdf_redaction_scrub_metadata) {
155
+ const errorCode = { value: 0 };
156
+ const result = this.native.pdf_redaction_scrub_metadata(this.document?.handle ?? this.document, removeInfo, removeXmp, removeJs, errorCode);
157
+ if (result < 0 && errorCode.value !== 0) {
158
+ throw mapFfiErrorCode(errorCode.value, 'Failed to scrub metadata');
159
+ }
160
+ }
161
+ else if (this.document?.scrubMetadata) {
162
+ this.document.scrubMetadata(options);
163
+ }
164
+ this.emit('metadataScrubbed', { removeInfo, removeXmp, removeJs });
165
+ }
166
+ /**
167
+ * Gets the number of queued (pending) redaction areas.
168
+ *
169
+ * @returns Number of redaction areas queued for application
170
+ * @throws {PdfException} If the document handle is invalid
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * editor.addRedaction(0, { x1: 10, y1: 20, x2: 100, y2: 50 });
175
+ * editor.addRedaction(1, { x1: 30, y1: 40, x2: 200, y2: 80 });
176
+ * console.log(editor.getRedactionCount()); // 2
177
+ * ```
178
+ */
179
+ getRedactionCount() {
180
+ if (this.native?.pdf_redaction_count) {
181
+ const errorCode = { value: 0 };
182
+ const result = this.native.pdf_redaction_count(this.document?.handle ?? this.document, errorCode);
183
+ if (result < 0 && errorCode.value !== 0) {
184
+ throw mapFfiErrorCode(errorCode.value, 'Failed to get redaction count');
185
+ }
186
+ return result;
187
+ }
188
+ else if (this.document?.getRedactionCount) {
189
+ return this.document.getRedactionCount() ?? 0;
190
+ }
191
+ return 0;
192
+ }
193
+ // ===========================================================================
194
+ // Form Flattening Operations
195
+ // ===========================================================================
196
+ /**
197
+ * Flattens all form fields in the document.
198
+ *
199
+ * Renders form field widgets into page content and removes the AcroForm
200
+ * dictionary. After flattening, form fields become static content and
201
+ * can no longer be edited interactively.
202
+ *
203
+ * @throws {PdfException} If flattening fails
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * editor.flattenForms();
208
+ * ```
209
+ */
210
+ flattenForms() {
211
+ if (this.native?.pdf_document_editor_flatten_forms) {
212
+ const errorCode = { value: 0 };
213
+ const result = this.native.pdf_document_editor_flatten_forms(this.document?.handle ?? this.document, errorCode);
214
+ if (result < 0 && errorCode.value !== 0) {
215
+ throw mapFfiErrorCode(errorCode.value, 'Failed to flatten forms');
216
+ }
217
+ }
218
+ else if (this.document?.flattenForms) {
219
+ this.document.flattenForms();
220
+ }
221
+ this.emit('formsFlattened');
222
+ }
223
+ /**
224
+ * Flattens form fields on a specific page.
225
+ *
226
+ * Only flattens form field widgets located on the specified page,
227
+ * leaving form fields on other pages editable.
228
+ *
229
+ * @param page - Zero-based page index
230
+ * @throws {PdfException} If flattening fails or page is out of range
231
+ *
232
+ * @example
233
+ * ```typescript
234
+ * // Flatten forms on first page only
235
+ * editor.flattenFormsPage(0);
236
+ * ```
237
+ */
238
+ flattenFormsPage(page) {
239
+ if (this.native?.pdf_document_editor_flatten_forms_page) {
240
+ const errorCode = { value: 0 };
241
+ const result = this.native.pdf_document_editor_flatten_forms_page(this.document?.handle ?? this.document, page, errorCode);
242
+ if (result < 0 && errorCode.value !== 0) {
243
+ throw mapFfiErrorCode(errorCode.value, `Failed to flatten forms on page ${page}`);
244
+ }
245
+ }
246
+ else if (this.document?.flattenFormsPage) {
247
+ this.document.flattenFormsPage(page);
248
+ }
249
+ this.emit('formsPageFlattened', { page });
250
+ }
251
+ // ===========================================================================
252
+ // Annotation Flattening Operations
253
+ // ===========================================================================
254
+ /**
255
+ * Flattens all annotations in the document.
256
+ *
257
+ * Renders annotations into page content and removes them from
258
+ * annotation arrays. After flattening, annotations become static
259
+ * content and can no longer be edited or deleted.
260
+ *
261
+ * @throws {PdfException} If flattening fails
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * editor.flattenAnnotations();
266
+ * ```
267
+ */
268
+ flattenAnnotations() {
269
+ if (this.native?.pdf_document_editor_flatten_annotations) {
270
+ const errorCode = { value: 0 };
271
+ const result = this.native.pdf_document_editor_flatten_annotations(this.document?.handle ?? this.document, errorCode);
272
+ if (result < 0 && errorCode.value !== 0) {
273
+ throw mapFfiErrorCode(errorCode.value, 'Failed to flatten annotations');
274
+ }
275
+ }
276
+ else if (this.document?.flattenAnnotations) {
277
+ this.document.flattenAnnotations();
278
+ }
279
+ this.emit('annotationsFlattened');
280
+ }
281
+ /**
282
+ * Flattens annotations on a specific page.
283
+ *
284
+ * Only flattens annotations located on the specified page,
285
+ * leaving annotations on other pages editable.
286
+ *
287
+ * @param page - Zero-based page index
288
+ * @throws {PdfException} If flattening fails or page is out of range
289
+ *
290
+ * @example
291
+ * ```typescript
292
+ * // Flatten annotations on page 2
293
+ * editor.flattenAnnotationsPage(1);
294
+ * ```
295
+ */
296
+ flattenAnnotationsPage(page) {
297
+ if (this.native?.pdf_document_editor_flatten_annotations_page) {
298
+ const errorCode = { value: 0 };
299
+ const result = this.native.pdf_document_editor_flatten_annotations_page(this.document?.handle ?? this.document, page, errorCode);
300
+ if (result < 0 && errorCode.value !== 0) {
301
+ throw mapFfiErrorCode(errorCode.value, `Failed to flatten annotations on page ${page}`);
302
+ }
303
+ }
304
+ else if (this.document?.flattenAnnotationsPage) {
305
+ this.document.flattenAnnotationsPage(page);
306
+ }
307
+ this.emit('annotationsPageFlattened', { page });
308
+ }
309
+ // ===========================================================================
310
+ // Form Data Import/Export
311
+ // ===========================================================================
312
+ /**
313
+ * Import form data from a file (FDF or XFDF, auto-detected by extension).
314
+ * @param filePath Path to the FDF or XFDF file
315
+ * @returns Number of fields imported
316
+ */
317
+ importFormDataFromFile(filePath) {
318
+ if (this.native?.pdf_document_import_form_data) {
319
+ const errorCode = { value: 0 };
320
+ const count = this.native.pdf_document_import_form_data(this.document?.handle ?? this.document, filePath, errorCode);
321
+ if (errorCode.value !== 0) {
322
+ throw mapFfiErrorCode(errorCode.value, `Failed to import form data from ${filePath}`);
323
+ }
324
+ return count;
325
+ }
326
+ throw new Error('Form data import not available');
327
+ }
328
+ /**
329
+ * Import FDF form data from in-memory bytes.
330
+ * @param data FDF data bytes
331
+ * @returns Number of fields imported
332
+ */
333
+ importFdfBytes(data) {
334
+ if (this.native?.pdf_editor_import_fdf_bytes) {
335
+ const errorCode = { value: 0 };
336
+ const count = this.native.pdf_editor_import_fdf_bytes(this.document?.handle ?? this.document, data, data.length, errorCode);
337
+ if (errorCode.value !== 0) {
338
+ throw mapFfiErrorCode(errorCode.value, 'Failed to import FDF bytes');
339
+ }
340
+ return count;
341
+ }
342
+ throw new Error('FDF byte import not available');
343
+ }
344
+ /**
345
+ * Import XFDF form data from in-memory bytes.
346
+ * @param data XFDF data bytes
347
+ * @returns Number of fields imported
348
+ */
349
+ importXfdfBytes(data) {
350
+ if (this.native?.pdf_editor_import_xfdf_bytes) {
351
+ const errorCode = { value: 0 };
352
+ const count = this.native.pdf_editor_import_xfdf_bytes(this.document?.handle ?? this.document, data, data.length, errorCode);
353
+ if (errorCode.value !== 0) {
354
+ throw mapFfiErrorCode(errorCode.value, 'Failed to import XFDF bytes');
355
+ }
356
+ return count;
357
+ }
358
+ throw new Error('XFDF byte import not available');
359
+ }
360
+ /**
361
+ * Export form data to in-memory bytes.
362
+ * @param format 0 for FDF, 1 for XFDF
363
+ * @returns Exported form data bytes
364
+ */
365
+ exportFormDataToBytes(format = 0) {
366
+ if (this.native?.pdf_document_export_form_data_to_bytes) {
367
+ const errorCode = { value: 0 };
368
+ const outLen = { value: 0 };
369
+ const ptr = this.native.pdf_document_export_form_data_to_bytes(this.document?.handle ?? this.document, format, outLen, errorCode);
370
+ if (errorCode.value !== 0 || !ptr) {
371
+ throw mapFfiErrorCode(errorCode.value, 'Failed to export form data');
372
+ }
373
+ return Buffer.from(ptr, 0, outLen.value);
374
+ }
375
+ throw new Error('Form data export not available');
376
+ }
377
+ // ===========================================================================
378
+ // Lifecycle
379
+ // ===========================================================================
380
+ /**
381
+ * Releases resources held by this manager.
382
+ */
383
+ destroy() {
384
+ this.removeAllListeners();
385
+ }
386
+ }
387
+ export default EditingManager;
388
+ //# sourceMappingURL=editing-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editing-manager.js","sourceRoot":"","sources":["../../src/managers/editing-manager.ts"],"names":[],"mappings":"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"}