pdf-codec 1.4.2 → 1.6.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/README.md +56 -15
- package/dist/assets/caladea-bold.cjs +5 -0
- package/dist/assets/caladea-bold.d.cts +4 -0
- package/dist/assets/caladea-bold.d.ts +4 -0
- package/dist/assets/caladea-bold.js +4 -0
- package/dist/assets/caladea-bolditalic.cjs +5 -0
- package/dist/assets/caladea-bolditalic.d.cts +4 -0
- package/dist/assets/caladea-bolditalic.d.ts +4 -0
- package/dist/assets/caladea-bolditalic.js +4 -0
- package/dist/assets/caladea-italic.cjs +5 -0
- package/dist/assets/caladea-italic.d.cts +4 -0
- package/dist/assets/caladea-italic.d.ts +4 -0
- package/dist/assets/caladea-italic.js +4 -0
- package/dist/assets/caladea-regular.cjs +5 -0
- package/dist/assets/caladea-regular.d.cts +4 -0
- package/dist/assets/caladea-regular.d.ts +4 -0
- package/dist/assets/caladea-regular.js +4 -0
- package/dist/assets/carlito-bold.cjs +5 -0
- package/dist/assets/carlito-bold.d.cts +4 -0
- package/dist/assets/carlito-bold.d.ts +4 -0
- package/dist/assets/carlito-bold.js +4 -0
- package/dist/assets/carlito-bolditalic.cjs +5 -0
- package/dist/assets/carlito-bolditalic.d.cts +4 -0
- package/dist/assets/carlito-bolditalic.d.ts +4 -0
- package/dist/assets/carlito-bolditalic.js +4 -0
- package/dist/assets/carlito-italic.cjs +5 -0
- package/dist/assets/carlito-italic.d.cts +4 -0
- package/dist/assets/carlito-italic.d.ts +4 -0
- package/dist/assets/carlito-italic.js +4 -0
- package/dist/assets/carlito-regular.cjs +5 -0
- package/dist/assets/carlito-regular.d.cts +4 -0
- package/dist/assets/carlito-regular.d.ts +4 -0
- package/dist/assets/carlito-regular.js +4 -0
- package/dist/cff-probe.cjs +133 -0
- package/dist/cff-probe.d.cts +10 -0
- package/dist/cff-probe.d.ts +10 -0
- package/dist/cff-probe.js +132 -0
- package/dist/cmap-table.cjs +108 -0
- package/dist/cmap-table.d.cts +6 -0
- package/dist/cmap-table.d.ts +6 -0
- package/dist/cmap-table.js +107 -0
- package/dist/content-write.cjs +36 -17
- package/dist/content-write.d.cts +9 -2
- package/dist/content-write.d.ts +9 -2
- package/dist/content-write.js +35 -16
- package/dist/crypto/aes.cjs +166 -0
- package/dist/crypto/aes.d.cts +6 -0
- package/dist/crypto/aes.d.ts +6 -0
- package/dist/crypto/aes.js +163 -0
- package/dist/crypto/md5.cjs +215 -0
- package/dist/crypto/md5.d.cts +4 -0
- package/dist/crypto/md5.d.ts +4 -0
- package/dist/crypto/md5.js +214 -0
- package/dist/crypto/rc4.cjs +29 -0
- package/dist/crypto/rc4.d.cts +4 -0
- package/dist/crypto/rc4.d.ts +4 -0
- package/dist/crypto/rc4.js +28 -0
- package/dist/crypto/sha2.cjs +261 -0
- package/dist/crypto/sha2.d.cts +6 -0
- package/dist/crypto/sha2.d.ts +6 -0
- package/dist/crypto/sha2.js +258 -0
- package/dist/diagnostics.cjs +7 -0
- package/dist/diagnostics.d.cts +4 -1
- package/dist/diagnostics.d.ts +4 -1
- package/dist/diagnostics.js +7 -1
- package/dist/document.cjs +38 -2
- package/dist/document.js +38 -2
- package/dist/embedded-font-CLedn-mT.d.cts +42 -0
- package/dist/embedded-font-CbqkKgBl.d.ts +42 -0
- package/dist/embedded-font-write.cjs +92 -0
- package/dist/embedded-font-write.d.cts +22 -0
- package/dist/embedded-font-write.d.ts +22 -0
- package/dist/embedded-font-write.js +90 -0
- package/dist/embedded-font.cjs +142 -0
- package/dist/embedded-font.d.cts +2 -0
- package/dist/embedded-font.d.ts +2 -0
- package/dist/embedded-font.js +138 -0
- package/dist/encrypt.cjs +264 -0
- package/dist/encrypt.d.cts +11 -0
- package/dist/encrypt.d.ts +11 -0
- package/dist/encrypt.js +263 -0
- package/dist/filters.cjs +19 -1
- package/dist/filters.js +19 -1
- package/dist/font-registry-Cn7P9lAh.d.ts +38 -0
- package/dist/font-registry-yby02snZ.d.cts +38 -0
- package/dist/font-registry.cjs +152 -0
- package/dist/font-registry.d.cts +2 -0
- package/dist/font-registry.d.ts +2 -0
- package/dist/font-registry.js +150 -0
- package/dist/font-substitutes.cjs +13 -0
- package/dist/font-substitutes.d.cts +5 -0
- package/dist/font-substitutes.d.ts +5 -0
- package/dist/font-substitutes.js +12 -0
- package/dist/font-tables.cjs +127 -0
- package/dist/font-tables.d.cts +43 -0
- package/dist/font-tables.d.ts +43 -0
- package/dist/font-tables.js +122 -0
- package/dist/fonts.cjs +1 -0
- package/dist/fonts.d.cts +2 -1
- package/dist/fonts.d.ts +2 -1
- package/dist/fonts.js +1 -1
- package/dist/glyf.cjs +127 -0
- package/dist/glyf.d.cts +31 -0
- package/dist/glyf.d.ts +31 -0
- package/dist/glyf.js +125 -0
- package/dist/{math-hmtx.cjs → hmtx-table.cjs} +3 -3
- package/dist/{math-hmtx.d.ts → hmtx-table.d.cts} +2 -2
- package/dist/{math-hmtx.d.cts → hmtx-table.d.ts} +2 -2
- package/dist/{math-hmtx.js → hmtx-table.js} +3 -3
- package/dist/image/ccitt.cjs +488 -0
- package/dist/image/ccitt.d.cts +17 -0
- package/dist/image/ccitt.d.ts +17 -0
- package/dist/image/ccitt.js +487 -0
- package/dist/images-read.cjs +1 -4
- package/dist/images-read.js +2 -5
- package/dist/index.cjs +8 -0
- package/dist/index.d.cts +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.js +5 -3
- package/dist/interpret.cjs +173 -38
- package/dist/interpret.d.cts +27 -10
- package/dist/interpret.d.ts +27 -10
- package/dist/interpret.js +174 -39
- package/dist/math-font-write.cjs +3 -32
- package/dist/math-font-write.js +2 -31
- package/dist/math-font.cjs +7 -5
- package/dist/math-font.js +5 -3
- package/dist/math-table.d.cts +1 -1
- package/dist/math-table.d.ts +1 -1
- package/dist/{matrix-B3c2_a2f.d.cts → matrix-BHzJESll.d.cts} +2 -1
- package/dist/{matrix-B3c2_a2f.d.ts → matrix-BHzJESll.d.ts} +2 -1
- package/dist/matrix.cjs +2 -0
- package/dist/matrix.d.cts +2 -2
- package/dist/matrix.d.ts +2 -2
- package/dist/matrix.js +2 -1
- package/dist/measure.cjs +65 -14
- package/dist/measure.d.cts +8 -1
- package/dist/measure.d.ts +8 -1
- package/dist/measure.js +64 -15
- package/dist/objects.cjs +4 -0
- package/dist/objects.d.cts +2 -1
- package/dist/objects.d.ts +2 -1
- package/dist/objects.js +4 -1
- package/dist/read.cjs +43 -4
- package/dist/read.d.cts +1 -1
- package/dist/read.d.ts +1 -1
- package/dist/read.js +43 -4
- package/dist/sfnt-V08bb5ut.d.cts +21 -0
- package/dist/sfnt-V08bb5ut.d.ts +21 -0
- package/dist/sfnt-subset.cjs +250 -0
- package/dist/sfnt-subset.d.cts +11 -0
- package/dist/sfnt-subset.d.ts +11 -0
- package/dist/sfnt-subset.js +249 -0
- package/dist/sfnt.cjs +50 -4
- package/dist/sfnt.d.cts +2 -17
- package/dist/sfnt.d.ts +2 -17
- package/dist/sfnt.js +47 -5
- package/dist/tounicode.cjs +34 -0
- package/dist/tounicode.d.cts +5 -0
- package/dist/tounicode.d.ts +5 -0
- package/dist/tounicode.js +33 -0
- package/dist/write.cjs +81 -11
- package/dist/write.d.cts +6 -0
- package/dist/write.d.ts +6 -0
- package/dist/write.js +82 -12
- package/package.json +1 -1
- package/dist/math-cmap.cjs +0 -81
- package/dist/math-cmap.d.cts +0 -6
- package/dist/math-cmap.d.ts +0 -6
- package/dist/math-cmap.js +0 -80
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
//#region src/crypto/sha2.ts
|
|
2
|
+
const SHA256_BLOCK_BYTES = 64;
|
|
3
|
+
const SHA256_ROUNDS = 64;
|
|
4
|
+
const SHA512_BLOCK_BYTES = 128;
|
|
5
|
+
const SHA512_ROUNDS = 80;
|
|
6
|
+
const WORDS_PER_BLOCK = 16;
|
|
7
|
+
const MASK64 = 18446744073709551615n;
|
|
8
|
+
const K512 = [
|
|
9
|
+
4794697086780616226n,
|
|
10
|
+
8158064640168781261n,
|
|
11
|
+
13096744586834688815n,
|
|
12
|
+
16840607885511220156n,
|
|
13
|
+
4131703408338449720n,
|
|
14
|
+
6480981068601479193n,
|
|
15
|
+
10538285296894168987n,
|
|
16
|
+
12329834152419229976n,
|
|
17
|
+
15566598209576043074n,
|
|
18
|
+
1334009975649890238n,
|
|
19
|
+
2608012711638119052n,
|
|
20
|
+
6128411473006802146n,
|
|
21
|
+
8268148722764581231n,
|
|
22
|
+
9286055187155687089n,
|
|
23
|
+
11230858885718282805n,
|
|
24
|
+
13951009754708518548n,
|
|
25
|
+
16472876342353939154n,
|
|
26
|
+
17275323862435702243n,
|
|
27
|
+
1135362057144423861n,
|
|
28
|
+
2597628984639134821n,
|
|
29
|
+
3308224258029322869n,
|
|
30
|
+
5365058923640841347n,
|
|
31
|
+
6679025012923562964n,
|
|
32
|
+
8573033837759648693n,
|
|
33
|
+
10970295158949994411n,
|
|
34
|
+
12119686244451234320n,
|
|
35
|
+
12683024718118986047n,
|
|
36
|
+
13788192230050041572n,
|
|
37
|
+
14330467153632333762n,
|
|
38
|
+
15395433587784984357n,
|
|
39
|
+
489312712824947311n,
|
|
40
|
+
1452737877330783856n,
|
|
41
|
+
2861767655752347644n,
|
|
42
|
+
3322285676063803686n,
|
|
43
|
+
5560940570517711597n,
|
|
44
|
+
5996557281743188959n,
|
|
45
|
+
7280758554555802590n,
|
|
46
|
+
8532644243296465576n,
|
|
47
|
+
9350256976987008742n,
|
|
48
|
+
10552545826968843579n,
|
|
49
|
+
11727347734174303076n,
|
|
50
|
+
12113106623233404929n,
|
|
51
|
+
14000437183269869457n,
|
|
52
|
+
14369950271660146224n,
|
|
53
|
+
15101387698204529176n,
|
|
54
|
+
15463397548674623760n,
|
|
55
|
+
17586052441742319658n,
|
|
56
|
+
1182934255886127544n,
|
|
57
|
+
1847814050463011016n,
|
|
58
|
+
2177327727835720531n,
|
|
59
|
+
2830643537854262169n,
|
|
60
|
+
3796741975233480872n,
|
|
61
|
+
4115178125766777443n,
|
|
62
|
+
5681478168544905931n,
|
|
63
|
+
6601373596472566643n,
|
|
64
|
+
7507060721942968483n,
|
|
65
|
+
8399075790359081724n,
|
|
66
|
+
8693463985226723168n,
|
|
67
|
+
9568029438360202098n,
|
|
68
|
+
10144078919501101548n,
|
|
69
|
+
10430055236837252648n,
|
|
70
|
+
11840083180663258601n,
|
|
71
|
+
13761210420658862357n,
|
|
72
|
+
14299343276471374635n,
|
|
73
|
+
14566680578165727644n,
|
|
74
|
+
15097957966210449927n,
|
|
75
|
+
16922976911328602910n,
|
|
76
|
+
17689382322260857208n,
|
|
77
|
+
500013540394364858n,
|
|
78
|
+
748580250866718886n,
|
|
79
|
+
1242879168328830382n,
|
|
80
|
+
1977374033974150939n,
|
|
81
|
+
2944078676154940804n,
|
|
82
|
+
3659926193048069267n,
|
|
83
|
+
4368137639120453308n,
|
|
84
|
+
4836135668995329356n,
|
|
85
|
+
5532061633213252278n,
|
|
86
|
+
6448918945643986474n,
|
|
87
|
+
6902733635092675308n,
|
|
88
|
+
7801388544844847127n
|
|
89
|
+
];
|
|
90
|
+
const H512 = [
|
|
91
|
+
7640891576956012808n,
|
|
92
|
+
13503953896175478587n,
|
|
93
|
+
4354685564936845355n,
|
|
94
|
+
11912009170470909681n,
|
|
95
|
+
5840696475078001361n,
|
|
96
|
+
11170449401992604703n,
|
|
97
|
+
2270897969802886507n,
|
|
98
|
+
6620516959819538809n
|
|
99
|
+
];
|
|
100
|
+
const H384 = [
|
|
101
|
+
14680500436340154072n,
|
|
102
|
+
7105036623409894663n,
|
|
103
|
+
10473403895298186519n,
|
|
104
|
+
1526699215303891257n,
|
|
105
|
+
7436329637833083697n,
|
|
106
|
+
10282925794625328401n,
|
|
107
|
+
15784041429090275239n,
|
|
108
|
+
5167115440072839076n
|
|
109
|
+
];
|
|
110
|
+
const K256 = Uint32Array.from(K512.slice(0, SHA256_ROUNDS), (k) => Number(k >> 32n));
|
|
111
|
+
const H256 = Uint32Array.from(H512, (h) => Number(h >> 32n));
|
|
112
|
+
function padBigEndian(bytes, blockBytes, lengthBytes) {
|
|
113
|
+
const paddedLength = (Math.floor((bytes.length + lengthBytes) / blockBytes) + 1) * blockBytes;
|
|
114
|
+
const padded = new Uint8Array(paddedLength);
|
|
115
|
+
padded.set(bytes);
|
|
116
|
+
padded[bytes.length] = 128;
|
|
117
|
+
let bitLength = bytes.length * 8;
|
|
118
|
+
for (let i = 0; i < lengthBytes && bitLength > 0; i++) {
|
|
119
|
+
padded[paddedLength - 1 - i] = bitLength % 256;
|
|
120
|
+
bitLength = Math.floor(bitLength / 256);
|
|
121
|
+
}
|
|
122
|
+
return padded;
|
|
123
|
+
}
|
|
124
|
+
function rotr32(value, bits) {
|
|
125
|
+
return (value >>> bits | value << 32 - bits) >>> 0;
|
|
126
|
+
}
|
|
127
|
+
function sha256(bytes) {
|
|
128
|
+
const padded = padBigEndian(bytes, SHA256_BLOCK_BYTES, 8);
|
|
129
|
+
const state = Uint32Array.from(H256);
|
|
130
|
+
const w = new Uint32Array(SHA256_ROUNDS);
|
|
131
|
+
for (let offset = 0; offset < padded.length; offset += SHA256_BLOCK_BYTES) {
|
|
132
|
+
for (let t = 0; t < WORDS_PER_BLOCK; t++) {
|
|
133
|
+
const at = offset + t * 4;
|
|
134
|
+
w[t] = (padded[at] << 24 | padded[at + 1] << 16 | padded[at + 2] << 8 | padded[at + 3]) >>> 0;
|
|
135
|
+
}
|
|
136
|
+
for (let t = WORDS_PER_BLOCK; t < SHA256_ROUNDS; t++) {
|
|
137
|
+
const x = w[t - 15];
|
|
138
|
+
const y = w[t - 2];
|
|
139
|
+
const s0 = rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3;
|
|
140
|
+
const s1 = rotr32(y, 17) ^ rotr32(y, 19) ^ y >>> 10;
|
|
141
|
+
w[t] = w[t - 16] + s0 + w[t - 7] + s1 >>> 0;
|
|
142
|
+
}
|
|
143
|
+
let a = state[0];
|
|
144
|
+
let b = state[1];
|
|
145
|
+
let c = state[2];
|
|
146
|
+
let d = state[3];
|
|
147
|
+
let e = state[4];
|
|
148
|
+
let f = state[5];
|
|
149
|
+
let g = state[6];
|
|
150
|
+
let h = state[7];
|
|
151
|
+
for (let t = 0; t < SHA256_ROUNDS; t++) {
|
|
152
|
+
const bigS1 = rotr32(e, 6) ^ rotr32(e, 11) ^ rotr32(e, 25);
|
|
153
|
+
const ch = e & f ^ ~e & g;
|
|
154
|
+
const t1 = h + bigS1 + (ch >>> 0) + K256[t] + w[t] >>> 0;
|
|
155
|
+
const t2 = (rotr32(a, 2) ^ rotr32(a, 13) ^ rotr32(a, 22)) + ((a & b ^ a & c ^ b & c) >>> 0) >>> 0;
|
|
156
|
+
h = g;
|
|
157
|
+
g = f;
|
|
158
|
+
f = e;
|
|
159
|
+
e = d + t1 >>> 0;
|
|
160
|
+
d = c;
|
|
161
|
+
c = b;
|
|
162
|
+
b = a;
|
|
163
|
+
a = t1 + t2 >>> 0;
|
|
164
|
+
}
|
|
165
|
+
const next = [
|
|
166
|
+
a,
|
|
167
|
+
b,
|
|
168
|
+
c,
|
|
169
|
+
d,
|
|
170
|
+
e,
|
|
171
|
+
f,
|
|
172
|
+
g,
|
|
173
|
+
h
|
|
174
|
+
];
|
|
175
|
+
for (let i = 0; i < state.length; i++) state[i] = state[i] + next[i] >>> 0;
|
|
176
|
+
}
|
|
177
|
+
const digest = new Uint8Array(state.length * 4);
|
|
178
|
+
for (let i = 0; i < state.length; i++) {
|
|
179
|
+
const word = state[i];
|
|
180
|
+
digest[i * 4] = word >>> 24 & 255;
|
|
181
|
+
digest[i * 4 + 1] = word >>> 16 & 255;
|
|
182
|
+
digest[i * 4 + 2] = word >>> 8 & 255;
|
|
183
|
+
digest[i * 4 + 3] = word & 255;
|
|
184
|
+
}
|
|
185
|
+
return digest;
|
|
186
|
+
}
|
|
187
|
+
function rotr64(value, bits) {
|
|
188
|
+
return (value >> bits | value << 64n - bits) & MASK64;
|
|
189
|
+
}
|
|
190
|
+
function sha512Core(bytes, initialState, outputWords) {
|
|
191
|
+
const padded = padBigEndian(bytes, SHA512_BLOCK_BYTES, 16);
|
|
192
|
+
const state = Array.from(initialState);
|
|
193
|
+
const w = new Array(SHA512_ROUNDS).fill(0n);
|
|
194
|
+
for (let offset = 0; offset < padded.length; offset += SHA512_BLOCK_BYTES) {
|
|
195
|
+
for (let t = 0; t < WORDS_PER_BLOCK; t++) {
|
|
196
|
+
let word = 0n;
|
|
197
|
+
for (let i = 0; i < 8; i++) word = word << 8n | BigInt(padded[offset + t * 8 + i]);
|
|
198
|
+
w[t] = word;
|
|
199
|
+
}
|
|
200
|
+
for (let t = WORDS_PER_BLOCK; t < SHA512_ROUNDS; t++) {
|
|
201
|
+
const x = w[t - 15];
|
|
202
|
+
const y = w[t - 2];
|
|
203
|
+
const s0 = rotr64(x, 1n) ^ rotr64(x, 8n) ^ x >> 7n;
|
|
204
|
+
const s1 = rotr64(y, 19n) ^ rotr64(y, 61n) ^ y >> 6n;
|
|
205
|
+
w[t] = w[t - 16] + s0 + w[t - 7] + s1 & MASK64;
|
|
206
|
+
}
|
|
207
|
+
let a = state[0];
|
|
208
|
+
let b = state[1];
|
|
209
|
+
let c = state[2];
|
|
210
|
+
let d = state[3];
|
|
211
|
+
let e = state[4];
|
|
212
|
+
let f = state[5];
|
|
213
|
+
let g = state[6];
|
|
214
|
+
let h = state[7];
|
|
215
|
+
for (let t = 0; t < SHA512_ROUNDS; t++) {
|
|
216
|
+
const bigS1 = rotr64(e, 14n) ^ rotr64(e, 18n) ^ rotr64(e, 41n);
|
|
217
|
+
const ch = e & f ^ ~e & MASK64 & g;
|
|
218
|
+
const t1 = h + bigS1 + ch + K512[t] + w[t] & MASK64;
|
|
219
|
+
const t2 = (rotr64(a, 28n) ^ rotr64(a, 34n) ^ rotr64(a, 39n)) + (a & b ^ a & c ^ b & c) & MASK64;
|
|
220
|
+
h = g;
|
|
221
|
+
g = f;
|
|
222
|
+
f = e;
|
|
223
|
+
e = d + t1 & MASK64;
|
|
224
|
+
d = c;
|
|
225
|
+
c = b;
|
|
226
|
+
b = a;
|
|
227
|
+
a = t1 + t2 & MASK64;
|
|
228
|
+
}
|
|
229
|
+
const next = [
|
|
230
|
+
a,
|
|
231
|
+
b,
|
|
232
|
+
c,
|
|
233
|
+
d,
|
|
234
|
+
e,
|
|
235
|
+
f,
|
|
236
|
+
g,
|
|
237
|
+
h
|
|
238
|
+
];
|
|
239
|
+
for (let i = 0; i < state.length; i++) state[i] = state[i] + next[i] & MASK64;
|
|
240
|
+
}
|
|
241
|
+
const digest = new Uint8Array(outputWords * 8);
|
|
242
|
+
for (let i = 0; i < outputWords; i++) {
|
|
243
|
+
let word = state[i];
|
|
244
|
+
for (let j = 7; j >= 0; j--) {
|
|
245
|
+
digest[i * 8 + j] = Number(word & 255n);
|
|
246
|
+
word >>= 8n;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return digest;
|
|
250
|
+
}
|
|
251
|
+
function sha512(bytes) {
|
|
252
|
+
return sha512Core(bytes, H512, 8);
|
|
253
|
+
}
|
|
254
|
+
function sha384(bytes) {
|
|
255
|
+
return sha512Core(bytes, H384, 6);
|
|
256
|
+
}
|
|
257
|
+
//#endregion
|
|
258
|
+
export { sha256, sha384, sha512 };
|
package/dist/diagnostics.cjs
CHANGED
|
@@ -15,7 +15,14 @@ var PdfEncryptedError = class extends PdfParseError {
|
|
|
15
15
|
this.name = "PdfEncryptedError";
|
|
16
16
|
}
|
|
17
17
|
};
|
|
18
|
+
var PdfPasswordRequiredError = class extends PdfParseError {
|
|
19
|
+
constructor(message = "this PDF is protected by a user password, which this codec does not accept; only PDFs that open without a password (the common permissions-only case) can be read") {
|
|
20
|
+
super("pdf/password-required", message);
|
|
21
|
+
this.name = "PdfPasswordRequiredError";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
18
24
|
//#endregion
|
|
19
25
|
exports.NOOP_DIAGNOSTIC_SINK = NOOP_DIAGNOSTIC_SINK;
|
|
20
26
|
exports.PdfEncryptedError = PdfEncryptedError;
|
|
21
27
|
exports.PdfParseError = PdfParseError;
|
|
28
|
+
exports.PdfPasswordRequiredError = PdfPasswordRequiredError;
|
package/dist/diagnostics.d.cts
CHANGED
|
@@ -15,5 +15,8 @@ declare class PdfParseError extends Error {
|
|
|
15
15
|
declare class PdfEncryptedError extends PdfParseError {
|
|
16
16
|
constructor(message?: string);
|
|
17
17
|
}
|
|
18
|
+
declare class PdfPasswordRequiredError extends PdfParseError {
|
|
19
|
+
constructor(message?: string);
|
|
20
|
+
}
|
|
18
21
|
//#endregion
|
|
19
|
-
export { NOOP_DIAGNOSTIC_SINK, PdfDiagnostic, PdfDiagnosticSeverity, PdfDiagnosticSink, PdfEncryptedError, PdfParseError };
|
|
22
|
+
export { NOOP_DIAGNOSTIC_SINK, PdfDiagnostic, PdfDiagnosticSeverity, PdfDiagnosticSink, PdfEncryptedError, PdfParseError, PdfPasswordRequiredError };
|
package/dist/diagnostics.d.ts
CHANGED
|
@@ -15,5 +15,8 @@ declare class PdfParseError extends Error {
|
|
|
15
15
|
declare class PdfEncryptedError extends PdfParseError {
|
|
16
16
|
constructor(message?: string);
|
|
17
17
|
}
|
|
18
|
+
declare class PdfPasswordRequiredError extends PdfParseError {
|
|
19
|
+
constructor(message?: string);
|
|
20
|
+
}
|
|
18
21
|
//#endregion
|
|
19
|
-
export { NOOP_DIAGNOSTIC_SINK, PdfDiagnostic, PdfDiagnosticSeverity, PdfDiagnosticSink, PdfEncryptedError, PdfParseError };
|
|
22
|
+
export { NOOP_DIAGNOSTIC_SINK, PdfDiagnostic, PdfDiagnosticSeverity, PdfDiagnosticSink, PdfEncryptedError, PdfParseError, PdfPasswordRequiredError };
|
package/dist/diagnostics.js
CHANGED
|
@@ -14,5 +14,11 @@ var PdfEncryptedError = class extends PdfParseError {
|
|
|
14
14
|
this.name = "PdfEncryptedError";
|
|
15
15
|
}
|
|
16
16
|
};
|
|
17
|
+
var PdfPasswordRequiredError = class extends PdfParseError {
|
|
18
|
+
constructor(message = "this PDF is protected by a user password, which this codec does not accept; only PDFs that open without a password (the common permissions-only case) can be read") {
|
|
19
|
+
super("pdf/password-required", message);
|
|
20
|
+
this.name = "PdfPasswordRequiredError";
|
|
21
|
+
}
|
|
22
|
+
};
|
|
17
23
|
//#endregion
|
|
18
|
-
export { NOOP_DIAGNOSTIC_SINK, PdfEncryptedError, PdfParseError };
|
|
24
|
+
export { NOOP_DIAGNOSTIC_SINK, PdfEncryptedError, PdfParseError, PdfPasswordRequiredError };
|
package/dist/document.cjs
CHANGED
|
@@ -3,6 +3,7 @@ const require_bytes_reader = require("./bytes/reader.cjs");
|
|
|
3
3
|
const require_lexer = require("./lexer.cjs");
|
|
4
4
|
const require_diagnostics = require("./diagnostics.cjs");
|
|
5
5
|
const require_objects = require("./objects.cjs");
|
|
6
|
+
const require_encrypt = require("./encrypt.cjs");
|
|
6
7
|
const require_filters = require("./filters.cjs");
|
|
7
8
|
const require_parse = require("./parse.cjs");
|
|
8
9
|
const require_xref = require("./xref.cjs");
|
|
@@ -14,11 +15,39 @@ const INHERITABLE_PAGE_KEYS = [
|
|
|
14
15
|
"CropBox",
|
|
15
16
|
"Rotate"
|
|
16
17
|
];
|
|
18
|
+
function firstFileId(trailer) {
|
|
19
|
+
const first = require_objects.asArray(require_objects.dictGet(trailer, "ID"))?.[0];
|
|
20
|
+
return first?.kind === "string" ? first.bytes : /* @__PURE__ */ new Uint8Array(0);
|
|
21
|
+
}
|
|
22
|
+
function decryptDict(dict, num, gen, decryptor) {
|
|
23
|
+
return {
|
|
24
|
+
kind: "dict",
|
|
25
|
+
entries: new Map(Array.from(dict.entries, ([key, entry]) => [key, decryptObject(entry, num, gen, decryptor)]))
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function decryptObject(value, num, gen, decryptor) {
|
|
29
|
+
if (value.kind === "string") return {
|
|
30
|
+
kind: "string",
|
|
31
|
+
bytes: decryptor.decryptString(value.bytes, num, gen),
|
|
32
|
+
hex: value.hex
|
|
33
|
+
};
|
|
34
|
+
if (value.kind === "array") return {
|
|
35
|
+
kind: "array",
|
|
36
|
+
items: value.items.map((item) => decryptObject(item, num, gen, decryptor))
|
|
37
|
+
};
|
|
38
|
+
if (value.kind === "dict") return decryptDict(value, num, gen, decryptor);
|
|
39
|
+
if (value.kind === "stream") return {
|
|
40
|
+
kind: "stream",
|
|
41
|
+
dict: decryptDict(value.dict, num, gen, decryptor),
|
|
42
|
+
raw: decryptor.decryptStream(value.raw, value.dict, num, gen)
|
|
43
|
+
};
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
17
46
|
function openPdfDocument(bytes, sink) {
|
|
18
47
|
const xref = require_xref.readXref(bytes, sink);
|
|
19
|
-
if (require_objects.dictGet(xref.trailer, "Encrypt") !== void 0) throw new require_diagnostics.PdfEncryptedError();
|
|
20
48
|
const objectCache = /* @__PURE__ */ new Map();
|
|
21
49
|
const objStmCache = /* @__PURE__ */ new Map();
|
|
50
|
+
let decryptor;
|
|
22
51
|
function fetchDirect(num, entry) {
|
|
23
52
|
const reader = new require_bytes_reader.ByteReader(bytes);
|
|
24
53
|
reader.seek(entry.offset);
|
|
@@ -31,7 +60,8 @@ function openPdfDocument(bytes, sink) {
|
|
|
31
60
|
});
|
|
32
61
|
return require_objects.pdfNull();
|
|
33
62
|
}
|
|
34
|
-
return indirect.value;
|
|
63
|
+
if (decryptor === void 0) return indirect.value;
|
|
64
|
+
return decryptObject(indirect.value, num, indirect.gen, decryptor);
|
|
35
65
|
}
|
|
36
66
|
function decodeObjectStream(streamObjNum) {
|
|
37
67
|
const cached = objStmCache.get(streamObjNum);
|
|
@@ -113,6 +143,12 @@ function openPdfDocument(bytes, sink) {
|
|
|
113
143
|
if (dict === void 0 || !require_objects.isName(require_objects.dictGet(dict, "Type"), "Catalog")) throw new require_diagnostics.PdfParseError("pdf/no-root", "no resolvable /Root catalog was found, even after cross-reference recovery");
|
|
114
144
|
return dict;
|
|
115
145
|
}
|
|
146
|
+
const encryptEntry = require_objects.dictGet(xref.trailer, "Encrypt");
|
|
147
|
+
if (encryptEntry !== void 0) {
|
|
148
|
+
const encryptDict = resolveDict(encryptEntry);
|
|
149
|
+
if (encryptDict === void 0) throw new require_diagnostics.PdfEncryptedError("the trailer names an /Encrypt dictionary that does not resolve to a dictionary at all");
|
|
150
|
+
decryptor = require_encrypt.createStandardDecryptor(encryptDict, firstFileId(xref.trailer), sink);
|
|
151
|
+
}
|
|
116
152
|
const catalog = requireCatalog(resolveDict(require_objects.dictGet(xref.trailer, "Root")));
|
|
117
153
|
function pages() {
|
|
118
154
|
const pagesRoot = resolveDict(require_objects.dictGet(catalog, "Pages"));
|
package/dist/document.js
CHANGED
|
@@ -2,6 +2,7 @@ import { ByteReader } from "./bytes/reader.js";
|
|
|
2
2
|
import { nextToken } from "./lexer.js";
|
|
3
3
|
import { PdfEncryptedError, PdfParseError } from "./diagnostics.js";
|
|
4
4
|
import { asArray, asDict, asNumber, dictGet, isName, pdfNull } from "./objects.js";
|
|
5
|
+
import { createStandardDecryptor } from "./encrypt.js";
|
|
5
6
|
import { decodeStream } from "./filters.js";
|
|
6
7
|
import { parseIndirectObject, parseValue } from "./parse.js";
|
|
7
8
|
import { readXref } from "./xref.js";
|
|
@@ -13,11 +14,39 @@ const INHERITABLE_PAGE_KEYS = [
|
|
|
13
14
|
"CropBox",
|
|
14
15
|
"Rotate"
|
|
15
16
|
];
|
|
17
|
+
function firstFileId(trailer) {
|
|
18
|
+
const first = asArray(dictGet(trailer, "ID"))?.[0];
|
|
19
|
+
return first?.kind === "string" ? first.bytes : /* @__PURE__ */ new Uint8Array(0);
|
|
20
|
+
}
|
|
21
|
+
function decryptDict(dict, num, gen, decryptor) {
|
|
22
|
+
return {
|
|
23
|
+
kind: "dict",
|
|
24
|
+
entries: new Map(Array.from(dict.entries, ([key, entry]) => [key, decryptObject(entry, num, gen, decryptor)]))
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function decryptObject(value, num, gen, decryptor) {
|
|
28
|
+
if (value.kind === "string") return {
|
|
29
|
+
kind: "string",
|
|
30
|
+
bytes: decryptor.decryptString(value.bytes, num, gen),
|
|
31
|
+
hex: value.hex
|
|
32
|
+
};
|
|
33
|
+
if (value.kind === "array") return {
|
|
34
|
+
kind: "array",
|
|
35
|
+
items: value.items.map((item) => decryptObject(item, num, gen, decryptor))
|
|
36
|
+
};
|
|
37
|
+
if (value.kind === "dict") return decryptDict(value, num, gen, decryptor);
|
|
38
|
+
if (value.kind === "stream") return {
|
|
39
|
+
kind: "stream",
|
|
40
|
+
dict: decryptDict(value.dict, num, gen, decryptor),
|
|
41
|
+
raw: decryptor.decryptStream(value.raw, value.dict, num, gen)
|
|
42
|
+
};
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
16
45
|
function openPdfDocument(bytes, sink) {
|
|
17
46
|
const xref = readXref(bytes, sink);
|
|
18
|
-
if (dictGet(xref.trailer, "Encrypt") !== void 0) throw new PdfEncryptedError();
|
|
19
47
|
const objectCache = /* @__PURE__ */ new Map();
|
|
20
48
|
const objStmCache = /* @__PURE__ */ new Map();
|
|
49
|
+
let decryptor;
|
|
21
50
|
function fetchDirect(num, entry) {
|
|
22
51
|
const reader = new ByteReader(bytes);
|
|
23
52
|
reader.seek(entry.offset);
|
|
@@ -30,7 +59,8 @@ function openPdfDocument(bytes, sink) {
|
|
|
30
59
|
});
|
|
31
60
|
return pdfNull();
|
|
32
61
|
}
|
|
33
|
-
return indirect.value;
|
|
62
|
+
if (decryptor === void 0) return indirect.value;
|
|
63
|
+
return decryptObject(indirect.value, num, indirect.gen, decryptor);
|
|
34
64
|
}
|
|
35
65
|
function decodeObjectStream(streamObjNum) {
|
|
36
66
|
const cached = objStmCache.get(streamObjNum);
|
|
@@ -112,6 +142,12 @@ function openPdfDocument(bytes, sink) {
|
|
|
112
142
|
if (dict === void 0 || !isName(dictGet(dict, "Type"), "Catalog")) throw new PdfParseError("pdf/no-root", "no resolvable /Root catalog was found, even after cross-reference recovery");
|
|
113
143
|
return dict;
|
|
114
144
|
}
|
|
145
|
+
const encryptEntry = dictGet(xref.trailer, "Encrypt");
|
|
146
|
+
if (encryptEntry !== void 0) {
|
|
147
|
+
const encryptDict = resolveDict(encryptEntry);
|
|
148
|
+
if (encryptDict === void 0) throw new PdfEncryptedError("the trailer names an /Encrypt dictionary that does not resolve to a dictionary at all");
|
|
149
|
+
decryptor = createStandardDecryptor(encryptDict, firstFileId(xref.trailer), sink);
|
|
150
|
+
}
|
|
115
151
|
const catalog = requireCatalog(resolveDict(dictGet(xref.trailer, "Root")));
|
|
116
152
|
function pages() {
|
|
117
153
|
const pagesRoot = resolveDict(dictGet(catalog, "Pages"));
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { t as SfntFont } from "./sfnt-V08bb5ut.cjs";
|
|
2
|
+
//#region src/embedded-font.d.ts
|
|
3
|
+
declare const NOTDEF_GLYPH_ID = 0;
|
|
4
|
+
interface EmbeddedFaceMetrics {
|
|
5
|
+
readonly unitsPerEm: number;
|
|
6
|
+
readonly ascentGlyphSpace: number;
|
|
7
|
+
readonly descentGlyphSpace: number;
|
|
8
|
+
readonly lineGapGlyphSpace: number;
|
|
9
|
+
readonly typoAscentGlyphSpace: number | undefined;
|
|
10
|
+
readonly typoDescentGlyphSpace: number | undefined;
|
|
11
|
+
readonly typoLineGapGlyphSpace: number | undefined;
|
|
12
|
+
readonly winAscentGlyphSpace: number | undefined;
|
|
13
|
+
readonly winDescentGlyphSpace: number | undefined;
|
|
14
|
+
readonly capHeightGlyphSpace: number;
|
|
15
|
+
readonly xHeightGlyphSpace: number | undefined;
|
|
16
|
+
readonly bboxGlyphSpace: readonly [number, number, number, number];
|
|
17
|
+
readonly italicAngleDegrees: number;
|
|
18
|
+
readonly underlinePositionGlyphSpace: number;
|
|
19
|
+
readonly underlineThicknessGlyphSpace: number;
|
|
20
|
+
readonly serif: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface EmbeddedFace {
|
|
23
|
+
readonly font: SfntFont;
|
|
24
|
+
readonly postScriptName: string;
|
|
25
|
+
readonly numGlyphs: number;
|
|
26
|
+
readonly metrics: EmbeddedFaceMetrics;
|
|
27
|
+
glyphId(codePoint: number): number | undefined;
|
|
28
|
+
glyphSpaceWidth(glyphId: number): number;
|
|
29
|
+
}
|
|
30
|
+
declare function loadEmbeddedFace(font: SfntFont): EmbeddedFace | undefined;
|
|
31
|
+
interface EmbeddedFaceSubstitution {
|
|
32
|
+
readonly from: string;
|
|
33
|
+
}
|
|
34
|
+
interface EmbeddedShow {
|
|
35
|
+
readonly codes: Uint8Array<ArrayBuffer>;
|
|
36
|
+
readonly width1000: number;
|
|
37
|
+
readonly substitutions: readonly EmbeddedFaceSubstitution[];
|
|
38
|
+
}
|
|
39
|
+
declare function encodeForShowEmbedded(text: string, face: EmbeddedFace): EmbeddedShow;
|
|
40
|
+
declare function collectEmbeddedGlyphs(texts: Iterable<string>, face: EmbeddedFace): ReadonlyMap<number, number>;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { NOTDEF_GLYPH_ID as a, loadEmbeddedFace as c, EmbeddedShow as i, EmbeddedFaceMetrics as n, collectEmbeddedGlyphs as o, EmbeddedFaceSubstitution as r, encodeForShowEmbedded as s, EmbeddedFace as t };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { t as SfntFont } from "./sfnt-V08bb5ut.js";
|
|
2
|
+
//#region src/embedded-font.d.ts
|
|
3
|
+
declare const NOTDEF_GLYPH_ID = 0;
|
|
4
|
+
interface EmbeddedFaceMetrics {
|
|
5
|
+
readonly unitsPerEm: number;
|
|
6
|
+
readonly ascentGlyphSpace: number;
|
|
7
|
+
readonly descentGlyphSpace: number;
|
|
8
|
+
readonly lineGapGlyphSpace: number;
|
|
9
|
+
readonly typoAscentGlyphSpace: number | undefined;
|
|
10
|
+
readonly typoDescentGlyphSpace: number | undefined;
|
|
11
|
+
readonly typoLineGapGlyphSpace: number | undefined;
|
|
12
|
+
readonly winAscentGlyphSpace: number | undefined;
|
|
13
|
+
readonly winDescentGlyphSpace: number | undefined;
|
|
14
|
+
readonly capHeightGlyphSpace: number;
|
|
15
|
+
readonly xHeightGlyphSpace: number | undefined;
|
|
16
|
+
readonly bboxGlyphSpace: readonly [number, number, number, number];
|
|
17
|
+
readonly italicAngleDegrees: number;
|
|
18
|
+
readonly underlinePositionGlyphSpace: number;
|
|
19
|
+
readonly underlineThicknessGlyphSpace: number;
|
|
20
|
+
readonly serif: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface EmbeddedFace {
|
|
23
|
+
readonly font: SfntFont;
|
|
24
|
+
readonly postScriptName: string;
|
|
25
|
+
readonly numGlyphs: number;
|
|
26
|
+
readonly metrics: EmbeddedFaceMetrics;
|
|
27
|
+
glyphId(codePoint: number): number | undefined;
|
|
28
|
+
glyphSpaceWidth(glyphId: number): number;
|
|
29
|
+
}
|
|
30
|
+
declare function loadEmbeddedFace(font: SfntFont): EmbeddedFace | undefined;
|
|
31
|
+
interface EmbeddedFaceSubstitution {
|
|
32
|
+
readonly from: string;
|
|
33
|
+
}
|
|
34
|
+
interface EmbeddedShow {
|
|
35
|
+
readonly codes: Uint8Array<ArrayBuffer>;
|
|
36
|
+
readonly width1000: number;
|
|
37
|
+
readonly substitutions: readonly EmbeddedFaceSubstitution[];
|
|
38
|
+
}
|
|
39
|
+
declare function encodeForShowEmbedded(text: string, face: EmbeddedFace): EmbeddedShow;
|
|
40
|
+
declare function collectEmbeddedGlyphs(texts: Iterable<string>, face: EmbeddedFace): ReadonlyMap<number, number>;
|
|
41
|
+
//#endregion
|
|
42
|
+
export { NOTDEF_GLYPH_ID as a, loadEmbeddedFace as c, EmbeddedShow as i, EmbeddedFaceMetrics as n, collectEmbeddedGlyphs as o, EmbeddedFaceSubstitution as r, encodeForShowEmbedded as s, EmbeddedFace as t };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_bytes_crc32 = require("./bytes/crc32.cjs");
|
|
3
|
+
const require_objects = require("./objects.cjs");
|
|
4
|
+
const require_bytes_flate = require("./bytes/flate.cjs");
|
|
5
|
+
const require_tounicode = require("./tounicode.cjs");
|
|
6
|
+
//#region src/embedded-font-write.ts
|
|
7
|
+
const FLAG_SERIF = 2;
|
|
8
|
+
const FLAG_NONSYMBOLIC = 32;
|
|
9
|
+
const FLAG_ITALIC = 64;
|
|
10
|
+
const NOMINAL_STEM_V = 80;
|
|
11
|
+
const DEFAULT_WIDTH = 1e3;
|
|
12
|
+
const SUBSET_TAG_LENGTH = 6;
|
|
13
|
+
const SUBSET_TAG_ALPHABET_SIZE = 26;
|
|
14
|
+
const SUBSET_TAG_CODE_SPACE = SUBSET_TAG_ALPHABET_SIZE ** SUBSET_TAG_LENGTH;
|
|
15
|
+
const UPPERCASE_A_CHAR_CODE = 65;
|
|
16
|
+
function embeddedSubsetTag(postScriptName, glyphIds) {
|
|
17
|
+
let value = require_bytes_crc32.crc32(new TextEncoder().encode(`${postScriptName} ${glyphIds.join(",")}`)) % SUBSET_TAG_CODE_SPACE;
|
|
18
|
+
let tag = "";
|
|
19
|
+
for (let i = 0; i < SUBSET_TAG_LENGTH; i++) {
|
|
20
|
+
tag = String.fromCharCode(UPPERCASE_A_CHAR_CODE + value % SUBSET_TAG_ALPHABET_SIZE) + tag;
|
|
21
|
+
value = Math.floor(value / SUBSET_TAG_ALPHABET_SIZE);
|
|
22
|
+
}
|
|
23
|
+
return tag;
|
|
24
|
+
}
|
|
25
|
+
function computeFlags(face) {
|
|
26
|
+
let flags = FLAG_NONSYMBOLIC;
|
|
27
|
+
if (face.metrics.serif) flags |= FLAG_SERIF;
|
|
28
|
+
if (face.metrics.italicAngleDegrees !== 0) flags |= FLAG_ITALIC;
|
|
29
|
+
return flags;
|
|
30
|
+
}
|
|
31
|
+
function buildWidthsArray(face, glyphIds) {
|
|
32
|
+
const entries = [];
|
|
33
|
+
for (const glyphId of glyphIds) entries.push(require_objects.pdfNum(glyphId), require_objects.pdfArray([require_objects.pdfNum(face.glyphSpaceWidth(glyphId))]));
|
|
34
|
+
return require_objects.pdfArray(entries);
|
|
35
|
+
}
|
|
36
|
+
function buildFontDescriptor(face, baseFont, fontFileRef) {
|
|
37
|
+
const m = face.metrics;
|
|
38
|
+
const entries = /* @__PURE__ */ new Map([
|
|
39
|
+
["Type", require_objects.pdfName("FontDescriptor")],
|
|
40
|
+
["FontName", require_objects.pdfName(baseFont)],
|
|
41
|
+
["Flags", require_objects.pdfNum(computeFlags(face))],
|
|
42
|
+
["FontBBox", require_objects.pdfArray(m.bboxGlyphSpace.map((n) => require_objects.pdfNum(n)))],
|
|
43
|
+
["ItalicAngle", require_objects.pdfNum(m.italicAngleDegrees)],
|
|
44
|
+
["Ascent", require_objects.pdfNum(m.ascentGlyphSpace)],
|
|
45
|
+
["Descent", require_objects.pdfNum(m.descentGlyphSpace)],
|
|
46
|
+
["CapHeight", require_objects.pdfNum(m.capHeightGlyphSpace)],
|
|
47
|
+
["StemV", require_objects.pdfNum(NOMINAL_STEM_V)]
|
|
48
|
+
]);
|
|
49
|
+
if (m.xHeightGlyphSpace !== void 0) entries.set("XHeight", require_objects.pdfNum(m.xHeightGlyphSpace));
|
|
50
|
+
entries.set("FontFile2", fontFileRef);
|
|
51
|
+
return require_objects.pdfDict(entries);
|
|
52
|
+
}
|
|
53
|
+
function buildFontFileStream(subsetBytes, compress) {
|
|
54
|
+
const entries = /* @__PURE__ */ new Map([["Length1", require_objects.pdfNum(subsetBytes.length)]]);
|
|
55
|
+
if (compress) entries.set("Filter", require_objects.pdfName("FlateDecode"));
|
|
56
|
+
return require_objects.pdfStream(require_objects.pdfDict(entries), compress ? require_bytes_flate.deflate(subsetBytes) : subsetBytes);
|
|
57
|
+
}
|
|
58
|
+
function buildEmbeddedFontObjects(face, subset, usedGlyphs, refs, compress) {
|
|
59
|
+
const baseFont = `${embeddedSubsetTag(face.postScriptName, subset.glyphIds)}+${face.postScriptName}`;
|
|
60
|
+
const cidFont = require_objects.pdfDict({
|
|
61
|
+
Type: require_objects.pdfName("Font"),
|
|
62
|
+
Subtype: require_objects.pdfName("CIDFontType2"),
|
|
63
|
+
BaseFont: require_objects.pdfName(baseFont),
|
|
64
|
+
CIDSystemInfo: require_objects.pdfDict({
|
|
65
|
+
Registry: require_objects.pdfHexString(new TextEncoder().encode("Adobe")),
|
|
66
|
+
Ordering: require_objects.pdfHexString(new TextEncoder().encode("Identity")),
|
|
67
|
+
Supplement: require_objects.pdfNum(0)
|
|
68
|
+
}),
|
|
69
|
+
FontDescriptor: refs.descriptorRef,
|
|
70
|
+
DW: require_objects.pdfNum(DEFAULT_WIDTH),
|
|
71
|
+
W: buildWidthsArray(face, subset.glyphIds),
|
|
72
|
+
CIDToGIDMap: require_objects.pdfName("Identity")
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
baseFont,
|
|
76
|
+
type0: require_objects.pdfDict({
|
|
77
|
+
Type: require_objects.pdfName("Font"),
|
|
78
|
+
Subtype: require_objects.pdfName("Type0"),
|
|
79
|
+
BaseFont: require_objects.pdfName(baseFont),
|
|
80
|
+
Encoding: require_objects.pdfName("Identity-H"),
|
|
81
|
+
DescendantFonts: require_objects.pdfArray([refs.cidFontRef]),
|
|
82
|
+
ToUnicode: refs.toUnicodeRef
|
|
83
|
+
}),
|
|
84
|
+
cidFont,
|
|
85
|
+
descriptor: buildFontDescriptor(face, baseFont, refs.fontFileRef),
|
|
86
|
+
fontFile: buildFontFileStream(subset.bytes, compress),
|
|
87
|
+
toUnicode: require_tounicode.buildToUnicodeCMap(usedGlyphs)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
exports.buildEmbeddedFontObjects = buildEmbeddedFontObjects;
|
|
92
|
+
exports.embeddedSubsetTag = embeddedSubsetTag;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PdfDict, PdfObject } from "./objects.cjs";
|
|
2
|
+
import { t as EmbeddedFace } from "./embedded-font-CLedn-mT.cjs";
|
|
3
|
+
import { SfntSubsetResult } from "./sfnt-subset.cjs";
|
|
4
|
+
//#region src/embedded-font-write.d.ts
|
|
5
|
+
declare function embeddedSubsetTag(postScriptName: string, glyphIds: readonly number[]): string;
|
|
6
|
+
interface EmbeddedFontObjectRefs {
|
|
7
|
+
readonly cidFontRef: PdfObject;
|
|
8
|
+
readonly descriptorRef: PdfObject;
|
|
9
|
+
readonly fontFileRef: PdfObject;
|
|
10
|
+
readonly toUnicodeRef: PdfObject;
|
|
11
|
+
}
|
|
12
|
+
interface EmbeddedFontObjects {
|
|
13
|
+
readonly baseFont: string;
|
|
14
|
+
readonly type0: PdfDict;
|
|
15
|
+
readonly cidFont: PdfDict;
|
|
16
|
+
readonly descriptor: PdfDict;
|
|
17
|
+
readonly fontFile: PdfObject;
|
|
18
|
+
readonly toUnicode: PdfObject;
|
|
19
|
+
}
|
|
20
|
+
declare function buildEmbeddedFontObjects(face: EmbeddedFace, subset: SfntSubsetResult, usedGlyphs: ReadonlyMap<number, number>, refs: EmbeddedFontObjectRefs, compress: boolean): EmbeddedFontObjects;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { EmbeddedFontObjectRefs, EmbeddedFontObjects, buildEmbeddedFontObjects, embeddedSubsetTag };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PdfDict, PdfObject } from "./objects.js";
|
|
2
|
+
import { t as EmbeddedFace } from "./embedded-font-CbqkKgBl.js";
|
|
3
|
+
import { SfntSubsetResult } from "./sfnt-subset.js";
|
|
4
|
+
//#region src/embedded-font-write.d.ts
|
|
5
|
+
declare function embeddedSubsetTag(postScriptName: string, glyphIds: readonly number[]): string;
|
|
6
|
+
interface EmbeddedFontObjectRefs {
|
|
7
|
+
readonly cidFontRef: PdfObject;
|
|
8
|
+
readonly descriptorRef: PdfObject;
|
|
9
|
+
readonly fontFileRef: PdfObject;
|
|
10
|
+
readonly toUnicodeRef: PdfObject;
|
|
11
|
+
}
|
|
12
|
+
interface EmbeddedFontObjects {
|
|
13
|
+
readonly baseFont: string;
|
|
14
|
+
readonly type0: PdfDict;
|
|
15
|
+
readonly cidFont: PdfDict;
|
|
16
|
+
readonly descriptor: PdfDict;
|
|
17
|
+
readonly fontFile: PdfObject;
|
|
18
|
+
readonly toUnicode: PdfObject;
|
|
19
|
+
}
|
|
20
|
+
declare function buildEmbeddedFontObjects(face: EmbeddedFace, subset: SfntSubsetResult, usedGlyphs: ReadonlyMap<number, number>, refs: EmbeddedFontObjectRefs, compress: boolean): EmbeddedFontObjects;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { EmbeddedFontObjectRefs, EmbeddedFontObjects, buildEmbeddedFontObjects, embeddedSubsetTag };
|