@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/filter.js ADDED
@@ -0,0 +1,381 @@
1
+ /**
2
+ * Filter - PDF compression and decompression filters
3
+ *
4
+ * This implementation mirrors the Rust `pdf::filter` module for 100% API compatibility.
5
+ */
6
+ import { deflateSync, inflateSync } from 'node:zlib';
7
+ import { MicroPDFError } from './types.js';
8
+ // ============================================================================
9
+ // FlateDecode (zlib/deflate)
10
+ // ============================================================================
11
+ /**
12
+ * Compress data using FlateDecode (zlib deflate)
13
+ */
14
+ export function flateEncode(data) {
15
+ try {
16
+ const compressed = deflateSync(globalThis.Buffer.from(data));
17
+ return new Uint8Array(compressed);
18
+ }
19
+ catch (error) {
20
+ throw MicroPDFError.system('FlateDecode encoding failed', error instanceof Error ? error : undefined);
21
+ }
22
+ }
23
+ /**
24
+ * Decompress FlateDecode (zlib inflate) data
25
+ */
26
+ export function flateDecode(data) {
27
+ try {
28
+ const decompressed = inflateSync(globalThis.Buffer.from(data));
29
+ return new Uint8Array(decompressed);
30
+ }
31
+ catch (error) {
32
+ throw MicroPDFError.system('FlateDecode decoding failed', error instanceof Error ? error : undefined);
33
+ }
34
+ }
35
+ // ============================================================================
36
+ // ASCIIHexDecode
37
+ // ============================================================================
38
+ /**
39
+ * Encode data to ASCII hex
40
+ */
41
+ export function asciiHexEncode(data) {
42
+ const hex = globalThis.Buffer.from(data).toString('hex').toUpperCase();
43
+ return new TextEncoder().encode(hex);
44
+ }
45
+ /**
46
+ * Decode ASCII hex data
47
+ */
48
+ export function asciiHexDecode(data) {
49
+ const str = new TextDecoder().decode(data);
50
+ // Remove whitespace and EOD marker
51
+ let hex = str.replace(/[\s>]/g, '');
52
+ // Handle odd length by appending 0
53
+ if (hex.length % 2 !== 0) {
54
+ hex += '0';
55
+ }
56
+ // Validate hex characters
57
+ if (!/^[\dA-Fa-f]*$/.test(hex)) {
58
+ throw MicroPDFError.argument('Invalid ASCIIHex data');
59
+ }
60
+ return new Uint8Array(globalThis.Buffer.from(hex, 'hex'));
61
+ }
62
+ // ============================================================================
63
+ // ASCII85Decode
64
+ // ============================================================================
65
+ // ASCII85 constants (for potential future use in optimized encoding)
66
+ // const ASCII85_ENCODE_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
67
+ // const POW85 = [85 * 85 * 85 * 85, 85 * 85 * 85, 85 * 85, 85, 1];
68
+ /**
69
+ * Encode data to ASCII85
70
+ */
71
+ export function ascii85Encode(data) {
72
+ const result = [];
73
+ // Process 4 bytes at a time
74
+ let i = 0;
75
+ while (i < data.length) {
76
+ const chunk = data.slice(i, i + 4);
77
+ i += 4;
78
+ // Pad with zeros if needed
79
+ const padded = new Uint8Array(4);
80
+ padded.set(chunk);
81
+ // Convert to 32-bit value
82
+ const value = (padded[0] << 24) | (padded[1] << 16) | (padded[2] << 8) | padded[3];
83
+ // Special case: all zeros -> 'z'
84
+ if (value === 0 && chunk.length === 4) {
85
+ result.push(122); // 'z'
86
+ }
87
+ else {
88
+ // Convert to base-85
89
+ const encoded = [];
90
+ let v = value >>> 0; // Ensure unsigned
91
+ for (let j = 4; j >= 0; j--) {
92
+ encoded[j] = (v % 85) + 33;
93
+ v = Math.floor(v / 85);
94
+ }
95
+ // Only output as many characters as needed
96
+ const outLen = chunk.length + 1;
97
+ for (let j = 0; j < outLen; j++) {
98
+ result.push(encoded[j]);
99
+ }
100
+ }
101
+ }
102
+ // Add EOD marker
103
+ result.push(126); // '~'
104
+ result.push(62); // '>'
105
+ return new Uint8Array(result);
106
+ }
107
+ /**
108
+ * Decode ASCII85 data
109
+ */
110
+ export function ascii85Decode(data) {
111
+ const result = [];
112
+ const str = new TextDecoder().decode(data);
113
+ // Remove whitespace
114
+ const cleaned = str.replace(/\s/g, '');
115
+ // Remove EOD marker if present
116
+ const content = cleaned.replace(/~>$/, '');
117
+ let i = 0;
118
+ while (i < content.length) {
119
+ // Handle 'z' abbreviation for all zeros
120
+ if (content[i] === 'z') {
121
+ result.push(0, 0, 0, 0);
122
+ i++;
123
+ continue;
124
+ }
125
+ // Get next group (up to 5 characters)
126
+ let group = '';
127
+ let j = 0;
128
+ while (j < 5 && i + j < content.length && content[i + j] !== 'z') {
129
+ group += content[i + j];
130
+ j++;
131
+ }
132
+ if (group.length === 0)
133
+ break;
134
+ // Pad with 'u' if needed
135
+ const padCount = 5 - group.length;
136
+ const paddedGroup = group + 'u'.repeat(padCount);
137
+ // Convert from base-85
138
+ let value = 0;
139
+ for (let k = 0; k < 5; k++) {
140
+ const char = paddedGroup.charCodeAt(k);
141
+ if (char < 33 || char > 117) {
142
+ throw MicroPDFError.argument('Invalid ASCII85 character');
143
+ }
144
+ value = value * 85 + (char - 33);
145
+ }
146
+ // Convert to bytes
147
+ const bytes = [
148
+ (value >>> 24) & 0xff,
149
+ (value >>> 16) & 0xff,
150
+ (value >>> 8) & 0xff,
151
+ value & 0xff
152
+ ];
153
+ // Output only the non-padded bytes
154
+ const outCount = 4 - padCount;
155
+ for (let k = 0; k < outCount; k++) {
156
+ result.push(bytes[k]);
157
+ }
158
+ i += group.length;
159
+ }
160
+ return new Uint8Array(result);
161
+ }
162
+ // ============================================================================
163
+ // RunLengthDecode
164
+ // ============================================================================
165
+ /**
166
+ * Encode data using Run-Length Encoding
167
+ */
168
+ export function runLengthEncode(data) {
169
+ if (data.length === 0) {
170
+ return new Uint8Array([128]); // Just EOD
171
+ }
172
+ const result = [];
173
+ let i = 0;
174
+ while (i < data.length) {
175
+ // Count consecutive identical bytes
176
+ let runLength = 1;
177
+ while (i + runLength < data.length && data[i] === data[i + runLength] && runLength < 128) {
178
+ runLength++;
179
+ }
180
+ if (runLength > 1) {
181
+ // Run of identical bytes
182
+ result.push(257 - runLength); // Length byte
183
+ result.push(data[i]); // Value byte
184
+ i += runLength;
185
+ }
186
+ else {
187
+ // Count consecutive different bytes
188
+ let litLength = 1;
189
+ while (i + litLength < data.length && litLength < 128) {
190
+ // Check if next bytes start a run
191
+ if (i + litLength + 1 < data.length && data[i + litLength] === data[i + litLength + 1]) {
192
+ break;
193
+ }
194
+ litLength++;
195
+ }
196
+ // Literal bytes
197
+ result.push(litLength - 1); // Length byte
198
+ for (let j = 0; j < litLength; j++) {
199
+ result.push(data[i + j]);
200
+ }
201
+ i += litLength;
202
+ }
203
+ }
204
+ result.push(128); // EOD
205
+ return new Uint8Array(result);
206
+ }
207
+ /**
208
+ * Decode Run-Length encoded data
209
+ */
210
+ export function runLengthDecode(data) {
211
+ const result = [];
212
+ let i = 0;
213
+ while (i < data.length) {
214
+ const length = data[i];
215
+ i++;
216
+ if (length === 128) {
217
+ // EOD marker
218
+ break;
219
+ }
220
+ else if (length < 128) {
221
+ // Literal bytes: copy (length + 1) bytes
222
+ const count = length + 1;
223
+ for (let j = 0; j < count && i < data.length; j++) {
224
+ result.push(data[i]);
225
+ i++;
226
+ }
227
+ }
228
+ else {
229
+ // Run: repeat next byte (257 - length) times
230
+ const count = 257 - length;
231
+ const byte = data[i];
232
+ i++;
233
+ for (let j = 0; j < count; j++) {
234
+ result.push(byte);
235
+ }
236
+ }
237
+ }
238
+ return new Uint8Array(result);
239
+ }
240
+ // ============================================================================
241
+ // LZWDecode
242
+ // ============================================================================
243
+ /**
244
+ * Decode LZW compressed data
245
+ */
246
+ export function lzwDecode(data, earlyChange = true) {
247
+ // LZW implementation
248
+ const CLEAR_CODE = 256;
249
+ const EOD_CODE = 257;
250
+ const result = [];
251
+ const table = [];
252
+ // Initialize table with single-byte entries
253
+ for (let i = 0; i < 256; i++) {
254
+ table.push(new Uint8Array([i]));
255
+ }
256
+ table.push(new Uint8Array(0)); // CLEAR_CODE placeholder
257
+ table.push(new Uint8Array(0)); // EOD_CODE placeholder
258
+ let codeSize = 9;
259
+ let bitPos = 0;
260
+ let prevCode = null;
261
+ function readCode() {
262
+ let code = 0;
263
+ for (let i = 0; i < codeSize; i++) {
264
+ const bytePos = Math.floor(bitPos / 8);
265
+ const bitOffset = bitPos % 8;
266
+ if (bytePos < data.length) {
267
+ code |= ((data[bytePos] >> (7 - bitOffset)) & 1) << (codeSize - 1 - i);
268
+ }
269
+ bitPos++;
270
+ }
271
+ return code;
272
+ }
273
+ while (bitPos < data.length * 8) {
274
+ const code = readCode();
275
+ if (code === EOD_CODE) {
276
+ break;
277
+ }
278
+ if (code === CLEAR_CODE) {
279
+ // Reset table
280
+ table.length = 258;
281
+ codeSize = 9;
282
+ prevCode = null;
283
+ continue;
284
+ }
285
+ let entry;
286
+ if (code < table.length) {
287
+ entry = table[code];
288
+ }
289
+ else if (code === table.length && prevCode !== null) {
290
+ // Special case: code not yet in table
291
+ const prev = table[prevCode];
292
+ entry = new Uint8Array(prev.length + 1);
293
+ entry.set(prev);
294
+ entry[prev.length] = prev[0];
295
+ }
296
+ else {
297
+ throw MicroPDFError.argument('Invalid LZW code');
298
+ }
299
+ // Output entry
300
+ for (const byte of entry) {
301
+ result.push(byte);
302
+ }
303
+ // Add to table
304
+ if (prevCode !== null && table.length < 4096) {
305
+ const prev = table[prevCode];
306
+ const newEntry = new Uint8Array(prev.length + 1);
307
+ newEntry.set(prev);
308
+ newEntry[prev.length] = entry[0];
309
+ table.push(newEntry);
310
+ // Increase code size if needed
311
+ const nextSize = table.length + (earlyChange ? 0 : 1);
312
+ if (nextSize > 1 << codeSize && codeSize < 12) {
313
+ codeSize++;
314
+ }
315
+ }
316
+ prevCode = code;
317
+ }
318
+ return new Uint8Array(result);
319
+ }
320
+ // ============================================================================
321
+ // Generic Filter Interface
322
+ // ============================================================================
323
+ /**
324
+ * Decode data using the specified filter
325
+ */
326
+ export function decodeFilter(filter, data, params) {
327
+ switch (filter) {
328
+ case 'FlateDecode':
329
+ return flateDecode(data);
330
+ case 'ASCIIHexDecode':
331
+ return asciiHexDecode(data);
332
+ case 'ASCII85Decode':
333
+ return ascii85Decode(data);
334
+ case 'RunLengthDecode':
335
+ return runLengthDecode(data);
336
+ case 'LZWDecode':
337
+ return lzwDecode(data, params?.['EarlyChange'] !== 0);
338
+ case 'DCTDecode':
339
+ throw MicroPDFError.notImplemented('DCTDecode filter');
340
+ case 'JPXDecode':
341
+ throw MicroPDFError.notImplemented('JPXDecode filter');
342
+ case 'JBIG2Decode':
343
+ throw MicroPDFError.notImplemented('JBIG2Decode filter');
344
+ case 'CCITTFaxDecode':
345
+ throw MicroPDFError.notImplemented('CCITTFaxDecode filter');
346
+ case 'Crypt':
347
+ throw MicroPDFError.notImplemented('Crypt filter');
348
+ default:
349
+ throw MicroPDFError.argument(`Unsupported filter: ${filter}`);
350
+ }
351
+ }
352
+ /**
353
+ * Encode data using the specified filter
354
+ */
355
+ export function encodeFilter(filter, data, _params) {
356
+ switch (filter) {
357
+ case 'FlateDecode':
358
+ return flateEncode(data);
359
+ case 'ASCIIHexDecode':
360
+ return asciiHexEncode(data);
361
+ case 'ASCII85Decode':
362
+ return ascii85Encode(data);
363
+ case 'RunLengthDecode':
364
+ return runLengthEncode(data);
365
+ case 'LZWDecode':
366
+ throw MicroPDFError.notImplemented('LZWEncode');
367
+ case 'DCTDecode':
368
+ throw MicroPDFError.notImplemented('DCTEncode filter');
369
+ case 'JPXDecode':
370
+ throw MicroPDFError.notImplemented('JPXEncode filter');
371
+ case 'JBIG2Decode':
372
+ throw MicroPDFError.notImplemented('JBIG2Encode filter');
373
+ case 'CCITTFaxDecode':
374
+ throw MicroPDFError.notImplemented('CCITTFaxEncode filter');
375
+ case 'Crypt':
376
+ throw MicroPDFError.notImplemented('Crypt filter');
377
+ default:
378
+ throw MicroPDFError.argument(`Unsupported filter: ${filter}`);
379
+ }
380
+ }
381
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
package/dist/font.d.ts ADDED
@@ -0,0 +1,222 @@
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 { Rect, type RectLike } from './geometry.js';
8
+ import { Path } from './path.js';
9
+ /**
10
+ * Font flags
11
+ */
12
+ export declare enum FontFlags {
13
+ Bold = 1,
14
+ Italic = 2,
15
+ Serif = 4,
16
+ Monospaced = 8,
17
+ Embedded = 16
18
+ }
19
+ /**
20
+ * A PDF font
21
+ */
22
+ export declare class Font {
23
+ private _ctx?;
24
+ private _font?;
25
+ private _name;
26
+ private _flags;
27
+ private _bbox;
28
+ private _ascender;
29
+ private _descender;
30
+ private _refCount;
31
+ private _glyphs;
32
+ private _encoding;
33
+ constructor(name: string, flags?: number);
34
+ /**
35
+ * @internal Check if FFI bindings are available
36
+ */
37
+ get hasNativeHandle(): boolean;
38
+ /**
39
+ * Create a new font
40
+ */
41
+ static create(name: string, flags?: number): Font;
42
+ /**
43
+ * Create font from memory buffer using FFI
44
+ * @throws Error when native bindings are not available
45
+ */
46
+ static createFromMemory(name: string, data: Uint8Array): Font;
47
+ /**
48
+ * Create font from file using FFI
49
+ * @throws Error when native bindings are not available
50
+ */
51
+ static createFromFile(path: string): Font;
52
+ keep(): this;
53
+ drop(): void;
54
+ /**
55
+ * Clone this font
56
+ */
57
+ clone(): Font;
58
+ get name(): string;
59
+ /**
60
+ * Check if font is bold
61
+ */
62
+ isBold(): boolean;
63
+ /**
64
+ * Check if font is italic
65
+ */
66
+ isItalic(): boolean;
67
+ /**
68
+ * Check if font is serif
69
+ */
70
+ isSerif(): boolean;
71
+ /**
72
+ * Check if font is monospaced
73
+ */
74
+ isMonospaced(): boolean;
75
+ /**
76
+ * Check if font is embedded
77
+ */
78
+ isEmbedded(): boolean;
79
+ /**
80
+ * Get font flags
81
+ */
82
+ get flags(): number;
83
+ /**
84
+ * Get font bounding box
85
+ */
86
+ getBBox(): Rect;
87
+ /**
88
+ * Set font bounding box
89
+ */
90
+ setBBox(bbox: RectLike): void;
91
+ /**
92
+ * Get font ascender (distance above baseline)
93
+ */
94
+ getAscender(): number;
95
+ /**
96
+ * Set font ascender
97
+ */
98
+ setAscender(ascender: number): void;
99
+ /**
100
+ * Get font descender (distance below baseline)
101
+ */
102
+ getDescender(): number;
103
+ /**
104
+ * Set font descender
105
+ */
106
+ setDescender(descender: number): void;
107
+ /**
108
+ * Encode a Unicode character to a glyph ID
109
+ */
110
+ encodeCharacter(unicode: number): number;
111
+ /**
112
+ * Encode character with fallback
113
+ */
114
+ encodeCharacterWithFallback(unicode: number, fallback?: number): number;
115
+ /**
116
+ * Set character encoding
117
+ */
118
+ setEncoding(unicode: number, glyph: number): void;
119
+ /**
120
+ * Get glyph advance width
121
+ */
122
+ advanceGlyph(glyph: number, wmode?: number): number;
123
+ /**
124
+ * Get glyph bounding box
125
+ */
126
+ boundGlyph(glyph: number): Rect;
127
+ /**
128
+ * Get glyph outline as a path
129
+ */
130
+ outlineGlyph(glyph: number): Path | null;
131
+ /**
132
+ * Get glyph name
133
+ */
134
+ glyphName(glyph: number): string;
135
+ /**
136
+ * Add glyph info
137
+ */
138
+ addGlyph(glyph: number, info: GlyphInfo): void;
139
+ /**
140
+ * Get glyph info
141
+ */
142
+ getGlyphInfo(glyph: number): GlyphInfo | undefined;
143
+ /**
144
+ * Check if font is valid
145
+ */
146
+ isValid(): boolean;
147
+ /**
148
+ * Measure text width
149
+ */
150
+ measureText(text: string, size?: number): number;
151
+ /**
152
+ * Get text bounding box
153
+ */
154
+ measureTextBounds(text: string, size?: number): Rect;
155
+ }
156
+ /**
157
+ * Glyph information
158
+ */
159
+ export interface GlyphInfo {
160
+ name: string;
161
+ advanceX: number;
162
+ advanceY: number;
163
+ bbox: Rect;
164
+ outline?: Path;
165
+ }
166
+ /**
167
+ * Font manager for loading and caching fonts
168
+ */
169
+ export declare class FontManager {
170
+ private _fonts;
171
+ private _defaultFont;
172
+ constructor();
173
+ /**
174
+ * Get the singleton instance
175
+ */
176
+ private static _instance;
177
+ static getInstance(): FontManager;
178
+ /**
179
+ * Load a font by name
180
+ */
181
+ loadFont(name: string): Font | null;
182
+ /**
183
+ * Register a font
184
+ */
185
+ registerFont(name: string, font: Font): void;
186
+ /**
187
+ * Get default font
188
+ */
189
+ getDefaultFont(): Font;
190
+ /**
191
+ * Set default font
192
+ */
193
+ setDefaultFont(font: Font): void;
194
+ /**
195
+ * Get all registered font names
196
+ */
197
+ getFontNames(): string[];
198
+ /**
199
+ * Clear all fonts
200
+ */
201
+ clear(): void;
202
+ }
203
+ /**
204
+ * Standard PDF font names
205
+ */
206
+ export declare const StandardFonts: {
207
+ readonly TimesRoman: "Times-Roman";
208
+ readonly TimesBold: "Times-Bold";
209
+ readonly TimesItalic: "Times-Italic";
210
+ readonly TimesBoldItalic: "Times-BoldItalic";
211
+ readonly Helvetica: "Helvetica";
212
+ readonly HelveticaBold: "Helvetica-Bold";
213
+ readonly HelveticaOblique: "Helvetica-Oblique";
214
+ readonly HelveticaBoldOblique: "Helvetica-BoldOblique";
215
+ readonly Courier: "Courier";
216
+ readonly CourierBold: "Courier-Bold";
217
+ readonly CourierOblique: "Courier-Oblique";
218
+ readonly CourierBoldOblique: "Courier-BoldOblique";
219
+ readonly Symbol: "Symbol";
220
+ readonly ZapfDingbats: "ZapfDingbats";
221
+ };
222
+ //# sourceMappingURL=font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"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"}