@unisim/doc 0.5.0 → 0.7.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/dist/convert.d.ts +2 -1
- package/dist/convert.d.ts.map +1 -1
- package/dist/convert.js +4 -3
- package/dist/convert.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +15 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +17 -0
- package/dist/model.js.map +1 -1
- package/dist/pdfcore.d.ts +45 -3
- package/dist/pdfcore.d.ts.map +1 -1
- package/dist/pdfcore.js +352 -27
- package/dist/pdfcore.js.map +1 -1
- package/dist/read/docx.js +68 -1
- package/dist/read/docx.js.map +1 -1
- package/dist/read/odt.js +2 -2
- package/dist/read/odt.js.map +1 -1
- package/dist/truetype.d.ts +33 -0
- package/dist/truetype.d.ts.map +1 -0
- package/dist/truetype.js +289 -0
- package/dist/truetype.js.map +1 -0
- package/dist/write/pdf.d.ts +17 -1
- package/dist/write/pdf.d.ts.map +1 -1
- package/dist/write/pdf.js +149 -13
- package/dist/write/pdf.js.map +1 -1
- package/package.json +1 -1
package/dist/pdfcore.js
CHANGED
|
@@ -81,6 +81,10 @@ const WIN_ANSI_HIGH = {
|
|
|
81
81
|
*/
|
|
82
82
|
const SUBSTITUTES = {
|
|
83
83
|
'→': '->', '←': '<-', '↔': '<->',
|
|
84
|
+
// ↓ and ↑ are not decoration in a technical document: they are the line
|
|
85
|
+
// that says which way the data flows. Losing one loses the diagram.
|
|
86
|
+
'↓': 'v', '↑': '^', '⇓': 'v', '⇑': '^',
|
|
87
|
+
'⟶': '->', '⟵': '<-', '↦': '->', '≈': '~',
|
|
84
88
|
'⇒': '=>', '⇐': '<=',
|
|
85
89
|
'≤': '<=', '≥': '>=', '≠': '!=',
|
|
86
90
|
'−': '-', ' ': ' ', '': '', ' ': ' ', ' ': ' ',
|
|
@@ -89,10 +93,56 @@ const SUBSTITUTES = {
|
|
|
89
93
|
'✓': 'v', '✔': 'v', '✗': 'x', '✘': 'x',
|
|
90
94
|
'●': '*', '○': 'o', '◦': 'o', '▪': '-', '▫': '-', '‣': '-', '⁃': '-',
|
|
91
95
|
'▶': '>', '◀': '<', '▸': '>',
|
|
96
|
+
// The solid triangles. ▼ is what a topology diagram uses for "and then
|
|
97
|
+
// down into", and it reached a real NAWO spec as '?' on 2026-08-31.
|
|
98
|
+
'▼': 'v', '▲': '^', '▽': 'v', '△': '^',
|
|
99
|
+
'■': '*', '□': 'o', '◆': '*', '◇': 'o', '★': '*', '☆': '*',
|
|
100
|
+
// Bracketed, because a warning sign flattened to a bare '!' reads as part of
|
|
101
|
+
// the sentence after it. Same convention as the two lines below.
|
|
102
|
+
'⚠': '[!]', 'ℹ': '[i]', '❗': '!', '❓': '?',
|
|
92
103
|
'✅': '[ok]', '❌': '[x]',
|
|
93
104
|
'
': ' ', '
': ' ',
|
|
94
105
|
'fi': 'fi', 'fl': 'fl',
|
|
95
106
|
};
|
|
107
|
+
/**
|
|
108
|
+
* Characters that carry no glyph of their own — they modify the one before.
|
|
109
|
+
*
|
|
110
|
+
* Dropping them is not a loss and must NOT be reported as one. U+FE0F is the
|
|
111
|
+
* emoji variation selector, and it is why a lone warning sign in a Word file
|
|
112
|
+
* came out as TWO question marks rather than one: the sign was unspellable,
|
|
113
|
+
* and so was the invisible byte asking for it in colour.
|
|
114
|
+
*/
|
|
115
|
+
const IGNORABLE = new Set(['\uFE0E', '\uFE0F', '\u200D', '\u2060', '\uFEFF']);
|
|
116
|
+
const BOX_HORIZONTAL = new Set([
|
|
117
|
+
0x2500, 0x2501, 0x2504, 0x2505, 0x2508, 0x2509, 0x254c, 0x254d, 0x2550,
|
|
118
|
+
]);
|
|
119
|
+
const BOX_VERTICAL = new Set([
|
|
120
|
+
0x2502, 0x2503, 0x2506, 0x2507, 0x250a, 0x250b, 0x254e, 0x254f, 0x2551,
|
|
121
|
+
]);
|
|
122
|
+
/**
|
|
123
|
+
* Box drawing (U+2500–U+257F) as ASCII line art.
|
|
124
|
+
*
|
|
125
|
+
* A range rule rather than 128 table entries, because every character in that
|
|
126
|
+
* block is a line, a corner or a junction and there is nothing else in there.
|
|
127
|
+
* Horizontals stay horizontal, verticals stay vertical, and anywhere strokes
|
|
128
|
+
* meet becomes '+' — which is what the same diagram looks like when it is
|
|
129
|
+
* typed rather than drawn, and it still reads as a diagram.
|
|
130
|
+
*/
|
|
131
|
+
function boxDrawing(code) {
|
|
132
|
+
if (code < 0x2500 || code > 0x257f)
|
|
133
|
+
return undefined;
|
|
134
|
+
if (BOX_HORIZONTAL.has(code))
|
|
135
|
+
return '-';
|
|
136
|
+
if (BOX_VERTICAL.has(code))
|
|
137
|
+
return '|';
|
|
138
|
+
if (code === 0x2571)
|
|
139
|
+
return '/';
|
|
140
|
+
if (code === 0x2572)
|
|
141
|
+
return '\\';
|
|
142
|
+
if (code === 0x2573)
|
|
143
|
+
return 'X';
|
|
144
|
+
return '+';
|
|
145
|
+
}
|
|
96
146
|
/**
|
|
97
147
|
* A JS string as WinAnsi bytes.
|
|
98
148
|
*
|
|
@@ -102,38 +152,135 @@ const SUBSTITUTES = {
|
|
|
102
152
|
*/
|
|
103
153
|
export function toWinAnsi(text, report) {
|
|
104
154
|
const out = [];
|
|
105
|
-
for (const ch of text) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
155
|
+
for (const ch of normalise(text)) {
|
|
156
|
+
if (IGNORABLE.has(ch))
|
|
157
|
+
continue;
|
|
158
|
+
const bytes = winAnsiBytes(ch);
|
|
159
|
+
if (bytes) {
|
|
160
|
+
out.push(...bytes);
|
|
110
161
|
continue;
|
|
111
162
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
163
|
+
report?.dropped.add(ch);
|
|
164
|
+
out.push(0x3f); // '?'
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* NFC first, everywhere.
|
|
170
|
+
*
|
|
171
|
+
* A macOS-authored file routinely spells 'é' as a bare 'e' plus a combining
|
|
172
|
+
* acute, and decomposed, NEITHER half is WinAnsi: the accent has no code and
|
|
173
|
+
* the pair came out as 'e?'. Composed, it is one byte this encoder has had all
|
|
174
|
+
* along. ⚠️ Every path that measures or draws text has to call this, or the
|
|
175
|
+
* layout measures a string one way and writes it another.
|
|
176
|
+
*/
|
|
177
|
+
function normalise(text) {
|
|
178
|
+
return text.normalize('NFC');
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* One character's WinAnsi bytes, or null when the encoding has no answer for
|
|
182
|
+
* it. Null is the signal that an embedded font is the only way to write it.
|
|
183
|
+
*/
|
|
184
|
+
function winAnsiBytes(ch) {
|
|
185
|
+
const sub = SUBSTITUTES[ch] ?? boxDrawing(ch.codePointAt(0));
|
|
186
|
+
if (sub !== undefined) {
|
|
187
|
+
const out = [];
|
|
188
|
+
for (const c of sub)
|
|
189
|
+
out.push(c.charCodeAt(0));
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
const code = ch.codePointAt(0);
|
|
193
|
+
if (code === 9)
|
|
194
|
+
return [32]; // tab — the layout owns indentation
|
|
195
|
+
if ((code >= 32 && code <= 126) || (code >= 160 && code <= 255))
|
|
196
|
+
return [code];
|
|
197
|
+
const high = WIN_ANSI_HIGH[ch];
|
|
198
|
+
if (high !== undefined)
|
|
199
|
+
return [high];
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
function segment(text, embedded) {
|
|
203
|
+
const out = [];
|
|
204
|
+
const push = (glyphs) => {
|
|
205
|
+
const last = out[out.length - 1];
|
|
206
|
+
if (last && !!last.glyphs === glyphs)
|
|
207
|
+
return last;
|
|
208
|
+
const fresh = glyphs ? { bytes: [], glyphs: [], source: [] } : { bytes: [] };
|
|
209
|
+
out.push(fresh);
|
|
210
|
+
return fresh;
|
|
211
|
+
};
|
|
212
|
+
for (const ch of normalise(text)) {
|
|
213
|
+
if (IGNORABLE.has(ch))
|
|
115
214
|
continue;
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
215
|
+
const bytes = winAnsiBytes(ch);
|
|
216
|
+
if (bytes) {
|
|
217
|
+
push(false).bytes.push(...bytes);
|
|
119
218
|
continue;
|
|
120
219
|
}
|
|
121
|
-
const
|
|
122
|
-
if (
|
|
123
|
-
|
|
220
|
+
const glyph = embedded?.glyphFor(ch.codePointAt(0));
|
|
221
|
+
if (glyph !== undefined && glyph > 0) {
|
|
222
|
+
const seg = push(true);
|
|
223
|
+
seg.glyphs.push(glyph);
|
|
224
|
+
seg.source.push(ch);
|
|
124
225
|
continue;
|
|
125
226
|
}
|
|
126
|
-
|
|
127
|
-
|
|
227
|
+
// No WinAnsi code and no glyph in the embedded face either — a '?' it is,
|
|
228
|
+
// and the report is what turns that into a sentence in the UI.
|
|
229
|
+
push(false).bytes.push(0x3f);
|
|
128
230
|
}
|
|
129
231
|
return out;
|
|
130
232
|
}
|
|
131
|
-
/**
|
|
132
|
-
|
|
233
|
+
/**
|
|
234
|
+
* The characters in `text` that WinAnsi cannot write.
|
|
235
|
+
*
|
|
236
|
+
* Empty means the base-14 fonts can spell the whole string, and no font needs
|
|
237
|
+
* to be fetched or embedded. This is what lets an English document pay nothing
|
|
238
|
+
* for a feature it does not use — the loader is never even called.
|
|
239
|
+
*/
|
|
240
|
+
export function unspellable(text) {
|
|
241
|
+
const out = new Set();
|
|
242
|
+
for (const ch of normalise(text)) {
|
|
243
|
+
if (IGNORABLE.has(ch))
|
|
244
|
+
continue;
|
|
245
|
+
if (!winAnsiBytes(ch))
|
|
246
|
+
out.add(ch);
|
|
247
|
+
}
|
|
248
|
+
return out;
|
|
249
|
+
}
|
|
250
|
+
/** What `segment` could not write at all, for the honest warning. */
|
|
251
|
+
function reportDropped(text, embedded, report) {
|
|
252
|
+
if (!report)
|
|
253
|
+
return;
|
|
254
|
+
for (const ch of normalise(text)) {
|
|
255
|
+
if (IGNORABLE.has(ch))
|
|
256
|
+
continue;
|
|
257
|
+
if (winAnsiBytes(ch))
|
|
258
|
+
continue;
|
|
259
|
+
const glyph = embedded?.glyphFor(ch.codePointAt(0));
|
|
260
|
+
if (glyph === undefined || glyph === 0)
|
|
261
|
+
report.dropped.add(ch);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* The width of a string at a given size, in points.
|
|
266
|
+
*
|
|
267
|
+
* `embedded` must be the SAME face the page will draw with, or the line-breaker
|
|
268
|
+
* and the content stream disagree. Callers that never embed one pass nothing
|
|
269
|
+
* and get exactly the behaviour they had.
|
|
270
|
+
*/
|
|
271
|
+
export function widthOfText(font, text, size, embedded) {
|
|
133
272
|
const metrics = FONT_METRICS[font];
|
|
134
273
|
let units = 0;
|
|
135
|
-
for (const
|
|
136
|
-
|
|
274
|
+
for (const seg of segment(text, embedded)) {
|
|
275
|
+
if (seg.glyphs) {
|
|
276
|
+
for (const glyph of seg.glyphs)
|
|
277
|
+
units += embedded.advanceOf(glyph);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
for (const code of seg.bytes)
|
|
281
|
+
units += metrics.widths[code] ?? metrics.fallback;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
137
284
|
return (units * size) / 1000;
|
|
138
285
|
}
|
|
139
286
|
// ── The document ─────────────────────────────────────────────────────────────
|
|
@@ -174,11 +321,14 @@ export class PdfPage {
|
|
|
174
321
|
links = [];
|
|
175
322
|
/** Fonts actually used, so a page's /Resources only names what it draws. */
|
|
176
323
|
usedFonts = new Set();
|
|
324
|
+
usesEmbedded = false;
|
|
177
325
|
report;
|
|
178
|
-
|
|
326
|
+
embed;
|
|
327
|
+
constructor(width, height, report, embed) {
|
|
179
328
|
this.width = width;
|
|
180
329
|
this.height = height;
|
|
181
330
|
this.report = report;
|
|
331
|
+
this.embed = embed;
|
|
182
332
|
}
|
|
183
333
|
/**
|
|
184
334
|
* Change this page's paper size. See the note on `width`/`height` above:
|
|
@@ -199,9 +349,57 @@ export class PdfPage {
|
|
|
199
349
|
drawText(text, opts) {
|
|
200
350
|
if (!text)
|
|
201
351
|
return;
|
|
202
|
-
this.
|
|
203
|
-
|
|
204
|
-
|
|
352
|
+
const embedded = this.embed?.font;
|
|
353
|
+
reportDropped(text, embedded, this.report);
|
|
354
|
+
const segments = segment(text, embedded);
|
|
355
|
+
// The overwhelmingly common case: one segment, one font, one `Tj`. Kept on
|
|
356
|
+
// its own path so an all-Latin document's content stream is byte-for-byte
|
|
357
|
+
// what it was before any of this existed.
|
|
358
|
+
if (segments.length === 1 && !segments[0].glyphs) {
|
|
359
|
+
this.usedFonts.add(opts.font);
|
|
360
|
+
this.ops.push('BT', `${num(opts.color.r)} ${num(opts.color.g)} ${num(opts.color.b)} rg`, `/${opts.font} ${num(opts.size)} Tf`, `${num(opts.x)} ${num(opts.y)} Td`, `${pdfStringFromBytes(segments[0].bytes)} Tj`, 'ET');
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
// A mixed line — 'Reference: Приложение А'. Each stretch is drawn with its
|
|
364
|
+
// own font at its own x, advanced by the width of the one before it. This
|
|
365
|
+
// is why measuring and drawing must segment identically: the x values here
|
|
366
|
+
// are what the line-breaker was promised.
|
|
367
|
+
//
|
|
368
|
+
// ⚠️ `Tm`, NOT `Td`. `Td` is relative to the START OF THE CURRENT LINE, so
|
|
369
|
+
// a second one inside the same BT/ET lands at the SUM of the two offsets —
|
|
370
|
+
// the third segment of a line drew at 3y, off the top of the page. The
|
|
371
|
+
// single-segment path above keeps `Td` because there is exactly one of
|
|
372
|
+
// them and BT has just reset the matrix, which makes it absolute and keeps
|
|
373
|
+
// an all-Latin content stream byte-for-byte what it always was.
|
|
374
|
+
const metrics = FONT_METRICS[opts.font];
|
|
375
|
+
let x = opts.x;
|
|
376
|
+
this.ops.push('BT', `${num(opts.color.r)} ${num(opts.color.g)} ${num(opts.color.b)} rg`);
|
|
377
|
+
for (const seg of segments) {
|
|
378
|
+
let units = 0;
|
|
379
|
+
if (seg.glyphs) {
|
|
380
|
+
if (!seg.glyphs.length)
|
|
381
|
+
continue;
|
|
382
|
+
this.usesEmbedded = true;
|
|
383
|
+
for (let i = 0; i < seg.glyphs.length; i += 1) {
|
|
384
|
+
const glyph = seg.glyphs[i];
|
|
385
|
+
units += embedded.advanceOf(glyph);
|
|
386
|
+
// Last writer wins, and they agree: the same glyph reached by two
|
|
387
|
+
// code points is one entry either way.
|
|
388
|
+
this.embed.used.set(glyph, seg.source[i]);
|
|
389
|
+
}
|
|
390
|
+
this.ops.push(`/${EMBEDDED_FONT_KEY} ${num(opts.size)} Tf`, `1 0 0 1 ${num(x)} ${num(opts.y)} Tm`, `${hexStringFromGlyphs(seg.glyphs)} Tj`);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
if (!seg.bytes.length)
|
|
394
|
+
continue;
|
|
395
|
+
this.usedFonts.add(opts.font);
|
|
396
|
+
for (const code of seg.bytes)
|
|
397
|
+
units += metrics.widths[code] ?? metrics.fallback;
|
|
398
|
+
this.ops.push(`/${opts.font} ${num(opts.size)} Tf`, `1 0 0 1 ${num(x)} ${num(opts.y)} Tm`, `${pdfStringFromBytes(seg.bytes)} Tj`);
|
|
399
|
+
}
|
|
400
|
+
x += (units * opts.size) / 1000;
|
|
401
|
+
}
|
|
402
|
+
this.ops.push('ET');
|
|
205
403
|
}
|
|
206
404
|
drawRect(opts) {
|
|
207
405
|
if (opts.width <= 0 || opts.height <= 0)
|
|
@@ -234,15 +432,30 @@ export class PdfPage {
|
|
|
234
432
|
images: this.images,
|
|
235
433
|
links: this.links,
|
|
236
434
|
fonts: [...this.usedFonts],
|
|
435
|
+
embedded: this.usesEmbedded,
|
|
237
436
|
};
|
|
238
437
|
}
|
|
239
438
|
}
|
|
439
|
+
/** The resource name the embedded face is drawn under. */
|
|
440
|
+
const EMBEDDED_FONT_KEY = 'fb';
|
|
240
441
|
export class PdfDocument {
|
|
241
442
|
pages = [];
|
|
242
443
|
/** Collected across every page, so the UI can report it once at the end. */
|
|
243
444
|
report = { dropped: new Set() };
|
|
445
|
+
embed = { used: new Map() };
|
|
446
|
+
/**
|
|
447
|
+
* Offer a face for everything WinAnsi cannot spell.
|
|
448
|
+
*
|
|
449
|
+
* Optional on purpose, and the whole document works without one — this is the
|
|
450
|
+
* difference between a Cyrillic paragraph and a row of '?', not between a PDF
|
|
451
|
+
* and no PDF. Must be set BEFORE anything is drawn, because a page splits its
|
|
452
|
+
* text between the two fonts as it draws.
|
|
453
|
+
*/
|
|
454
|
+
embedFallbackFont(font) {
|
|
455
|
+
this.embed.font = font;
|
|
456
|
+
}
|
|
244
457
|
addPage(width, height) {
|
|
245
|
-
const page = new PdfPage(width, height, this.report);
|
|
458
|
+
const page = new PdfPage(width, height, this.report, this.embed);
|
|
246
459
|
this.pages.push(page);
|
|
247
460
|
return page;
|
|
248
461
|
}
|
|
@@ -292,9 +505,68 @@ export class PdfDocument {
|
|
|
292
505
|
`/Encoding /WinAnsiEncoding >>\n`);
|
|
293
506
|
end();
|
|
294
507
|
}
|
|
508
|
+
// The embedded face, written only when a page actually drew with it. An
|
|
509
|
+
// English document that happened to be converted by an app that offers a
|
|
510
|
+
// font still carries no font: five objects and 350 KB for nothing is not a
|
|
511
|
+
// cost to pay on the ordinary case.
|
|
512
|
+
const builtPages = this.pages.map((page) => page.build());
|
|
513
|
+
const embeddedFont = this.embed.font;
|
|
514
|
+
let embeddedId = null;
|
|
515
|
+
if (embeddedFont && builtPages.some((b) => b.embedded)) {
|
|
516
|
+
const fileId = alloc();
|
|
517
|
+
const descriptorId = alloc();
|
|
518
|
+
const descendantId = alloc();
|
|
519
|
+
const toUnicodeId = alloc();
|
|
520
|
+
embeddedId = alloc();
|
|
521
|
+
// ⚠️ `/Length1` is not decoration. For an uncompressed `/FontFile2` it is
|
|
522
|
+
// the same number as `/Length`, but it is REQUIRED, and a reader that
|
|
523
|
+
// finds it missing is entitled to reject the font — which shows up as a
|
|
524
|
+
// document whose Cyrillic is invisible rather than as an error.
|
|
525
|
+
begin(fileId);
|
|
526
|
+
push(`<< /Length ${embeddedFont.bytes.length} /Length1 ${embeddedFont.bytes.length} >>\nstream\n`);
|
|
527
|
+
push(embeddedFont.bytes);
|
|
528
|
+
push('\nendstream\n');
|
|
529
|
+
end();
|
|
530
|
+
begin(descriptorId);
|
|
531
|
+
push(`<< /Type /FontDescriptor /FontName /${embeddedFont.postScriptName} ` +
|
|
532
|
+
`/Flags ${embeddedFont.flags} ` +
|
|
533
|
+
`/FontBBox [${embeddedFont.bbox.map(num).join(' ')}] ` +
|
|
534
|
+
`/ItalicAngle ${num(embeddedFont.italicAngle)} ` +
|
|
535
|
+
`/Ascent ${num(embeddedFont.ascent)} /Descent ${num(embeddedFont.descent)} ` +
|
|
536
|
+
`/CapHeight ${num(embeddedFont.capHeight)} /StemV 80 ` +
|
|
537
|
+
`/FontFile2 ${fileId} 0 R >>\n`);
|
|
538
|
+
end();
|
|
539
|
+
// Only the glyphs this document used get a width. `/DW 1000` covers the
|
|
540
|
+
// rest, and the rest are never drawn.
|
|
541
|
+
const used = [...this.embed.used.keys()].sort((a, b) => a - b);
|
|
542
|
+
const widths = used
|
|
543
|
+
.map((glyph) => `${glyph} [${num(embeddedFont.advanceOf(glyph))}]`)
|
|
544
|
+
.join(' ');
|
|
545
|
+
begin(descendantId);
|
|
546
|
+
push(`<< /Type /Font /Subtype /CIDFontType2 /BaseFont /${embeddedFont.postScriptName} ` +
|
|
547
|
+
`/CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> ` +
|
|
548
|
+
`/FontDescriptor ${descriptorId} 0 R /DW 1000` +
|
|
549
|
+
(widths ? ` /W [${widths}]` : '') +
|
|
550
|
+
// CIDs ARE glyph indices under Identity-H, which is the whole reason
|
|
551
|
+
// this needs no subsetter and no glyph-name table.
|
|
552
|
+
` /CIDToGIDMap /Identity >>\n`);
|
|
553
|
+
end();
|
|
554
|
+
const cmap = latin1(toUnicodeCMap(this.embed.used));
|
|
555
|
+
begin(toUnicodeId);
|
|
556
|
+
push(`<< /Length ${cmap.length} >>\nstream\n`);
|
|
557
|
+
push(cmap);
|
|
558
|
+
push('\nendstream\n');
|
|
559
|
+
end();
|
|
560
|
+
begin(embeddedId);
|
|
561
|
+
push(`<< /Type /Font /Subtype /Type0 /BaseFont /${embeddedFont.postScriptName} ` +
|
|
562
|
+
`/Encoding /Identity-H /DescendantFonts [${descendantId} 0 R] ` +
|
|
563
|
+
`/ToUnicode ${toUnicodeId} 0 R >>\n`);
|
|
564
|
+
end();
|
|
565
|
+
}
|
|
295
566
|
const pageIds = [];
|
|
296
|
-
for (
|
|
297
|
-
const built =
|
|
567
|
+
for (let index = 0; index < builtPages.length; index += 1) {
|
|
568
|
+
const built = builtPages[index];
|
|
569
|
+
const page = this.pages[index];
|
|
298
570
|
const pageId = alloc();
|
|
299
571
|
pageIds.push(pageId);
|
|
300
572
|
const contentId = alloc();
|
|
@@ -302,6 +574,7 @@ export class PdfDocument {
|
|
|
302
574
|
const linkIds = built.links.map(() => alloc());
|
|
303
575
|
const fontResources = built.fonts
|
|
304
576
|
.map((f) => `/${f} ${fontIds.get(f)} 0 R`)
|
|
577
|
+
.concat(built.embedded && embeddedId !== null ? [`/${EMBEDDED_FONT_KEY} ${embeddedId} 0 R`] : [])
|
|
305
578
|
.join(' ');
|
|
306
579
|
const xobjectResources = imageIds
|
|
307
580
|
.map((id, i) => `/Im${i} ${id} 0 R`)
|
|
@@ -375,6 +648,58 @@ function num(value) {
|
|
|
375
648
|
const fixed = value.toFixed(2);
|
|
376
649
|
return fixed.replace(/\.?0+$/, '') || '0';
|
|
377
650
|
}
|
|
651
|
+
/**
|
|
652
|
+
* Glyph indices as a hex string — how Identity-H text is written.
|
|
653
|
+
*
|
|
654
|
+
* Two bytes per glyph, big-endian. A literal `(...)` string cannot be used
|
|
655
|
+
* here: half the glyph ids in a real font contain a byte that would have to be
|
|
656
|
+
* escaped, and one missed escape shifts every glyph after it by a byte and
|
|
657
|
+
* turns the rest of the line into someone else's alphabet.
|
|
658
|
+
*/
|
|
659
|
+
function hexStringFromGlyphs(glyphs) {
|
|
660
|
+
let out = '<';
|
|
661
|
+
for (const glyph of glyphs)
|
|
662
|
+
out += (glyph & 0xffff).toString(16).padStart(4, '0');
|
|
663
|
+
return out + '>';
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* The `/ToUnicode` CMap — what makes embedded text selectable and searchable.
|
|
667
|
+
*
|
|
668
|
+
* Without it a reader knows which glyph to DRAW and nothing about what it says,
|
|
669
|
+
* so copying a paragraph out of the PDF yields mojibake and Cmd-F finds
|
|
670
|
+
* nothing. The base-14 path gets this free from `/WinAnsiEncoding`; Identity-H
|
|
671
|
+
* gets it only because this is here.
|
|
672
|
+
*
|
|
673
|
+
* ⚠️ `beginbfchar` takes at most 100 entries per block — a hard limit in the
|
|
674
|
+
* spec, not a convention — so the list is chunked. A single 300-entry block is
|
|
675
|
+
* the classic way this comes out looking right in one reader and empty in
|
|
676
|
+
* another.
|
|
677
|
+
*/
|
|
678
|
+
function toUnicodeCMap(used) {
|
|
679
|
+
const entries = [...used.entries()].sort((a, b) => a[0] - b[0]);
|
|
680
|
+
const head = '/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n' +
|
|
681
|
+
'/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n' +
|
|
682
|
+
'/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n' +
|
|
683
|
+
'1 begincodespacerange\n<0000> <FFFF>\nendcodespacerange\n';
|
|
684
|
+
let body = '';
|
|
685
|
+
for (let i = 0; i < entries.length; i += 100) {
|
|
686
|
+
const chunk = entries.slice(i, i + 100);
|
|
687
|
+
body += `${chunk.length} beginbfchar\n`;
|
|
688
|
+
for (const [glyph, text] of chunk) {
|
|
689
|
+
body += `<${(glyph & 0xffff).toString(16).padStart(4, '0')}> <${utf16BeHex(text)}>\n`;
|
|
690
|
+
}
|
|
691
|
+
body += 'endbfchar\n';
|
|
692
|
+
}
|
|
693
|
+
return head + body + 'endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend\n';
|
|
694
|
+
}
|
|
695
|
+
/** UTF-16BE hex, which is the only encoding a bfchar destination may use. */
|
|
696
|
+
function utf16BeHex(text) {
|
|
697
|
+
let out = '';
|
|
698
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
699
|
+
out += text.charCodeAt(i).toString(16).padStart(4, '0');
|
|
700
|
+
}
|
|
701
|
+
return out;
|
|
702
|
+
}
|
|
378
703
|
/** A PDF literal string from already-encoded WinAnsi bytes. */
|
|
379
704
|
function pdfStringFromBytes(bytes) {
|
|
380
705
|
let out = '(';
|
package/dist/pdfcore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfcore.js","sourceRoot":"","sources":["../src/pdfcore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pdfcore.js","sourceRoot":"","sources":["../src/pdfcore.ts"],"names":[],"mappings":"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"}
|
package/dist/read/docx.js
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
// it. Where one is present and dropped, it is NAMED in a notice, so the loss
|
|
19
19
|
// arrives with the file rather than being found later.
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
|
-
import { addNotice, mergeRuns, tidy, } from '../model.js';
|
|
21
|
+
import { addNotice, isMonospaceFamily, mergeRuns, runsToText, tidy, } from '../model.js';
|
|
22
22
|
import { emuToPoints, vmlStyleSize } from '../length.js';
|
|
23
23
|
import { ZipArchive } from '../unzip.js';
|
|
24
24
|
import { attr, child, children, descendant, descendants, onOff, parseXml } from '../xml.js';
|
|
@@ -224,6 +224,9 @@ async function readParagraph(el, ctx) {
|
|
|
224
224
|
else if (isQuote(styleId, ctx.styles)) {
|
|
225
225
|
blocks.push({ kind: 'quote', runs: mergeRuns(runs) });
|
|
226
226
|
}
|
|
227
|
+
else if (isPreformatted(props, runs)) {
|
|
228
|
+
blocks.push({ kind: 'code', text: runsToText(runs) });
|
|
229
|
+
}
|
|
227
230
|
else if (runs.length || !images.length) {
|
|
228
231
|
blocks.push({ kind: 'paragraph', runs: mergeRuns(runs) });
|
|
229
232
|
}
|
|
@@ -234,6 +237,55 @@ async function readParagraph(el, ctx) {
|
|
|
234
237
|
blocks.unshift({ kind: 'pagebreak' });
|
|
235
238
|
return { runs, blocks, list: null };
|
|
236
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Is this paragraph a preformatted BLOCK, or a sentence with a monospaced word
|
|
242
|
+
* in it?
|
|
243
|
+
*
|
|
244
|
+
* All-monospaced on its own is NOT enough, and the difference matters: plenty
|
|
245
|
+
* of people set a whole document in Courier New, and promoting every paragraph
|
|
246
|
+
* of one to a code block would put a grey plate behind the entire file. So a
|
|
247
|
+
* second signal is required, and either of these two is one:
|
|
248
|
+
*
|
|
249
|
+
* * a HARD LINE BREAK — the paragraph is several lines that were laid out by
|
|
250
|
+
* hand, which is what preformatted means;
|
|
251
|
+
* * a SHADED PLATE — the author already drew the box themselves.
|
|
252
|
+
*
|
|
253
|
+
* A one-line Courier sentence in a prose document has neither, and stays a
|
|
254
|
+
* paragraph whose runs happen to be monospaced. That is the right answer for
|
|
255
|
+
* it: it still comes out in a monospaced face, just without the plate.
|
|
256
|
+
*/
|
|
257
|
+
function isPreformatted(props, runs) {
|
|
258
|
+
const text = runsToText(runs);
|
|
259
|
+
if (!text.trim())
|
|
260
|
+
return false;
|
|
261
|
+
// Whitespace-only runs are the joins between code runs and carry no font.
|
|
262
|
+
if (!runs.every((r) => r.code || !r.text.trim()))
|
|
263
|
+
return false;
|
|
264
|
+
return text.includes('\n') || hasShading(props);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* A background fill on the paragraph.
|
|
268
|
+
*
|
|
269
|
+
* ⚠️ Looked for in `w:pPr/w:rPr` as well as directly on `w:pPr`. The paragraph
|
|
270
|
+
* MARK's own formatting lives in that inner `w:rPr`, and the Word file this was
|
|
271
|
+
* written for carries the plate there and nowhere else. Checking only the outer
|
|
272
|
+
* level finds nothing.
|
|
273
|
+
*/
|
|
274
|
+
function hasShading(props) {
|
|
275
|
+
if (!props)
|
|
276
|
+
return false;
|
|
277
|
+
for (const holder of [props, child(props, W, 'rPr')]) {
|
|
278
|
+
if (!holder)
|
|
279
|
+
continue;
|
|
280
|
+
const shd = child(holder, W, 'shd');
|
|
281
|
+
if (!shd)
|
|
282
|
+
continue;
|
|
283
|
+
const fill = (attr(shd, W, 'fill') ?? '').toLowerCase();
|
|
284
|
+
if (fill && fill !== 'auto' && fill !== 'ffffff')
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
237
289
|
/**
|
|
238
290
|
* Runs, hyperlinks and breaks, in document order.
|
|
239
291
|
*
|
|
@@ -304,6 +356,15 @@ function readRun(el, inherited) {
|
|
|
304
356
|
const runStyle = (props ? attr(child(props, W, 'rStyle'), W, 'val') : null) ?? '';
|
|
305
357
|
if (/^(HTMLCode|Code|SourceText|VerbatimChar)$/i.test(runStyle))
|
|
306
358
|
style.code = true;
|
|
359
|
+
// ...but most Word documents mark code by switching FONT and nothing else —
|
|
360
|
+
// the character style is what an exporter emits, not what a person typing
|
|
361
|
+
// into Word produces. `read/odt.ts` has tested the family since it was
|
|
362
|
+
// written; this side did not, so a Courier diagram that survived an .odt came
|
|
363
|
+
// out of the identical .docx in Helvetica with its columns adrift.
|
|
364
|
+
const fonts = props ? child(props, W, 'rFonts') : null;
|
|
365
|
+
if (fonts && isMonospaceFamily(attr(fonts, W, 'ascii') ?? attr(fonts, W, 'hAnsi') ?? '')) {
|
|
366
|
+
style.code = true;
|
|
367
|
+
}
|
|
307
368
|
const out = [];
|
|
308
369
|
for (const node of Array.from(el.childNodes)) {
|
|
309
370
|
if (node.nodeType !== 1)
|
|
@@ -458,6 +519,12 @@ async function readImages(el, ctx) {
|
|
|
458
519
|
block.width = size.width;
|
|
459
520
|
if (size.height !== null)
|
|
460
521
|
block.height = size.height;
|
|
522
|
+
// Several drawings in ONE paragraph sat on one line in Word — a logo strip,
|
|
523
|
+
// a row of screenshots. `readImages` runs per paragraph, so "not the first
|
|
524
|
+
// one found here" is exactly that relationship, and the PDF writer lays
|
|
525
|
+
// them back out side by side.
|
|
526
|
+
if (out.length)
|
|
527
|
+
block.withPrevious = true;
|
|
461
528
|
out.push(block);
|
|
462
529
|
}
|
|
463
530
|
return out;
|