@lexmata/micropdf 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +985 -0
  3. package/binding.gyp +73 -0
  4. package/dist/annot.d.ts +458 -0
  5. package/dist/annot.d.ts.map +1 -0
  6. package/dist/annot.js +697 -0
  7. package/dist/annot.js.map +1 -0
  8. package/dist/archive.d.ts +128 -0
  9. package/dist/archive.d.ts.map +1 -0
  10. package/dist/archive.js +268 -0
  11. package/dist/archive.js.map +1 -0
  12. package/dist/buffer.d.ts +572 -0
  13. package/dist/buffer.d.ts.map +1 -0
  14. package/dist/buffer.js +971 -0
  15. package/dist/buffer.js.map +1 -0
  16. package/dist/colorspace.d.ts +287 -0
  17. package/dist/colorspace.d.ts.map +1 -0
  18. package/dist/colorspace.js +542 -0
  19. package/dist/colorspace.js.map +1 -0
  20. package/dist/context.d.ts +184 -0
  21. package/dist/context.d.ts.map +1 -0
  22. package/dist/context.js +320 -0
  23. package/dist/context.js.map +1 -0
  24. package/dist/cookie.d.ts +164 -0
  25. package/dist/cookie.d.ts.map +1 -0
  26. package/dist/cookie.js +306 -0
  27. package/dist/cookie.js.map +1 -0
  28. package/dist/device.d.ts +169 -0
  29. package/dist/device.d.ts.map +1 -0
  30. package/dist/device.js +350 -0
  31. package/dist/device.js.map +1 -0
  32. package/dist/display-list.d.ts +202 -0
  33. package/dist/display-list.d.ts.map +1 -0
  34. package/dist/display-list.js +410 -0
  35. package/dist/display-list.js.map +1 -0
  36. package/dist/document.d.ts +637 -0
  37. package/dist/document.d.ts.map +1 -0
  38. package/dist/document.js +902 -0
  39. package/dist/document.js.map +1 -0
  40. package/dist/easy.d.ts +423 -0
  41. package/dist/easy.d.ts.map +1 -0
  42. package/dist/easy.js +644 -0
  43. package/dist/easy.js.map +1 -0
  44. package/dist/enhanced.d.ts +226 -0
  45. package/dist/enhanced.d.ts.map +1 -0
  46. package/dist/enhanced.js +368 -0
  47. package/dist/enhanced.js.map +1 -0
  48. package/dist/filter.d.ts +51 -0
  49. package/dist/filter.d.ts.map +1 -0
  50. package/dist/filter.js +381 -0
  51. package/dist/filter.js.map +1 -0
  52. package/dist/font.d.ts +222 -0
  53. package/dist/font.d.ts.map +1 -0
  54. package/dist/font.js +381 -0
  55. package/dist/font.js.map +1 -0
  56. package/dist/form.d.ts +214 -0
  57. package/dist/form.d.ts.map +1 -0
  58. package/dist/form.js +497 -0
  59. package/dist/form.js.map +1 -0
  60. package/dist/geometry.d.ts +469 -0
  61. package/dist/geometry.d.ts.map +1 -0
  62. package/dist/geometry.js +780 -0
  63. package/dist/geometry.js.map +1 -0
  64. package/dist/image.d.ts +172 -0
  65. package/dist/image.d.ts.map +1 -0
  66. package/dist/image.js +348 -0
  67. package/dist/image.js.map +1 -0
  68. package/dist/index.d.ts +171 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +339 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/link.d.ts +168 -0
  73. package/dist/link.d.ts.map +1 -0
  74. package/dist/link.js +343 -0
  75. package/dist/link.js.map +1 -0
  76. package/dist/micropdf.d.ts +40 -0
  77. package/dist/micropdf.d.ts.map +1 -0
  78. package/dist/micropdf.js +45 -0
  79. package/dist/micropdf.js.map +1 -0
  80. package/dist/nanopdf.d.ts +40 -0
  81. package/dist/nanopdf.d.ts.map +1 -0
  82. package/dist/nanopdf.js +45 -0
  83. package/dist/nanopdf.js.map +1 -0
  84. package/dist/native.d.ts +242 -0
  85. package/dist/native.d.ts.map +1 -0
  86. package/dist/native.js +509 -0
  87. package/dist/native.js.map +1 -0
  88. package/dist/output.d.ts +166 -0
  89. package/dist/output.d.ts.map +1 -0
  90. package/dist/output.js +365 -0
  91. package/dist/output.js.map +1 -0
  92. package/dist/path.d.ts +420 -0
  93. package/dist/path.d.ts.map +1 -0
  94. package/dist/path.js +687 -0
  95. package/dist/path.js.map +1 -0
  96. package/dist/pdf/object.d.ts +489 -0
  97. package/dist/pdf/object.d.ts.map +1 -0
  98. package/dist/pdf/object.js +1045 -0
  99. package/dist/pdf/object.js.map +1 -0
  100. package/dist/pixmap.d.ts +315 -0
  101. package/dist/pixmap.d.ts.map +1 -0
  102. package/dist/pixmap.js +590 -0
  103. package/dist/pixmap.js.map +1 -0
  104. package/dist/profiler.d.ts +159 -0
  105. package/dist/profiler.d.ts.map +1 -0
  106. package/dist/profiler.js +380 -0
  107. package/dist/profiler.js.map +1 -0
  108. package/dist/render-options.d.ts +227 -0
  109. package/dist/render-options.d.ts.map +1 -0
  110. package/dist/render-options.js +130 -0
  111. package/dist/render-options.js.map +1 -0
  112. package/dist/resource-tracking.d.ts +332 -0
  113. package/dist/resource-tracking.d.ts.map +1 -0
  114. package/dist/resource-tracking.js +653 -0
  115. package/dist/resource-tracking.js.map +1 -0
  116. package/dist/simple.d.ts +276 -0
  117. package/dist/simple.d.ts.map +1 -0
  118. package/dist/simple.js +343 -0
  119. package/dist/simple.js.map +1 -0
  120. package/dist/stext.d.ts +290 -0
  121. package/dist/stext.d.ts.map +1 -0
  122. package/dist/stext.js +312 -0
  123. package/dist/stext.js.map +1 -0
  124. package/dist/stream.d.ts +174 -0
  125. package/dist/stream.d.ts.map +1 -0
  126. package/dist/stream.js +476 -0
  127. package/dist/stream.js.map +1 -0
  128. package/dist/text.d.ts +337 -0
  129. package/dist/text.d.ts.map +1 -0
  130. package/dist/text.js +454 -0
  131. package/dist/text.js.map +1 -0
  132. package/dist/typed-arrays.d.ts +127 -0
  133. package/dist/typed-arrays.d.ts.map +1 -0
  134. package/dist/typed-arrays.js +410 -0
  135. package/dist/typed-arrays.js.map +1 -0
  136. package/dist/types.d.ts +358 -0
  137. package/dist/types.d.ts.map +1 -0
  138. package/dist/types.js +216 -0
  139. package/dist/types.js.map +1 -0
  140. package/native/annot.cc +557 -0
  141. package/native/buffer.cc +204 -0
  142. package/native/colorspace.cc +166 -0
  143. package/native/context.cc +84 -0
  144. package/native/cookie.cc +179 -0
  145. package/native/device.cc +179 -0
  146. package/native/display_list.cc +179 -0
  147. package/native/document.cc +268 -0
  148. package/native/enhanced.cc +70 -0
  149. package/native/font.cc +282 -0
  150. package/native/form.cc +523 -0
  151. package/native/geometry.cc +255 -0
  152. package/native/image.cc +216 -0
  153. package/native/include/micropdf/enhanced.h +38 -0
  154. package/native/include/micropdf/types.h +36 -0
  155. package/native/include/micropdf.h +106 -0
  156. package/native/include/mupdf-ffi.h +39 -0
  157. package/native/include/mupdf.h +11 -0
  158. package/native/include/mupdf_minimal.h +381 -0
  159. package/native/lib/linux-x64/libmicropdf.a +0 -0
  160. package/native/link.cc +234 -0
  161. package/native/micropdf.cc +71 -0
  162. package/native/output.cc +229 -0
  163. package/native/page.cc +572 -0
  164. package/native/path.cc +259 -0
  165. package/native/pixmap.cc +240 -0
  166. package/native/stext.cc +610 -0
  167. package/native/stream.cc +239 -0
  168. package/package.json +120 -0
  169. package/scripts/build-from-rust.js +97 -0
  170. package/scripts/install.js +184 -0
