@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.
- package/LICENSE +191 -0
- package/README.md +985 -0
- package/binding.gyp +73 -0
- package/dist/annot.d.ts +458 -0
- package/dist/annot.d.ts.map +1 -0
- package/dist/annot.js +697 -0
- package/dist/annot.js.map +1 -0
- package/dist/archive.d.ts +128 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +268 -0
- package/dist/archive.js.map +1 -0
- package/dist/buffer.d.ts +572 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +971 -0
- package/dist/buffer.js.map +1 -0
- package/dist/colorspace.d.ts +287 -0
- package/dist/colorspace.d.ts.map +1 -0
- package/dist/colorspace.js +542 -0
- package/dist/colorspace.js.map +1 -0
- package/dist/context.d.ts +184 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +320 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie.d.ts +164 -0
- package/dist/cookie.d.ts.map +1 -0
- package/dist/cookie.js +306 -0
- package/dist/cookie.js.map +1 -0
- package/dist/device.d.ts +169 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +350 -0
- package/dist/device.js.map +1 -0
- package/dist/display-list.d.ts +202 -0
- package/dist/display-list.d.ts.map +1 -0
- package/dist/display-list.js +410 -0
- package/dist/display-list.js.map +1 -0
- package/dist/document.d.ts +637 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +902 -0
- package/dist/document.js.map +1 -0
- package/dist/easy.d.ts +423 -0
- package/dist/easy.d.ts.map +1 -0
- package/dist/easy.js +644 -0
- package/dist/easy.js.map +1 -0
- package/dist/enhanced.d.ts +226 -0
- package/dist/enhanced.d.ts.map +1 -0
- package/dist/enhanced.js +368 -0
- package/dist/enhanced.js.map +1 -0
- package/dist/filter.d.ts +51 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +381 -0
- package/dist/filter.js.map +1 -0
- package/dist/font.d.ts +222 -0
- package/dist/font.d.ts.map +1 -0
- package/dist/font.js +381 -0
- package/dist/font.js.map +1 -0
- package/dist/form.d.ts +214 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +497 -0
- package/dist/form.js.map +1 -0
- package/dist/geometry.d.ts +469 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +780 -0
- package/dist/geometry.js.map +1 -0
- package/dist/image.d.ts +172 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +348 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +171 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +339 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +168 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +343 -0
- package/dist/link.js.map +1 -0
- package/dist/micropdf.d.ts +40 -0
- package/dist/micropdf.d.ts.map +1 -0
- package/dist/micropdf.js +45 -0
- package/dist/micropdf.js.map +1 -0
- package/dist/nanopdf.d.ts +40 -0
- package/dist/nanopdf.d.ts.map +1 -0
- package/dist/nanopdf.js +45 -0
- package/dist/nanopdf.js.map +1 -0
- package/dist/native.d.ts +242 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +509 -0
- package/dist/native.js.map +1 -0
- package/dist/output.d.ts +166 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +365 -0
- package/dist/output.js.map +1 -0
- package/dist/path.d.ts +420 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +687 -0
- package/dist/path.js.map +1 -0
- package/dist/pdf/object.d.ts +489 -0
- package/dist/pdf/object.d.ts.map +1 -0
- package/dist/pdf/object.js +1045 -0
- package/dist/pdf/object.js.map +1 -0
- package/dist/pixmap.d.ts +315 -0
- package/dist/pixmap.d.ts.map +1 -0
- package/dist/pixmap.js +590 -0
- package/dist/pixmap.js.map +1 -0
- package/dist/profiler.d.ts +159 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +380 -0
- package/dist/profiler.js.map +1 -0
- package/dist/render-options.d.ts +227 -0
- package/dist/render-options.d.ts.map +1 -0
- package/dist/render-options.js +130 -0
- package/dist/render-options.js.map +1 -0
- package/dist/resource-tracking.d.ts +332 -0
- package/dist/resource-tracking.d.ts.map +1 -0
- package/dist/resource-tracking.js +653 -0
- package/dist/resource-tracking.js.map +1 -0
- package/dist/simple.d.ts +276 -0
- package/dist/simple.d.ts.map +1 -0
- package/dist/simple.js +343 -0
- package/dist/simple.js.map +1 -0
- package/dist/stext.d.ts +290 -0
- package/dist/stext.d.ts.map +1 -0
- package/dist/stext.js +312 -0
- package/dist/stext.js.map +1 -0
- package/dist/stream.d.ts +174 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +476 -0
- package/dist/stream.js.map +1 -0
- package/dist/text.d.ts +337 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +454 -0
- package/dist/text.js.map +1 -0
- package/dist/typed-arrays.d.ts +127 -0
- package/dist/typed-arrays.d.ts.map +1 -0
- package/dist/typed-arrays.js +410 -0
- package/dist/typed-arrays.js.map +1 -0
- package/dist/types.d.ts +358 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +216 -0
- package/dist/types.js.map +1 -0
- package/native/annot.cc +557 -0
- package/native/buffer.cc +204 -0
- package/native/colorspace.cc +166 -0
- package/native/context.cc +84 -0
- package/native/cookie.cc +179 -0
- package/native/device.cc +179 -0
- package/native/display_list.cc +179 -0
- package/native/document.cc +268 -0
- package/native/enhanced.cc +70 -0
- package/native/font.cc +282 -0
- package/native/form.cc +523 -0
- package/native/geometry.cc +255 -0
- package/native/image.cc +216 -0
- package/native/include/micropdf/enhanced.h +38 -0
- package/native/include/micropdf/types.h +36 -0
- package/native/include/micropdf.h +106 -0
- package/native/include/mupdf-ffi.h +39 -0
- package/native/include/mupdf.h +11 -0
- package/native/include/mupdf_minimal.h +381 -0
- package/native/lib/linux-x64/libmicropdf.a +0 -0
- package/native/link.cc +234 -0
- package/native/micropdf.cc +71 -0
- package/native/output.cc +229 -0
- package/native/page.cc +572 -0
- package/native/path.cc +259 -0
- package/native/pixmap.cc +240 -0
- package/native/stext.cc +610 -0
- package/native/stream.cc +239 -0
- package/package.json +120 -0
- package/scripts/build-from-rust.js +97 -0
- 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
|
+
|