@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/native/font.cc ADDED
@@ -0,0 +1,282 @@
1
+ /**
2
+ * MicroPDF Font Bindings
3
+ *
4
+ * N-API bindings for font operations.
5
+ * Fonts provide glyph rendering and text metrics.
6
+ */
7
+
8
+ #include <napi.h>
9
+ #include "include/mupdf_minimal.h"
10
+
11
+ /**
12
+ * Create a new font
13
+ *
14
+ * @param ctx - Context handle
15
+ * @param name - Font name
16
+ * @param isBold - Is font bold
17
+ * @param isItalic - Is font italic
18
+ * @returns Font handle
19
+ */
20
+ Napi::BigInt NewFont(const Napi::CallbackInfo& info) {
21
+ Napi::Env env = info.Env();
22
+
23
+ if (info.Length() < 4) {
24
+ Napi::TypeError::New(env, "Expected 4 arguments: ctx, name, isBold, isItalic")
25
+ .ThrowAsJavaScriptException();
26
+ return Napi::BigInt::New(env, static_cast<uint64_t>(0));
27
+ }
28
+
29
+ bool lossless;
30
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
31
+ std::string name = info[1].As<Napi::String>().Utf8Value();
32
+ int32_t is_bold = info[2].As<Napi::Boolean>().Value() ? 1 : 0;
33
+ int32_t is_italic = info[3].As<Napi::Boolean>().Value() ? 1 : 0;
34
+
35
+ uint64_t font_handle = fz_new_font(ctx_handle, name.c_str(), is_bold, is_italic, 0);
36
+
37
+ return Napi::BigInt::New(env, font_handle);
38
+ }
39
+
40
+ /**
41
+ * Load font from file
42
+ *
43
+ * @param ctx - Context handle
44
+ * @param name - Font name
45
+ * @param path - Path to font file
46
+ * @param index - Font index (for font collections)
47
+ * @returns Font handle
48
+ */
49
+ Napi::BigInt NewFontFromFile(const Napi::CallbackInfo& info) {
50
+ Napi::Env env = info.Env();
51
+
52
+ if (info.Length() < 4) {
53
+ Napi::TypeError::New(env, "Expected 4 arguments: ctx, name, path, index")
54
+ .ThrowAsJavaScriptException();
55
+ return Napi::BigInt::New(env, static_cast<uint64_t>(0));
56
+ }
57
+
58
+ bool lossless;
59
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
60
+ std::string name = info[1].As<Napi::String>().Utf8Value();
61
+ std::string path = info[2].As<Napi::String>().Utf8Value();
62
+ int32_t index = info[3].As<Napi::Number>().Int32Value();
63
+
64
+ uint64_t font_handle = fz_new_font_from_file(
65
+ ctx_handle,
66
+ name.c_str(),
67
+ path.c_str(),
68
+ index,
69
+ 0
70
+ );
71
+
72
+ return Napi::BigInt::New(env, font_handle);
73
+ }
74
+
75
+ /**
76
+ * Load font from buffer
77
+ *
78
+ * @param ctx - Context handle
79
+ * @param name - Font name
80
+ * @param data - Buffer containing font data
81
+ * @param index - Font index (for font collections)
82
+ * @returns Font handle
83
+ */
84
+ Napi::BigInt NewFontFromMemory(const Napi::CallbackInfo& info) {
85
+ Napi::Env env = info.Env();
86
+
87
+ if (info.Length() < 4) {
88
+ Napi::TypeError::New(env, "Expected 4 arguments: ctx, name, data, index")
89
+ .ThrowAsJavaScriptException();
90
+ return Napi::BigInt::New(env, static_cast<uint64_t>(0));
91
+ }
92
+
93
+ bool lossless;
94
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
95
+ std::string name = info[1].As<Napi::String>().Utf8Value();
96
+ Napi::Buffer<uint8_t> buffer = info[2].As<Napi::Buffer<uint8_t>>();
97
+ int32_t index = info[3].As<Napi::Number>().Int32Value();
98
+
99
+ uint64_t font_handle = fz_new_font_from_memory(
100
+ ctx_handle,
101
+ name.c_str(),
102
+ buffer.Data(),
103
+ buffer.Length(),
104
+ index,
105
+ 0
106
+ );
107
+
108
+ return Napi::BigInt::New(env, font_handle);
109
+ }
110
+
111
+ /**
112
+ * Drop font handle
113
+ *
114
+ * @param ctx - Context handle
115
+ * @param font - Font handle
116
+ */
117
+ Napi::Value DropFont(const Napi::CallbackInfo& info) {
118
+ Napi::Env env = info.Env();
119
+
120
+ if (info.Length() < 2) {
121
+ Napi::TypeError::New(env, "Expected 2 arguments: ctx, font")
122
+ .ThrowAsJavaScriptException();
123
+ return env.Undefined();
124
+ }
125
+
126
+ bool lossless;
127
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
128
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
129
+
130
+ fz_drop_font(ctx_handle, font_handle);
131
+
132
+ return env.Undefined();
133
+ }
134
+
135
+ /**
136
+ * Get font name
137
+ *
138
+ * @param ctx - Context handle
139
+ * @param font - Font handle
140
+ * @returns Font name string
141
+ */
142
+ Napi::String FontName(const Napi::CallbackInfo& info) {
143
+ Napi::Env env = info.Env();
144
+
145
+ if (info.Length() < 2) {
146
+ Napi::TypeError::New(env, "Expected 2 arguments: ctx, font")
147
+ .ThrowAsJavaScriptException();
148
+ return Napi::String::New(env, "");
149
+ }
150
+
151
+ bool lossless;
152
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
153
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
154
+
155
+ char name_buffer[256] = {0};
156
+ fz_font_name(ctx_handle, font_handle, name_buffer, sizeof(name_buffer));
157
+
158
+ return Napi::String::New(env, name_buffer);
159
+ }
160
+
161
+ /**
162
+ * Check if font is bold
163
+ *
164
+ * @param ctx - Context handle
165
+ * @param font - Font handle
166
+ * @returns Boolean
167
+ */
168
+ Napi::Boolean FontIsBold(const Napi::CallbackInfo& info) {
169
+ Napi::Env env = info.Env();
170
+
171
+ if (info.Length() < 2) {
172
+ Napi::TypeError::New(env, "Expected 2 arguments: ctx, font")
173
+ .ThrowAsJavaScriptException();
174
+ return Napi::Boolean::New(env, false);
175
+ }
176
+
177
+ bool lossless;
178
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
179
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
180
+
181
+ int32_t is_bold = fz_font_is_bold(ctx_handle, font_handle);
182
+
183
+ return Napi::Boolean::New(env, is_bold != 0);
184
+ }
185
+
186
+ /**
187
+ * Check if font is italic
188
+ *
189
+ * @param ctx - Context handle
190
+ * @param font - Font handle
191
+ * @returns Boolean
192
+ */
193
+ Napi::Boolean FontIsItalic(const Napi::CallbackInfo& info) {
194
+ Napi::Env env = info.Env();
195
+
196
+ if (info.Length() < 2) {
197
+ Napi::TypeError::New(env, "Expected 2 arguments: ctx, font")
198
+ .ThrowAsJavaScriptException();
199
+ return Napi::Boolean::New(env, false);
200
+ }
201
+
202
+ bool lossless;
203
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
204
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
205
+
206
+ int32_t is_italic = fz_font_is_italic(ctx_handle, font_handle);
207
+
208
+ return Napi::Boolean::New(env, is_italic != 0);
209
+ }
210
+
211
+ /**
212
+ * Encode a Unicode character to glyph ID
213
+ *
214
+ * @param ctx - Context handle
215
+ * @param font - Font handle
216
+ * @param unicode - Unicode code point
217
+ * @returns Glyph ID
218
+ */
219
+ Napi::Number EncodeCharacter(const Napi::CallbackInfo& info) {
220
+ Napi::Env env = info.Env();
221
+
222
+ if (info.Length() < 3) {
223
+ Napi::TypeError::New(env, "Expected 3 arguments: ctx, font, unicode")
224
+ .ThrowAsJavaScriptException();
225
+ return Napi::Number::New(env, 0);
226
+ }
227
+
228
+ bool lossless;
229
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
230
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
231
+ int32_t unicode = info[2].As<Napi::Number>().Int32Value();
232
+
233
+ int32_t glyph_id = fz_encode_character(ctx_handle, font_handle, unicode);
234
+
235
+ return Napi::Number::New(env, glyph_id);
236
+ }
237
+
238
+ /**
239
+ * Get glyph advance width
240
+ *
241
+ * @param ctx - Context handle
242
+ * @param font - Font handle
243
+ * @param glyphId - Glyph ID
244
+ * @returns Advance width
245
+ */
246
+ Napi::Number AdvanceGlyph(const Napi::CallbackInfo& info) {
247
+ Napi::Env env = info.Env();
248
+
249
+ if (info.Length() < 3) {
250
+ Napi::TypeError::New(env, "Expected 3 arguments: ctx, font, glyphId")
251
+ .ThrowAsJavaScriptException();
252
+ return Napi::Number::New(env, 0);
253
+ }
254
+
255
+ bool lossless;
256
+ uint64_t ctx_handle = info[0].As<Napi::BigInt>().Uint64Value(&lossless);
257
+ uint64_t font_handle = info[1].As<Napi::BigInt>().Uint64Value(&lossless);
258
+ int32_t glyph_id = info[2].As<Napi::Number>().Int32Value();
259
+
260
+ float advance = fz_advance_glyph(ctx_handle, font_handle, glyph_id, 0);
261
+
262
+ return Napi::Number::New(env, advance);
263
+ }
264
+
265
+ /**
266
+ * Initialize Font module exports
267
+ */
268
+ Napi::Object InitFont(Napi::Env env, Napi::Object exports) {
269
+ exports.Set("newFont", Napi::Function::New(env, NewFont));
270
+ exports.Set("newFontFromFile", Napi::Function::New(env, NewFontFromFile));
271
+ exports.Set("newFontFromMemory", Napi::Function::New(env, NewFontFromMemory));
272
+ exports.Set("dropFont", Napi::Function::New(env, DropFont));
273
+ exports.Set("fontName", Napi::Function::New(env, FontName));
274
+ exports.Set("fontIsBold", Napi::Function::New(env, FontIsBold));
275
+ exports.Set("fontIsItalic", Napi::Function::New(env, FontIsItalic));
276
+ exports.Set("encodeCharacter", Napi::Function::New(env, EncodeCharacter));
277
+ exports.Set("advanceGlyph", Napi::Function::New(env, AdvanceGlyph));
278
+
279
+ return exports;
280
+ }
281
+
282
+