@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/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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"}
|