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
@@ -1,367 +0,0 @@
1
- /**
2
- * Builder for creating PDF annotations
3
- *
4
- * Configures annotation properties like content, appearance, author, and behavior.
5
- *
6
- * @example
7
- * ```typescript
8
- * import { AnnotationBuilder } from 'pdf_oxide';
9
- *
10
- * const annotation = AnnotationBuilder.create()
11
- * .type('highlight')
12
- * .content('Important section')
13
- * .author('Reviewer')
14
- * .color([1, 1, 0]) // Yellow
15
- * .build();
16
- *
17
- * pdf.addAnnotation(annotation);
18
- * ```
19
- */
20
-
21
- interface AnnotationBounds {
22
- x: number;
23
- y: number;
24
- width: number;
25
- height: number;
26
- }
27
-
28
- export interface Annotation {
29
- type: string;
30
- content: string;
31
- author?: string;
32
- subject?: string;
33
- color: number[];
34
- opacity: number;
35
- bounds?: AnnotationBounds;
36
- creationDate: Date;
37
- modificationDate: Date;
38
- flags: number;
39
- reply?: string;
40
- }
41
-
42
- export class AnnotationBuilder {
43
- private _type: string = 'text';
44
- private _content: string = '';
45
- private _author?: string;
46
- private _subject?: string;
47
- private _color: number[] = [1, 0, 0]; // Default: red (RGB normalized 0-1)
48
- private _opacity: number = 1.0;
49
- private _bounds?: AnnotationBounds;
50
- private _creationDate: Date = new Date();
51
- private _modificationDate: Date = new Date();
52
- private _flags: number = 0;
53
- private _reply?: string;
54
-
55
- /**
56
- * Creates a new AnnotationBuilder instance
57
- * @private
58
- */
59
- private constructor() {}
60
-
61
- /**
62
- * Creates a new AnnotationBuilder instance
63
- * @returns New builder instance
64
- */
65
- static create(): AnnotationBuilder {
66
- return new AnnotationBuilder();
67
- }
68
-
69
- /**
70
- * Creates a text annotation (comment/note)
71
- * @returns This builder for chaining
72
- */
73
- asText(): this {
74
- this._type = 'text';
75
- return this;
76
- }
77
-
78
- /**
79
- * Creates a highlight annotation
80
- * @returns This builder for chaining
81
- */
82
- asHighlight(): this {
83
- this._type = 'highlight';
84
- return this;
85
- }
86
-
87
- /**
88
- * Creates an underline annotation
89
- * @returns This builder for chaining
90
- */
91
- asUnderline(): this {
92
- this._type = 'underline';
93
- return this;
94
- }
95
-
96
- /**
97
- * Creates a strikeout annotation
98
- * @returns This builder for chaining
99
- */
100
- asStrikeout(): this {
101
- this._type = 'strikeout';
102
- return this;
103
- }
104
-
105
- /**
106
- * Creates a squiggly (wavy underline) annotation
107
- * @returns This builder for chaining
108
- */
109
- asSquiggly(): this {
110
- this._type = 'squiggly';
111
- return this;
112
- }
113
-
114
- /**
115
- * Sets the annotation type
116
- * @param type - Annotation type ('text', 'highlight', 'underline', 'strikeout', 'squiggly')
117
- * @returns This builder for chaining
118
- */
119
- type(type: string): this {
120
- const validTypes = ['text', 'highlight', 'underline', 'strikeout', 'squiggly', 'note'];
121
- if (!validTypes.includes(type)) {
122
- throw new Error(`Invalid annotation type. Must be one of: ${validTypes.join(', ')}`);
123
- }
124
- this._type = type;
125
- return this;
126
- }
127
-
128
- /**
129
- * Sets the annotation content/text
130
- * @param content - The annotation content
131
- * @returns This builder for chaining
132
- */
133
- content(content: string): this {
134
- if (typeof content !== 'string') {
135
- throw new Error('Content must be a string');
136
- }
137
- this._content = content;
138
- return this;
139
- }
140
-
141
- /**
142
- * Sets the author of the annotation
143
- * @param author - The author name
144
- * @returns This builder for chaining
145
- */
146
- author(author: string): this {
147
- if (typeof author !== 'string') {
148
- throw new Error('Author must be a string');
149
- }
150
- this._author = author.length > 0 ? author : undefined;
151
- return this;
152
- }
153
-
154
- /**
155
- * Sets the subject/title of the annotation
156
- * @param subject - The annotation subject
157
- * @returns This builder for chaining
158
- */
159
- subject(subject: string): this {
160
- if (typeof subject !== 'string') {
161
- throw new Error('Subject must be a string');
162
- }
163
- this._subject = subject.length > 0 ? subject : undefined;
164
- return this;
165
- }
166
-
167
- /**
168
- * Sets the color of the annotation (RGB, normalized 0-1)
169
- * @param rgb - RGB color array [r, g, b] with values 0-1
170
- * @returns This builder for chaining
171
- *
172
- * @example
173
- * ```typescript
174
- * builder.color([1, 1, 0]); // Yellow
175
- * builder.color([1, 0, 0]); // Red
176
- * builder.color([0, 1, 0]); // Green
177
- * ```
178
- */
179
- color(rgb: number[]): this {
180
- if (!Array.isArray(rgb) || rgb.length !== 3) {
181
- throw new Error('Color must be an array of 3 RGB values [r, g, b]');
182
- }
183
- if (!rgb.every((c) => typeof c === 'number' && c >= 0 && c <= 1)) {
184
- throw new Error('RGB values must be numbers between 0 and 1');
185
- }
186
- this._color = [...rgb];
187
- return this;
188
- }
189
-
190
- /**
191
- * Sets the color using common color names
192
- * @param colorName - Color name (e.g., 'red', 'yellow', 'green', 'blue')
193
- * @returns This builder for chaining
194
- *
195
- * @example
196
- * ```typescript
197
- * builder.colorName('yellow');
198
- * builder.colorName('red');
199
- * ```
200
- */
201
- colorName(colorName: string): this {
202
- const colors: Record<string, number[]> = {
203
- red: [1, 0, 0],
204
- green: [0, 1, 0],
205
- blue: [0, 0, 1],
206
- yellow: [1, 1, 0],
207
- cyan: [0, 1, 1],
208
- magenta: [1, 0, 1],
209
- white: [1, 1, 1],
210
- black: [0, 0, 0],
211
- gray: [0.5, 0.5, 0.5],
212
- orange: [1, 0.5, 0],
213
- purple: [0.5, 0, 0.5],
214
- };
215
-
216
- const lowerColorName = colorName.toLowerCase();
217
- if (!colors[lowerColorName]) {
218
- const available = Object.keys(colors).join(', ');
219
- throw new Error(`Unknown color. Available colors: ${available}`);
220
- }
221
-
222
- this._color = [...colors[lowerColorName]];
223
- return this;
224
- }
225
-
226
- /**
227
- * Sets the opacity/transparency (0-1)
228
- * @param opacity - Opacity value (0=transparent, 1=opaque)
229
- * @returns This builder for chaining
230
- */
231
- opacity(opacity: number): this {
232
- if (typeof opacity !== 'number' || opacity < 0 || opacity > 1) {
233
- throw new Error('Opacity must be a number between 0 and 1');
234
- }
235
- this._opacity = opacity;
236
- return this;
237
- }
238
-
239
- /**
240
- * Sets the bounding box for the annotation
241
- * @param bounds - Bounding box {x, y, width, height}
242
- * @returns This builder for chaining
243
- *
244
- * @example
245
- * ```typescript
246
- * builder.bounds({x: 100, y: 200, width: 150, height: 30});
247
- * ```
248
- */
249
- bounds(bounds: AnnotationBounds): this {
250
- if (typeof bounds !== 'object' || bounds === null) {
251
- throw new Error('Bounds must be an object');
252
- }
253
- const { x, y, width, height } = bounds;
254
- if (![x, y, width, height].every((v) => typeof v === 'number' && v >= 0)) {
255
- throw new Error('Bounds must have numeric x, y, width, height values >= 0');
256
- }
257
- this._bounds = { x, y, width, height };
258
- return this;
259
- }
260
-
261
- /**
262
- * Sets the creation date
263
- * @param date - The creation date
264
- * @returns This builder for chaining
265
- */
266
- creationDate(date: Date): this {
267
- if (!(date instanceof Date)) {
268
- throw new Error('creationDate must be a Date object');
269
- }
270
- this._creationDate = new Date(date);
271
- return this;
272
- }
273
-
274
- /**
275
- * Sets the modification date
276
- * @param date - The modification date
277
- * @returns This builder for chaining
278
- */
279
- modificationDate(date: Date): this {
280
- if (!(date instanceof Date)) {
281
- throw new Error('modificationDate must be a Date object');
282
- }
283
- this._modificationDate = new Date(date);
284
- return this;
285
- }
286
-
287
- /**
288
- * Sets the annotation to be printed
289
- * @returns This builder for chaining
290
- */
291
- printable(): this {
292
- this._flags |= 4; // Print flag
293
- return this;
294
- }
295
-
296
- /**
297
- * Sets the annotation to NOT be printed
298
- * @returns This builder for chaining
299
- */
300
- notPrintable(): this {
301
- this._flags &= ~4; // Clear print flag
302
- return this;
303
- }
304
-
305
- /**
306
- * Sets whether the annotation is locked (read-only)
307
- * @param locked - Whether to lock the annotation
308
- * @returns This builder for chaining
309
- */
310
- locked(locked: boolean): this {
311
- if (typeof locked !== 'boolean') {
312
- throw new Error('locked must be a boolean');
313
- }
314
- if (locked) {
315
- this._flags |= 128; // Locked flag
316
- } else {
317
- this._flags &= ~128;
318
- }
319
- return this;
320
- }
321
-
322
- /**
323
- * Sets a reply to this annotation
324
- * @param replyContent - Content of the reply
325
- * @returns This builder for chaining
326
- */
327
- reply(replyContent: string): this {
328
- if (typeof replyContent !== 'string') {
329
- throw new Error('Reply content must be a string');
330
- }
331
- this._reply = replyContent;
332
- return this;
333
- }
334
-
335
- /**
336
- * Builds and returns the annotation object
337
- * @returns Immutable annotation object
338
- */
339
- build(): Annotation {
340
- if (!this._bounds && this._type !== 'text') {
341
- throw new Error(`Annotation type "${this._type}" requires bounds to be set`);
342
- }
343
-
344
- return {
345
- type: this._type,
346
- content: this._content,
347
- author: this._author,
348
- subject: this._subject,
349
- color: [...this._color],
350
- opacity: this._opacity,
351
- bounds: this._bounds ? { ...this._bounds } : undefined,
352
- creationDate: new Date(this._creationDate),
353
- modificationDate: new Date(this._modificationDate),
354
- flags: this._flags,
355
- reply: this._reply,
356
- };
357
- }
358
- }
359
-
360
- /**
361
- * Create a new AnnotationBuilder with static factory
362
- * @deprecated Use AnnotationBuilder.create() instead
363
- * @returns New builder instance
364
- */
365
- export function createAnnotationBuilder(): AnnotationBuilder {
366
- return AnnotationBuilder.create();
367
- }
@@ -1,257 +0,0 @@
1
- /**
2
- * Builder for conversion options when converting PDF to other formats
3
- *
4
- * Configures how PDFs are converted to Markdown, HTML, or other text formats
5
- * with options for formatting, image handling, and content extraction.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { ConversionOptionsBuilder } from 'pdf_oxide';
10
- *
11
- * const options = ConversionOptionsBuilder.create()
12
- * .preserveFormatting(true)
13
- * .includeImages(true)
14
- * .detectHeadings(true)
15
- * .detectTables(true)
16
- * .build();
17
- *
18
- * const doc = PdfDocument.open('file.pdf');
19
- * const markdown = doc.toMarkdown(0, options);
20
- * ```
21
- */
22
-
23
- interface PageRangeOptions {
24
- start: number;
25
- end: number;
26
- }
27
-
28
- export interface ConversionOptions {
29
- preserveFormatting: boolean;
30
- detectHeadings: boolean;
31
- detectTables: boolean;
32
- detectLists: boolean;
33
- includeImages: boolean;
34
- imageFormat: string;
35
- imageQuality: number;
36
- maxImageDimension: number;
37
- outputEncoding: string;
38
- normalizeWhitespace: boolean;
39
- extractAnnotations: boolean;
40
- useStructureTree: boolean;
41
- pageRange?: PageRangeOptions;
42
- }
43
-
44
- export class ConversionOptionsBuilder {
45
- private _preserveFormatting: boolean = true;
46
- private _detectHeadings: boolean = true;
47
- private _detectTables: boolean = true;
48
- private _detectLists: boolean = true;
49
- private _includeImages: boolean = true;
50
- private _imageFormat: string = 'png';
51
- private _imageQuality: number = 85;
52
- private _maxImageDimension: number = 2048;
53
- private _outputEncoding: string = 'utf-8';
54
- private _normalizeWhitespace: boolean = true;
55
- private _extractAnnotations: boolean = false;
56
- private _useStructureTree: boolean = true;
57
- private _pageRange?: PageRangeOptions;
58
-
59
- /**
60
- * Creates a new ConversionOptionsBuilder instance
61
- * @private
62
- */
63
- private constructor() {}
64
-
65
- /**
66
- * Creates a new ConversionOptionsBuilder instance
67
- * @returns New builder instance
68
- */
69
- static create(): ConversionOptionsBuilder {
70
- return new ConversionOptionsBuilder();
71
- }
72
-
73
- /**
74
- * Creates options with default settings optimized for readability
75
- * @returns Conversion options with default preset
76
- */
77
- static default(): ConversionOptions {
78
- return ConversionOptionsBuilder.create().build();
79
- }
80
-
81
- /**
82
- * Creates options optimized for text-only extraction
83
- * @returns Conversion options with text-only preset
84
- */
85
- static textOnly(): ConversionOptions {
86
- return ConversionOptionsBuilder.create()
87
- .preserveFormatting(false)
88
- .detectHeadings(true)
89
- .detectTables(false)
90
- .detectLists(false)
91
- .includeImages(false)
92
- .build();
93
- }
94
-
95
- /**
96
- * Creates options optimized for maximum quality and detail preservation
97
- * @returns Conversion options with high-quality preset
98
- */
99
- static highQuality(): ConversionOptions {
100
- return ConversionOptionsBuilder.create()
101
- .preserveFormatting(true)
102
- .detectHeadings(true)
103
- .detectTables(true)
104
- .detectLists(true)
105
- .includeImages(true)
106
- .imageQuality(95)
107
- .normalizeWhitespace(false)
108
- .build();
109
- }
110
-
111
- /**
112
- * Creates options for fast, basic conversion
113
- * @returns Conversion options with fast preset
114
- */
115
- static fast(): ConversionOptions {
116
- return ConversionOptionsBuilder.create()
117
- .preserveFormatting(false)
118
- .detectHeadings(false)
119
- .detectTables(false)
120
- .detectLists(false)
121
- .includeImages(false)
122
- .normalizeWhitespace(true)
123
- .build();
124
- }
125
-
126
- preserveFormatting(preserve: boolean): this {
127
- if (typeof preserve !== 'boolean') {
128
- throw new Error('preserveFormatting must be a boolean');
129
- }
130
- this._preserveFormatting = preserve;
131
- return this;
132
- }
133
-
134
- detectHeadings(detect: boolean): this {
135
- if (typeof detect !== 'boolean') {
136
- throw new Error('detectHeadings must be a boolean');
137
- }
138
- this._detectHeadings = detect;
139
- return this;
140
- }
141
-
142
- detectTables(detect: boolean): this {
143
- if (typeof detect !== 'boolean') {
144
- throw new Error('detectTables must be a boolean');
145
- }
146
- this._detectTables = detect;
147
- return this;
148
- }
149
-
150
- detectLists(detect: boolean): this {
151
- if (typeof detect !== 'boolean') {
152
- throw new Error('detectLists must be a boolean');
153
- }
154
- this._detectLists = detect;
155
- return this;
156
- }
157
-
158
- includeImages(include: boolean): this {
159
- if (typeof include !== 'boolean') {
160
- throw new Error('includeImages must be a boolean');
161
- }
162
- this._includeImages = include;
163
- return this;
164
- }
165
-
166
- imageFormat(format: string): this {
167
- const validFormats = ['png', 'jpg', 'jpeg', 'webp'];
168
- if (!validFormats.includes(format.toLowerCase())) {
169
- throw new Error(`Invalid image format. Must be one of: ${validFormats.join(', ')}`);
170
- }
171
- this._imageFormat = format.toLowerCase();
172
- return this;
173
- }
174
-
175
- imageQuality(quality: number): this {
176
- if (typeof quality !== 'number' || quality < 0 || quality > 100) {
177
- throw new Error('imageQuality must be a number between 0 and 100');
178
- }
179
- this._imageQuality = quality;
180
- return this;
181
- }
182
-
183
- maxImageDimension(maxDimension: number): this {
184
- if (typeof maxDimension !== 'number' || maxDimension <= 0) {
185
- throw new Error('maxImageDimension must be a positive number');
186
- }
187
- this._maxImageDimension = maxDimension;
188
- return this;
189
- }
190
-
191
- outputEncoding(encoding: string): this {
192
- if (typeof encoding !== 'string' || encoding.length === 0) {
193
- throw new Error('outputEncoding must be a non-empty string');
194
- }
195
- this._outputEncoding = encoding;
196
- return this;
197
- }
198
-
199
- normalizeWhitespace(normalize: boolean): this {
200
- if (typeof normalize !== 'boolean') {
201
- throw new Error('normalizeWhitespace must be a boolean');
202
- }
203
- this._normalizeWhitespace = normalize;
204
- return this;
205
- }
206
-
207
- extractAnnotations(extract: boolean): this {
208
- if (typeof extract !== 'boolean') {
209
- throw new Error('extractAnnotations must be a boolean');
210
- }
211
- this._extractAnnotations = extract;
212
- return this;
213
- }
214
-
215
- useStructureTree(use: boolean): this {
216
- if (typeof use !== 'boolean') {
217
- throw new Error('useStructureTree must be a boolean');
218
- }
219
- this._useStructureTree = use;
220
- return this;
221
- }
222
-
223
- pageRange(start: number, end: number): this {
224
- if (typeof start !== 'number' || typeof end !== 'number' || start < 0 || end < start) {
225
- throw new Error('pageRange must have valid start and end indices');
226
- }
227
- this._pageRange = { start, end };
228
- return this;
229
- }
230
-
231
- build(): ConversionOptions {
232
- return {
233
- preserveFormatting: this._preserveFormatting,
234
- detectHeadings: this._detectHeadings,
235
- detectTables: this._detectTables,
236
- detectLists: this._detectLists,
237
- includeImages: this._includeImages,
238
- imageFormat: this._imageFormat,
239
- imageQuality: this._imageQuality,
240
- maxImageDimension: this._maxImageDimension,
241
- outputEncoding: this._outputEncoding,
242
- normalizeWhitespace: this._normalizeWhitespace,
243
- extractAnnotations: this._extractAnnotations,
244
- useStructureTree: this._useStructureTree,
245
- pageRange: this._pageRange,
246
- };
247
- }
248
- }
249
-
250
- /**
251
- * Create a new ConversionOptionsBuilder with static factory
252
- * @deprecated Use ConversionOptionsBuilder.create() instead
253
- * @returns New builder instance
254
- */
255
- export function createConversionOptionsBuilder(): ConversionOptionsBuilder {
256
- return ConversionOptionsBuilder.create();
257
- }