package/dist/font.js ADDED
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Font - PDF font handling
3
+ *
4
+ * This module provides 100% API compatibility with MuPDF's font operations.
5
+ * Handles font loading, glyph encoding, metrics, and rendering.
6
+ */
7
+ import { getDefaultContext } from './context.js';
8
+ import { Rect } from './geometry.js';
9
+ import { native } from './native.js';
10
+ /**
11
+ * Font flags
12
+ */
13
+ export var FontFlags;
14
+ (function (FontFlags) {
15
+ FontFlags[FontFlags["Bold"] = 1] = "Bold";
16
+ FontFlags[FontFlags["Italic"] = 2] = "Italic";
17
+ FontFlags[FontFlags["Serif"] = 4] = "Serif";
18
+ FontFlags[FontFlags["Monospaced"] = 8] = "Monospaced";
19
+ FontFlags[FontFlags["Embedded"] = 16] = "Embedded";
20
+ })(FontFlags || (FontFlags = {}));
21
+ /**
22
+ * A PDF font
23
+ */
24
+ export class Font {
25
+ _ctx;
26
+ _font;
27
+ _name;
28
+ _flags = 0;
29
+ _bbox = Rect.EMPTY;
30
+ _ascender = 1000;
31
+ _descender = -200;
32
+ _refCount = 1;
33
+ _glyphs = new Map();
34
+ _encoding = new Map(); // unicode -> glyph
35
+ constructor(name, flags) {
36
+ this._name = name;
37
+ if (flags !== undefined) {
38
+ this._flags = flags;
39
+ }
40
+ }
41
+ /**
42
+ * @internal Check if FFI bindings are available
43
+ */
44
+ get hasNativeHandle() {
45
+ return this._ctx !== undefined && this._font !== undefined;
46
+ }
47
+ /**
48
+ * Create a new font
49
+ */
50
+ static create(name, flags) {
51
+ return new Font(name, flags);
52
+ }
53
+ /**
54
+ * Create font from memory buffer using FFI
55
+ * @throws Error when native bindings are not available
56
+ */
57
+ static createFromMemory(name, data) {
58
+ const ctx = getDefaultContext()?._nativeCtx;
59
+ if (!ctx) {
60
+ throw new Error('Font creation from memory requires native FFI bindings (fz_new_font_from_memory)');
61
+ }
62
+ const font = new Font(name);
63
+ font._ctx = ctx;
64
+ font._font = native.loadFontFromMemory(ctx, Buffer.from(data), 0);
65
+ return font;
66
+ }
67
+ /**
68
+ * Create font from file using FFI
69
+ * @throws Error when native bindings are not available
70
+ */
71
+ static createFromFile(path) {
72
+ const ctx = getDefaultContext()?._nativeCtx;
73
+ if (!ctx) {
74
+ throw new Error('Font loading from file requires native FFI bindings (fz_new_font_from_file)');
75
+ }
76
+ const name = path
77
+ .split('/')
78
+ .pop()
79
+ ?.replace(/\.[^.]+$/, '') || 'Unknown';
80
+ const font = new Font(name);
81
+ font._ctx = ctx;
82
+ font._font = native.loadFontFromFile(ctx, path, 0);
83
+ return font;
84
+ }
85
+ // ============================================================================
86
+ // Reference Counting
87
+ // ============================================================================
88
+ keep() {
89
+ this._refCount++;
90
+ return this;
91
+ }
92
+ drop() {
93
+ if (this._refCount > 0) {
94
+ this._refCount--;
95
+ }
96
+ }
97
+ /**
98
+ * Clone this font
99
+ */
100
+ clone() {
101
+ const cloned = new Font(this._name, this._flags);
102
+ cloned._bbox = this._bbox;
103
+ cloned._ascender = this._ascender;
104
+ cloned._descender = this._descender;
105
+ cloned._glyphs = new Map(this._glyphs);
106
+ cloned._encoding = new Map(this._encoding);
107
+ return cloned;
108
+ }
109
+ // ============================================================================
110
+ // Properties
111
+ // ============================================================================
112
+ get name() {
113
+ return this._name;
114
+ }
115
+ /**
116
+ * Check if font is bold
117
+ */
118
+ isBold() {
119
+ return (this._flags & FontFlags.Bold) !== 0;
120
+ }
121
+ /**
122
+ * Check if font is italic
123
+ */
124
+ isItalic() {
125
+ return (this._flags & FontFlags.Italic) !== 0;
126
+ }
127
+ /**
128
+ * Check if font is serif
129
+ */
130
+ isSerif() {
131
+ return (this._flags & FontFlags.Serif) !== 0;
132
+ }
133
+ /**
134
+ * Check if font is monospaced
135
+ */
136
+ isMonospaced() {
137
+ return (this._flags & FontFlags.Monospaced) !== 0;
138
+ }
139
+ /**
140
+ * Check if font is embedded
141
+ */
142
+ isEmbedded() {
143
+ return (this._flags & FontFlags.Embedded) !== 0;
144
+ }
145
+ /**
146
+ * Get font flags
147
+ */
148
+ get flags() {
149
+ return this._flags;
150
+ }
151
+ // ============================================================================
152
+ // Metrics
153
+ // ============================================================================
154
+ /**
155
+ * Get font bounding box
156
+ */
157
+ getBBox() {
158
+ return this._bbox;
159
+ }
160
+ /**
161
+ * Set font bounding box
162
+ */
163
+ setBBox(bbox) {
164
+ this._bbox = Rect.from(bbox);
165
+ }
166
+ /**
167
+ * Get font ascender (distance above baseline)
168
+ */
169
+ getAscender() {
170
+ return this._ascender;
171
+ }
172
+ /**
173
+ * Set font ascender
174
+ */
175
+ setAscender(ascender) {
176
+ this._ascender = ascender;
177
+ }
178
+ /**
179
+ * Get font descender (distance below baseline)
180
+ */
181
+ getDescender() {
182
+ return this._descender;
183
+ }
184
+ /**
185
+ * Set font descender
186
+ */
187
+ setDescender(descender) {
188
+ this._descender = descender;
189
+ }
190
+ // ============================================================================
191
+ // Character Encoding
192
+ // ============================================================================
193
+ /**
194
+ * Encode a Unicode character to a glyph ID
195
+ */
196
+ encodeCharacter(unicode) {
197
+ return this._encoding.get(unicode) || 0;
198
+ }
199
+ /**
200
+ * Encode character with fallback
201
+ */
202
+ encodeCharacterWithFallback(unicode, fallback = 0) {
203
+ return this._encoding.get(unicode) || fallback;
204
+ }
205
+ /**
206
+ * Set character encoding
207
+ */
208
+ setEncoding(unicode, glyph) {
209
+ this._encoding.set(unicode, glyph);
210
+ }
211
+ // ============================================================================
212
+ // Glyph Operations
213
+ // ============================================================================
214
+ /**
215
+ * Get glyph advance width
216
+ */
217
+ advanceGlyph(glyph, wmode = 0) {
218
+ const info = this._glyphs.get(glyph);
219
+ if (info) {
220
+ return wmode === 0 ? info.advanceX : info.advanceY;
221
+ }
222
+ // Default advance for unknown glyphs
223
+ return 500;
224
+ }
225
+ /**
226
+ * Get glyph bounding box
227
+ */
228
+ boundGlyph(glyph) {
229
+ const info = this._glyphs.get(glyph);
230
+ return info?.bbox || Rect.EMPTY;
231
+ }
232
+ /**
233
+ * Get glyph outline as a path
234
+ */
235
+ outlineGlyph(glyph) {
236
+ const info = this._glyphs.get(glyph);
237
+ return info?.outline || null;
238
+ }
239
+ /**
240
+ * Get glyph name
241
+ */
242
+ glyphName(glyph) {
243
+ const info = this._glyphs.get(glyph);
244
+ return info?.name || `.notdef`;
245
+ }
246
+ /**
247
+ * Add glyph info
248
+ */
249
+ addGlyph(glyph, info) {
250
+ this._glyphs.set(glyph, info);
251
+ }
252
+ /**
253
+ * Get glyph info
254
+ */
255
+ getGlyphInfo(glyph) {
256
+ return this._glyphs.get(glyph);
257
+ }
258
+ // ============================================================================
259
+ // Validation
260
+ // ============================================================================
261
+ /**
262
+ * Check if font is valid
263
+ */
264
+ isValid() {
265
+ return this._name.length > 0;
266
+ }
267
+ // ============================================================================
268
+ // Text Measurement
269
+ // ============================================================================
270
+ /**
271
+ * Measure text width
272
+ */
273
+ measureText(text, size = 12) {
274
+ let width = 0;
275
+ for (let i = 0; i < text.length; i++) {
276
+ const unicode = text.charCodeAt(i);
277
+ const glyph = this.encodeCharacter(unicode);
278
+ const advance = this.advanceGlyph(glyph);
279
+ width += advance;
280
+ }
281
+ return (width * size) / 1000; // Scale from font units to points
282
+ }
283
+ /**
284
+ * Get text bounding box
285
+ */
286
+ measureTextBounds(text, size = 12) {
287
+ let width = 0;
288
+ let minY = 0;
289
+ let maxY = 0;
290
+ for (let i = 0; i < text.length; i++) {
291
+ const unicode = text.charCodeAt(i);
292
+ const glyph = this.encodeCharacter(unicode);
293
+ const advance = this.advanceGlyph(glyph);
294
+ const bbox = this.boundGlyph(glyph);
295
+ minY = Math.min(minY, bbox.y0);
296
+ maxY = Math.max(maxY, bbox.y1);
297
+ width += advance;
298
+ }
299
+ const scale = size / 1000;
300
+ return new Rect(0, minY * scale, width * scale, maxY * scale);
301
+ }
302
+ }
303
+ /**
304
+ * Font manager for loading and caching fonts
305
+ */
306
+ export class FontManager {
307
+ _fonts = new Map();
308
+ _defaultFont = null;
309
+ constructor() {
310
+ // Create default font
311
+ this._defaultFont = Font.create('Helvetica');
312
+ this._fonts.set('Helvetica', this._defaultFont);
313
+ }
314
+ /**
315
+ * Get the singleton instance
316
+ */
317
+ static _instance = null;
318
+ static getInstance() {
319
+ if (!FontManager._instance) {
320
+ FontManager._instance = new FontManager();
321
+ }
322
+ return FontManager._instance;
323
+ }
324
+ /**
325
+ * Load a font by name
326
+ */
327
+ loadFont(name) {
328
+ return this._fonts.get(name) || null;
329
+ }
330
+ /**
331
+ * Register a font
332
+ */
333
+ registerFont(name, font) {
334
+ this._fonts.set(name, font);
335
+ }
336
+ /**
337
+ * Get default font
338
+ */
339
+ getDefaultFont() {
340
+ return this._defaultFont;
341
+ }
342
+ /**
343
+ * Set default font
344
+ */
345
+ setDefaultFont(font) {
346
+ this._defaultFont = font;
347
+ }
348
+ /**
349
+ * Get all registered font names
350
+ */
351
+ getFontNames() {
352
+ return [...this._fonts.keys()];
353
+ }
354
+ /**
355
+ * Clear all fonts
356
+ */
357
+ clear() {
358
+ this._fonts.clear();
359
+ this._defaultFont = null;
360
+ }
361
+ }
362
+ /**
363
+ * Standard PDF font names
364
+ */
365
+ export const StandardFonts = {
366
+ TimesRoman: 'Times-Roman',
367
+ TimesBold: 'Times-Bold',
368
+ TimesItalic: 'Times-Italic',
369
+ TimesBoldItalic: 'Times-BoldItalic',
370
+ Helvetica: 'Helvetica',
371
+ HelveticaBold: 'Helvetica-Bold',
372
+ HelveticaOblique: 'Helvetica-Oblique',
373
+ HelveticaBoldOblique: 'Helvetica-BoldOblique',
374
+ Courier: 'Courier',
375
+ CourierBold: 'Courier-Bold',
376
+ CourierOblique: 'Courier-Oblique',
377
+ CourierBoldOblique: 'Courier-BoldOblique',
378
+ Symbol: 'Symbol',
379
+ ZapfDingbats: 'ZapfDingbats'
380
+ };
381
+ //# sourceMappingURL=font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"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"}
package/dist/form.d.ts ADDED
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Form - PDF form/AcroForm handling
3
+ *
4
+ * This module provides 100% API compatibility with MuPDF's form operations.
5
+ * Supports text fields, checkboxes, radio buttons, combo boxes, and signatures.
6
+ */
7
+ import { Rect, type RectLike } from './geometry.js';
8
+ /**
9
+ * PDF form field types
10
+ */
11
+ export declare enum FieldType {
12
+ Unknown = 0,
13
+ PushButton = 1,
14
+ CheckBox = 2,
15
+ RadioButton = 3,
16
+ Text = 4,
17
+ Choice = 5,
18
+ Signature = 6
19
+ }
20
+ /**
21
+ * Field alignment values
22
+ */
23
+ export declare enum FieldAlignment {
24
+ Left = 0,
25
+ Center = 1,
26
+ Right = 2
27
+ }
28
+ /**
29
+ * Field flags (bit flags)
30
+ */
31
+ export declare enum FieldFlags {
32
+ ReadOnly = 1,
33
+ Required = 2,
34
+ NoExport = 4,
35
+ Multiline = 4096,
36
+ Password = 8192,
37
+ NoToggleToOff = 16384,
38
+ Radio = 32768,
39
+ Pushbutton = 65536,
40
+ Combo = 131072,
41
+ Edit = 262144,
42
+ Sort = 524288,
43
+ FileSelect = 1048576,
44
+ MultiSelect = 2097152,
45
+ DoNotSpellCheck = 4194304,
46
+ DoNotScroll = 8388608,
47
+ Comb = 16777216,
48
+ RadiosInUnison = 33554432,
49
+ CommitOnSelChange = 67108864
50
+ }
51
+ /**
52
+ * Choice option for combo box or list box
53
+ */
54
+ export interface ChoiceOption {
55
+ label: string;
56
+ value: string;
57
+ }
58
+ /**
59
+ * A form field (widget annotation)
60
+ */
61
+ export declare class FormField {
62
+ private _name;
63
+ private _type;
64
+ private _value;
65
+ private _defaultValue;
66
+ private _rect;
67
+ private _flags;
68
+ private _maxLen;
69
+ private _choices;
70
+ private _selectedIndex;
71
+ private _borderWidth;
72
+ private _borderColor;
73
+ private _bgColor;
74
+ private _fontSize;
75
+ private _alignment;
76
+ private _refCount;
77
+ private _valid;
78
+ constructor(name: string, type: FieldType, rect: RectLike);
79
+ keep(): this;
80
+ drop(): void;
81
+ /**
82
+ * Clone this field
83
+ */
84
+ clone(): FormField;
85
+ get name(): string;
86
+ get type(): FieldType;
87
+ get rect(): Rect;
88
+ set rect(r: RectLike);
89
+ get value(): string;
90
+ set value(val: string);
91
+ get defaultValue(): string;
92
+ set defaultValue(val: string);
93
+ get flags(): number;
94
+ set flags(f: number);
95
+ hasFlag(flag: FieldFlags): boolean;
96
+ setFlag(flag: FieldFlags, value: boolean): void;
97
+ get isReadOnly(): boolean;
98
+ set isReadOnly(value: boolean);
99
+ get isRequired(): boolean;
100
+ set isRequired(value: boolean);
101
+ get isMultiline(): boolean;
102
+ set isMultiline(value: boolean);
103
+ get isPassword(): boolean;
104
+ set isPassword(value: boolean);
105
+ get maxLength(): number;
106
+ set maxLength(len: number);
107
+ get textFormat(): string;
108
+ get isChecked(): boolean;
109
+ set isChecked(checked: boolean);
110
+ get isCombo(): boolean;
111
+ get isEdit(): boolean;
112
+ get isMultiSelect(): boolean;
113
+ get choiceCount(): number;
114
+ getChoiceLabel(index: number): string;
115
+ getChoiceValue(index: number): string;
116
+ addChoice(label: string, value?: string): void;
117
+ removeChoice(index: number): void;
118
+ get selectedIndex(): number;
119
+ set selectedIndex(index: number);
120
+ clearSelection(): void;
121
+ get isSigned(): boolean;
122
+ get borderWidth(): number;
123
+ set borderWidth(width: number);
124
+ get borderColor(): number[];
125
+ set borderColor(color: number[]);
126
+ get backgroundColor(): number[];
127
+ set backgroundColor(color: number[]);
128
+ get fontSize(): number;
129
+ set fontSize(size: number);
130
+ get alignment(): FieldAlignment;
131
+ set alignment(align: FieldAlignment);
132
+ isValid(): boolean;
133
+ validate(): boolean;
134
+ }
135
+ /**
136
+ * PDF interactive form (AcroForm)
137
+ */
138
+ export declare class Form {
139
+ private _fields;
140
+ private _fieldMap;
141
+ private _refCount;
142
+ constructor();
143
+ /**
144
+ * Create a form from a PDF document
145
+ */
146
+ static create(): Form;
147
+ keep(): this;
148
+ drop(): void;
149
+ /**
150
+ * Create a text field
151
+ */
152
+ createTextField(name: string, rect: RectLike): FormField;
153
+ /**
154
+ * Create a checkbox
155
+ */
156
+ createCheckBox(name: string, rect: RectLike): FormField;
157
+ /**
158
+ * Create a push button
159
+ */
160
+ createPushButton(name: string, rect: RectLike): FormField;
161
+ /**
162
+ * Create a combo box
163
+ */
164
+ createComboBox(name: string, rect: RectLike): FormField;
165
+ /**
166
+ * Create a signature field
167
+ */
168
+ createSignatureField(name: string, rect: RectLike): FormField;
169
+ /**
170
+ * Add a field to the form
171
+ */
172
+ private addField;
173
+ /**
174
+ * Get field count
175
+ */
176
+ get fieldCount(): number;
177
+ /**
178
+ * Look up a field by name
179
+ */
180
+ lookupField(name: string): FormField | undefined;
181
+ /**
182
+ * Get field by index
183
+ */
184
+ getField(index: number): FormField | undefined;
185
+ /**
186
+ * Get first widget (field)
187
+ */
188
+ firstWidget(): FormField | undefined;
189
+ /**
190
+ * Get next widget after a given field
191
+ */
192
+ nextWidget(current: FormField): FormField | undefined;
193
+ /**
194
+ * Delete a field
195
+ */
196
+ deleteField(nameOrField: string | FormField): boolean;
197
+ /**
198
+ * Reset all fields to their default values
199
+ */
200
+ reset(): void;
201
+ /**
202
+ * Validate all fields
203
+ */
204
+ validate(): boolean;
205
+ /**
206
+ * Get all fields
207
+ */
208
+ getAllFields(): FormField[];
209
+ /**
210
+ * Iterate over all fields
211
+ */
212
+ [Symbol.iterator](): Generator<FormField>;
213
+ }
214
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}