@reportwright/pdf 0.1.0-beta.0 → 0.1.0-beta.2
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 +377 -23
- package/dist/index.js +765 -292
- package/examples/accessible.mjs +28 -0
- package/examples/encrypt.mjs +23 -0
- package/examples/factur-x.mjs +37 -0
- package/examples/fill-form.mjs +33 -0
- package/examples/harfbuzz-shaper.mjs +27 -0
- package/examples/indic.mjs +20 -0
- package/examples/invoice-facturx.mjs +40 -0
- package/examples/merge-split.mjs +29 -0
- package/examples/sign.mjs +29 -0
- package/examples/write.mjs +53 -0
- package/index.d.ts +9 -3
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var __export = (target, all) => {
|
|
|
13
13
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
// src/core/sink.js
|
|
16
|
+
// packages/pdf/src/core/sink.js
|
|
17
17
|
function raced(p, signal) {
|
|
18
18
|
if (!signal) return p;
|
|
19
19
|
if (signal.aborted) {
|
|
@@ -112,11 +112,11 @@ function openSink(sink) {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
var init_sink = __esm({
|
|
115
|
-
"src/core/sink.js"() {
|
|
115
|
+
"packages/pdf/src/core/sink.js"() {
|
|
116
116
|
}
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
-
// src/core/serialize.js
|
|
119
|
+
// packages/pdf/src/core/serialize.js
|
|
120
120
|
function latin1(s) {
|
|
121
121
|
const B = (
|
|
122
122
|
/** @type {any} */
|
|
@@ -129,7 +129,7 @@ function latin1(s) {
|
|
|
129
129
|
}
|
|
130
130
|
var num, hex4, utf16, text, ascii, pdfName, UTF8, DELIM, fontName, pdfDate, esc;
|
|
131
131
|
var init_serialize = __esm({
|
|
132
|
-
"src/core/serialize.js"() {
|
|
132
|
+
"packages/pdf/src/core/serialize.js"() {
|
|
133
133
|
num = (v) => {
|
|
134
134
|
if (typeof v !== "number" || !(Math.abs(v) < 1e9)) throw new RangeError(`Not a usable number: ${v}`);
|
|
135
135
|
const r = Math.round(v * 1e3) / 1e3;
|
|
@@ -166,7 +166,7 @@ var init_serialize = __esm({
|
|
|
166
166
|
}
|
|
167
167
|
});
|
|
168
168
|
|
|
169
|
-
//
|
|
169
|
+
// ../reportwright/node_modules/fflate/esm/browser.js
|
|
170
170
|
function deflateSync(data, opts) {
|
|
171
171
|
return dopt(data, opts || {}, 0, 0);
|
|
172
172
|
}
|
|
@@ -183,7 +183,7 @@ function zlibSync(data, opts) {
|
|
|
183
183
|
}
|
|
184
184
|
var u8, u16, i32, fleb, fdeb, clim, freb, _a, fl, revfl, _b, fd, revfd, rev, x, i, hMap, flt, i, i, i, i, fdt, i, flm, flrm, fdm, fdrm, max, bits, bits16, shft, slc, ec, err, inflt, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, deo, et, dflt, adler, dopt, wbytes, zlh, zls, Inflate, Unzlib, td, tds;
|
|
185
185
|
var init_browser = __esm({
|
|
186
|
-
"
|
|
186
|
+
"../reportwright/node_modules/fflate/esm/browser.js"() {
|
|
187
187
|
u8 = Uint8Array;
|
|
188
188
|
u16 = Uint16Array;
|
|
189
189
|
i32 = Int32Array;
|
|
@@ -956,7 +956,7 @@ var init_browser = __esm({
|
|
|
956
956
|
}
|
|
957
957
|
});
|
|
958
958
|
|
|
959
|
-
// src/core/deflate.js
|
|
959
|
+
// packages/pdf/src/core/deflate.js
|
|
960
960
|
async function deflate(bytes) {
|
|
961
961
|
if (slots.free > 0) slots.free--;
|
|
962
962
|
else await new Promise((ok) => slots.wait.push(
|
|
@@ -1044,7 +1044,7 @@ function deflateStream() {
|
|
|
1044
1044
|
}
|
|
1045
1045
|
var NODE_ZLIB, slots;
|
|
1046
1046
|
var init_deflate = __esm({
|
|
1047
|
-
"src/core/deflate.js"() {
|
|
1047
|
+
"packages/pdf/src/core/deflate.js"() {
|
|
1048
1048
|
init_browser();
|
|
1049
1049
|
NODE_ZLIB = /** @type {any} */
|
|
1050
1050
|
globalThis.process?.getBuiltinModule?.("node:zlib");
|
|
@@ -1055,7 +1055,7 @@ var init_deflate = __esm({
|
|
|
1055
1055
|
}
|
|
1056
1056
|
});
|
|
1057
1057
|
|
|
1058
|
-
// src/core/objects.js
|
|
1058
|
+
// packages/pdf/src/core/objects.js
|
|
1059
1059
|
function createObjects(out, o) {
|
|
1060
1060
|
let pos = 0, nextNum = 0;
|
|
1061
1061
|
const blocks = [];
|
|
@@ -1335,7 +1335,7 @@ ${xref}
|
|
|
1335
1335
|
}
|
|
1336
1336
|
var CHUNK, OBJSTM, XBITS, XB, BYTERANGE;
|
|
1337
1337
|
var init_objects = __esm({
|
|
1338
|
-
"src/core/objects.js"() {
|
|
1338
|
+
"packages/pdf/src/core/objects.js"() {
|
|
1339
1339
|
init_serialize();
|
|
1340
1340
|
init_deflate();
|
|
1341
1341
|
init_sink();
|
|
@@ -1347,7 +1347,7 @@ var init_objects = __esm({
|
|
|
1347
1347
|
}
|
|
1348
1348
|
});
|
|
1349
1349
|
|
|
1350
|
-
// src/standards/xmp.js
|
|
1350
|
+
// packages/pdf/src/standards/xmp.js
|
|
1351
1351
|
function checkExt(x2) {
|
|
1352
1352
|
if (!NAME.test(x2.prefix)) throw new TypeError(`XMP: the schema prefix ${JSON.stringify(x2.prefix)} is not an XML name`);
|
|
1353
1353
|
if (typeof x2.ns !== "string" || !/^[A-Za-z][A-Za-z0-9+.-]*:[^\s<>"'&]{1,256}$/.test(x2.ns)) throw new TypeError(`XMP: the namespace ${JSON.stringify(x2.ns)} is not a URI`);
|
|
@@ -1379,7 +1379,7 @@ ${pdfa ? `<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/n
|
|
|
1379
1379
|
}
|
|
1380
1380
|
var PRODUCER, xml, NAME, PDFUA;
|
|
1381
1381
|
var init_xmp = __esm({
|
|
1382
|
-
"src/standards/xmp.js"() {
|
|
1382
|
+
"packages/pdf/src/standards/xmp.js"() {
|
|
1383
1383
|
PRODUCER = "@reportwright/pdf";
|
|
1384
1384
|
xml = (s) => String(s).replace(/[\0-\x08\x0b\x0c\x0e-\x1f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g, "").replace(/[<>&"']/g, (c) => (
|
|
1385
1385
|
/** @type {any} */
|
|
@@ -1396,7 +1396,7 @@ var init_xmp = __esm({
|
|
|
1396
1396
|
}
|
|
1397
1397
|
});
|
|
1398
1398
|
|
|
1399
|
-
// src/core/brand.js
|
|
1399
|
+
// packages/pdf/src/core/brand.js
|
|
1400
1400
|
function brand(obj, kind, doc, data) {
|
|
1401
1401
|
brands.set(obj, { kind, doc, data });
|
|
1402
1402
|
return obj;
|
|
@@ -1457,14 +1457,14 @@ function guarded(api) {
|
|
|
1457
1457
|
}
|
|
1458
1458
|
var brands, kindOf, MAX_SNAPSHOT;
|
|
1459
1459
|
var init_brand = __esm({
|
|
1460
|
-
"src/core/brand.js"() {
|
|
1460
|
+
"packages/pdf/src/core/brand.js"() {
|
|
1461
1461
|
brands = /* @__PURE__ */ new WeakMap();
|
|
1462
1462
|
kindOf = (v) => v !== null && typeof v === "object" ? brands.get(v)?.kind : void 0;
|
|
1463
1463
|
MAX_SNAPSHOT = 16e6;
|
|
1464
1464
|
}
|
|
1465
1465
|
});
|
|
1466
1466
|
|
|
1467
|
-
// src/document.js
|
|
1467
|
+
// packages/pdf/src/document.js
|
|
1468
1468
|
function createDoc(out, o) {
|
|
1469
1469
|
const level = o.pdfaLevel ?? (o.pdfa ? { part: 2, conformance: "b", unicode: false } : null);
|
|
1470
1470
|
const objs = createObjects(out, { compress: o.compress, signal: o.signal, encrypt: o.encrypt, hash: o.hash, classic: level?.part === 1 });
|
|
@@ -1663,14 +1663,14 @@ function createDoc(out, o) {
|
|
|
1663
1663
|
}
|
|
1664
1664
|
await writeNodes(level2);
|
|
1665
1665
|
const I = o.info, when = I.creationDate;
|
|
1666
|
-
const xmp = doc.xmp ?? new TextEncoder().encode(xmpPacket({ title: I.title, author: I.author, subject: I.subject, keywords: I.keywords, stamp: when.toISOString().replace(/\.\d+Z$/, "Z"), pdfa: doc.pdfaLevel, ua: o.tagged, extensions: doc.xmpExtensions }));
|
|
1667
|
-
const meta = objs.reserve();
|
|
1668
|
-
await objs.write(meta, "<< /Type /Metadata /Subtype /XML >>", xmp);
|
|
1666
|
+
const xmp = o.metadata === false ? null : doc.xmp ?? new TextEncoder().encode(xmpPacket({ title: I.title, author: I.author, subject: I.subject, keywords: I.keywords, stamp: when.toISOString().replace(/\.\d+Z$/, "Z"), pdfa: doc.pdfaLevel, ua: o.tagged, extensions: doc.xmpExtensions }));
|
|
1667
|
+
const meta = xmp ? objs.reserve() : 0;
|
|
1668
|
+
if (xmp) await objs.write(meta, "<< /Type /Metadata /Subtype /XML >>", xmp);
|
|
1669
1669
|
const info = objs.reserve();
|
|
1670
1670
|
if (doc.info != null) await objs.write(info, doc.info);
|
|
1671
1671
|
else await objs.write(info, `<< /Producer ${text(PRODUCER)} /Creator ${text(PRODUCER)}${I.title != null ? ` /Title ${text(I.title)}` : ""}${I.author != null ? ` /Author ${text(I.author)}` : ""}${I.subject != null ? ` /Subject ${text(I.subject)}` : ""}${I.keywords != null ? ` /Keywords ${text(I.keywords)}` : ""} /CreationDate ${pdfDate(when)} /ModDate ${pdfDate(when)} >>`);
|
|
1672
1672
|
const root = objs.reserve();
|
|
1673
|
-
let cat = `<< /Type /Catalog /Pages ${level2[0].ref} 0 R /Metadata ${meta} 0 R`;
|
|
1673
|
+
let cat = `<< /Type /Catalog /Pages ${level2[0].ref} 0 R${meta ? ` /Metadata ${meta} 0 R` : ""}`;
|
|
1674
1674
|
for (const [k, v] of catalog) cat += ` ${pdfName(k)} ${v}`;
|
|
1675
1675
|
await objs.write(root, cat + " >>");
|
|
1676
1676
|
const r = await objs.finish({ root, info, id: o.id, last: doc.last });
|
|
@@ -1682,7 +1682,7 @@ function createDoc(out, o) {
|
|
|
1682
1682
|
}
|
|
1683
1683
|
var LEAF, IN_FLIGHT;
|
|
1684
1684
|
var init_document = __esm({
|
|
1685
|
-
"src/document.js"() {
|
|
1685
|
+
"packages/pdf/src/document.js"() {
|
|
1686
1686
|
init_objects();
|
|
1687
1687
|
init_deflate();
|
|
1688
1688
|
init_serialize();
|
|
@@ -1693,10 +1693,10 @@ var init_document = __esm({
|
|
|
1693
1693
|
}
|
|
1694
1694
|
});
|
|
1695
1695
|
|
|
1696
|
-
// src/content/content.js
|
|
1696
|
+
// packages/pdf/src/content/content.js
|
|
1697
1697
|
var Content;
|
|
1698
1698
|
var init_content = __esm({
|
|
1699
|
-
"src/content/content.js"() {
|
|
1699
|
+
"packages/pdf/src/content/content.js"() {
|
|
1700
1700
|
init_serialize();
|
|
1701
1701
|
Content = class {
|
|
1702
1702
|
constructor() {
|
|
@@ -1855,7 +1855,7 @@ var init_content = __esm({
|
|
|
1855
1855
|
}
|
|
1856
1856
|
});
|
|
1857
1857
|
|
|
1858
|
-
// src/standards/icc.js
|
|
1858
|
+
// packages/pdf/src/standards/icc.js
|
|
1859
1859
|
function parseIcc(bytes, what) {
|
|
1860
1860
|
const b = toBytes(bytes, what);
|
|
1861
1861
|
const bad = (m) => new TypeError(`${what}: not a usable ICC profile (${m})`);
|
|
@@ -1887,14 +1887,14 @@ function toBytes(v, what) {
|
|
|
1887
1887
|
}
|
|
1888
1888
|
var MAX_ICC, SPACES, tag;
|
|
1889
1889
|
var init_icc = __esm({
|
|
1890
|
-
"src/standards/icc.js"() {
|
|
1890
|
+
"packages/pdf/src/standards/icc.js"() {
|
|
1891
1891
|
MAX_ICC = 32 << 20;
|
|
1892
1892
|
SPACES = /* @__PURE__ */ new Map([["GRAY", 1], ["RGB ", 3], ["CMYK", 4]]);
|
|
1893
1893
|
tag = (b, i2) => String.fromCharCode(b[i2], b[i2 + 1], b[i2 + 2], b[i2 + 3]);
|
|
1894
1894
|
}
|
|
1895
1895
|
});
|
|
1896
1896
|
|
|
1897
|
-
// src/graphics/color.js
|
|
1897
|
+
// packages/pdf/src/graphics/color.js
|
|
1898
1898
|
function cmyk(c, m, y, k) {
|
|
1899
1899
|
const v = [c, m, y, k];
|
|
1900
1900
|
if (!v.every(unit)) throw new RangeError(`cmyk(c, m, y, k): each is 0–1, not ${v.join(", ")}`);
|
|
@@ -1977,7 +1977,7 @@ async function iccColorSpace(doc, bytes) {
|
|
|
1977
1977
|
}
|
|
1978
1978
|
var DEVICE, unit, CSS_RGB, base, spots;
|
|
1979
1979
|
var init_color = __esm({
|
|
1980
|
-
"src/graphics/color.js"() {
|
|
1980
|
+
"packages/pdf/src/graphics/color.js"() {
|
|
1981
1981
|
init_serialize();
|
|
1982
1982
|
init_brand();
|
|
1983
1983
|
init_icc();
|
|
@@ -1989,7 +1989,7 @@ var init_color = __esm({
|
|
|
1989
1989
|
}
|
|
1990
1990
|
});
|
|
1991
1991
|
|
|
1992
|
-
// src/text/runs.js
|
|
1992
|
+
// packages/pdf/src/text/runs.js
|
|
1993
1993
|
function spacing(o) {
|
|
1994
1994
|
const tc = o?.characterSpacing ?? 0, tw = o?.wordSpacing ?? 0, tz = o?.horizontalScaling ?? 100;
|
|
1995
1995
|
num(tc);
|
|
@@ -2028,13 +2028,12 @@ function segments(str3, fonts, o) {
|
|
|
2028
2028
|
}
|
|
2029
2029
|
function runWidth(run2, size, sp) {
|
|
2030
2030
|
let a = 0, n = 0, s = 0;
|
|
2031
|
-
if (Array.isArray(run2)) {
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
} else ({ a, n, sp: s } = run2);
|
|
2031
|
+
if (Array.isArray(run2)) for (const it of run2) {
|
|
2032
|
+
a += it.a;
|
|
2033
|
+
if (it.sp) s++;
|
|
2034
|
+
if (!it.c) n++;
|
|
2035
|
+
}
|
|
2036
|
+
else ({ a, n, sp: s } = run2);
|
|
2038
2037
|
return (a * size / 1e3 + n * sp.tc + s * sp.tw) * sp.tz / 100;
|
|
2039
2038
|
}
|
|
2040
2039
|
function measure(impl, str3, size, o) {
|
|
@@ -2042,11 +2041,11 @@ function measure(impl, str3, size, o) {
|
|
|
2042
2041
|
const sp = spacing(o);
|
|
2043
2042
|
return runWidth(impl.items(str3, { kerning: o?.kerning, rtl: o?.direction === "rtl", ws: sp.tw, measure: true }), size, sp);
|
|
2044
2043
|
}
|
|
2045
|
-
function runOps(run2, size, rise, tw, standard) {
|
|
2044
|
+
function runOps(run2, size, rise, tw, standard, tc = 0) {
|
|
2046
2045
|
if (!Array.isArray(run2)) return run2.body ? `(${run2.body}) Tj
|
|
2047
2046
|
` : "";
|
|
2048
|
-
const wsT = standard ? 0 : tw * 1e3 / size;
|
|
2049
|
-
let s = "", arr = "", lit = "", cur = 0, pos = 0, r = rise, left = 0, adjusted = false;
|
|
2047
|
+
const wsT = standard ? 0 : tw * 1e3 / size, tcT = tc * 1e3 / size;
|
|
2048
|
+
let s = "", arr = "", lit = "", cur = 0, pos = 0, r = rise, left = 0, adjusted = false, out = false;
|
|
2050
2049
|
const endLit = () => {
|
|
2051
2050
|
if (lit) {
|
|
2052
2051
|
arr += `(${lit})`;
|
|
@@ -2063,13 +2062,7 @@ function runOps(run2, size, rise, tw, standard) {
|
|
|
2063
2062
|
adjusted = false;
|
|
2064
2063
|
}
|
|
2065
2064
|
};
|
|
2066
|
-
|
|
2067
|
-
if (it.at !== void 0) {
|
|
2068
|
-
flush();
|
|
2069
|
-
s += `/Span << /ActualText ${text(it.at)} >> BDC
|
|
2070
|
-
`;
|
|
2071
|
-
left = it.n || 1;
|
|
2072
|
-
}
|
|
2065
|
+
const put = (it) => {
|
|
2073
2066
|
const want = rise + it.dy * size / 1e3;
|
|
2074
2067
|
if (Math.abs(want - r) >= 5e-4) {
|
|
2075
2068
|
flush();
|
|
@@ -2087,6 +2080,20 @@ function runOps(run2, size, rise, tw, standard) {
|
|
|
2087
2080
|
}
|
|
2088
2081
|
lit += it.b;
|
|
2089
2082
|
cur += it.w;
|
|
2083
|
+
};
|
|
2084
|
+
for (const it of run2) {
|
|
2085
|
+
if (it.c) {
|
|
2086
|
+
pos += it.a;
|
|
2087
|
+
out = true;
|
|
2088
|
+
continue;
|
|
2089
|
+
}
|
|
2090
|
+
if (it.at !== void 0) {
|
|
2091
|
+
flush();
|
|
2092
|
+
s += `/Span << /ActualText ${text(it.at)} >> BDC
|
|
2093
|
+
`;
|
|
2094
|
+
left = it.n || 1;
|
|
2095
|
+
}
|
|
2096
|
+
put(it);
|
|
2090
2097
|
pos += it.a + (it.sp ? wsT : 0);
|
|
2091
2098
|
if (left && --left === 0) {
|
|
2092
2099
|
flush();
|
|
@@ -2094,13 +2101,30 @@ function runOps(run2, size, rise, tw, standard) {
|
|
|
2094
2101
|
}
|
|
2095
2102
|
}
|
|
2096
2103
|
flush();
|
|
2104
|
+
if (out) {
|
|
2105
|
+
s += `/Span << /ActualText ${text("")} >> BDC
|
|
2106
|
+
0 0 Td
|
|
2107
|
+
`;
|
|
2108
|
+
cur = pos = 0;
|
|
2109
|
+
for (const it of run2) {
|
|
2110
|
+
if (!it.c) {
|
|
2111
|
+
pos += it.a + (it.sp ? wsT : 0) + tcT;
|
|
2112
|
+
continue;
|
|
2113
|
+
}
|
|
2114
|
+
put(it);
|
|
2115
|
+
cur += tcT;
|
|
2116
|
+
pos += it.a;
|
|
2117
|
+
}
|
|
2118
|
+
flush();
|
|
2119
|
+
s += "EMC\n";
|
|
2120
|
+
}
|
|
2097
2121
|
if (r !== rise) s += `${num(rise)} Ts
|
|
2098
2122
|
`;
|
|
2099
2123
|
return s;
|
|
2100
2124
|
}
|
|
2101
2125
|
var WS, RTL_RANGES, dirOf, maybeRtl, RTL, LTR;
|
|
2102
2126
|
var init_runs = __esm({
|
|
2103
|
-
"src/text/runs.js"() {
|
|
2127
|
+
"packages/pdf/src/text/runs.js"() {
|
|
2104
2128
|
init_serialize();
|
|
2105
2129
|
WS = /^\s$/u;
|
|
2106
2130
|
RTL_RANGES = "-ࣿיִ-﷿ﹰ-\uFEFF";
|
|
@@ -2114,7 +2138,7 @@ var init_runs = __esm({
|
|
|
2114
2138
|
}
|
|
2115
2139
|
});
|
|
2116
2140
|
|
|
2117
|
-
// src/text/text.js
|
|
2141
|
+
// packages/pdf/src/text/text.js
|
|
2118
2142
|
function fontsOf(page, o, who) {
|
|
2119
2143
|
const font = o?.font;
|
|
2120
2144
|
if (!font || typeof font.encode !== "function") throw new TypeError(`${who}: options.font is required (pdf.standardFont(name) or await pdf.embedFont(bytes))`);
|
|
@@ -2148,7 +2172,7 @@ function drawLine(page, fonts, str3, x2, base3, size, ts, o) {
|
|
|
2148
2172
|
}
|
|
2149
2173
|
let at = x2;
|
|
2150
2174
|
for (const s of segs) {
|
|
2151
|
-
const ops = runOps(s.run, size, ts.rise, ts.sp.tw, s.impl.standard);
|
|
2175
|
+
const ops = runOps(s.run, size, ts.rise, ts.sp.tw, s.impl.standard, ts.sp.tc);
|
|
2152
2176
|
if (ops) c.run(s.font.name, size, at, page.height - base3, ops, ts === PLAIN ? PLAIN_STATE : { Tc: ts.sp.tc, Tw: s.impl.standard ? ts.sp.tw : 0, Tz: ts.sp.tz, Ts: ts.rise, Tr: ts.Tr });
|
|
2153
2177
|
if (segs.length > 1) at += runWidth(s.run, size, ts.sp);
|
|
2154
2178
|
}
|
|
@@ -2183,7 +2207,7 @@ function text2(str3, o) {
|
|
|
2183
2207
|
}
|
|
2184
2208
|
var MAX_TEXT, MODES, PLAIN, PLAIN_STATE;
|
|
2185
2209
|
var init_text = __esm({
|
|
2186
|
-
"src/text/text.js"() {
|
|
2210
|
+
"packages/pdf/src/text/text.js"() {
|
|
2187
2211
|
init_color();
|
|
2188
2212
|
init_serialize();
|
|
2189
2213
|
init_brand();
|
|
@@ -2195,7 +2219,7 @@ var init_text = __esm({
|
|
|
2195
2219
|
}
|
|
2196
2220
|
});
|
|
2197
2221
|
|
|
2198
|
-
// src/text/box.js
|
|
2222
|
+
// packages/pdf/src/text/box.js
|
|
2199
2223
|
function textBox(str3, o) {
|
|
2200
2224
|
const fonts = fontsOf(this, o, "page.textBox");
|
|
2201
2225
|
const size = o.size ?? 12, x2 = o.x ?? 0, y = o.y ?? 0, W = o.width;
|
|
@@ -2319,7 +2343,7 @@ function textBox(str3, o) {
|
|
|
2319
2343
|
}
|
|
2320
2344
|
var MAX_LINES;
|
|
2321
2345
|
var init_box = __esm({
|
|
2322
|
-
"src/text/box.js"() {
|
|
2346
|
+
"packages/pdf/src/text/box.js"() {
|
|
2323
2347
|
init_serialize();
|
|
2324
2348
|
init_runs();
|
|
2325
2349
|
init_text();
|
|
@@ -2327,7 +2351,7 @@ var init_box = __esm({
|
|
|
2327
2351
|
}
|
|
2328
2352
|
});
|
|
2329
2353
|
|
|
2330
|
-
// src/graphics/svg.js
|
|
2354
|
+
// packages/pdf/src/graphics/svg.js
|
|
2331
2355
|
function parseSvgPath(d, path2) {
|
|
2332
2356
|
if (typeof d !== "string") throw new TypeError("svgPath: the path data is a string");
|
|
2333
2357
|
if (d.length > MAX_SVG) throw new RangeError(`svgPath: the path data is ${d.length} characters; at most ${MAX_SVG} (10 MB)`);
|
|
@@ -2491,7 +2515,7 @@ function arc(path2, x0, y0, rx, ry, phi, large, sweep, x2, y) {
|
|
|
2491
2515
|
}
|
|
2492
2516
|
var MAX_SVG, ARGS;
|
|
2493
2517
|
var init_svg = __esm({
|
|
2494
|
-
"src/graphics/svg.js"() {
|
|
2518
|
+
"packages/pdf/src/graphics/svg.js"() {
|
|
2495
2519
|
init_path();
|
|
2496
2520
|
MAX_SVG = 10 * 1024 * 1024;
|
|
2497
2521
|
ARGS = /** @type {Record<string, number>} */
|
|
@@ -2499,14 +2523,14 @@ var init_svg = __esm({
|
|
|
2499
2523
|
}
|
|
2500
2524
|
});
|
|
2501
2525
|
|
|
2502
|
-
// src/graphics/path.js
|
|
2526
|
+
// packages/pdf/src/graphics/path.js
|
|
2503
2527
|
function coord(v, what) {
|
|
2504
2528
|
if (typeof v !== "number" || !(Math.abs(v) < 1e9)) throw new RangeError(`${what}: ${v} is not a usable number (finite, under 1e9 in size)`);
|
|
2505
2529
|
return v;
|
|
2506
2530
|
}
|
|
2507
2531
|
var MAX_SEGMENTS, TAU, Path;
|
|
2508
2532
|
var init_path = __esm({
|
|
2509
|
-
"src/graphics/path.js"() {
|
|
2533
|
+
"packages/pdf/src/graphics/path.js"() {
|
|
2510
2534
|
init_serialize();
|
|
2511
2535
|
init_svg();
|
|
2512
2536
|
MAX_SEGMENTS = 1e6;
|
|
@@ -2719,7 +2743,7 @@ var init_path = __esm({
|
|
|
2719
2743
|
}
|
|
2720
2744
|
});
|
|
2721
2745
|
|
|
2722
|
-
// src/graphics/paint.js
|
|
2746
|
+
// packages/pdf/src/graphics/paint.js
|
|
2723
2747
|
function oneSpace(cols, doc) {
|
|
2724
2748
|
const r = cols.map((c) => resolve(c, doc));
|
|
2725
2749
|
if (r.every((x2) => x2.cs === DEVICE[1] || x2.cs === DEVICE[3]) && r.some((x2) => x2.cs === DEVICE[3])) {
|
|
@@ -2825,7 +2849,7 @@ function tilingPattern(o, draw) {
|
|
|
2825
2849
|
}
|
|
2826
2850
|
var MAX_STOPS, shading, base2;
|
|
2827
2851
|
var init_paint = __esm({
|
|
2828
|
-
"src/graphics/paint.js"() {
|
|
2852
|
+
"packages/pdf/src/graphics/paint.js"() {
|
|
2829
2853
|
init_serialize();
|
|
2830
2854
|
init_color();
|
|
2831
2855
|
init_draw();
|
|
@@ -2836,7 +2860,7 @@ var init_paint = __esm({
|
|
|
2836
2860
|
}
|
|
2837
2861
|
});
|
|
2838
2862
|
|
|
2839
|
-
// src/standards/level.js
|
|
2863
|
+
// packages/pdf/src/standards/level.js
|
|
2840
2864
|
function pdfaLevel(pdfa, tagged) {
|
|
2841
2865
|
if (pdfa == null || pdfa === false) return null;
|
|
2842
2866
|
if (pdfa === true) return { part: 2, conformance: "b", unicode: false };
|
|
@@ -2853,11 +2877,11 @@ function refuseInA1(doc, what, why) {
|
|
|
2853
2877
|
if (d.pdfaLevel?.part === 1) throw new TypeError(`${what}: PDF/A-1 (ISO 19005-1) ${why}; use PDF/A-2 or 3 (pdfa: { part: 2 })`);
|
|
2854
2878
|
}
|
|
2855
2879
|
var init_level = __esm({
|
|
2856
|
-
"src/standards/level.js"() {
|
|
2880
|
+
"packages/pdf/src/standards/level.js"() {
|
|
2857
2881
|
}
|
|
2858
2882
|
});
|
|
2859
2883
|
|
|
2860
|
-
// src/graphics/draw.js
|
|
2884
|
+
// packages/pdf/src/graphics/draw.js
|
|
2861
2885
|
function state(page) {
|
|
2862
2886
|
let s = states.get(page);
|
|
2863
2887
|
if (!s) states.set(page, s = { m: [1, 0, 0, 1, 0, 0], stack: [], transparent: false, watched: false });
|
|
@@ -3042,7 +3066,7 @@ function figure(o, fn) {
|
|
|
3042
3066
|
}
|
|
3043
3067
|
var MAX_DEPTH, MAX_DEPTH_PDFA, MAX_DASH, BLEND_MODES, BLEND, CAPS, JOINS, GROUP, states, mul, flip, num6, matrix, rule;
|
|
3044
3068
|
var init_draw = __esm({
|
|
3045
|
-
"src/graphics/draw.js"() {
|
|
3069
|
+
"packages/pdf/src/graphics/draw.js"() {
|
|
3046
3070
|
init_serialize();
|
|
3047
3071
|
init_path();
|
|
3048
3072
|
init_paint();
|
|
@@ -3074,7 +3098,7 @@ var init_draw = __esm({
|
|
|
3074
3098
|
}
|
|
3075
3099
|
});
|
|
3076
3100
|
|
|
3077
|
-
// src/graphics/shapes.js
|
|
3101
|
+
// packages/pdf/src/graphics/shapes.js
|
|
3078
3102
|
function line(x1, y1, x2, y2, o = {}) {
|
|
3079
3103
|
const c = this.content, H = this.height;
|
|
3080
3104
|
const gs = gstate(this, o);
|
|
@@ -3114,14 +3138,14 @@ function rect(x2, y, w, h, o = {}) {
|
|
|
3114
3138
|
return this;
|
|
3115
3139
|
}
|
|
3116
3140
|
var init_shapes = __esm({
|
|
3117
|
-
"src/graphics/shapes.js"() {
|
|
3141
|
+
"packages/pdf/src/graphics/shapes.js"() {
|
|
3118
3142
|
init_serialize();
|
|
3119
3143
|
init_color();
|
|
3120
3144
|
init_draw();
|
|
3121
3145
|
}
|
|
3122
3146
|
});
|
|
3123
3147
|
|
|
3124
|
-
// src/nav/trees.js
|
|
3148
|
+
// packages/pdf/src/nav/trees.js
|
|
3125
3149
|
async function writeTree(doc, kind, entries) {
|
|
3126
3150
|
let level = [];
|
|
3127
3151
|
for (let i2 = 0; i2 < entries.length; i2 += LEAF2) {
|
|
@@ -3149,14 +3173,14 @@ function setNames(doc, key, ref) {
|
|
|
3149
3173
|
}
|
|
3150
3174
|
var LEAF2, names;
|
|
3151
3175
|
var init_trees = __esm({
|
|
3152
|
-
"src/nav/trees.js"() {
|
|
3176
|
+
"packages/pdf/src/nav/trees.js"() {
|
|
3153
3177
|
init_serialize();
|
|
3154
3178
|
LEAF2 = 64;
|
|
3155
3179
|
names = /* @__PURE__ */ new WeakMap();
|
|
3156
3180
|
}
|
|
3157
3181
|
});
|
|
3158
3182
|
|
|
3159
|
-
// src/nav/dest.js
|
|
3183
|
+
// packages/pdf/src/nav/dest.js
|
|
3160
3184
|
function pageIndex(doc, page, who) {
|
|
3161
3185
|
if (typeof page === "number") {
|
|
3162
3186
|
if (!(Number.isInteger(page) && page >= 1)) throw new RangeError(`${who}: page is a whole number from 1`);
|
|
@@ -3250,7 +3274,7 @@ function create(doc) {
|
|
|
3250
3274
|
}
|
|
3251
3275
|
var FITS, MAX_NAMES, MAX_NAME_BYTES, UTF82, hexOf, registries;
|
|
3252
3276
|
var init_dest = __esm({
|
|
3253
|
-
"src/nav/dest.js"() {
|
|
3277
|
+
"packages/pdf/src/nav/dest.js"() {
|
|
3254
3278
|
init_serialize();
|
|
3255
3279
|
init_brand();
|
|
3256
3280
|
init_trees();
|
|
@@ -3267,7 +3291,7 @@ var init_dest = __esm({
|
|
|
3267
3291
|
}
|
|
3268
3292
|
});
|
|
3269
3293
|
|
|
3270
|
-
// src/nav/links.js
|
|
3294
|
+
// packages/pdf/src/nav/links.js
|
|
3271
3295
|
function checkUrl(raw, allow, who) {
|
|
3272
3296
|
if (typeof raw !== "string") throw new TypeError(`${who}: url is a string`);
|
|
3273
3297
|
if (raw.length > MAX_URL) throw new RangeError(`${who}: a URL is at most ${MAX_URL} characters`);
|
|
@@ -3391,7 +3415,7 @@ function dashArray(d, who) {
|
|
|
3391
3415
|
}
|
|
3392
3416
|
var NEVER, DEFAULT_SCHEMES, ACTIVE, NAMED, MAX_URL, MAX_QUADS, HIGHLIGHT, BORDER;
|
|
3393
3417
|
var init_links = __esm({
|
|
3394
|
-
"src/nav/links.js"() {
|
|
3418
|
+
"packages/pdf/src/nav/links.js"() {
|
|
3395
3419
|
init_serialize();
|
|
3396
3420
|
init_color();
|
|
3397
3421
|
init_dest();
|
|
@@ -3406,7 +3430,7 @@ var init_links = __esm({
|
|
|
3406
3430
|
}
|
|
3407
3431
|
});
|
|
3408
3432
|
|
|
3409
|
-
// src/images/png.js
|
|
3433
|
+
// packages/pdf/src/images/png.js
|
|
3410
3434
|
function crc32(b, from, to) {
|
|
3411
3435
|
if (!CRC_TABLE) {
|
|
3412
3436
|
CRC_TABLE = new Uint32Array(256);
|
|
@@ -3465,6 +3489,7 @@ function readPng(b) {
|
|
|
3465
3489
|
return png;
|
|
3466
3490
|
}
|
|
3467
3491
|
async function inflateExact(idat, size, onData, drain = null) {
|
|
3492
|
+
if (NODE_ZLIB2 && size <= SYNC_MAX) return inflateNode(idat, size, onData, drain);
|
|
3468
3493
|
let n = 0, done = false, total = 0;
|
|
3469
3494
|
const z = new Unzlib((chunk, final) => {
|
|
3470
3495
|
if (n + chunk.length > size) throw new TypeError(`PNG: the image data inflates past the ${size.toLocaleString("en")} bytes its header allows (corrupt, or a zip bomb)`);
|
|
@@ -3497,6 +3522,37 @@ async function inflateExact(idat, size, onData, drain = null) {
|
|
|
3497
3522
|
if (!(rest instanceof Uint8Array) || typeof bit !== "number") throw new Error("PNG: internal: the inflater does not report where the zlib stream ends");
|
|
3498
3523
|
return total - rest.length + (bit ? 1 : 0);
|
|
3499
3524
|
}
|
|
3525
|
+
async function inflateNode(idat, size, onData, drain = null) {
|
|
3526
|
+
let total = 0;
|
|
3527
|
+
for (const d of idat) total += d.length;
|
|
3528
|
+
let src = idat[0];
|
|
3529
|
+
if (idat.length > 1) {
|
|
3530
|
+
src = new Uint8Array(total);
|
|
3531
|
+
let at = 0;
|
|
3532
|
+
for (const d of idat) {
|
|
3533
|
+
src.set(d, at);
|
|
3534
|
+
at += d.length;
|
|
3535
|
+
}
|
|
3536
|
+
}
|
|
3537
|
+
let r;
|
|
3538
|
+
try {
|
|
3539
|
+
r = NODE_ZLIB2.inflateSync(src, { info: true, maxOutputLength: Math.max(1, size) });
|
|
3540
|
+
} catch (e) {
|
|
3541
|
+
const code = (
|
|
3542
|
+
/** @type {any} */
|
|
3543
|
+
e.code
|
|
3544
|
+
);
|
|
3545
|
+
if (code === "ERR_BUFFER_TOO_LARGE") throw new TypeError(`PNG: the image data inflates past the ${size.toLocaleString("en")} bytes its header allows (corrupt, or a zip bomb)`);
|
|
3546
|
+
if (code === "Z_BUF_ERROR") throw new TypeError(`PNG: truncated image data (the zlib stream ends early)`);
|
|
3547
|
+
throw new TypeError(`PNG: corrupt image data (${/** @type {Error} */
|
|
3548
|
+
e.message})`);
|
|
3549
|
+
}
|
|
3550
|
+
const out = new Uint8Array(r.buffer.buffer, r.buffer.byteOffset, r.buffer.length);
|
|
3551
|
+
if (out.length !== size) throw new TypeError(`PNG: truncated image data (${out.length.toLocaleString("en")} of ${size.toLocaleString("en")} bytes)`);
|
|
3552
|
+
if (onData) onData(out, 0);
|
|
3553
|
+
if (drain) await drain();
|
|
3554
|
+
return r.engine.bytesWritten;
|
|
3555
|
+
}
|
|
3500
3556
|
function unfilterRow(f, c, p, bpp) {
|
|
3501
3557
|
const rb = c.length;
|
|
3502
3558
|
if (f > 4) throw new TypeError(`PNG: unknown row filter ${f}`);
|
|
@@ -3521,29 +3577,58 @@ function unfilterRow(f, c, p, bpp) {
|
|
|
3521
3577
|
}
|
|
3522
3578
|
}
|
|
3523
3579
|
function filterRow(x2, up, bpp, out, o, t) {
|
|
3524
|
-
const rb = x2.length;
|
|
3525
|
-
let
|
|
3526
|
-
for (let
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3580
|
+
const rb = x2.length, m = Math.min(bpp, rb);
|
|
3581
|
+
let best = 0, sum = 0;
|
|
3582
|
+
for (let i2 = 0; i2 < rb; i2++) {
|
|
3583
|
+
const v = x2[i2];
|
|
3584
|
+
sum += v < 128 ? v : 256 - v;
|
|
3585
|
+
}
|
|
3586
|
+
out[o] = 0;
|
|
3587
|
+
out.set(x2, o + 1);
|
|
3588
|
+
best = sum;
|
|
3589
|
+
sum = 0;
|
|
3590
|
+
for (let i2 = 0; i2 < m; i2++) {
|
|
3591
|
+
const v = x2[i2];
|
|
3592
|
+
t[i2] = v;
|
|
3593
|
+
sum += v < 128 ? v : 256 - v;
|
|
3594
|
+
}
|
|
3595
|
+
for (let i2 = m; i2 < rb; i2++) {
|
|
3596
|
+
const v = x2[i2] - x2[i2 - bpp] & 255;
|
|
3597
|
+
t[i2] = v;
|
|
3598
|
+
sum += v < 128 ? v : 256 - v;
|
|
3599
|
+
}
|
|
3600
|
+
if (sum < best) {
|
|
3601
|
+
best = sum;
|
|
3602
|
+
out[o] = 1;
|
|
3603
|
+
out.set(t, o + 1);
|
|
3604
|
+
}
|
|
3605
|
+
if (!up) return;
|
|
3606
|
+
sum = 0;
|
|
3607
|
+
for (let i2 = 0; i2 < rb; i2++) {
|
|
3608
|
+
const v = x2[i2] - up[i2] & 255;
|
|
3609
|
+
t[i2] = v;
|
|
3610
|
+
sum += v < 128 ? v : 256 - v;
|
|
3611
|
+
}
|
|
3612
|
+
if (sum < best) {
|
|
3613
|
+
best = sum;
|
|
3614
|
+
out[o] = 2;
|
|
3615
|
+
out.set(t, o + 1);
|
|
3616
|
+
}
|
|
3617
|
+
sum = 0;
|
|
3618
|
+
for (let i2 = 0; i2 < m; i2++) {
|
|
3619
|
+
const v = x2[i2] - up[i2] & 255;
|
|
3620
|
+
t[i2] = v;
|
|
3621
|
+
sum += v < 128 ? v : 256 - v;
|
|
3622
|
+
}
|
|
3623
|
+
for (let i2 = m; i2 < rb; i2++) {
|
|
3624
|
+
const a = x2[i2 - bpp], u = up[i2], c = up[i2 - bpp], pa = Math.abs(u - c), pb = Math.abs(a - c), pc = Math.abs(a + u - c - c);
|
|
3625
|
+
const v = x2[i2] - (pa <= pb && pa <= pc ? a : pb <= pc ? u : c) & 255;
|
|
3626
|
+
t[i2] = v;
|
|
3627
|
+
sum += v < 128 ? v : 256 - v;
|
|
3628
|
+
}
|
|
3629
|
+
if (sum < best) {
|
|
3630
|
+
out[o] = 4;
|
|
3631
|
+
out.set(t, o + 1);
|
|
3547
3632
|
}
|
|
3548
3633
|
}
|
|
3549
3634
|
async function decodePng(p, maxDecoded = MAX_DECODED) {
|
|
@@ -3661,14 +3746,17 @@ async function decodePng(p, maxDecoded = MAX_DECODED) {
|
|
|
3661
3746
|
};
|
|
3662
3747
|
return { ...head, filtered: false, alpha: hasAlpha, rows };
|
|
3663
3748
|
}
|
|
3664
|
-
var MAX_SIDE, MAX_PIXELS, MAX_DECODED, STEP, DEPTHS, CHANNELS, ADAM7, CRC_TABLE, isPng, rawSize, filterBytes;
|
|
3749
|
+
var MAX_SIDE, MAX_PIXELS, MAX_DECODED, STEP, NODE_ZLIB2, SYNC_MAX, DEPTHS, CHANNELS, ADAM7, CRC_TABLE, isPng, rawSize, filterBytes;
|
|
3665
3750
|
var init_png = __esm({
|
|
3666
|
-
"src/images/png.js"() {
|
|
3751
|
+
"packages/pdf/src/images/png.js"() {
|
|
3667
3752
|
init_browser();
|
|
3668
3753
|
MAX_SIDE = 65535;
|
|
3669
3754
|
MAX_PIXELS = 1e8;
|
|
3670
3755
|
MAX_DECODED = 64 << 20;
|
|
3671
3756
|
STEP = 1024;
|
|
3757
|
+
NODE_ZLIB2 = /** @type {any} */
|
|
3758
|
+
globalThis.process?.getBuiltinModule?.("node:zlib");
|
|
3759
|
+
SYNC_MAX = 32 << 20;
|
|
3672
3760
|
DEPTHS = { 0: [1, 2, 4, 8, 16], 2: [8, 16], 3: [1, 2, 4, 8], 4: [8, 16], 6: [8, 16] };
|
|
3673
3761
|
CHANNELS = { 0: 1, 2: 3, 3: 1, 4: 2, 6: 4 };
|
|
3674
3762
|
ADAM7 = [[0, 0, 8, 8], [4, 0, 8, 8], [0, 4, 4, 8], [2, 0, 4, 4], [0, 2, 2, 4], [1, 0, 2, 2], [0, 1, 1, 2]];
|
|
@@ -3685,7 +3773,7 @@ var init_png = __esm({
|
|
|
3685
3773
|
}
|
|
3686
3774
|
});
|
|
3687
3775
|
|
|
3688
|
-
// src/images/jpeg.js
|
|
3776
|
+
// packages/pdf/src/images/jpeg.js
|
|
3689
3777
|
function readJpeg(b) {
|
|
3690
3778
|
const bad = (m) => new TypeError(`JPEG: ${m}`);
|
|
3691
3779
|
if (!isJpeg(b)) throw bad("no JPEG signature (FF D8)");
|
|
@@ -3756,22 +3844,47 @@ function exifOrientation(b, t, end) {
|
|
|
3756
3844
|
}
|
|
3757
3845
|
var isJpeg;
|
|
3758
3846
|
var init_jpeg = __esm({
|
|
3759
|
-
"src/images/jpeg.js"() {
|
|
3847
|
+
"packages/pdf/src/images/jpeg.js"() {
|
|
3760
3848
|
init_png();
|
|
3761
3849
|
isJpeg = (b) => b.length >= 3 && b[0] === 255 && b[1] === 216 && b[2] === 255;
|
|
3762
3850
|
}
|
|
3763
3851
|
});
|
|
3764
3852
|
|
|
3765
|
-
// src/images/image.js
|
|
3853
|
+
// packages/pdf/src/images/image.js
|
|
3766
3854
|
async function embedImage(doc, bytes, opt = {}) {
|
|
3767
3855
|
const b = toBytes(bytes, "embedImage");
|
|
3768
|
-
const own2 = (
|
|
3856
|
+
const own2 = (k2) => opt != null && Object.hasOwn(opt, k2) ? (
|
|
3769
3857
|
/** @type {any} */
|
|
3770
|
-
opt[
|
|
3858
|
+
opt[k2]
|
|
3771
3859
|
) : void 0;
|
|
3772
3860
|
const o = { colorSpace: own2("colorSpace"), maxDecodedBytes: own2("maxDecodedBytes") ?? MAX_DECODED };
|
|
3773
3861
|
if (!(Number.isSafeInteger(o.maxDecodedBytes) && o.maxDecodedBytes > 0)) throw new TypeError("embedImage: maxDecodedBytes is a whole number of bytes > 0");
|
|
3774
3862
|
if (b.length > MAX_INPUT) throw new RangeError(`embedImage: at most ${MAX_INPUT >> 20} MB`);
|
|
3863
|
+
let seen = SEEN.get(doc);
|
|
3864
|
+
if (!seen) SEEN.set(doc, seen = /* @__PURE__ */ new Map());
|
|
3865
|
+
const { key, copy } = await digest(b);
|
|
3866
|
+
const k = `${key} ${o.colorSpace == null ? "-" : idOf(o.colorSpace)} ${o.maxDecodedBytes}`;
|
|
3867
|
+
const hit = seen.get(k);
|
|
3868
|
+
if (hit && (!hit.copy || same(hit.copy, b))) return hit.img;
|
|
3869
|
+
const img = embed(doc, b, o);
|
|
3870
|
+
if (!hit) seen.set(k, { img, copy });
|
|
3871
|
+
img.catch(() => {
|
|
3872
|
+
if (seen.get(k)?.img === img) seen.delete(k);
|
|
3873
|
+
});
|
|
3874
|
+
return img;
|
|
3875
|
+
}
|
|
3876
|
+
async function digest(b) {
|
|
3877
|
+
if (NODE_CRYPTO) return { key: NODE_CRYPTO.createHash("sha256").update(b).digest("hex"), copy: null };
|
|
3878
|
+
const subtle = globalThis.crypto?.subtle;
|
|
3879
|
+
if (subtle) return { key: Array.from(new Uint8Array(await subtle.digest("SHA-256", b.slice())), (x2) => x2.toString(16).padStart(2, "0")).join(""), copy: null };
|
|
3880
|
+
let h1 = 2166136261, h2 = 2538058380;
|
|
3881
|
+
for (let i2 = 0; i2 < b.length; i2++) {
|
|
3882
|
+
h1 = Math.imul(h1 ^ b[i2], 16777619);
|
|
3883
|
+
h2 = Math.imul(h2 ^ b[i2], 1540483477) ^ h2 >>> 15;
|
|
3884
|
+
}
|
|
3885
|
+
return { key: `f${b.length}:${(h1 >>> 0).toString(16)}${(h2 >>> 0).toString(16)}`, copy: b.slice() };
|
|
3886
|
+
}
|
|
3887
|
+
async function embed(doc, b, o) {
|
|
3775
3888
|
const space = (n) => {
|
|
3776
3889
|
if (o.colorSpace != null) {
|
|
3777
3890
|
const icc = unbrand(o.colorSpace, "icc", doc, "ICC colour space (pdf.iccColorSpace)");
|
|
@@ -3902,9 +4015,9 @@ function image(img, o = {}) {
|
|
|
3902
4015
|
else draw();
|
|
3903
4016
|
return page;
|
|
3904
4017
|
}
|
|
3905
|
-
var MAX_INPUT, ORIENT;
|
|
4018
|
+
var MAX_INPUT, ORIENT, SEEN, IDS, nextId, idOf, NODE_CRYPTO, same;
|
|
3906
4019
|
var init_image = __esm({
|
|
3907
|
-
"src/images/image.js"() {
|
|
4020
|
+
"packages/pdf/src/images/image.js"() {
|
|
3908
4021
|
init_serialize();
|
|
3909
4022
|
init_deflate();
|
|
3910
4023
|
init_brand();
|
|
@@ -3926,10 +4039,23 @@ var init_image = __esm({
|
|
|
3926
4039
|
[0, 1, 1, 0, 0, 0],
|
|
3927
4040
|
[0, 1, -1, 0, 1, 0]
|
|
3928
4041
|
];
|
|
4042
|
+
SEEN = /** @type {WeakMap<any, Map<string, { img: Promise<any>, copy: Uint8Array | null }>>} */
|
|
4043
|
+
/* @__PURE__ */ new WeakMap();
|
|
4044
|
+
IDS = /** @type {WeakMap<object, number>} */
|
|
4045
|
+
/* @__PURE__ */ new WeakMap();
|
|
4046
|
+
nextId = 0;
|
|
4047
|
+
idOf = (v) => v !== null && typeof v === "object" ? IDS.get(v) ?? (IDS.set(v, ++nextId), nextId) : `?${String(v)}`;
|
|
4048
|
+
NODE_CRYPTO = /** @type {any} */
|
|
4049
|
+
globalThis.process?.getBuiltinModule?.("node:crypto");
|
|
4050
|
+
same = (a, b) => {
|
|
4051
|
+
if (a.length !== b.length) return false;
|
|
4052
|
+
for (let i2 = 0; i2 < a.length; i2++) if (a[i2] !== b[i2]) return false;
|
|
4053
|
+
return true;
|
|
4054
|
+
};
|
|
3929
4055
|
}
|
|
3930
4056
|
});
|
|
3931
4057
|
|
|
3932
|
-
// src/annotations/annot.js
|
|
4058
|
+
// packages/pdf/src/annotations/annot.js
|
|
3933
4059
|
function dateOf(d, who) {
|
|
3934
4060
|
if (!(d instanceof Date) || isNaN(+d)) throw new TypeError(`${who}: a date is a valid Date`);
|
|
3935
4061
|
return pdfDate(d);
|
|
@@ -4000,7 +4126,7 @@ function addAnnot(page, subtype, box, own2, common, draw) {
|
|
|
4000
4126
|
}
|
|
4001
4127
|
var FLAGS, MAX_CONTENTS, no;
|
|
4002
4128
|
var init_annot = __esm({
|
|
4003
|
-
"src/annotations/annot.js"() {
|
|
4129
|
+
"packages/pdf/src/annotations/annot.js"() {
|
|
4004
4130
|
init_serialize();
|
|
4005
4131
|
init_brand();
|
|
4006
4132
|
init_content();
|
|
@@ -4013,7 +4139,7 @@ var init_annot = __esm({
|
|
|
4013
4139
|
}
|
|
4014
4140
|
});
|
|
4015
4141
|
|
|
4016
|
-
// src/annotations/markup.js
|
|
4142
|
+
// packages/pdf/src/annotations/markup.js
|
|
4017
4143
|
function boxOf(o, who) {
|
|
4018
4144
|
const b = [o?.x ?? 0, o?.y ?? 0, o?.width, o?.height];
|
|
4019
4145
|
for (const v of b) if (typeof v !== "number") throw new TypeError(`${who}: x, y, width and height are numbers`);
|
|
@@ -4216,7 +4342,7 @@ function stamp(o) {
|
|
|
4216
4342
|
}
|
|
4217
4343
|
var NOTE_ICONS, STAMPS, LINE_ENDINGS, MAX_POINTS, MAX_STROKES, dflt2, highlight, underline, strikeOut, squiggly, asciiHex;
|
|
4218
4344
|
var init_markup = __esm({
|
|
4219
|
-
"src/annotations/markup.js"() {
|
|
4345
|
+
"packages/pdf/src/annotations/markup.js"() {
|
|
4220
4346
|
init_serialize();
|
|
4221
4347
|
init_brand();
|
|
4222
4348
|
init_color();
|
|
@@ -4240,7 +4366,7 @@ var init_markup = __esm({
|
|
|
4240
4366
|
}
|
|
4241
4367
|
});
|
|
4242
4368
|
|
|
4243
|
-
// src/core/filename.js
|
|
4369
|
+
// packages/pdf/src/core/filename.js
|
|
4244
4370
|
function checkFileName(raw, o, who, again = false) {
|
|
4245
4371
|
if (typeof raw !== "string") throw new TypeError(`${who}: name (the file name) is a string`);
|
|
4246
4372
|
if (raw.length > MAX_IN) throw new RangeError(`${who}: a file name is at most ${MAX_BYTES} bytes (UTF-8)`);
|
|
@@ -4299,7 +4425,7 @@ function check(name, allow, risky, o, who) {
|
|
|
4299
4425
|
}
|
|
4300
4426
|
var MAX_IN, MAX_BYTES, BAD, SPACES2, SLASHES, DOTS, DEVICE2, PASSIVE, MIMES, UTF83;
|
|
4301
4427
|
var init_filename = __esm({
|
|
4302
|
-
"src/core/filename.js"() {
|
|
4428
|
+
"packages/pdf/src/core/filename.js"() {
|
|
4303
4429
|
MAX_IN = 4096;
|
|
4304
4430
|
MAX_BYTES = 255;
|
|
4305
4431
|
BAD = /[\p{Cc}\p{Cf}\p{Zl}\p{Zp}\p{Cs}<>:"|?*]/u;
|
|
@@ -4337,7 +4463,7 @@ var init_filename = __esm({
|
|
|
4337
4463
|
}
|
|
4338
4464
|
});
|
|
4339
4465
|
|
|
4340
|
-
// src/core/md5.js
|
|
4466
|
+
// packages/pdf/src/core/md5.js
|
|
4341
4467
|
function md5(bytes) {
|
|
4342
4468
|
const n = bytes.length, total = (n + 8 >>> 6) + 1 << 6;
|
|
4343
4469
|
const tail = new Uint8Array(total - (n & ~63));
|
|
@@ -4388,7 +4514,7 @@ function md5(bytes) {
|
|
|
4388
4514
|
}
|
|
4389
4515
|
var S, K;
|
|
4390
4516
|
var init_md5 = __esm({
|
|
4391
|
-
"src/core/md5.js"() {
|
|
4517
|
+
"packages/pdf/src/core/md5.js"() {
|
|
4392
4518
|
S = [
|
|
4393
4519
|
7,
|
|
4394
4520
|
12,
|
|
@@ -4459,7 +4585,7 @@ var init_md5 = __esm({
|
|
|
4459
4585
|
}
|
|
4460
4586
|
});
|
|
4461
4587
|
|
|
4462
|
-
// src/annotations/attach.js
|
|
4588
|
+
// packages/pdf/src/annotations/attach.js
|
|
4463
4589
|
function attachFile(bytes, o = (
|
|
4464
4590
|
/** @type {any} */
|
|
4465
4591
|
{}
|
|
@@ -4495,7 +4621,7 @@ function attachFile(bytes, o = (
|
|
|
4495
4621
|
}
|
|
4496
4622
|
var FILE_ICONS, MAX_FILE;
|
|
4497
4623
|
var init_attach = __esm({
|
|
4498
|
-
"src/annotations/attach.js"() {
|
|
4624
|
+
"packages/pdf/src/annotations/attach.js"() {
|
|
4499
4625
|
init_serialize();
|
|
4500
4626
|
init_filename();
|
|
4501
4627
|
init_md5();
|
|
@@ -4505,7 +4631,7 @@ var init_attach = __esm({
|
|
|
4505
4631
|
}
|
|
4506
4632
|
});
|
|
4507
4633
|
|
|
4508
|
-
// src/standards/layers.js
|
|
4634
|
+
// packages/pdf/src/standards/layers.js
|
|
4509
4635
|
function createLayers(doc) {
|
|
4510
4636
|
const all = [];
|
|
4511
4637
|
doc.onFinish(async () => {
|
|
@@ -4567,7 +4693,7 @@ function pageLayer(layer, fn) {
|
|
|
4567
4693
|
}
|
|
4568
4694
|
var MAX_LAYERS, MAX_NEST, depth;
|
|
4569
4695
|
var init_layers = __esm({
|
|
4570
|
-
"src/standards/layers.js"() {
|
|
4696
|
+
"packages/pdf/src/standards/layers.js"() {
|
|
4571
4697
|
init_serialize();
|
|
4572
4698
|
init_brand();
|
|
4573
4699
|
init_level();
|
|
@@ -4578,7 +4704,7 @@ var init_layers = __esm({
|
|
|
4578
4704
|
}
|
|
4579
4705
|
});
|
|
4580
4706
|
|
|
4581
|
-
// src/tags/tags.js
|
|
4707
|
+
// packages/pdf/src/tags/tags.js
|
|
4582
4708
|
function createTagger(doc, opt) {
|
|
4583
4709
|
const rootRef = doc.reserve(), docRef = doc.reserve();
|
|
4584
4710
|
const docKids = [];
|
|
@@ -4749,12 +4875,12 @@ function checkOptions(type, o) {
|
|
|
4749
4875
|
k
|
|
4750
4876
|
);
|
|
4751
4877
|
if (o.lang != null && (typeof o.lang !== "string" || !/^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8}){0,8}$/.test(o.lang))) throw new TypeError(`page.tag: lang is a language tag like "en" or "fr-CA", not ${JSON.stringify(o.lang)}`);
|
|
4752
|
-
if (o.id != null)
|
|
4878
|
+
if (o.id != null) idOf2(o.id);
|
|
4753
4879
|
if (o.scope != null && type !== "TH") throw new TypeError("page.tag: scope is for TH");
|
|
4754
4880
|
if (o.headers != null) {
|
|
4755
4881
|
if (type !== "TH" && type !== "TD") throw new TypeError("page.tag: headers is for TD and TH");
|
|
4756
4882
|
if (!Array.isArray(o.headers) || !o.headers.length || o.headers.length > 64) throw new TypeError("page.tag: headers is an array of 1–64 TH ids");
|
|
4757
|
-
o.headers.forEach(
|
|
4883
|
+
o.headers.forEach(idOf2);
|
|
4758
4884
|
}
|
|
4759
4885
|
for (
|
|
4760
4886
|
const k of
|
|
@@ -4785,9 +4911,9 @@ function artifact(o, fn) {
|
|
|
4785
4911
|
if (typeof fn !== "function") throw new TypeError("page.artifact: fn is a function that draws");
|
|
4786
4912
|
return this.doc.tags ? this.doc.tags.artifact(this, o, fn) : fn();
|
|
4787
4913
|
}
|
|
4788
|
-
var STRUCTURE_TYPES, ART, PARENTS, NUMBERING, ARTIFACT_TYPES, ARTIFACT_SUBTYPES, MAX_TEXT2, MAX_IDS, str,
|
|
4914
|
+
var STRUCTURE_TYPES, ART, PARENTS, NUMBERING, ARTIFACT_TYPES, ARTIFACT_SUBTYPES, MAX_TEXT2, MAX_IDS, str, idOf2;
|
|
4789
4915
|
var init_tags = __esm({
|
|
4790
|
-
"src/tags/tags.js"() {
|
|
4916
|
+
"packages/pdf/src/tags/tags.js"() {
|
|
4791
4917
|
init_serialize();
|
|
4792
4918
|
init_trees();
|
|
4793
4919
|
init_brand();
|
|
@@ -4870,14 +4996,14 @@ var init_tags = __esm({
|
|
|
4870
4996
|
if (typeof v !== "string" || v.length > MAX_TEXT2) throw new TypeError(`page.tag: ${k} is a string of at most ${MAX_TEXT2} characters`);
|
|
4871
4997
|
return v;
|
|
4872
4998
|
};
|
|
4873
|
-
|
|
4999
|
+
idOf2 = (v) => {
|
|
4874
5000
|
if (typeof v !== "string" || !/^[A-Za-z0-9_.:-]{1,64}$/.test(v)) throw new TypeError(`page.tag: an id is 1–64 letters, digits, _ . : or -, not ${JSON.stringify(v)}`);
|
|
4875
5001
|
return v;
|
|
4876
5002
|
};
|
|
4877
5003
|
}
|
|
4878
5004
|
});
|
|
4879
5005
|
|
|
4880
|
-
// src/page.js
|
|
5006
|
+
// packages/pdf/src/page.js
|
|
4881
5007
|
function install(methods) {
|
|
4882
5008
|
for (const [name, f] of Object.entries(methods)) {
|
|
4883
5009
|
Page.prototype[name] = function(...a) {
|
|
@@ -4888,7 +5014,7 @@ function install(methods) {
|
|
|
4888
5014
|
}
|
|
4889
5015
|
var MAX_ANNOTS, Page;
|
|
4890
5016
|
var init_page = __esm({
|
|
4891
|
-
"src/page.js"() {
|
|
5017
|
+
"packages/pdf/src/page.js"() {
|
|
4892
5018
|
init_content();
|
|
4893
5019
|
init_brand();
|
|
4894
5020
|
init_text();
|
|
@@ -4965,10 +5091,10 @@ var init_page = __esm({
|
|
|
4965
5091
|
}
|
|
4966
5092
|
});
|
|
4967
5093
|
|
|
4968
|
-
// src/fonts/standard-metrics.js
|
|
5094
|
+
// packages/pdf/src/fonts/standard-metrics.js
|
|
4969
5095
|
var ENCODINGS, METRICS;
|
|
4970
5096
|
var init_standard_metrics = __esm({
|
|
4971
|
-
"src/fonts/standard-metrics.js"() {
|
|
5097
|
+
"packages/pdf/src/fonts/standard-metrics.js"() {
|
|
4972
5098
|
ENCODINGS = {
|
|
4973
5099
|
WinAnsi: [
|
|
4974
5100
|
32,
|
|
@@ -9990,7 +10116,7 @@ var init_standard_metrics = __esm({
|
|
|
9990
10116
|
}
|
|
9991
10117
|
});
|
|
9992
10118
|
|
|
9993
|
-
// src/fonts/standard.js
|
|
10119
|
+
// packages/pdf/src/fonts/standard.js
|
|
9994
10120
|
function standardFont(doc, key) {
|
|
9995
10121
|
const m = typeof key === "string" && Object.hasOwn(METRICS, key) ? (
|
|
9996
10122
|
/** @type {any} */
|
|
@@ -10009,6 +10135,13 @@ function standardFont(doc, key) {
|
|
|
10009
10135
|
/** @type {number[]} */
|
|
10010
10136
|
m.widths
|
|
10011
10137
|
);
|
|
10138
|
+
const W8 = new Float64Array(256), SAME = new Uint8Array(256);
|
|
10139
|
+
for (let c = 0; c < 256; c++) {
|
|
10140
|
+
const code = codeOf.get(c);
|
|
10141
|
+
W8[c] = code === void 0 ? -1 : widths[code] || 0;
|
|
10142
|
+
SAME[c] = code === c && esc(code) === String.fromCharCode(c) ? 1 : 0;
|
|
10143
|
+
}
|
|
10144
|
+
const SP32 = codeOf.get(32) === 32;
|
|
10012
10145
|
const ref = doc.reserve();
|
|
10013
10146
|
const missing = /* @__PURE__ */ new Set();
|
|
10014
10147
|
const memo2 = /* @__PURE__ */ new Map();
|
|
@@ -10068,8 +10201,31 @@ function standardFont(doc, key) {
|
|
|
10068
10201
|
lineHeight: 1.2,
|
|
10069
10202
|
has: (cp) => codeOf.has(cp),
|
|
10070
10203
|
items(text3, o) {
|
|
10071
|
-
let body = "", a = 0, n = 0, sp = 0;
|
|
10072
10204
|
const draw = !o.measure;
|
|
10205
|
+
if (!o.rtl) {
|
|
10206
|
+
let a2 = 0, n2 = 0, sp2 = 0, same2 = true;
|
|
10207
|
+
for (let i2 = 0; i2 < text3.length; i2++) {
|
|
10208
|
+
const c = text3.charCodeAt(i2);
|
|
10209
|
+
if (c > 255) {
|
|
10210
|
+
same2 = false;
|
|
10211
|
+
break;
|
|
10212
|
+
}
|
|
10213
|
+
const w = W8[c];
|
|
10214
|
+
if (w < 0) {
|
|
10215
|
+
same2 = false;
|
|
10216
|
+
break;
|
|
10217
|
+
}
|
|
10218
|
+
a2 += w;
|
|
10219
|
+
n2++;
|
|
10220
|
+
if (c === 32 && SP32) sp2++;
|
|
10221
|
+
if (!SAME[c]) {
|
|
10222
|
+
same2 = false;
|
|
10223
|
+
break;
|
|
10224
|
+
}
|
|
10225
|
+
}
|
|
10226
|
+
if (same2) return { body: draw ? text3 : "", a: a2, n: n2, sp: sp2 };
|
|
10227
|
+
}
|
|
10228
|
+
let body = "", a = 0, n = 0, sp = 0;
|
|
10073
10229
|
for (const ch of o.rtl ? [...text3].reverse() : text3) {
|
|
10074
10230
|
const b = byte(ch);
|
|
10075
10231
|
if (!b) {
|
|
@@ -10090,7 +10246,7 @@ function standardFont(doc, key) {
|
|
|
10090
10246
|
}
|
|
10091
10247
|
var STANDARD_NAMES, CODE;
|
|
10092
10248
|
var init_standard = __esm({
|
|
10093
|
-
"src/fonts/standard.js"() {
|
|
10249
|
+
"packages/pdf/src/fonts/standard.js"() {
|
|
10094
10250
|
init_brand();
|
|
10095
10251
|
init_standard_metrics();
|
|
10096
10252
|
init_serialize();
|
|
@@ -10101,7 +10257,7 @@ var init_standard = __esm({
|
|
|
10101
10257
|
}
|
|
10102
10258
|
});
|
|
10103
10259
|
|
|
10104
|
-
// src/fonts/truetype.js
|
|
10260
|
+
// packages/pdf/src/fonts/truetype.js
|
|
10105
10261
|
function sfntTables(bytes) {
|
|
10106
10262
|
if (bytes.length < 12) throw new TypeError("Not a font: too short");
|
|
10107
10263
|
const v = tagOf(bytes, 0);
|
|
@@ -10278,14 +10434,14 @@ function cmapLookup(dv) {
|
|
|
10278
10434
|
}
|
|
10279
10435
|
var broken, tagOf, view;
|
|
10280
10436
|
var init_truetype = __esm({
|
|
10281
|
-
"src/fonts/truetype.js"() {
|
|
10437
|
+
"packages/pdf/src/fonts/truetype.js"() {
|
|
10282
10438
|
broken = (why) => new TypeError(`Broken font: ${why}`);
|
|
10283
10439
|
tagOf = (b, p) => String.fromCharCode(b[p], b[p + 1], b[p + 2], b[p + 3]);
|
|
10284
10440
|
view = (b) => new DataView(b.buffer, b.byteOffset, b.byteLength);
|
|
10285
10441
|
}
|
|
10286
10442
|
});
|
|
10287
10443
|
|
|
10288
|
-
// src/fonts/subset.js
|
|
10444
|
+
// packages/pdf/src/fonts/subset.js
|
|
10289
10445
|
function subsetGlyf(bytes, glyphs2) {
|
|
10290
10446
|
const t = sfntTables(bytes);
|
|
10291
10447
|
const head = t.get("head"), loca = t.get("loca"), glyf = t.get("glyf"), maxp = t.get("maxp");
|
|
@@ -10381,7 +10537,7 @@ function buildSfnt(tables, version = [0, 1, 0, 0]) {
|
|
|
10381
10537
|
}
|
|
10382
10538
|
var KEEP, tableSum;
|
|
10383
10539
|
var init_subset = __esm({
|
|
10384
|
-
"src/fonts/subset.js"() {
|
|
10540
|
+
"packages/pdf/src/fonts/subset.js"() {
|
|
10385
10541
|
init_truetype();
|
|
10386
10542
|
KEEP = ["head", "hhea", "hmtx", "maxp", "cvt ", "fpgm", "prep", "OS/2", "name", "gasp"];
|
|
10387
10543
|
tableSum = (b, o, len) => {
|
|
@@ -10393,7 +10549,7 @@ var init_subset = __esm({
|
|
|
10393
10549
|
}
|
|
10394
10550
|
});
|
|
10395
10551
|
|
|
10396
|
-
// src/fonts/cff.js
|
|
10552
|
+
// packages/pdf/src/fonts/cff.js
|
|
10397
10553
|
function readIndex(t, p, what) {
|
|
10398
10554
|
if (p + 2 > t.length) throw broken2(`the CFF ${what} INDEX lies outside the table`);
|
|
10399
10555
|
const count = t[p] << 8 | t[p + 1];
|
|
@@ -10656,7 +10812,7 @@ function identityCharset(t, n) {
|
|
|
10656
10812
|
}
|
|
10657
10813
|
var broken2, MAX_STACK, MAX_DEPTH2, MAX_CS, BUDGET, FONT_BUDGET, bias;
|
|
10658
10814
|
var init_cff = __esm({
|
|
10659
|
-
"src/fonts/cff.js"() {
|
|
10815
|
+
"packages/pdf/src/fonts/cff.js"() {
|
|
10660
10816
|
broken2 = (why) => new TypeError(`Broken font: ${why}`);
|
|
10661
10817
|
MAX_STACK = 48;
|
|
10662
10818
|
MAX_DEPTH2 = 10;
|
|
@@ -10667,7 +10823,7 @@ var init_cff = __esm({
|
|
|
10667
10823
|
}
|
|
10668
10824
|
});
|
|
10669
10825
|
|
|
10670
|
-
// src/fonts/kern.js
|
|
10826
|
+
// packages/pdf/src/fonts/kern.js
|
|
10671
10827
|
function kerning(tables, numGlyphs, warn) {
|
|
10672
10828
|
const gpos = tables.get("GPOS"), kern = tables.get("kern");
|
|
10673
10829
|
if (gpos) {
|
|
@@ -10902,7 +11058,7 @@ function kernTable(t, numGlyphs) {
|
|
|
10902
11058
|
}
|
|
10903
11059
|
var broken3, MAX_SUBTABLES, BUDGET2, vsize;
|
|
10904
11060
|
var init_kern = __esm({
|
|
10905
|
-
"src/fonts/kern.js"() {
|
|
11061
|
+
"packages/pdf/src/fonts/kern.js"() {
|
|
10906
11062
|
broken3 = (why) => new TypeError(`Broken font: ${why}`);
|
|
10907
11063
|
MAX_SUBTABLES = 64;
|
|
10908
11064
|
BUDGET2 = 4e6;
|
|
@@ -10914,7 +11070,7 @@ var init_kern = __esm({
|
|
|
10914
11070
|
}
|
|
10915
11071
|
});
|
|
10916
11072
|
|
|
10917
|
-
// src/fonts/embed.js
|
|
11073
|
+
// packages/pdf/src/fonts/embed.js
|
|
10918
11074
|
function embedFont(doc, input, opt = {}) {
|
|
10919
11075
|
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
10920
11076
|
const f = parseFont(bytes);
|
|
@@ -10938,9 +11094,15 @@ function embedFont(doc, input, opt = {}) {
|
|
|
10938
11094
|
use(0);
|
|
10939
11095
|
const two = (g) => esc(g >> 8) + esc(g & 255);
|
|
10940
11096
|
const kern = kerning(f.tables, f.numGlyphs, (m) => doc.warn(`${f.postscriptName.slice(0, 63)}: ${m}`));
|
|
11097
|
+
const axes = variation(f.tables.get("fvar"));
|
|
11098
|
+
if (axes) doc.warn(`${f.postscriptName.slice(0, 63)} is a variable font: it is drawn at its default instance (${axes}); to draw another weight or width, embed a static instance of it (fonttools varLib.instancer, or HarfBuzz's hb-subset --instance)`);
|
|
10941
11099
|
const k = 1e3 / f.unitsPerEm;
|
|
10942
11100
|
const ref = doc.reserve();
|
|
10943
|
-
const
|
|
11101
|
+
const codes = /* @__PURE__ */ new Map();
|
|
11102
|
+
const codeOf = /* @__PURE__ */ new Map();
|
|
11103
|
+
const copies = !f.cff;
|
|
11104
|
+
const EXACT = [];
|
|
11105
|
+
let next = f.numGlyphs;
|
|
10944
11106
|
const missing = /* @__PURE__ */ new Set();
|
|
10945
11107
|
const memo2 = /* @__PURE__ */ new Map();
|
|
10946
11108
|
const strict = doc.pdfa || doc.tagged;
|
|
@@ -10957,24 +11119,31 @@ function embedFont(doc, input, opt = {}) {
|
|
|
10957
11119
|
);
|
|
10958
11120
|
if (!g) lack(ch);
|
|
10959
11121
|
if (!g && missing.size < 100) missing.add(ch);
|
|
10960
|
-
|
|
10961
|
-
use(g);
|
|
10962
|
-
glyphs2.set(g, g ? ch : "");
|
|
10963
|
-
}
|
|
10964
|
-
memo2.set(ch, b = !g && strict ? "" : two(g));
|
|
11122
|
+
memo2.set(ch, b = !g && strict ? "" : two(code(g, ch)[0]));
|
|
10965
11123
|
}
|
|
10966
11124
|
return b;
|
|
10967
11125
|
};
|
|
10968
|
-
const
|
|
11126
|
+
const code = (g, t) => {
|
|
10969
11127
|
const m = t.length <= 32 ? t : String.fromCodePoint(
|
|
10970
11128
|
/** @type {number} */
|
|
10971
11129
|
t.codePointAt(0)
|
|
10972
11130
|
);
|
|
10973
|
-
if (
|
|
10974
|
-
|
|
10975
|
-
|
|
11131
|
+
if (codes.get(g)?.t === m) return m === t ? EXACT[g] ??= [g, true] : [g, false];
|
|
11132
|
+
let c = codeOf.get(`${g}:${m}`);
|
|
11133
|
+
if (c === void 0) {
|
|
11134
|
+
if (!codes.has(g)) {
|
|
11135
|
+
use(g);
|
|
11136
|
+
c = g;
|
|
11137
|
+
} else if (copies && next <= 65535) c = next++;
|
|
11138
|
+
else return [
|
|
11139
|
+
g,
|
|
11140
|
+
/** @type {any} */
|
|
11141
|
+
codes.get(g).t === t
|
|
11142
|
+
];
|
|
11143
|
+
codes.set(c, { g, t: m });
|
|
11144
|
+
codeOf.set(`${g}:${m}`, c);
|
|
10976
11145
|
}
|
|
10977
|
-
return
|
|
11146
|
+
return [c, m === t];
|
|
10978
11147
|
};
|
|
10979
11148
|
let handle;
|
|
10980
11149
|
const items = (text3, o) => {
|
|
@@ -11025,9 +11194,9 @@ function embedFont(doc, input, opt = {}) {
|
|
|
11025
11194
|
if (missing.size < 100 && !o.measure) missing.add(ch);
|
|
11026
11195
|
if (strict) continue;
|
|
11027
11196
|
}
|
|
11028
|
-
const ok = o.measure
|
|
11197
|
+
const [c, ok] = o.measure ? [g, true] : code(g, ch), w = W(g);
|
|
11029
11198
|
if (kerned && prev >= 0) out[out.length - 1].a += kern(prev, g) * k;
|
|
11030
|
-
out.push({ b: two(
|
|
11199
|
+
out.push({ b: two(c), w, a: w, dx: 0, dy: 0, sp: ch === " ", at: ok ? void 0 : ch, n: 1 });
|
|
11031
11200
|
prev = g;
|
|
11032
11201
|
}
|
|
11033
11202
|
return out;
|
|
@@ -11051,33 +11220,63 @@ function embedFont(doc, input, opt = {}) {
|
|
|
11051
11220
|
});
|
|
11052
11221
|
const starts = [...new Set(gl.map((x2) => x2.cl))].sort((a, b) => a - b);
|
|
11053
11222
|
const end = new Map(starts.map((c, i2) => [c, starts[i2 + 1] ?? text3.length]));
|
|
11054
|
-
const out = [];
|
|
11223
|
+
const out = [], said = /* @__PURE__ */ new Set();
|
|
11224
|
+
const at = (a) => {
|
|
11225
|
+
let b = a;
|
|
11226
|
+
while (b < gl.length && gl[b].cl === gl[a].cl) b++;
|
|
11227
|
+
return [b, said.has(gl[a].cl) ? "" : text3.slice(gl[a].cl, end.get(gl[a].cl))];
|
|
11228
|
+
};
|
|
11229
|
+
let glued = null;
|
|
11055
11230
|
for (let i2 = 0; i2 < gl.length; ) {
|
|
11056
|
-
|
|
11057
|
-
|
|
11058
|
-
|
|
11059
|
-
|
|
11231
|
+
const [j, t0] = at(i2), cl = gl[i2].cl, first = out.length;
|
|
11232
|
+
if (glued && t0 === " " && j - i2 === 1) {
|
|
11233
|
+
const { g, ax, dx, dy } = gl[i2];
|
|
11234
|
+
out.push({ b: two(o.measure ? g : code(g, "")[0]), w: W(g), a: ax * k, dx: dx * k, dy: dy * k, sp: true });
|
|
11235
|
+
if (glued.n) glued.n++;
|
|
11236
|
+
glued = null;
|
|
11237
|
+
said.add(cl);
|
|
11238
|
+
i2 = j;
|
|
11239
|
+
continue;
|
|
11240
|
+
}
|
|
11241
|
+
glued = null;
|
|
11242
|
+
const glue = !o.rtl && !!t0 && t0 !== " " && j < gl.length && at(j)[1] === " " && at(j)[0] - j === 1 && at(j)[0] < gl.length && MN.test(at(at(j)[0])[1]);
|
|
11243
|
+
const t = glue ? `${t0} ` : t0;
|
|
11244
|
+
let lead = -1, li = -1, span = glue;
|
|
11245
|
+
if (t0) {
|
|
11246
|
+
for (let q = i2; q < j; q++) if ((gl[q].g || !strict) && (lead < 0 || gl[q].ax > gl[lead].ax)) lead = q;
|
|
11247
|
+
}
|
|
11060
11248
|
for (let q = i2; q < j; q++) {
|
|
11061
11249
|
const { g, ax, dx, dy } = gl[q];
|
|
11062
11250
|
if (!g) {
|
|
11063
11251
|
if (!o.measure) lack(t);
|
|
11064
|
-
if (missing.size < 100 && !o.measure) missing.add(t);
|
|
11252
|
+
if (missing.size < 100 && !o.measure && t) missing.add(t);
|
|
11065
11253
|
if (strict) {
|
|
11066
11254
|
if (out.length > first) out[out.length - 1].a += ax * k;
|
|
11067
11255
|
continue;
|
|
11068
11256
|
}
|
|
11069
11257
|
}
|
|
11070
|
-
|
|
11071
|
-
|
|
11072
|
-
|
|
11073
|
-
|
|
11074
|
-
out
|
|
11075
|
-
out[first].n = out.length - first;
|
|
11258
|
+
const [c, exact] = o.measure ? [g, true] : code(g, q !== lead ? "" : o.rtl && RTL3.test(t) ? [...t].reverse().join("") : t);
|
|
11259
|
+
if (!exact) span = true;
|
|
11260
|
+
if (q === lead) li = out.length;
|
|
11261
|
+
if (q !== lead && Math.abs(ax * k) >= 1) span ||= !o.rtl;
|
|
11262
|
+
out.push({ b: two(c), w: W(g), a: ax * k, dx: dx * k, dy: dy * k, sp: q === lead && t === " ", c: q !== lead && Math.abs(ax * k) < 1 || void 0 });
|
|
11076
11263
|
}
|
|
11264
|
+
if (out.length > first) said.add(cl);
|
|
11265
|
+
if (span && !o.measure) {
|
|
11266
|
+
const flow = out.slice(first).filter((x2) => !x2.c);
|
|
11267
|
+
if (flow.length) {
|
|
11268
|
+
flow[0].at = t;
|
|
11269
|
+
flow[0].n = flow.length;
|
|
11270
|
+
if (glue) glued = flow[0];
|
|
11271
|
+
}
|
|
11272
|
+
if (li >= 0 && !out[li].c) out[li].b = two(code(gl[lead].g, "")[0]);
|
|
11273
|
+
} else if (glue) glued = /** @type {any} */
|
|
11274
|
+
{};
|
|
11077
11275
|
i2 = j;
|
|
11078
11276
|
}
|
|
11079
11277
|
return out;
|
|
11080
11278
|
};
|
|
11279
|
+
const MN = /\p{Mn}/u, RTL3 = /[\u0590-\u08ff\ufb1d-\ufdff\ufe70-\ufeff]/;
|
|
11081
11280
|
const impl = {
|
|
11082
11281
|
standard: false,
|
|
11083
11282
|
items,
|
|
@@ -11114,12 +11313,12 @@ function embedFont(doc, input, opt = {}) {
|
|
|
11114
11313
|
return s;
|
|
11115
11314
|
},
|
|
11116
11315
|
async write() {
|
|
11117
|
-
|
|
11118
|
-
const used = [...
|
|
11119
|
-
const cps = [...
|
|
11316
|
+
const cids = [...codes.keys()].sort((a, b) => a - b);
|
|
11317
|
+
const used = [.../* @__PURE__ */ new Set([0, ...[...codes.values()].map((x2) => x2.g)])].sort((a, b) => a - b);
|
|
11318
|
+
const cps = [...new Set([...codes.values()].flatMap((x2) => [...x2.t].map((c) => (
|
|
11120
11319
|
/** @type {number} */
|
|
11121
11320
|
c.codePointAt(0)
|
|
11122
|
-
)));
|
|
11321
|
+
))))];
|
|
11123
11322
|
let file = bytes;
|
|
11124
11323
|
if (sub && !(f.fsType & 256)) {
|
|
11125
11324
|
if (typeof sub === "function") {
|
|
@@ -11144,8 +11343,8 @@ function embedFont(doc, input, opt = {}) {
|
|
|
11144
11343
|
) : file);
|
|
11145
11344
|
let cidSet = "";
|
|
11146
11345
|
if (subset && doc.pdfaLevel?.part === 1) {
|
|
11147
|
-
const bits2 = new Uint8Array((
|
|
11148
|
-
for (const g of
|
|
11346
|
+
const all = [.../* @__PURE__ */ new Set([...used, ...cids])], bits2 = new Uint8Array((Math.max(...all) >> 3) + 1), n = doc.reserve();
|
|
11347
|
+
for (const g of all) bits2[g >> 3] |= 128 >> (g & 7);
|
|
11149
11348
|
await doc.writeStream(n, "<< >>", bits2);
|
|
11150
11349
|
cidSet = ` /CIDSet ${n} 0 R`;
|
|
11151
11350
|
}
|
|
@@ -11153,16 +11352,27 @@ function embedFont(doc, input, opt = {}) {
|
|
|
11153
11352
|
const flags = (f.fixedPitch ? 1 : 0) | 4 | (f.italicAngle ? 64 : 0);
|
|
11154
11353
|
const [x0, y0, x1, y1] = f.bbox;
|
|
11155
11354
|
await doc.write(desc, `<< /Type /FontDescriptor /FontName ${base3} /Flags ${flags} /FontBBox [${s(x0)} ${s(y0)} ${s(x1)} ${s(y1)}] /ItalicAngle ${num(f.italicAngle)} /Ascent ${s(f.ascent)} /Descent ${s(f.descent)} /CapHeight ${s(f.capHeight)} /XHeight ${s(f.xHeight)} /StemV 0 /${cff ? "FontFile3" : "FontFile2"} ${fileRef} 0 R${cidSet} >>`);
|
|
11156
|
-
const
|
|
11355
|
+
const wc = (cids.length ? cids : [0]).map((c) => [c, codes.get(c)?.g ?? 0]);
|
|
11157
11356
|
let Wa = "";
|
|
11158
|
-
for (let i2 = 0; i2 <
|
|
11357
|
+
for (let i2 = 0; i2 < wc.length; ) {
|
|
11159
11358
|
let j = i2;
|
|
11160
|
-
while (j + 1 <
|
|
11161
|
-
Wa += `${
|
|
11359
|
+
while (j + 1 < wc.length && wc[j + 1][0] === wc[j][0] + 1) j++;
|
|
11360
|
+
Wa += `${wc[i2][0]} [${wc.slice(i2, j + 1).map(([, g]) => s(f.advance(g))).join(" ")}] `;
|
|
11162
11361
|
i2 = j + 1;
|
|
11163
11362
|
}
|
|
11164
|
-
|
|
11165
|
-
|
|
11363
|
+
let c2g = " /CIDToGIDMap /Identity";
|
|
11364
|
+
if (!cff && next > f.numGlyphs) {
|
|
11365
|
+
const m = new Uint8Array(2 * next), r = doc.reserve();
|
|
11366
|
+
for (let c = 0; c < next; c++) {
|
|
11367
|
+
const g = c < f.numGlyphs ? c : codes.get(c)?.g ?? 0;
|
|
11368
|
+
m[2 * c] = g >> 8;
|
|
11369
|
+
m[2 * c + 1] = g & 255;
|
|
11370
|
+
}
|
|
11371
|
+
await doc.writeStream(r, "<< >>", m);
|
|
11372
|
+
c2g = ` /CIDToGIDMap ${r} 0 R`;
|
|
11373
|
+
}
|
|
11374
|
+
await doc.write(cid, `<< /Type /Font /Subtype /${cff ? "CIDFontType0" : "CIDFontType2"} /BaseFont ${base3} /CIDSystemInfo << /Registry ${ascii("Adobe")} /Ordering ${ascii("Identity")} /Supplement 0 >> /FontDescriptor ${desc} 0 R /W [${Wa}]${cff ? "" : c2g} >>`);
|
|
11375
|
+
await doc.writeStream(cmap, "<< >>", latin1(toUnicode(codes)));
|
|
11166
11376
|
await doc.write(ref, `<< /Type /Font /Subtype /Type0 /BaseFont ${base3} /Encoding /Identity-H /DescendantFonts [${cid} 0 R] /ToUnicode ${cmap} 0 R >>`);
|
|
11167
11377
|
}
|
|
11168
11378
|
};
|
|
@@ -11193,8 +11403,11 @@ function subsetOtf(bytes, n, used, seac) {
|
|
|
11193
11403
|
out.set("CFF ", cff);
|
|
11194
11404
|
return buildSfnt(out, [79, 84, 84, 79]);
|
|
11195
11405
|
}
|
|
11196
|
-
function toUnicode(
|
|
11197
|
-
const entries = [...
|
|
11406
|
+
function toUnicode(codes) {
|
|
11407
|
+
const entries = [...codes].map(([c, x2]) => (
|
|
11408
|
+
/** @type {[number, string]} */
|
|
11409
|
+
[c, x2.t]
|
|
11410
|
+
)).sort((a, b) => a[0] - b[0]);
|
|
11198
11411
|
let body = "";
|
|
11199
11412
|
for (let i2 = 0; i2 < entries.length; i2 += 100) {
|
|
11200
11413
|
const chunk = entries.slice(i2, i2 + 100);
|
|
@@ -11218,6 +11431,16 @@ end
|
|
|
11218
11431
|
end
|
|
11219
11432
|
`;
|
|
11220
11433
|
}
|
|
11434
|
+
function variation(t) {
|
|
11435
|
+
if (!t || t.length < 16) return "";
|
|
11436
|
+
const dv = new DataView(t.buffer, t.byteOffset, t.byteLength), off = dv.getUint16(4), n = dv.getUint16(8), size = dv.getUint16(10);
|
|
11437
|
+
const out = [];
|
|
11438
|
+
for (let i2 = 0; i2 < Math.min(n, 16) && size >= 20 && off + i2 * size + 20 <= t.length; i2++) {
|
|
11439
|
+
const p = off + i2 * size;
|
|
11440
|
+
out.push(`${String.fromCharCode(...t.subarray(p, p + 4)).replace(/[^\x20-\x7e]/g, "?")} ${Math.round(dv.getInt32(p + 8) / 655.36) / 100}`);
|
|
11441
|
+
}
|
|
11442
|
+
return out.join(", ") || "no axes read";
|
|
11443
|
+
}
|
|
11221
11444
|
function tag2(bytes) {
|
|
11222
11445
|
let h = 2166136261;
|
|
11223
11446
|
for (let i2 = 0; i2 < bytes.length; i2++) h = Math.imul(h ^ bytes[i2], 16777619);
|
|
@@ -11230,7 +11453,7 @@ function tag2(bytes) {
|
|
|
11230
11453
|
}
|
|
11231
11454
|
var OTF_KEEP;
|
|
11232
11455
|
var init_embed = __esm({
|
|
11233
|
-
"src/fonts/embed.js"() {
|
|
11456
|
+
"packages/pdf/src/fonts/embed.js"() {
|
|
11234
11457
|
init_brand();
|
|
11235
11458
|
init_truetype();
|
|
11236
11459
|
init_subset();
|
|
@@ -11242,7 +11465,7 @@ var init_embed = __esm({
|
|
|
11242
11465
|
}
|
|
11243
11466
|
});
|
|
11244
11467
|
|
|
11245
|
-
// src/nav/outline.js
|
|
11468
|
+
// packages/pdf/src/nav/outline.js
|
|
11246
11469
|
function colorOf(c) {
|
|
11247
11470
|
if (c == null) return "";
|
|
11248
11471
|
const d = device(c);
|
|
@@ -11323,7 +11546,7 @@ function createOutline(doc) {
|
|
|
11323
11546
|
}
|
|
11324
11547
|
var MAX_ENTRIES, MAX_LEVEL, MAX_TITLE;
|
|
11325
11548
|
var init_outline = __esm({
|
|
11326
|
-
"src/nav/outline.js"() {
|
|
11549
|
+
"packages/pdf/src/nav/outline.js"() {
|
|
11327
11550
|
init_serialize();
|
|
11328
11551
|
init_color();
|
|
11329
11552
|
init_dest();
|
|
@@ -11333,7 +11556,7 @@ var init_outline = __esm({
|
|
|
11333
11556
|
}
|
|
11334
11557
|
});
|
|
11335
11558
|
|
|
11336
|
-
// src/nav/labels.js
|
|
11559
|
+
// packages/pdf/src/nav/labels.js
|
|
11337
11560
|
function createPageLabels(doc) {
|
|
11338
11561
|
let ranges = null;
|
|
11339
11562
|
doc.onFinish(async () => {
|
|
@@ -11364,7 +11587,7 @@ function createPageLabels(doc) {
|
|
|
11364
11587
|
}
|
|
11365
11588
|
var STYLES, MAX_RANGES, MAX_PREFIX;
|
|
11366
11589
|
var init_labels = __esm({
|
|
11367
|
-
"src/nav/labels.js"() {
|
|
11590
|
+
"packages/pdf/src/nav/labels.js"() {
|
|
11368
11591
|
init_serialize();
|
|
11369
11592
|
init_trees();
|
|
11370
11593
|
STYLES = ["D", "r", "R", "a", "A"];
|
|
@@ -11373,7 +11596,7 @@ var init_labels = __esm({
|
|
|
11373
11596
|
}
|
|
11374
11597
|
});
|
|
11375
11598
|
|
|
11376
|
-
// src/nav/viewer.js
|
|
11599
|
+
// packages/pdf/src/nav/viewer.js
|
|
11377
11600
|
function createViewer(doc) {
|
|
11378
11601
|
const set2 = /* @__PURE__ */ new Map();
|
|
11379
11602
|
let registered = false;
|
|
@@ -11426,7 +11649,7 @@ function createViewer(doc) {
|
|
|
11426
11649
|
}
|
|
11427
11650
|
var BOOLS, NAMES, PREF;
|
|
11428
11651
|
var init_viewer = __esm({
|
|
11429
|
-
"src/nav/viewer.js"() {
|
|
11652
|
+
"packages/pdf/src/nav/viewer.js"() {
|
|
11430
11653
|
init_dest();
|
|
11431
11654
|
BOOLS = { hideToolbar: "HideToolbar", hideMenubar: "HideMenubar", hideWindowUI: "HideWindowUI", fitWindow: "FitWindow", centerWindow: "CenterWindow", displayDocTitle: "DisplayDocTitle", pickTrayByPDFSize: "PickTrayByPDFSize" };
|
|
11432
11655
|
NAMES = {
|
|
@@ -11440,7 +11663,7 @@ var init_viewer = __esm({
|
|
|
11440
11663
|
}
|
|
11441
11664
|
});
|
|
11442
11665
|
|
|
11443
|
-
// src/standards/pdfa.js
|
|
11666
|
+
// packages/pdf/src/standards/pdfa.js
|
|
11444
11667
|
function addOutputIntent(doc, opt) {
|
|
11445
11668
|
const custom = opt && typeof opt === "object" && opt.outputIntent != null ? parseIcc(opt.outputIntent, "pdfa.outputIntent") : null;
|
|
11446
11669
|
if (custom && custom.n === 1) throw new TypeError("pdfa.outputIntent: an RGB or CMYK profile (not gray)");
|
|
@@ -11456,7 +11679,7 @@ function addOutputIntent(doc, opt) {
|
|
|
11456
11679
|
}
|
|
11457
11680
|
var SRGB, unbase64;
|
|
11458
11681
|
var init_pdfa = __esm({
|
|
11459
|
-
"src/standards/pdfa.js"() {
|
|
11682
|
+
"packages/pdf/src/standards/pdfa.js"() {
|
|
11460
11683
|
init_icc();
|
|
11461
11684
|
init_serialize();
|
|
11462
11685
|
SRGB = "AAAC4GxjbXMCEAAAbW50clJHQiBYWVogB+IAAwAUAAkADgAdYWNzcE1TRlQAAAAAc2F3c2N0cmwAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1oYW5kk7I0qQ6wIoqY/Zqvo2eJmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZGVzYwAAAPAAAABfY3BydAAAAQwAAAAMd3RwdAAAARgAAAAUclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUclRSQwAAAWgAAAF4Z1RSQwAAAWgAAAF4YlRSQwAAAWgAAAF4ZGVzYwAAAAAAAAAFc1JHQgAAAAAAAAAAAAAAAHRleHQAAAAAQ0MwAFhZWiAAAAAAAADzVAABAAAAARbJWFlaIAAAAAAAAG+gAAA48gAAA49YWVogAAAAAAAAYpYAALeJAAAY2lhZWiAAAAAAAAAkoAAAD4UAALbEY3VydgAAAAAAAAC2AAAAHAA4AFQAcACMAKgAxADhAQABIgFGAW0BlQHBAfACIAJVAosCxAMBAz8DggPGBA4EWQSnBPkFTAWkBf4GXAa+ByEHigf0CGMI1QlJCcMKPwq/C0ILyQxUDOENdA4JDqIPQA/gEIURLRHaEooTPhP2FLIVcRY2Fv0XyhiZGW4aRhsiHAMc5x3QHr0friCkIZ4inCOfJKUlsSbAJ9Uo7SoKKyssUS18Lqov3jEWMlIzlDTZNiQ3czjGOiA7fDzfPkU/sEEhQpZEEEWPRxJIm0ooS7tNUU7uUI9SNVPgVZBXRVkAWr5chF5MYBth72PHZaZniWlxa19tUW9KcUZzSnVRd155cXuIfaZ/yIHwhB6GUIiJisWNCY9RkZ+T85ZLmKubDp14n+eiW6TWp1ap26xnrvexj7Qqtsy5dLwhvtXBjcRMxxDJ2syrz3/SXNU92CTbEt4E4P7j/OcB6gztHPA081D2c/mb/Mr//w==";
|
|
@@ -11468,7 +11691,7 @@ var init_pdfa = __esm({
|
|
|
11468
11691
|
}
|
|
11469
11692
|
});
|
|
11470
11693
|
|
|
11471
|
-
// src/standards/files.js
|
|
11694
|
+
// packages/pdf/src/standards/files.js
|
|
11472
11695
|
function createFiles(doc, when) {
|
|
11473
11696
|
const tree = /* @__PURE__ */ new Map();
|
|
11474
11697
|
const af = [];
|
|
@@ -11514,7 +11737,7 @@ function createFiles(doc, when) {
|
|
|
11514
11737
|
}
|
|
11515
11738
|
var RELATIONSHIPS, MAX_FILE2, MAX_FILES, MIME;
|
|
11516
11739
|
var init_files = __esm({
|
|
11517
|
-
"src/standards/files.js"() {
|
|
11740
|
+
"packages/pdf/src/standards/files.js"() {
|
|
11518
11741
|
init_serialize();
|
|
11519
11742
|
init_filename();
|
|
11520
11743
|
init_md5();
|
|
@@ -11527,7 +11750,7 @@ var init_files = __esm({
|
|
|
11527
11750
|
}
|
|
11528
11751
|
});
|
|
11529
11752
|
|
|
11530
|
-
// src/standards/facturx.js
|
|
11753
|
+
// packages/pdf/src/standards/facturx.js
|
|
11531
11754
|
function readInvoice(b) {
|
|
11532
11755
|
if (b.length > MAX_XML) throw new RangeError(`pdf.facturX: the XML is ${b.length} bytes, over ${MAX_XML >> 20} MB`);
|
|
11533
11756
|
let s;
|
|
@@ -11608,7 +11831,7 @@ function createFacturX(doc, attach) {
|
|
|
11608
11831
|
}
|
|
11609
11832
|
var MAX_XML, PROFILES, FX_NS;
|
|
11610
11833
|
var init_facturx = __esm({
|
|
11611
|
-
"src/standards/facturx.js"() {
|
|
11834
|
+
"packages/pdf/src/standards/facturx.js"() {
|
|
11612
11835
|
MAX_XML = 10 << 20;
|
|
11613
11836
|
PROFILES = /** @type {Record<string, [string, 'Data' | 'Alternative']>} */
|
|
11614
11837
|
{
|
|
@@ -11623,7 +11846,7 @@ var init_facturx = __esm({
|
|
|
11623
11846
|
}
|
|
11624
11847
|
});
|
|
11625
11848
|
|
|
11626
|
-
// src/standards/boxes.js
|
|
11849
|
+
// packages/pdf/src/standards/boxes.js
|
|
11627
11850
|
function pageBoxes(page, o) {
|
|
11628
11851
|
const W = page.width, H = page.height, who = "addPage";
|
|
11629
11852
|
const got = {};
|
|
@@ -11661,7 +11884,7 @@ function pageBoxes(page, o) {
|
|
|
11661
11884
|
}
|
|
11662
11885
|
var BOXES, EPS;
|
|
11663
11886
|
var init_boxes = __esm({
|
|
11664
|
-
"src/standards/boxes.js"() {
|
|
11887
|
+
"packages/pdf/src/standards/boxes.js"() {
|
|
11665
11888
|
init_serialize();
|
|
11666
11889
|
init_level();
|
|
11667
11890
|
BOXES = /** @type {const} */
|
|
@@ -11670,7 +11893,7 @@ var init_boxes = __esm({
|
|
|
11670
11893
|
}
|
|
11671
11894
|
});
|
|
11672
11895
|
|
|
11673
|
-
// src/forms/draw.js
|
|
11896
|
+
// packages/pdf/src/forms/draw.js
|
|
11674
11897
|
function frame(ap, w, h, f, bg = f.bg) {
|
|
11675
11898
|
if (bg != null) ap.fill(ap.path().rect(0, 0, w, h), { fill: bg });
|
|
11676
11899
|
if (f.bw > 0) ap.stroke(ap.path().rect(f.bw / 2, f.bw / 2, w - f.bw, h - f.bw), { stroke: f.bc, width: f.bw });
|
|
@@ -11796,7 +12019,7 @@ function buttonFace(ap, w, h, f, bg, t, label, icon) {
|
|
|
11796
12019
|
}
|
|
11797
12020
|
var MARKS, PLAIN2, AUTO_MAX, AUTO_MIN, widthOf2;
|
|
11798
12021
|
var init_draw2 = __esm({
|
|
11799
|
-
"src/forms/draw.js"() {
|
|
12022
|
+
"packages/pdf/src/forms/draw.js"() {
|
|
11800
12023
|
init_content();
|
|
11801
12024
|
init_text();
|
|
11802
12025
|
init_runs();
|
|
@@ -11812,7 +12035,7 @@ var init_draw2 = __esm({
|
|
|
11812
12035
|
}
|
|
11813
12036
|
});
|
|
11814
12037
|
|
|
11815
|
-
// src/forms/form.js
|
|
12038
|
+
// packages/pdf/src/forms/form.js
|
|
11816
12039
|
function keys(o, allowed, who) {
|
|
11817
12040
|
if (o == null || typeof o !== "object") throw new TypeError(`${who}: options are an object`);
|
|
11818
12041
|
for (const k of Object.keys(o)) {
|
|
@@ -12196,7 +12419,7 @@ function createForm(doc, opt = {}) {
|
|
|
12196
12419
|
}
|
|
12197
12420
|
var MAX_FIELDS, MAX_BUTTONS, MAX_OPTIONS, MAX_OPTION_CHARS, MAX_WIDGETS, MAX_VALUE, MAX_NAME, MAX_DEPTH3, MAX_TOOLTIP, MAX_COMB, NAMED2, ACTIVE2, FF, BOX, LOOK, TEXT, BAD_CHAR, hexAscii;
|
|
12198
12421
|
var init_form = __esm({
|
|
12199
|
-
"src/forms/form.js"() {
|
|
12422
|
+
"packages/pdf/src/forms/form.js"() {
|
|
12200
12423
|
init_serialize();
|
|
12201
12424
|
init_brand();
|
|
12202
12425
|
init_annot();
|
|
@@ -12244,7 +12467,7 @@ var init_form = __esm({
|
|
|
12244
12467
|
}
|
|
12245
12468
|
});
|
|
12246
12469
|
|
|
12247
|
-
// src/security/crypto.js
|
|
12470
|
+
// packages/pdf/src/security/crypto.js
|
|
12248
12471
|
function concat(parts) {
|
|
12249
12472
|
let n = 0;
|
|
12250
12473
|
for (const p of parts) n += p.length;
|
|
@@ -12305,7 +12528,7 @@ function aesCbcDecryptSync(key, iv, data, strip = true) {
|
|
|
12305
12528
|
}
|
|
12306
12529
|
var NODE, WEB, random, HASHES, nodeName, hex, unhex;
|
|
12307
12530
|
var init_crypto = __esm({
|
|
12308
|
-
"src/security/crypto.js"() {
|
|
12531
|
+
"packages/pdf/src/security/crypto.js"() {
|
|
12309
12532
|
init_md5();
|
|
12310
12533
|
NODE = /** @type {any} */
|
|
12311
12534
|
globalThis.process?.getBuiltinModule?.("node:crypto");
|
|
@@ -12327,7 +12550,7 @@ var init_crypto = __esm({
|
|
|
12327
12550
|
}
|
|
12328
12551
|
});
|
|
12329
12552
|
|
|
12330
|
-
// src/security/encrypt.js
|
|
12553
|
+
// packages/pdf/src/security/encrypt.js
|
|
12331
12554
|
function permBits(p) {
|
|
12332
12555
|
let P = 4294963392;
|
|
12333
12556
|
for (const [k, bit] of Object.entries(PERMS)) if (p[k]) P |= 1 << bit - 1;
|
|
@@ -12520,7 +12743,7 @@ function encryptor(opt, doc) {
|
|
|
12520
12743
|
}
|
|
12521
12744
|
var MAX_PASSWORD, PERMS, PAD, UTF84;
|
|
12522
12745
|
var init_encrypt = __esm({
|
|
12523
|
-
"src/security/encrypt.js"() {
|
|
12746
|
+
"packages/pdf/src/security/encrypt.js"() {
|
|
12524
12747
|
init_crypto();
|
|
12525
12748
|
MAX_PASSWORD = 1024;
|
|
12526
12749
|
PERMS = { print: 3, modify: 4, copy: 5, annotate: 6, fillForms: 9, accessibility: 10, assemble: 11, printHighQuality: 12 };
|
|
@@ -12529,7 +12752,7 @@ var init_encrypt = __esm({
|
|
|
12529
12752
|
}
|
|
12530
12753
|
});
|
|
12531
12754
|
|
|
12532
|
-
// src/security/der.js
|
|
12755
|
+
// packages/pdf/src/security/der.js
|
|
12533
12756
|
function oid(s) {
|
|
12534
12757
|
const a = s.split(".").map(Number), out = [40 * a[0] + a[1]];
|
|
12535
12758
|
for (const v of a.slice(2)) {
|
|
@@ -12575,7 +12798,7 @@ function kids(b, v) {
|
|
|
12575
12798
|
}
|
|
12576
12799
|
var lenBytes, tlv, seq, set, ctx, octets, NULL, int;
|
|
12577
12800
|
var init_der = __esm({
|
|
12578
|
-
"src/security/der.js"() {
|
|
12801
|
+
"packages/pdf/src/security/der.js"() {
|
|
12579
12802
|
init_crypto();
|
|
12580
12803
|
lenBytes = (n) => n < 128 ? [n] : n < 256 ? [129, n] : n < 65536 ? [130, n >> 8, n & 255] : n < 16777216 ? [131, n >> 16, n >> 8 & 255, n & 255] : [132, n >>> 24, n >> 16 & 255, n >> 8 & 255, n & 255];
|
|
12581
12804
|
tlv = (tag3, ...parts) => {
|
|
@@ -12599,7 +12822,7 @@ var init_der = __esm({
|
|
|
12599
12822
|
}
|
|
12600
12823
|
});
|
|
12601
12824
|
|
|
12602
|
-
// src/security/cms.js
|
|
12825
|
+
// packages/pdf/src/security/cms.js
|
|
12603
12826
|
function readCerts(certs, who) {
|
|
12604
12827
|
const list = Array.isArray(certs) ? certs : [certs];
|
|
12605
12828
|
const out = [];
|
|
@@ -12702,7 +12925,7 @@ function nodeSigner(o) {
|
|
|
12702
12925
|
}
|
|
12703
12926
|
var NODE2, MAX_CERTS, MAX_CERT, MAX_SIGNATURE, MAX_TOKEN, DIGEST, RSA, ECDSA, SIGNED_DATA, DATA, attr, algId, eq;
|
|
12704
12927
|
var init_cms = __esm({
|
|
12705
|
-
"src/security/cms.js"() {
|
|
12928
|
+
"packages/pdf/src/security/cms.js"() {
|
|
12706
12929
|
init_der();
|
|
12707
12930
|
init_crypto();
|
|
12708
12931
|
NODE2 = /** @type {any} */
|
|
@@ -12725,7 +12948,7 @@ var init_cms = __esm({
|
|
|
12725
12948
|
}
|
|
12726
12949
|
});
|
|
12727
12950
|
|
|
12728
|
-
// src/security/sign.js
|
|
12951
|
+
// packages/pdf/src/security/sign.js
|
|
12729
12952
|
function createSigning(doc, form, o) {
|
|
12730
12953
|
let used = false;
|
|
12731
12954
|
return function sign(field, opt) {
|
|
@@ -12777,8 +13000,8 @@ function createSigning(doc, form, o) {
|
|
|
12777
13000
|
head: `<< /Type /Sig /Filter /Adobe.PPKLite /SubFilter /${sf} ${BYTERANGE} /Contents `,
|
|
12778
13001
|
after: ` /M ${pdfDate(date)}${s}${ref} >>`,
|
|
12779
13002
|
/** @param {Uint8Array} digest */
|
|
12780
|
-
async sign(
|
|
12781
|
-
const cms = await raced(Promise.resolve().then(() => signer({ digest, hash: o.hash, subFilter: sf, date, timestamp: timestamp ?? void 0, signal: doc.signal })), doc.signal);
|
|
13003
|
+
async sign(digest2) {
|
|
13004
|
+
const cms = await raced(Promise.resolve().then(() => signer({ digest: digest2, hash: o.hash, subFilter: sf, date, timestamp: timestamp ?? void 0, signal: doc.signal })), doc.signal);
|
|
12782
13005
|
if (cms instanceof Uint8Array && cms.length > size) throw new RangeError(`${who}: the signer's CMS is ${cms.length} bytes, more than the ${size} reserved: pass a larger reserve (at most ${MAX_RESERVE})`);
|
|
12783
13006
|
checkContentInfo(cms, size, `${who}: the signer's CMS`);
|
|
12784
13007
|
if (timestamp && !has(cms, TST_OID)) throw new Error(`${who}: a timestamp was asked for but the signer's CMS has no id-aa-timeStampToken (nodeSigner and cmsSigner add it; a custom signer must call r.timestamp)`);
|
|
@@ -12790,7 +13013,7 @@ function createSigning(doc, form, o) {
|
|
|
12790
13013
|
}
|
|
12791
13014
|
var DEFAULT_RESERVE, MAX_RESERVE, TST_OID, has, KEYS;
|
|
12792
13015
|
var init_sign = __esm({
|
|
12793
|
-
"src/security/sign.js"() {
|
|
13016
|
+
"packages/pdf/src/security/sign.js"() {
|
|
12794
13017
|
init_brand();
|
|
12795
13018
|
init_serialize();
|
|
12796
13019
|
init_sink();
|
|
@@ -12810,7 +13033,7 @@ var init_sign = __esm({
|
|
|
12810
13033
|
}
|
|
12811
13034
|
});
|
|
12812
13035
|
|
|
12813
|
-
// src/reader/budget.js
|
|
13036
|
+
// packages/pdf/src/reader/budget.js
|
|
12814
13037
|
function createBudget(o = {}) {
|
|
12815
13038
|
const pos = (v, d, k) => {
|
|
12816
13039
|
if (v == null) return d;
|
|
@@ -12871,7 +13094,7 @@ function createBudget(o = {}) {
|
|
|
12871
13094
|
}
|
|
12872
13095
|
var PdfReadError, fail, DEFAULTS;
|
|
12873
13096
|
var init_budget = __esm({
|
|
12874
|
-
"src/reader/budget.js"() {
|
|
13097
|
+
"packages/pdf/src/reader/budget.js"() {
|
|
12875
13098
|
PdfReadError = class extends Error {
|
|
12876
13099
|
/** @param {Code} code @param {string} message */
|
|
12877
13100
|
constructor(code, message) {
|
|
@@ -12883,11 +13106,11 @@ var init_budget = __esm({
|
|
|
12883
13106
|
fail = (code, msg) => {
|
|
12884
13107
|
throw new PdfReadError(code, msg);
|
|
12885
13108
|
};
|
|
12886
|
-
DEFAULTS = { maxDecoded: 512 << 20, maxStream: 128 << 20, maxSteps: 2e8, maxObjects: 5e6, maxTextItems:
|
|
13109
|
+
DEFAULTS = { maxDecoded: 512 << 20, maxStream: 128 << 20, maxSteps: 2e8, maxObjects: 5e6, maxTextItems: 1e6 };
|
|
12887
13110
|
}
|
|
12888
13111
|
});
|
|
12889
13112
|
|
|
12890
|
-
// src/reader/lexer.js
|
|
13113
|
+
// packages/pdf/src/reader/lexer.js
|
|
12891
13114
|
function latin12(b) {
|
|
12892
13115
|
if (b.length < 64) {
|
|
12893
13116
|
let s2 = "";
|
|
@@ -13015,7 +13238,7 @@ function lastIndexOf(buf, needle, to, span = to) {
|
|
|
13015
13238
|
}
|
|
13016
13239
|
var MAX_DEPTH4, MAX_ITEMS, Ref, PdfString, PdfStream, Op, CLASS, T, HEX, Lexer, parseValueEnd;
|
|
13017
13240
|
var init_lexer = __esm({
|
|
13018
|
-
"src/reader/lexer.js"() {
|
|
13241
|
+
"packages/pdf/src/reader/lexer.js"() {
|
|
13019
13242
|
init_budget();
|
|
13020
13243
|
MAX_DEPTH4 = 256;
|
|
13021
13244
|
MAX_ITEMS = 4e6;
|
|
@@ -13226,7 +13449,7 @@ var init_lexer = __esm({
|
|
|
13226
13449
|
}
|
|
13227
13450
|
});
|
|
13228
13451
|
|
|
13229
|
-
// src/reader/filters.js
|
|
13452
|
+
// packages/pdf/src/reader/filters.js
|
|
13230
13453
|
function sinkOf(budget) {
|
|
13231
13454
|
const parts = [];
|
|
13232
13455
|
let n = 0;
|
|
@@ -13482,7 +13705,7 @@ function decode(data, filters, parms, budget, resolve2) {
|
|
|
13482
13705
|
}
|
|
13483
13706
|
var PASS, CHUNK2, MAX_FILTERS, num2, clamp;
|
|
13484
13707
|
var init_filters = __esm({
|
|
13485
|
-
"src/reader/filters.js"() {
|
|
13708
|
+
"packages/pdf/src/reader/filters.js"() {
|
|
13486
13709
|
init_browser();
|
|
13487
13710
|
init_budget();
|
|
13488
13711
|
PASS = /* @__PURE__ */ new Set(["DCTDecode", "DCT", "JPXDecode", "JBIG2Decode", "CCITTFaxDecode", "CCF"]);
|
|
@@ -13493,7 +13716,7 @@ var init_filters = __esm({
|
|
|
13493
13716
|
}
|
|
13494
13717
|
});
|
|
13495
13718
|
|
|
13496
|
-
// src/reader/crypt.js
|
|
13719
|
+
// packages/pdf/src/reader/crypt.js
|
|
13497
13720
|
function pad322(pw) {
|
|
13498
13721
|
const b = [...pw].every((c) => (
|
|
13499
13722
|
/** @type {number} */
|
|
@@ -13628,7 +13851,7 @@ async function openSecurity(E, id0, password, resolve2) {
|
|
|
13628
13851
|
}
|
|
13629
13852
|
var PERMS2, bytesOf, le32, eq2;
|
|
13630
13853
|
var init_crypt = __esm({
|
|
13631
|
-
"src/reader/crypt.js"() {
|
|
13854
|
+
"packages/pdf/src/reader/crypt.js"() {
|
|
13632
13855
|
init_encrypt();
|
|
13633
13856
|
init_crypto();
|
|
13634
13857
|
init_lexer();
|
|
@@ -13644,13 +13867,49 @@ var init_crypt = __esm({
|
|
|
13644
13867
|
}
|
|
13645
13868
|
});
|
|
13646
13869
|
|
|
13647
|
-
// src/reader/source.js
|
|
13870
|
+
// packages/pdf/src/reader/source.js
|
|
13648
13871
|
async function openSource(bytes, budget, o = {}) {
|
|
13649
13872
|
const size = bytes.length;
|
|
13650
13873
|
let xref = /* @__PURE__ */ new Map();
|
|
13651
|
-
|
|
13874
|
+
let young = /* @__PURE__ */ new Map(), old = /* @__PURE__ */ new Map();
|
|
13875
|
+
const weak = /* @__PURE__ */ new Map();
|
|
13876
|
+
const cache = {
|
|
13877
|
+
/** @param {number} n @returns {any} undefined: not cached */
|
|
13878
|
+
get(n) {
|
|
13879
|
+
let v = young.get(n);
|
|
13880
|
+
if (v !== void 0) return v;
|
|
13881
|
+
v = old.get(n);
|
|
13882
|
+
if (v === void 0) {
|
|
13883
|
+
v = weak.get(n)?.deref();
|
|
13884
|
+
if (v === void 0) {
|
|
13885
|
+
weak.delete(n);
|
|
13886
|
+
return void 0;
|
|
13887
|
+
}
|
|
13888
|
+
weak.delete(n);
|
|
13889
|
+
}
|
|
13890
|
+
cache.set(n, v);
|
|
13891
|
+
return v;
|
|
13892
|
+
},
|
|
13893
|
+
/**
|
|
13894
|
+
* Held strongly for two turns of CACHE_N (a cheap LRU: no reordering per hit), then weakly
|
|
13895
|
+
* @param {number} n @param {any} v
|
|
13896
|
+
*/
|
|
13897
|
+
set(n, v) {
|
|
13898
|
+
young.set(n, v);
|
|
13899
|
+
if (young.size < CACHE_N) return;
|
|
13900
|
+
for (const [k, o2] of old) if (o2 !== null && typeof o2 === "object" && !young.has(k)) weak.set(k, new WeakRef(o2));
|
|
13901
|
+
old = young;
|
|
13902
|
+
young = /* @__PURE__ */ new Map();
|
|
13903
|
+
},
|
|
13904
|
+
clear() {
|
|
13905
|
+
young.clear();
|
|
13906
|
+
old.clear();
|
|
13907
|
+
weak.clear();
|
|
13908
|
+
}
|
|
13909
|
+
};
|
|
13652
13910
|
const loading = /* @__PURE__ */ new Set();
|
|
13653
13911
|
const objstms = /* @__PURE__ */ new Map();
|
|
13912
|
+
let objstmBytes = 0;
|
|
13654
13913
|
let endstreams = null;
|
|
13655
13914
|
let recovered = false;
|
|
13656
13915
|
let security = null, encryptRef = -1;
|
|
@@ -13768,12 +14027,17 @@ async function openSource(bytes, budget, o = {}) {
|
|
|
13768
14027
|
if (lx2.next() !== T.NUM) break;
|
|
13769
14028
|
offs[k] = lx2.val;
|
|
13770
14029
|
}
|
|
13771
|
-
os = { data, nums: nums.
|
|
13772
|
-
|
|
13773
|
-
|
|
13774
|
-
|
|
13775
|
-
|
|
14030
|
+
os = { data, nums: nums.slice(0, k), offs: offs.slice(0, k), first };
|
|
14031
|
+
while (objstms.size && (objstms.size >= OBJSTM_CACHE || objstmBytes + data.length > OBJSTM_BYTES)) {
|
|
14032
|
+
const [k0, o0] = (
|
|
14033
|
+
/** @type {[number, any]} */
|
|
14034
|
+
objstms.entries().next().value
|
|
14035
|
+
);
|
|
14036
|
+
objstms.delete(k0);
|
|
14037
|
+
objstmBytes -= o0.data.length;
|
|
14038
|
+
}
|
|
13776
14039
|
objstms.set(s, os);
|
|
14040
|
+
objstmBytes += data.length;
|
|
13777
14041
|
}
|
|
13778
14042
|
let j = os.nums[i2] === n ? i2 : -1;
|
|
13779
14043
|
if (j < 0) {
|
|
@@ -13792,7 +14056,8 @@ async function openSource(bytes, budget, o = {}) {
|
|
|
13792
14056
|
return v === void 0 || v instanceof Op ? null : v;
|
|
13793
14057
|
}
|
|
13794
14058
|
function get(n) {
|
|
13795
|
-
|
|
14059
|
+
const c = cache.get(n);
|
|
14060
|
+
if (c !== void 0) return c;
|
|
13796
14061
|
if (loading.has(n)) return null;
|
|
13797
14062
|
loading.add(n);
|
|
13798
14063
|
try {
|
|
@@ -14046,6 +14311,7 @@ async function openSource(bytes, budget, o = {}) {
|
|
|
14046
14311
|
}
|
|
14047
14312
|
cache.clear();
|
|
14048
14313
|
objstms.clear();
|
|
14314
|
+
objstmBytes = 0;
|
|
14049
14315
|
}
|
|
14050
14316
|
function recoverDeep() {
|
|
14051
14317
|
const found = xref, tr = trailer;
|
|
@@ -14116,6 +14382,7 @@ async function openSource(bytes, budget, o = {}) {
|
|
|
14116
14382
|
const keep = encryptRef >= 0 ? cache.get(encryptRef) : void 0;
|
|
14117
14383
|
cache.clear();
|
|
14118
14384
|
objstms.clear();
|
|
14385
|
+
objstmBytes = 0;
|
|
14119
14386
|
if (keep !== void 0) cache.set(encryptRef, keep);
|
|
14120
14387
|
}
|
|
14121
14388
|
}
|
|
@@ -14124,7 +14391,13 @@ async function openSource(bytes, budget, o = {}) {
|
|
|
14124
14391
|
recover();
|
|
14125
14392
|
recoverDeep();
|
|
14126
14393
|
}
|
|
14127
|
-
|
|
14394
|
+
let root = null;
|
|
14395
|
+
try {
|
|
14396
|
+
root = resolve2(trailer.get("Root"));
|
|
14397
|
+
} catch (e) {
|
|
14398
|
+
if (!(e instanceof PdfReadError) || e.code === "E_TIMEOUT" || e.code === "E_ABORTED" || e.code === "E_BUDGET") throw e;
|
|
14399
|
+
if (e.code === "E_DEPTH") fail("E_DEPTH", `The document catalog cannot be read: ${e.message}`);
|
|
14400
|
+
}
|
|
14128
14401
|
if (!(root instanceof Map)) fail("E_MALFORMED", "The PDF has no document catalog (/Root)");
|
|
14129
14402
|
return {
|
|
14130
14403
|
bytes,
|
|
@@ -14305,9 +14578,9 @@ function inRegion(regions, budget) {
|
|
|
14305
14578
|
return reach > off;
|
|
14306
14579
|
};
|
|
14307
14580
|
}
|
|
14308
|
-
var MAX_SECTIONS, MAX_RESOLVE, MAX_OBJSTM_N, OBJSTM_CACHE, P48, P16, pack, unpack;
|
|
14581
|
+
var MAX_SECTIONS, MAX_RESOLVE, MAX_OBJSTM_N, OBJSTM_CACHE, OBJSTM_BYTES, CACHE_N, P48, P16, pack, unpack;
|
|
14309
14582
|
var init_source = __esm({
|
|
14310
|
-
"src/reader/source.js"() {
|
|
14583
|
+
"packages/pdf/src/reader/source.js"() {
|
|
14311
14584
|
init_lexer();
|
|
14312
14585
|
init_filters();
|
|
14313
14586
|
init_budget();
|
|
@@ -14316,6 +14589,8 @@ var init_source = __esm({
|
|
|
14316
14589
|
MAX_RESOLVE = 32;
|
|
14317
14590
|
MAX_OBJSTM_N = 1e6;
|
|
14318
14591
|
OBJSTM_CACHE = 32;
|
|
14592
|
+
OBJSTM_BYTES = 8 << 20;
|
|
14593
|
+
CACHE_N = 1024;
|
|
14319
14594
|
P48 = 2 ** 48;
|
|
14320
14595
|
P16 = 2 ** 16;
|
|
14321
14596
|
pack = (t, a, b) => t * P48 + a * P16 + b;
|
|
@@ -14323,7 +14598,7 @@ var init_source = __esm({
|
|
|
14323
14598
|
}
|
|
14324
14599
|
});
|
|
14325
14600
|
|
|
14326
|
-
// src/reader/text.js
|
|
14601
|
+
// packages/pdf/src/reader/text.js
|
|
14327
14602
|
function decodeText(v) {
|
|
14328
14603
|
if (!(v instanceof PdfString)) return typeof v === "string" ? v : v == null ? "" : String(v);
|
|
14329
14604
|
const b = v.bytes;
|
|
@@ -14432,7 +14707,10 @@ function parseCMap(data, budget, held = { n: 0 }) {
|
|
|
14432
14707
|
}
|
|
14433
14708
|
return { map, spaces };
|
|
14434
14709
|
}
|
|
14435
|
-
function fontOf(src, font, held =
|
|
14710
|
+
function fontOf(src, font, held = (
|
|
14711
|
+
/** @type {Held} */
|
|
14712
|
+
{ n: 0, cmaps: /* @__PURE__ */ new Map() }
|
|
14713
|
+
)) {
|
|
14436
14714
|
const R = src.resolve;
|
|
14437
14715
|
const sub = R(font.get("Subtype"));
|
|
14438
14716
|
let toU = null, spaces = (
|
|
@@ -14489,6 +14767,26 @@ function fontOf(src, font, held = { n: 0 }) {
|
|
|
14489
14767
|
}
|
|
14490
14768
|
}
|
|
14491
14769
|
const lens = spaces.length ? [...new Set(spaces.map((s) => s[0]))].sort() : [2];
|
|
14770
|
+
let back;
|
|
14771
|
+
const fromFont = (c) => {
|
|
14772
|
+
if (back === void 0) back = fontCmap(src, cid, held);
|
|
14773
|
+
if (!back) return void 0;
|
|
14774
|
+
const m = cid instanceof Map ? R(cid.get("CIDToGIDMap")) : null;
|
|
14775
|
+
let g = c;
|
|
14776
|
+
if (m instanceof PdfStream) {
|
|
14777
|
+
if (!gidMap) {
|
|
14778
|
+
try {
|
|
14779
|
+
gidMap = src.decodeStream(m).data.slice(0, 131072);
|
|
14780
|
+
} catch (e) {
|
|
14781
|
+
if (stops(e)) throw e;
|
|
14782
|
+
gidMap = new Uint8Array(0);
|
|
14783
|
+
}
|
|
14784
|
+
}
|
|
14785
|
+
g = 2 * c + 1 < gidMap.length ? gidMap[2 * c] << 8 | gidMap[2 * c + 1] : 0;
|
|
14786
|
+
}
|
|
14787
|
+
return back.get(g);
|
|
14788
|
+
};
|
|
14789
|
+
let gidMap;
|
|
14492
14790
|
return {
|
|
14493
14791
|
/** each glyph to emit, none held (a 16 MB string is not 16 M objects) @param {Uint8Array} b @param {Emit} emit */
|
|
14494
14792
|
decode(b, emit) {
|
|
@@ -14504,7 +14802,7 @@ function fontOf(src, font, held = { n: 0 }) {
|
|
|
14504
14802
|
}
|
|
14505
14803
|
for (let k = 0; k < L && i2 + k < b.length; k++) c = c * 256 + b[i2 + k];
|
|
14506
14804
|
i2 += L;
|
|
14507
|
-
emit(toU?.get(c) ?? "", W.get(c) ?? dw, false);
|
|
14805
|
+
emit(toU?.get(c) ?? fromFont(c) ?? (toU ? "" : NONE), W.get(c) ?? dw, false);
|
|
14508
14806
|
}
|
|
14509
14807
|
}
|
|
14510
14808
|
};
|
|
@@ -14527,7 +14825,7 @@ function fontOf(src, font, held = { n: 0 }) {
|
|
|
14527
14825
|
for (const x0 of d.slice(0, 4096)) {
|
|
14528
14826
|
const x2 = R(x0);
|
|
14529
14827
|
if (typeof x2 === "number") c = x2;
|
|
14530
|
-
else if (typeof x2 === "string") diff.set(c++ & 255, glyphText(x2));
|
|
14828
|
+
else if (typeof x2 === "string") diff.set(c++ & 255, x2 === ".notdef" ? "" : glyphText(x2) || (toU ? "" : NONE));
|
|
14531
14829
|
}
|
|
14532
14830
|
}
|
|
14533
14831
|
const symbolic = base3 === "Symbol" || base3 === "ZapfDingbats";
|
|
@@ -14547,7 +14845,7 @@ function fontOf(src, font, held = { n: 0 }) {
|
|
|
14547
14845
|
if (t === void 0) t = diff.get(c);
|
|
14548
14846
|
if (t === void 0) {
|
|
14549
14847
|
const u = symMap ? symMap.get(c) : baseFn(c);
|
|
14550
|
-
t = u === void 0 ? "" : String.fromCodePoint(u);
|
|
14848
|
+
t = u === void 0 ? toU ? "" : NONE : String.fromCodePoint(u);
|
|
14551
14849
|
}
|
|
14552
14850
|
let w = Array.isArray(widths) && typeof fc === "number" && c >= fc && c - fc < widths.length ? R(widths[c - fc]) : std ? std.widths[c] : 500;
|
|
14553
14851
|
if (typeof w !== "number" || !Number.isFinite(w)) w = 0;
|
|
@@ -14556,6 +14854,34 @@ function fontOf(src, font, held = { n: 0 }) {
|
|
|
14556
14854
|
}
|
|
14557
14855
|
};
|
|
14558
14856
|
}
|
|
14857
|
+
function fontCmap(src, cid, held) {
|
|
14858
|
+
const R = src.resolve;
|
|
14859
|
+
if (!(cid instanceof Map) || R(cid.get("Subtype")) !== "CIDFontType2") return null;
|
|
14860
|
+
const fd2 = R(cid.get("FontDescriptor")), ff = fd2 instanceof Map ? R(fd2.get("FontFile2")) : null;
|
|
14861
|
+
if (!(ff instanceof PdfStream)) return null;
|
|
14862
|
+
const was = held.cmaps.get(ff);
|
|
14863
|
+
if (was !== void 0) return was;
|
|
14864
|
+
if (held.cmaps.size >= MAX_CMAP_FONTS) fail("E_BUDGET", `A page's text reads the character maps of more than ${MAX_CMAP_FONTS} embedded fonts (fonts with no ToUnicode)`);
|
|
14865
|
+
held.cmaps.set(ff, null);
|
|
14866
|
+
let f;
|
|
14867
|
+
try {
|
|
14868
|
+
f = parseFont(src.decodeStream(ff).data);
|
|
14869
|
+
} catch (e) {
|
|
14870
|
+
if (stops(e)) throw e;
|
|
14871
|
+
return null;
|
|
14872
|
+
}
|
|
14873
|
+
src.budget.tick(65536);
|
|
14874
|
+
const back = /* @__PURE__ */ new Map();
|
|
14875
|
+
for (let cp = 32; cp <= 65535; cp++) {
|
|
14876
|
+
if (cp === 55296) cp = 63744;
|
|
14877
|
+
const g = f.glyphFor(cp);
|
|
14878
|
+
if (g && !back.has(g)) back.set(g, String.fromCharCode(cp));
|
|
14879
|
+
}
|
|
14880
|
+
held.n += 9 * back.size;
|
|
14881
|
+
if (held.n > MAX_HELD) fail("E_BUDGET", `A page's fonts hold more than ${MAX_HELD.toLocaleString("en")} units of code mappings (an entry 8, a character 1)`);
|
|
14882
|
+
held.cmaps.set(ff, back);
|
|
14883
|
+
return back;
|
|
14884
|
+
}
|
|
14559
14885
|
function contentBytes(src, contents) {
|
|
14560
14886
|
const c = src.resolve(contents);
|
|
14561
14887
|
const list = Array.isArray(c) ? c.slice(0, 1e4).map(src.resolve) : [c];
|
|
@@ -14582,6 +14908,36 @@ function contentBytes(src, contents) {
|
|
|
14582
14908
|
}
|
|
14583
14909
|
return out;
|
|
14584
14910
|
}
|
|
14911
|
+
function logical(parts) {
|
|
14912
|
+
if (!parts.some((t) => RTL2.test(t))) return parts;
|
|
14913
|
+
const kind = (t) => RTL2.test(t) ? "R" : NUM.test(t) ? "N" : STRONG_L.test(t) ? "L" : "N";
|
|
14914
|
+
const k = parts.map(kind), res = parts.slice();
|
|
14915
|
+
for (let i2 = 0; i2 < parts.length; ) {
|
|
14916
|
+
if (k[i2] !== "R") {
|
|
14917
|
+
i2++;
|
|
14918
|
+
continue;
|
|
14919
|
+
}
|
|
14920
|
+
let j = i2, e = i2;
|
|
14921
|
+
while (j < parts.length && k[j] !== "L") {
|
|
14922
|
+
if (k[j] === "R") e = j;
|
|
14923
|
+
j++;
|
|
14924
|
+
}
|
|
14925
|
+
const run2 = parts.slice(i2, e + 1).reverse().map(rev2);
|
|
14926
|
+
for (let a = 0; a < run2.length; ) {
|
|
14927
|
+
if (!NUM.test(run2[a])) {
|
|
14928
|
+
a++;
|
|
14929
|
+
continue;
|
|
14930
|
+
}
|
|
14931
|
+
let b = a;
|
|
14932
|
+
while (b < run2.length && NUM.test(run2[b])) b++;
|
|
14933
|
+
run2.splice(a, b - a, ...run2.slice(a, b).reverse().map(rev2));
|
|
14934
|
+
a = b;
|
|
14935
|
+
}
|
|
14936
|
+
res.splice(i2, run2.length, ...run2);
|
|
14937
|
+
i2 = e + 1;
|
|
14938
|
+
}
|
|
14939
|
+
return res;
|
|
14940
|
+
}
|
|
14585
14941
|
function skipInline(lx) {
|
|
14586
14942
|
const b = lx.buf;
|
|
14587
14943
|
let i2 = lx.pos + 1;
|
|
@@ -14611,9 +14967,31 @@ function textPieces(src, pageDict, resources, o = {}) {
|
|
|
14611
14967
|
}
|
|
14612
14968
|
function pageText(src, pageDict, resources, raw = false) {
|
|
14613
14969
|
const R = src.resolve, budget = src.budget;
|
|
14614
|
-
const
|
|
14970
|
+
const PX = [], PY = [], PE = [], PS = [], PG = [];
|
|
14971
|
+
const PA = [], PAE = [], PC = [], PD = [];
|
|
14972
|
+
const PT = [];
|
|
14973
|
+
let chars2 = 0;
|
|
14974
|
+
let moved = true;
|
|
14615
14975
|
const fonts = /* @__PURE__ */ new Map();
|
|
14616
|
-
const
|
|
14976
|
+
const add2 = (x2, y, end, size, text3, dir) => {
|
|
14977
|
+
if (PT.length >= budget.maxTextItems) throw new PdfReadError("E_BUDGET", `A page has more than ${budget.maxTextItems.toLocaleString("en")} pieces of text (budget.maxTextItems)`);
|
|
14978
|
+
if ((chars2 += text3.length) > MAX_TEXT_CHARS) throw new PdfReadError("E_BUDGET", `A page makes more than ${MAX_TEXT_CHARS.toLocaleString("en")} characters of text`);
|
|
14979
|
+
PX.push(x2);
|
|
14980
|
+
PY.push(y);
|
|
14981
|
+
PE.push(end);
|
|
14982
|
+
PS.push(size);
|
|
14983
|
+
PT.push(text3);
|
|
14984
|
+
PG.push(moved ? 2 : 0);
|
|
14985
|
+
moved = false;
|
|
14986
|
+
PA.push(dir[0]);
|
|
14987
|
+
PAE.push(dir[1]);
|
|
14988
|
+
PC.push(dir[2]);
|
|
14989
|
+
PD.push(dir[3]);
|
|
14990
|
+
};
|
|
14991
|
+
const held = (
|
|
14992
|
+
/** @type {Held} */
|
|
14993
|
+
{ n: 0, cmaps: /* @__PURE__ */ new Map() }
|
|
14994
|
+
);
|
|
14617
14995
|
const fontFor = (res, name) => {
|
|
14618
14996
|
const fd2 = R(res instanceof Map ? R(res.get("Font")) instanceof Map ? R(res.get("Font")).get(name) : null : null);
|
|
14619
14997
|
const key = fd2 instanceof Map ? fd2 : null;
|
|
@@ -14632,6 +15010,11 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14632
15010
|
), size: 0, Tc: 0, Tw: 0, Th: 1, TL: 0, Ts: 0 };
|
|
14633
15011
|
const tsStack = [];
|
|
14634
15012
|
let Tm = ID, Tlm = ID, dos = 0;
|
|
15013
|
+
const marks = [];
|
|
15014
|
+
let deep = 0, actual = (
|
|
15015
|
+
/** @type {any} */
|
|
15016
|
+
null
|
|
15017
|
+
);
|
|
14635
15018
|
let args = [];
|
|
14636
15019
|
const show = (b, ctm) => {
|
|
14637
15020
|
if (!ts.font) return;
|
|
@@ -14642,10 +15025,21 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14642
15025
|
const x2 = M0[4], y = M0[5], size = Math.hypot(M0[2], M0[3]) || ts.size;
|
|
14643
15026
|
const tx = (w / 1e3 * ts.size + ts.Tc + (space ? ts.Tw : 0)) * ts.Th;
|
|
14644
15027
|
Tm = mul2([1, 0, 0, 1, tx, 0], Tm);
|
|
14645
|
-
const
|
|
14646
|
-
|
|
14647
|
-
|
|
14648
|
-
|
|
15028
|
+
const M1 = mul2([ts.size * ts.Th, 0, 0, ts.size, 0, ts.Ts], mul2(Tm, ctm)), end = M1[4];
|
|
15029
|
+
const L = Math.hypot(M0[0], M0[1]), ux = L ? M0[0] / L : 1, uy = L ? M0[1] / L : 0;
|
|
15030
|
+
const dir = [x2 * ux + y * uy, M1[4] * ux + M1[5] * uy, y * ux - x2 * uy, Math.round(Math.atan2(uy, ux) * 180 / Math.PI)];
|
|
15031
|
+
if (actual) {
|
|
15032
|
+
if (!actual.seen) Object.assign(actual, { x: x2, y, size, dir, seen: true });
|
|
15033
|
+
actual.end = end;
|
|
15034
|
+
actual.dir[1] = dir[1];
|
|
15035
|
+
return;
|
|
15036
|
+
}
|
|
15037
|
+
const n = PT.length - 1;
|
|
15038
|
+
if (text3.includes("")) text3 = text3.replaceAll("", "");
|
|
15039
|
+
if (text3) add2(x2, y, end, size, text3, dir);
|
|
15040
|
+
else if (n >= 0 && PAE[n] < dir[1] && PD[n] === dir[3] && Math.abs(PC[n] - dir[2]) < 0.01) {
|
|
15041
|
+
PE[n] = end;
|
|
15042
|
+
PAE[n] = dir[1];
|
|
14649
15043
|
}
|
|
14650
15044
|
});
|
|
14651
15045
|
budget.tick(1 + (k & 1023));
|
|
@@ -14686,6 +15080,7 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14686
15080
|
}
|
|
14687
15081
|
case "BT":
|
|
14688
15082
|
Tm = Tlm = ID;
|
|
15083
|
+
moved = true;
|
|
14689
15084
|
break;
|
|
14690
15085
|
case "Tf":
|
|
14691
15086
|
ts = { ...ts, font: typeof a[0] === "string" ? fontFor(f.res, a[0]) : null, size: typeof a[1] === "number" ? a[1] : 0 };
|
|
@@ -14710,19 +15105,23 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14710
15105
|
// falls through
|
|
14711
15106
|
case "Td":
|
|
14712
15107
|
if (typeof a[0] === "number" && typeof a[1] === "number") Tm = Tlm = mul2([1, 0, 0, 1, a[0], a[1]], Tlm);
|
|
15108
|
+
moved = true;
|
|
14713
15109
|
break;
|
|
14714
15110
|
case "Tm": {
|
|
14715
15111
|
const m = matrixOf(a);
|
|
14716
15112
|
if (m) Tm = Tlm = m;
|
|
15113
|
+
moved = true;
|
|
14717
15114
|
break;
|
|
14718
15115
|
}
|
|
14719
15116
|
case "T*":
|
|
14720
15117
|
Tm = Tlm = mul2([1, 0, 0, 1, 0, -ts.TL], Tlm);
|
|
15118
|
+
moved = true;
|
|
14721
15119
|
break;
|
|
14722
15120
|
case "Tj":
|
|
14723
15121
|
if (a[0] instanceof PdfString) show(a[0].bytes, f.ctm);
|
|
14724
15122
|
break;
|
|
14725
15123
|
case "'":
|
|
15124
|
+
moved = true;
|
|
14726
15125
|
Tm = Tlm = mul2([1, 0, 0, 1, 0, -ts.TL], Tlm);
|
|
14727
15126
|
if (a[0] instanceof PdfString) show(a[0].bytes, f.ctm);
|
|
14728
15127
|
break;
|
|
@@ -14730,6 +15129,7 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14730
15129
|
if (typeof a[0] === "number") ts = { ...ts, Tw: a[0] };
|
|
14731
15130
|
if (typeof a[1] === "number") ts = { ...ts, Tc: a[1] };
|
|
14732
15131
|
Tm = Tlm = mul2([1, 0, 0, 1, 0, -ts.TL], Tlm);
|
|
15132
|
+
moved = true;
|
|
14733
15133
|
if (a[2] instanceof PdfString) show(a[2].bytes, f.ctm);
|
|
14734
15134
|
break;
|
|
14735
15135
|
case "TJ":
|
|
@@ -14737,10 +15137,38 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14737
15137
|
if (x2 instanceof PdfString) show(x2.bytes, f.ctm);
|
|
14738
15138
|
else if (typeof x2 === "number") {
|
|
14739
15139
|
Tm = mul2([1, 0, 0, 1, -x2 / 1e3 * ts.size * ts.Th, 0], Tm);
|
|
14740
|
-
if (x2 < -180 &&
|
|
15140
|
+
if (x2 < -180 && PT.length) PG[PT.length - 1] |= 1;
|
|
14741
15141
|
}
|
|
14742
15142
|
}
|
|
14743
15143
|
break;
|
|
15144
|
+
case "BMC":
|
|
15145
|
+
case "BDC": {
|
|
15146
|
+
if (marks.length >= MAX_MARKS) {
|
|
15147
|
+
deep++;
|
|
15148
|
+
break;
|
|
15149
|
+
}
|
|
15150
|
+
let at = null;
|
|
15151
|
+
if (op === "BDC" && !actual) {
|
|
15152
|
+
const pr = a[1] instanceof Map ? a[1] : typeof a[1] === "string" && f.res instanceof Map ? R(R(f.res.get("Properties")) instanceof Map ? R(f.res.get("Properties")).get(a[1]) : null) : null;
|
|
15153
|
+
const t = pr instanceof Map ? R(pr.get("ActualText")) : null;
|
|
15154
|
+
if (t instanceof PdfString && t.bytes.length > 2 * MAX_ACTUAL + 2) src.warn(`an /ActualText longer than ${MAX_ACTUAL} characters was ignored`);
|
|
15155
|
+
else if (t instanceof PdfString) at = actual = { at: decodeText(t), x: 0, y: 0, end: 0, size: 0, dir: [0, 0, 0, 0], seen: false };
|
|
15156
|
+
}
|
|
15157
|
+
marks.push(at);
|
|
15158
|
+
break;
|
|
15159
|
+
}
|
|
15160
|
+
case "EMC": {
|
|
15161
|
+
if (deep) {
|
|
15162
|
+
deep--;
|
|
15163
|
+
break;
|
|
15164
|
+
}
|
|
15165
|
+
const m = marks.pop();
|
|
15166
|
+
if (m && m === actual) {
|
|
15167
|
+
actual = null;
|
|
15168
|
+
if (m.seen && m.at) add2(m.x, m.y, m.end, m.size, m.at, m.dir);
|
|
15169
|
+
}
|
|
15170
|
+
break;
|
|
15171
|
+
}
|
|
14744
15172
|
case "BI": {
|
|
14745
15173
|
for (let k = 0; k < 4096; k++) {
|
|
14746
15174
|
const t = parseValue(f.lx);
|
|
@@ -14774,30 +15202,44 @@ function pageText(src, pageDict, resources, raw = false) {
|
|
|
14774
15202
|
default:
|
|
14775
15203
|
}
|
|
14776
15204
|
}
|
|
14777
|
-
if (raw) return
|
|
15205
|
+
if (raw) return PT.map((text3, i2) => ({ x: PX[i2], y: PY[i2], end: PE[i2], size: PS[i2], text: text3, gap: !!(PG[i2] & 1) }));
|
|
14778
15206
|
const out = [];
|
|
14779
|
-
let
|
|
14780
|
-
|
|
14781
|
-
|
|
14782
|
-
|
|
14783
|
-
|
|
14784
|
-
|
|
14785
|
-
|
|
14786
|
-
|
|
14787
|
-
|
|
14788
|
-
|
|
14789
|
-
|
|
15207
|
+
for (let i2 = 0; i2 < PT.length; ) {
|
|
15208
|
+
let j = i2 + 1;
|
|
15209
|
+
while (j < PT.length && PD[j] === PD[j - 1] && Math.abs(PC[j] - PC[j - 1]) <= Math.max(PS[j], PS[j - 1], 1) * 0.5) j++;
|
|
15210
|
+
const ix = [];
|
|
15211
|
+
for (let k = i2; k < j; k++) ix.push(k);
|
|
15212
|
+
let sorted = true;
|
|
15213
|
+
for (let k = i2 + 1; k < j && sorted; k++) if (PA[k] < PA[k - 1] - 0.01) sorted = false;
|
|
15214
|
+
if (!sorted) ix.sort((a, b) => PA[a] - PA[b]);
|
|
15215
|
+
const line3 = [];
|
|
15216
|
+
let lend = 0, lgap = false, last = "";
|
|
15217
|
+
for (const k of ix) {
|
|
15218
|
+
const text3 = PT[k], size = Math.max(PS[k], 1);
|
|
15219
|
+
if (line3.length && last !== " " && !text3.startsWith(" ") && (lgap || PA[k] - lend > size * (PG[k] & 2 ? 0.07 : 0.25))) line3.push(" ");
|
|
15220
|
+
line3.push(text3);
|
|
15221
|
+
last = text3[text3.length - 1];
|
|
15222
|
+
lend = Math.max(PAE[k], line3.length > 1 ? lend : -Infinity);
|
|
15223
|
+
lgap = !!(PG[k] & 1);
|
|
15224
|
+
}
|
|
15225
|
+
if (out.length) out.push("\n");
|
|
15226
|
+
out.push(logical(line3).join(""));
|
|
15227
|
+
i2 = j;
|
|
14790
15228
|
}
|
|
14791
15229
|
return out.join("");
|
|
14792
15230
|
}
|
|
14793
|
-
var MAX_FORMS, MAX_CMAP, MAX_DST, MAX_CMAP_CHARS, MAX_HELD, MAX_W, MAX_DO, TEXT_TIMEOUT_MS, DOC, WIN, MAC_HIGH, BASE, STD_HIGH, NAMES2, ACCENT, own, STD_ALIAS, stops, mul2, ID, matrixOf;
|
|
15231
|
+
var MAX_FORMS, MAX_CMAP, MAX_MARKS, MAX_ACTUAL, MAX_TEXT_CHARS, MAX_DST, MAX_CMAP_CHARS, MAX_HELD, MAX_W, MAX_DO, TEXT_TIMEOUT_MS, DOC, WIN, MAC_HIGH, BASE, STD_HIGH, NAMES2, ACCENT, own, STD_ALIAS, NONE, stops, MAX_CMAP_FONTS, mul2, ID, matrixOf, RTL2, STRONG_L, NUM, rev2;
|
|
14794
15232
|
var init_text2 = __esm({
|
|
14795
|
-
"src/reader/text.js"() {
|
|
15233
|
+
"packages/pdf/src/reader/text.js"() {
|
|
14796
15234
|
init_lexer();
|
|
14797
15235
|
init_standard_metrics();
|
|
14798
15236
|
init_budget();
|
|
15237
|
+
init_truetype();
|
|
14799
15238
|
MAX_FORMS = 16;
|
|
14800
15239
|
MAX_CMAP = 1e6;
|
|
15240
|
+
MAX_MARKS = 1e3;
|
|
15241
|
+
MAX_ACTUAL = 4096;
|
|
15242
|
+
MAX_TEXT_CHARS = 16e6;
|
|
14801
15243
|
MAX_DST = 128;
|
|
14802
15244
|
MAX_CMAP_CHARS = 4e6;
|
|
14803
15245
|
MAX_HELD = 16e6;
|
|
@@ -15002,7 +15444,9 @@ var init_text2 = __esm({
|
|
|
15002
15444
|
t[k]
|
|
15003
15445
|
) : void 0;
|
|
15004
15446
|
STD_ALIAS = { Arial: "Helvetica", "Arial-BoldMT": "Helvetica-Bold", ArialMT: "Helvetica", TimesNewRoman: "Times-Roman", TimesNewRomanPSMT: "Times-Roman", CourierNew: "Courier" };
|
|
15447
|
+
NONE = "�";
|
|
15005
15448
|
stops = (e) => e?.code === "E_TIMEOUT" || e?.code === "E_ABORTED" || e?.code === "E_BUDGET";
|
|
15449
|
+
MAX_CMAP_FONTS = 100;
|
|
15006
15450
|
mul2 = (A, B) => (
|
|
15007
15451
|
/** @type {M} */
|
|
15008
15452
|
[A[0] * B[0] + A[1] * B[2], A[0] * B[1] + A[1] * B[3], A[2] * B[0] + A[3] * B[2], A[2] * B[1] + A[3] * B[3], A[4] * B[0] + A[5] * B[2] + B[4], A[4] * B[1] + A[5] * B[3] + B[5]]
|
|
@@ -15013,10 +15457,14 @@ var init_text2 = __esm({
|
|
|
15013
15457
|
/** @type {M} */
|
|
15014
15458
|
a.slice(0, 6)
|
|
15015
15459
|
) : null;
|
|
15460
|
+
RTL2 = /[\u0590-\u05ff\u0600-\u065f\u066a-\u06ef\u06fa-\u08ff\ufb1d-\ufdff\ufe70-\ufeff]/;
|
|
15461
|
+
STRONG_L = /[\p{L}]/u;
|
|
15462
|
+
NUM = /^[\p{Nd}.,٫٬]+$/u;
|
|
15463
|
+
rev2 = (t) => [...t].reverse().join("");
|
|
15016
15464
|
}
|
|
15017
15465
|
});
|
|
15018
15466
|
|
|
15019
|
-
// src/reader/policy.js
|
|
15467
|
+
// packages/pdf/src/reader/policy.js
|
|
15020
15468
|
function attributesOnly(a, R) {
|
|
15021
15469
|
const one = (x2) => {
|
|
15022
15470
|
const d = R(x2);
|
|
@@ -15128,7 +15576,7 @@ function utf16be(s) {
|
|
|
15128
15576
|
}
|
|
15129
15577
|
var KEEP_ACTIONS, NAMED_ACTIONS, ACTION_TYPES, KEEP_ANNOTS, ACTION_KEYS, DANGEROUS_KEYS, NAME_KEYS, isAction, isAnnot, STRUCT_TYPES, isFilespec, REWRITTEN_NAME, sameObject, refuseFile;
|
|
15130
15578
|
var init_policy = __esm({
|
|
15131
|
-
"src/reader/policy.js"() {
|
|
15579
|
+
"packages/pdf/src/reader/policy.js"() {
|
|
15132
15580
|
init_lexer();
|
|
15133
15581
|
init_links();
|
|
15134
15582
|
init_filename();
|
|
@@ -15212,7 +15660,7 @@ var init_policy = __esm({
|
|
|
15212
15660
|
}
|
|
15213
15661
|
});
|
|
15214
15662
|
|
|
15215
|
-
// src/reader/copy.js
|
|
15663
|
+
// packages/pdf/src/reader/copy.js
|
|
15216
15664
|
function nameText(s) {
|
|
15217
15665
|
let o = "/";
|
|
15218
15666
|
for (let i2 = 0; i2 < s.length; i2++) {
|
|
@@ -15254,7 +15702,7 @@ function createCopier(t) {
|
|
|
15254
15702
|
let t0 = trees.get(owner);
|
|
15255
15703
|
if (t0) return t0;
|
|
15256
15704
|
const src = owner.r.src, R = src.resolve;
|
|
15257
|
-
t0 = { objs: /* @__PURE__ */ new
|
|
15705
|
+
t0 = { objs: /* @__PURE__ */ new Set(), nums: /* @__PURE__ */ new Set(), types: new Set(STRUCT_TYPES) };
|
|
15258
15706
|
trees.set(owner, t0);
|
|
15259
15707
|
const root = R(owner.r.root.get("StructTreeRoot"));
|
|
15260
15708
|
if (!(root instanceof Map)) return t0;
|
|
@@ -15476,6 +15924,7 @@ function createCopier(t) {
|
|
|
15476
15924
|
continue;
|
|
15477
15925
|
}
|
|
15478
15926
|
const rep = t.replace?.(owner, f.n);
|
|
15927
|
+
f.rep = rep;
|
|
15479
15928
|
f.v = rep !== void 0 ? rep : owner.r.src.get(f.n);
|
|
15480
15929
|
if (!t.keepActive && f.v instanceof Map) {
|
|
15481
15930
|
const r = judge(f.v, owner.r.src.resolve);
|
|
@@ -15500,7 +15949,7 @@ function createCopier(t) {
|
|
|
15500
15949
|
continue;
|
|
15501
15950
|
}
|
|
15502
15951
|
stack.pop();
|
|
15503
|
-
const v = f.v;
|
|
15952
|
+
const v = f.v, rep0 = f.rep;
|
|
15504
15953
|
let open = false;
|
|
15505
15954
|
const refText = (o, r) => {
|
|
15506
15955
|
if (mapOf(o).get(r.n) === GRAY) open = true;
|
|
@@ -15515,9 +15964,9 @@ function createCopier(t) {
|
|
|
15515
15964
|
let key = "";
|
|
15516
15965
|
const raw = v instanceof PdfStream ? owner.r.src.rawStream(v) : null;
|
|
15517
15966
|
if (t.dedupe && early === void 0 && !open && shareable(v)) {
|
|
15518
|
-
key =
|
|
15967
|
+
key = `${dict.length} ${fnv(dict)} ${raw ? `${raw.length} ${fnv(raw)}` : ""}`;
|
|
15519
15968
|
const hit = seen.get(key);
|
|
15520
|
-
if (hit && hit.dict === dict &&
|
|
15969
|
+
if (hit && hit.dict === dict && same2(hit.raw(), raw)) {
|
|
15521
15970
|
m.set(f.n, hit.n);
|
|
15522
15971
|
continue;
|
|
15523
15972
|
}
|
|
@@ -15526,13 +15975,16 @@ function createCopier(t) {
|
|
|
15526
15975
|
const n = early ?? t.reserve();
|
|
15527
15976
|
await t.write(n, dict, data, v instanceof PdfStream ? v.dict : v instanceof Map ? v : null);
|
|
15528
15977
|
if (key) {
|
|
15529
|
-
const o2 = owner,
|
|
15530
|
-
seen.set(key, { n, dict, raw: () =>
|
|
15978
|
+
const o2 = owner, n2 = f.n, mine = rep0 === void 0 ? null : v;
|
|
15979
|
+
seen.set(key, { n, dict, raw: () => {
|
|
15980
|
+
const v2 = mine ?? o2.r.src.get(n2);
|
|
15981
|
+
return v2 instanceof PdfStream ? o2.r.src.rawStream(v2) : null;
|
|
15982
|
+
} });
|
|
15531
15983
|
}
|
|
15532
15984
|
m.set(f.n, n);
|
|
15533
15985
|
}
|
|
15534
15986
|
}
|
|
15535
|
-
const
|
|
15987
|
+
const same2 = (a, b) => {
|
|
15536
15988
|
if (a === b) return true;
|
|
15537
15989
|
if (!a || !b || a.length !== b.length) return false;
|
|
15538
15990
|
for (let i2 = 0; i2 < a.length; i2++) if (a[i2] !== b[i2]) return false;
|
|
@@ -15547,13 +15999,11 @@ function createCopier(t) {
|
|
|
15547
15999
|
}
|
|
15548
16000
|
return typeof v !== "object" || v === null || v instanceof PdfString;
|
|
15549
16001
|
};
|
|
15550
|
-
const
|
|
15551
|
-
|
|
15552
|
-
|
|
15553
|
-
|
|
15554
|
-
|
|
15555
|
-
o.set(b, a.length + 1);
|
|
15556
|
-
return o;
|
|
16002
|
+
const fnv = (x2) => {
|
|
16003
|
+
let h = 2166136261;
|
|
16004
|
+
if (typeof x2 === "string") for (let i2 = 0; i2 < x2.length; i2++) h = Math.imul(h ^ x2.charCodeAt(i2), 16777619);
|
|
16005
|
+
else for (let i2 = 0; i2 < x2.length; i2++) h = Math.imul(h ^ x2[i2], 16777619);
|
|
16006
|
+
return (h >>> 0).toString(36);
|
|
15557
16007
|
};
|
|
15558
16008
|
function streamDict(owner, s) {
|
|
15559
16009
|
const R = owner.r.src.resolve;
|
|
@@ -15622,16 +16072,14 @@ function createCopier(t) {
|
|
|
15622
16072
|
}
|
|
15623
16073
|
};
|
|
15624
16074
|
}
|
|
15625
|
-
var
|
|
16075
|
+
var SHARE, GRAY, HEXD, Raw, Foreign, OPEN_A, CLOSE_A, OPEN_D, CLOSE_D;
|
|
15626
16076
|
var init_copy = __esm({
|
|
15627
|
-
"src/reader/copy.js"() {
|
|
16077
|
+
"packages/pdf/src/reader/copy.js"() {
|
|
15628
16078
|
init_lexer();
|
|
15629
16079
|
init_pdf();
|
|
15630
|
-
init_crypto();
|
|
15631
16080
|
init_policy();
|
|
15632
16081
|
init_deflate();
|
|
15633
16082
|
init_policy();
|
|
15634
|
-
sha256 = (b) => sha("SHA-256", b);
|
|
15635
16083
|
SHARE = /* @__PURE__ */ new Set(["Font", "FontDescriptor", "ExtGState", "Encoding", "Pattern", "Shading", "Halftone", "Function", "XObject", "Mask", "CMap", "OutputIntent", "Filespec", "EmbeddedFile"]);
|
|
15636
16084
|
GRAY = -2;
|
|
15637
16085
|
HEXD = "0123456789abcdef";
|
|
@@ -15655,7 +16103,7 @@ var init_copy = __esm({
|
|
|
15655
16103
|
}
|
|
15656
16104
|
});
|
|
15657
16105
|
|
|
15658
|
-
// src/reader/fill.js
|
|
16106
|
+
// packages/pdf/src/reader/fill.js
|
|
15659
16107
|
function utf162(s) {
|
|
15660
16108
|
const b = new Uint8Array(2 + s.length * 2);
|
|
15661
16109
|
b[0] = 254;
|
|
@@ -15823,7 +16271,7 @@ async function fillReplacements(self, o) {
|
|
|
15823
16271
|
}
|
|
15824
16272
|
var ALIAS;
|
|
15825
16273
|
var init_fill = __esm({
|
|
15826
|
-
"src/reader/fill.js"() {
|
|
16274
|
+
"packages/pdf/src/reader/fill.js"() {
|
|
15827
16275
|
init_index();
|
|
15828
16276
|
init_standard();
|
|
15829
16277
|
init_lexer();
|
|
@@ -15835,7 +16283,7 @@ var init_fill = __esm({
|
|
|
15835
16283
|
}
|
|
15836
16284
|
});
|
|
15837
16285
|
|
|
15838
|
-
// src/reader/save.js
|
|
16286
|
+
// packages/pdf/src/reader/save.js
|
|
15839
16287
|
var save_exports = {};
|
|
15840
16288
|
__export(save_exports, {
|
|
15841
16289
|
MAX_OPEN: () => MAX_OPEN,
|
|
@@ -15926,7 +16374,8 @@ async function run(self, sink, o) {
|
|
|
15926
16374
|
const keepStruct = single && o.keepStructure !== false && !self.edits.flatten;
|
|
15927
16375
|
const info = self.info();
|
|
15928
16376
|
const edited = !!self.edits.info || level?.conformance !== self.pdfa()?.conformance;
|
|
15929
|
-
const
|
|
16377
|
+
const uaLost = !keepStruct && /pdfuaid:part/.test(self.xmp() ?? "");
|
|
16378
|
+
const srcXmp = self.edits.xmp ?? (edited || uaLost || !level && self.pdfa() ? null : self.xmp());
|
|
15930
16379
|
const created = o.creationDate ?? (info.creationDate instanceof Date ? info.creationDate : /* @__PURE__ */ new Date());
|
|
15931
16380
|
let intentOpt = null;
|
|
15932
16381
|
if (level && profile) {
|
|
@@ -16006,7 +16455,8 @@ async function run(self, sink, o) {
|
|
|
16006
16455
|
}
|
|
16007
16456
|
}
|
|
16008
16457
|
for (let k = 0; k < plan.length; k++) {
|
|
16009
|
-
const p = plan[k], owner = p.owner, src = owner.r.src, OR = src.resolve, pg = owner.r
|
|
16458
|
+
const p = plan[k], owner = p.owner, src = owner.r.src, OR = src.resolve, pg = pageAt(owner.r, p.index), d = pg.dict;
|
|
16459
|
+
if (pg.emptied) warn(pg.emptied);
|
|
16010
16460
|
const b = owner.boxes(p.index);
|
|
16011
16461
|
const W = b.mediaBox[2] - b.mediaBox[0], H = b.mediaBox[3] - b.mediaBox[1];
|
|
16012
16462
|
const page = (
|
|
@@ -16130,7 +16580,7 @@ async function run(self, sink, o) {
|
|
|
16130
16580
|
};
|
|
16131
16581
|
for (const k of ["ViewerPreferences", "PageMode", "PageLayout", "OCProperties", "Collection", "URI"]) await cat(k);
|
|
16132
16582
|
if (keepStruct) for (const k of ["StructTreeRoot", "MarkInfo", "Lang"]) await cat(k);
|
|
16133
|
-
else if (root.has("StructTreeRoot")) warn("the structure tree (tags) was dropped: the pages come from several documents,
|
|
16583
|
+
else if (root.has("StructTreeRoot")) warn("the structure tree (tags) was dropped: the pages come from several documents, the form was flattened, or keepStructure is false; the result is not tagged (no longer PDF/UA; PDF/A-a is claimed as PDF/A-b)");
|
|
16134
16584
|
if (level && level.part === 3) await cat("AF");
|
|
16135
16585
|
if (single && plan.length === self.r.pages.length && plan.every((p, i2) => p.index === i2)) await cat("PageLabels");
|
|
16136
16586
|
const oa = R(root.get("OpenAction"));
|
|
@@ -16260,7 +16710,7 @@ function sameBytes(a, b) {
|
|
|
16260
16710
|
}
|
|
16261
16711
|
var MAX_OPEN, KEYS2, OWN;
|
|
16262
16712
|
var init_save = __esm({
|
|
16263
|
-
"src/reader/save.js"() {
|
|
16713
|
+
"packages/pdf/src/reader/save.js"() {
|
|
16264
16714
|
init_index();
|
|
16265
16715
|
init_page();
|
|
16266
16716
|
init_annot();
|
|
@@ -16278,7 +16728,7 @@ var init_save = __esm({
|
|
|
16278
16728
|
}
|
|
16279
16729
|
});
|
|
16280
16730
|
|
|
16281
|
-
// src/reader/active.js
|
|
16731
|
+
// packages/pdf/src/reader/active.js
|
|
16282
16732
|
function findActive(self, each) {
|
|
16283
16733
|
const found = /* @__PURE__ */ new Map();
|
|
16284
16734
|
const audit = createCopier({
|
|
@@ -16304,12 +16754,12 @@ function findActive(self, each) {
|
|
|
16304
16754
|
return [...found].map(([what, count]) => ({ what, count }));
|
|
16305
16755
|
}
|
|
16306
16756
|
var init_active = __esm({
|
|
16307
|
-
"src/reader/active.js"() {
|
|
16757
|
+
"packages/pdf/src/reader/active.js"() {
|
|
16308
16758
|
init_copy();
|
|
16309
16759
|
}
|
|
16310
16760
|
});
|
|
16311
16761
|
|
|
16312
|
-
// src/reader/incremental.js
|
|
16762
|
+
// packages/pdf/src/reader/incremental.js
|
|
16313
16763
|
var incremental_exports = {};
|
|
16314
16764
|
__export(incremental_exports, {
|
|
16315
16765
|
MAX_WIDGET_SHARE: () => MAX_WIDGET_SHARE,
|
|
@@ -16578,8 +17028,8 @@ ${xrefAt}
|
|
|
16578
17028
|
const H = hasher(sig.hash);
|
|
16579
17029
|
H.update(bytes.subarray(0, a));
|
|
16580
17030
|
H.update(bytes.subarray(b));
|
|
16581
|
-
const
|
|
16582
|
-
const cms = await Promise.resolve().then(() => sig.signer({ digest, hash: sig.hash, subFilter: sig.subFilter, date: sig.date, timestamp: sig.timestamp ?? void 0 }));
|
|
17031
|
+
const digest2 = await H.digest();
|
|
17032
|
+
const cms = await Promise.resolve().then(() => sig.signer({ digest: digest2, hash: sig.hash, subFilter: sig.subFilter, date: sig.date, timestamp: sig.timestamp ?? void 0 }));
|
|
16583
17033
|
checkContentInfo(cms, size, `${who}: the signer's CMS`);
|
|
16584
17034
|
if (sig.timestamp && !has(cms, TST_OID)) throw new Error(`${who}: a timestamp was asked for but the signer's CMS has no id-aa-timeStampToken`);
|
|
16585
17035
|
bytes.set(latin1(hex(cms).padEnd(2 * size, "0")), a + 1);
|
|
@@ -16813,7 +17263,7 @@ function checkSigned(self, sig, o, objects, who) {
|
|
|
16813
17263
|
}
|
|
16814
17264
|
var SIGN_KEYS, MAX_WIDGET_SHARE, TRANSFORMS, isSigDict;
|
|
16815
17265
|
var init_incremental = __esm({
|
|
16816
|
-
"src/reader/incremental.js"() {
|
|
17266
|
+
"packages/pdf/src/reader/incremental.js"() {
|
|
16817
17267
|
init_lexer();
|
|
16818
17268
|
init_copy();
|
|
16819
17269
|
init_active();
|
|
@@ -16833,7 +17283,7 @@ var init_incremental = __esm({
|
|
|
16833
17283
|
}
|
|
16834
17284
|
});
|
|
16835
17285
|
|
|
16836
|
-
// src/reader/pdf.js
|
|
17286
|
+
// packages/pdf/src/reader/pdf.js
|
|
16837
17287
|
function internal(v, who) {
|
|
16838
17288
|
const d = v !== null && typeof v === "object" ? inside2.get(v) : void 0;
|
|
16839
17289
|
if (!d) throw new TypeError(`${who}: not a document from loadPdf`);
|
|
@@ -16943,6 +17393,26 @@ function flatTree(rootNode, src, kind = "Names") {
|
|
|
16943
17393
|
}
|
|
16944
17394
|
return out;
|
|
16945
17395
|
}
|
|
17396
|
+
function pageAt(r, i2) {
|
|
17397
|
+
const pg = r.pages[i2];
|
|
17398
|
+
if (pg.checked) return pg;
|
|
17399
|
+
pg.checked = true;
|
|
17400
|
+
const R = r.src.resolve;
|
|
17401
|
+
try {
|
|
17402
|
+
const c = R(pg.dict.get("Contents"));
|
|
17403
|
+
if (Array.isArray(c)) {
|
|
17404
|
+
r.src.budget.tick(Math.min(c.length, 1e4));
|
|
17405
|
+
for (const x2 of c.slice(0, 1e4)) R(x2);
|
|
17406
|
+
}
|
|
17407
|
+
} catch (e) {
|
|
17408
|
+
if (!(e instanceof PdfReadError) || e.code !== "E_CYCLE") throw e;
|
|
17409
|
+
pg.emptied = `page ${i2 + 1}'s /Contents has a reference loop; the page is read as empty`;
|
|
17410
|
+
r.src.warn(pg.emptied);
|
|
17411
|
+
pg.dict = new Map(pg.dict);
|
|
17412
|
+
pg.dict.delete("Contents");
|
|
17413
|
+
}
|
|
17414
|
+
return pg;
|
|
17415
|
+
}
|
|
16946
17416
|
function makeDoc(r, plan, edits) {
|
|
16947
17417
|
const { src, root, pages, pageIndex: pageIndex2 } = r;
|
|
16948
17418
|
const R = src.resolve;
|
|
@@ -17029,7 +17499,7 @@ function makeDoc(r, plan, edits) {
|
|
|
17029
17499
|
* document's timeoutMs when sooner) @param {{ timeoutMs?: number }} [o]
|
|
17030
17500
|
*/
|
|
17031
17501
|
extractText: (o) => {
|
|
17032
|
-
const pg = owner.r
|
|
17502
|
+
const pg = pageAt(owner.r, p.index);
|
|
17033
17503
|
return extractText(owner.r.src, pg.dict, owner.r.src.resolve(pg.inh.Resources), o);
|
|
17034
17504
|
},
|
|
17035
17505
|
/** the annotations: subtype, rect, contents, uri, the page index a link goes to */
|
|
@@ -17215,7 +17685,7 @@ function makeDoc(r, plan, edits) {
|
|
|
17215
17685
|
const contents = R(v.get("Contents"));
|
|
17216
17686
|
const end = range ? range[2] + range[3] : 0;
|
|
17217
17687
|
const ok = !!range && range[0] === 0 && range[1] <= range[2] && end <= src.size;
|
|
17218
|
-
const
|
|
17688
|
+
const rev3 = ok ? src.revisions.findIndex((e) => e >= end) : -1;
|
|
17219
17689
|
out.push({
|
|
17220
17690
|
field: f.name,
|
|
17221
17691
|
subFilter: typeof R(v.get("SubFilter")) === "string" ? R(v.get("SubFilter")) : null,
|
|
@@ -17229,7 +17699,7 @@ function makeDoc(r, plan, edits) {
|
|
|
17229
17699
|
/** the signature covers every byte of the file but its /Contents (no change after it) */
|
|
17230
17700
|
coversWholeFile: ok && end === src.size,
|
|
17231
17701
|
/** the revision (0 first) whose end it covers, -1 when none */
|
|
17232
|
-
revision:
|
|
17702
|
+
revision: rev3,
|
|
17233
17703
|
/** the bytes after it: an incremental update was appended after signing */
|
|
17234
17704
|
bytesAfter: ok ? src.size - end : null,
|
|
17235
17705
|
cms: contents instanceof PdfString ? contents.bytes : null,
|
|
@@ -17520,7 +17990,7 @@ function checkValue(f, v) {
|
|
|
17520
17990
|
}
|
|
17521
17991
|
var MAX_PAGES, MAX_OUTLINE, MAX_FIELDS2, MAX_NAMES2, inside2, ACTIVE_FT;
|
|
17522
17992
|
var init_pdf = __esm({
|
|
17523
|
-
"src/reader/pdf.js"() {
|
|
17993
|
+
"packages/pdf/src/reader/pdf.js"() {
|
|
17524
17994
|
init_budget();
|
|
17525
17995
|
init_source();
|
|
17526
17996
|
init_lexer();
|
|
@@ -17535,7 +18005,7 @@ var init_pdf = __esm({
|
|
|
17535
18005
|
}
|
|
17536
18006
|
});
|
|
17537
18007
|
|
|
17538
|
-
// src/index.js
|
|
18008
|
+
// packages/pdf/src/index.js
|
|
17539
18009
|
async function mergePdfs(docs, o) {
|
|
17540
18010
|
if (!Array.isArray(docs) || !docs.length) throw new TypeError("mergePdfs: an array of documents from loadPdf");
|
|
17541
18011
|
return docs[0].fork().merge(docs.slice(1)).save(o);
|
|
@@ -17551,6 +18021,8 @@ function createPdf(sink, options2 = {}) {
|
|
|
17551
18021
|
/** @type {const} */
|
|
17552
18022
|
["title", "author", "subject", "keywords"]
|
|
17553
18023
|
) if (o[k] != null && (typeof o[k] !== "string" || o[k].length > 65536)) throw new TypeError(`createPdf: ${k} is a string of at most 65,536 characters`);
|
|
18024
|
+
if (o.metadata != null && typeof o.metadata !== "boolean") throw new TypeError("createPdf: metadata is true (the default: an XMP stream) or false (Info only)");
|
|
18025
|
+
if (o.metadata === false && (o.pdfa || o.tagged)) throw new TypeError("createPdf: metadata: false cannot be combined with pdfa or tagged: PDF/A and PDF/UA require the XMP metadata stream");
|
|
17554
18026
|
const level = pdfaLevel(o.pdfa, o.tagged);
|
|
17555
18027
|
o.signal?.throwIfAborted();
|
|
17556
18028
|
const ctl = new AbortController();
|
|
@@ -17575,6 +18047,7 @@ function createPdf(sink, options2 = {}) {
|
|
|
17575
18047
|
pdfa: !!o.pdfa,
|
|
17576
18048
|
pdfaLevel: level,
|
|
17577
18049
|
tagged: !!o.tagged,
|
|
18050
|
+
metadata: o.metadata !== false,
|
|
17578
18051
|
signal: ctl.signal,
|
|
17579
18052
|
encrypt: enc,
|
|
17580
18053
|
hash: signHash ? hasher(
|
|
@@ -17722,7 +18195,7 @@ async function toBytes2(build, options2) {
|
|
|
17722
18195
|
return all;
|
|
17723
18196
|
}
|
|
17724
18197
|
var init_index = __esm({
|
|
17725
|
-
"src/index.js"() {
|
|
18198
|
+
"packages/pdf/src/index.js"() {
|
|
17726
18199
|
init_sink();
|
|
17727
18200
|
init_document();
|
|
17728
18201
|
init_brand();
|