kordoc 4.0.6 → 4.0.8
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 +823 -806
- package/dist/{-NDU7YGSS.js → -LE4RLXVA.js} +8 -8
- package/dist/{chunk-5SOZXPQY.js → chunk-2DZQF6YJ.js} +3 -3
- package/dist/chunk-2DZQF6YJ.js.map +1 -0
- package/dist/{chunk-6GBLFQMA.js → chunk-5RPYBC2Q.js} +1 -1
- package/dist/chunk-5RPYBC2Q.js.map +1 -0
- package/dist/{chunk-DQJTNXVS.cjs → chunk-6XAAYAWL.cjs} +142 -3
- package/dist/chunk-6XAAYAWL.cjs.map +1 -0
- package/dist/{chunk-HC2SEH6I.js → chunk-7S3M4N4E.js} +939 -946
- package/dist/chunk-7S3M4N4E.js.map +1 -0
- package/dist/{chunk-4C7SBZNW.js → chunk-BNU5QGIZ.js} +2 -2
- package/dist/chunk-BNU5QGIZ.js.map +1 -0
- package/dist/{chunk-63ASYC4N.js → chunk-D35VBACN.js} +3 -3
- package/dist/chunk-D35VBACN.js.map +1 -0
- package/dist/chunk-DCZVOIEO.cjs.map +1 -1
- package/dist/chunk-GS7T56RP.cjs.map +1 -1
- package/dist/{chunk-L3I4TIRP.js → chunk-HMUEU7D7.js} +2 -2
- package/dist/chunk-HMUEU7D7.js.map +1 -0
- package/dist/{chunk-5CJGKKMZ.js → chunk-MEPHGCPQ.js} +1 -1
- package/dist/chunk-MEPHGCPQ.js.map +1 -0
- package/dist/chunk-MOL7MDBG.js +0 -0
- package/dist/{chunk-HOGJ5ALY.js → chunk-OQPILS7B.js} +142 -3
- package/dist/chunk-OQPILS7B.js.map +1 -0
- package/dist/{chunk-KA4FEBS2.js → chunk-RROH5WHO.js} +2 -2
- package/dist/chunk-RROH5WHO.js.map +1 -0
- package/dist/{chunk-UVSOSFER.js → chunk-UEIYETCQ.js} +142 -3
- package/dist/chunk-UEIYETCQ.js.map +1 -0
- package/dist/cli.js +15 -15
- package/dist/cli.js.map +1 -1
- package/dist/{detect-PJZMUL2Z.js → detect-RI2MQ33K.js} +2 -2
- package/dist/formula-5NKVS2LR.cjs.map +1 -1
- package/dist/formula-JCNF43NE.js +0 -0
- package/dist/index.cjs +1248 -1255
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +925 -932
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +13 -13
- package/dist/mcp.js.map +1 -1
- package/dist/page-range-737B4EZW.js +0 -0
- package/dist/page-range-P7SDW6LR.cjs.map +1 -1
- package/dist/{parser-VEY4B5CJ.cjs → parser-ITMU2WN5.cjs} +231 -37
- package/dist/parser-ITMU2WN5.cjs.map +1 -0
- package/dist/{parser-DMKHIV4E.js → parser-KMMUS73Q.js} +200 -6
- package/dist/parser-KMMUS73Q.js.map +1 -0
- package/dist/{parser-C636QIOB.js → parser-TCTCSBYZ.js} +202 -8
- package/dist/parser-TCTCSBYZ.js.map +1 -0
- package/dist/{profile-io-JYGCC6XQ.js → profile-io-SLN4P76T.js} +3 -3
- package/dist/{provider-H4WWSPOV.js → provider-4ZJKV3DC.js} +1 -1
- package/dist/provider-4ZJKV3DC.js.map +1 -0
- package/dist/{provider-7H4CPZYS.js → provider-AKROB7WQ.js} +1 -1
- package/dist/provider-AKROB7WQ.js.map +1 -0
- package/dist/{provider-5K7O3Z2O.cjs → provider-G4C2V2PD.cjs} +1 -1
- package/dist/provider-G4C2V2PD.cjs.map +1 -0
- package/dist/render-25BT623I.js +10 -0
- package/dist/seal-R4TETA4C.js +10 -0
- package/dist/setup-57FB3LSP.js +0 -0
- package/dist/{watch-ZQUFJBFR.js → watch-OHQWSVPE.js} +8 -8
- package/dist/watch-OHQWSVPE.js.map +1 -0
- package/package.json +97 -97
- package/dist/chunk-4C7SBZNW.js.map +0 -1
- package/dist/chunk-5CJGKKMZ.js.map +0 -1
- package/dist/chunk-5SOZXPQY.js.map +0 -1
- package/dist/chunk-63ASYC4N.js.map +0 -1
- package/dist/chunk-6GBLFQMA.js.map +0 -1
- package/dist/chunk-DQJTNXVS.cjs.map +0 -1
- package/dist/chunk-HC2SEH6I.js.map +0 -1
- package/dist/chunk-HOGJ5ALY.js.map +0 -1
- package/dist/chunk-KA4FEBS2.js.map +0 -1
- package/dist/chunk-L3I4TIRP.js.map +0 -1
- package/dist/chunk-UVSOSFER.js.map +0 -1
- package/dist/parser-C636QIOB.js.map +0 -1
- package/dist/parser-DMKHIV4E.js.map +0 -1
- package/dist/parser-VEY4B5CJ.cjs.map +0 -1
- package/dist/provider-5K7O3Z2O.cjs.map +0 -1
- package/dist/provider-7H4CPZYS.js.map +0 -1
- package/dist/provider-H4WWSPOV.js.map +0 -1
- package/dist/render-ISOEOMTM.js +0 -10
- package/dist/seal-676ZIAZZ.js +0 -10
- package/dist/watch-ZQUFJBFR.js.map +0 -1
- /package/dist/{-NDU7YGSS.js.map → -LE4RLXVA.js.map} +0 -0
- /package/dist/{detect-PJZMUL2Z.js.map → detect-RI2MQ33K.js.map} +0 -0
- /package/dist/{profile-io-JYGCC6XQ.js.map → profile-io-SLN4P76T.js.map} +0 -0
- /package/dist/{render-ISOEOMTM.js.map → render-25BT623I.js.map} +0 -0
- /package/dist/{seal-676ZIAZZ.js.map → seal-R4TETA4C.js.map} +0 -0
|
@@ -4,9 +4,10 @@ import {
|
|
|
4
4
|
HEADING_RATIO_H3,
|
|
5
5
|
KordocError,
|
|
6
6
|
blocksToMarkdown,
|
|
7
|
+
encodePng,
|
|
7
8
|
safeMax,
|
|
8
9
|
safeMin
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-OQPILS7B.js";
|
|
10
11
|
import {
|
|
11
12
|
parsePageRange
|
|
12
13
|
} from "./chunk-GE43BE46.js";
|
|
@@ -1220,10 +1221,180 @@ function normalizeUndersegmentedTable(originalCells, colXs, items) {
|
|
|
1220
1221
|
return rebuilt;
|
|
1221
1222
|
}
|
|
1222
1223
|
|
|
1224
|
+
// src/pdf/image-extract.ts
|
|
1225
|
+
import { OPS as OPS3, ImageKind } from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
1226
|
+
var IMAGE_RESOLVE_TIMEOUT_MS = 5e3;
|
|
1227
|
+
function resolveImgData(page, objId) {
|
|
1228
|
+
const store = objId.startsWith("g_") ? page.commonObjs : page.objs;
|
|
1229
|
+
return new Promise((resolve) => {
|
|
1230
|
+
let done = false;
|
|
1231
|
+
const timer = setTimeout(() => {
|
|
1232
|
+
if (!done) {
|
|
1233
|
+
done = true;
|
|
1234
|
+
resolve(null);
|
|
1235
|
+
}
|
|
1236
|
+
}, IMAGE_RESOLVE_TIMEOUT_MS);
|
|
1237
|
+
try {
|
|
1238
|
+
store.get(objId, (data) => {
|
|
1239
|
+
if (!done) {
|
|
1240
|
+
done = true;
|
|
1241
|
+
clearTimeout(timer);
|
|
1242
|
+
resolve(data ?? null);
|
|
1243
|
+
}
|
|
1244
|
+
});
|
|
1245
|
+
} catch {
|
|
1246
|
+
if (!done) {
|
|
1247
|
+
done = true;
|
|
1248
|
+
clearTimeout(timer);
|
|
1249
|
+
resolve(null);
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
var MIN_DIM = 8;
|
|
1255
|
+
var MAX_PIXELS = 36e6;
|
|
1256
|
+
var MAX_IMAGES_PER_DOC = 200;
|
|
1257
|
+
var MAX_TOTAL_IMAGE_BYTES = 128 * 1024 * 1024;
|
|
1258
|
+
function createPdfImageState() {
|
|
1259
|
+
return { imageIndex: 0, totalBytes: 0, seen: /* @__PURE__ */ new Map(), capWarned: false };
|
|
1260
|
+
}
|
|
1261
|
+
function fnv1a(data) {
|
|
1262
|
+
let h = 2166136261;
|
|
1263
|
+
for (let i = 0; i < data.length; i++) {
|
|
1264
|
+
h ^= data[i];
|
|
1265
|
+
h = Math.imul(h, 16777619);
|
|
1266
|
+
}
|
|
1267
|
+
return h >>> 0;
|
|
1268
|
+
}
|
|
1269
|
+
function toRgba(img) {
|
|
1270
|
+
const { width: w, height: h, kind, data } = img;
|
|
1271
|
+
if (!data || !w || !h) return null;
|
|
1272
|
+
const rgba = new Uint8Array(w * h * 4);
|
|
1273
|
+
if (kind === ImageKind.RGBA_32BPP) {
|
|
1274
|
+
if (data.length < w * h * 4) return null;
|
|
1275
|
+
rgba.set(data.subarray(0, w * h * 4));
|
|
1276
|
+
return rgba;
|
|
1277
|
+
}
|
|
1278
|
+
if (kind === ImageKind.RGB_24BPP) {
|
|
1279
|
+
if (data.length < w * h * 3) return null;
|
|
1280
|
+
for (let i = 0, s = 0, d = 0; i < w * h; i++, s += 3, d += 4) {
|
|
1281
|
+
rgba[d] = data[s];
|
|
1282
|
+
rgba[d + 1] = data[s + 1];
|
|
1283
|
+
rgba[d + 2] = data[s + 2];
|
|
1284
|
+
rgba[d + 3] = 255;
|
|
1285
|
+
}
|
|
1286
|
+
return rgba;
|
|
1287
|
+
}
|
|
1288
|
+
if (kind === ImageKind.GRAYSCALE_1BPP) {
|
|
1289
|
+
const stride = w + 7 >> 3;
|
|
1290
|
+
if (data.length < stride * h) return null;
|
|
1291
|
+
for (let y = 0; y < h; y++) {
|
|
1292
|
+
for (let x = 0; x < w; x++) {
|
|
1293
|
+
const bit = data[y * stride + (x >> 3)] >> 7 - (x & 7) & 1;
|
|
1294
|
+
const v = bit ? 255 : 0;
|
|
1295
|
+
const d = (y * w + x) * 4;
|
|
1296
|
+
rgba[d] = v;
|
|
1297
|
+
rgba[d + 1] = v;
|
|
1298
|
+
rgba[d + 2] = v;
|
|
1299
|
+
rgba[d + 3] = 255;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
return rgba;
|
|
1303
|
+
}
|
|
1304
|
+
return null;
|
|
1305
|
+
}
|
|
1306
|
+
async function extractPageImages(page, fnArray, argsArray, pageNumber, state, warnings) {
|
|
1307
|
+
const blocks = [];
|
|
1308
|
+
const images = [];
|
|
1309
|
+
const pageSeenIds = /* @__PURE__ */ new Set();
|
|
1310
|
+
for (let i = 0; i < fnArray.length; i++) {
|
|
1311
|
+
const op = fnArray[i];
|
|
1312
|
+
let imgData = null;
|
|
1313
|
+
let dedupeId = null;
|
|
1314
|
+
if (op === OPS3.paintImageXObject || op === OPS3.paintImageXObjectRepeat) {
|
|
1315
|
+
const objId = argsArray[i]?.[0];
|
|
1316
|
+
if (typeof objId !== "string" || pageSeenIds.has(objId)) continue;
|
|
1317
|
+
pageSeenIds.add(objId);
|
|
1318
|
+
dedupeId = objId;
|
|
1319
|
+
imgData = await resolveImgData(page, objId);
|
|
1320
|
+
} else if (op === OPS3.paintInlineImageXObject) {
|
|
1321
|
+
imgData = argsArray[i]?.[0];
|
|
1322
|
+
} else {
|
|
1323
|
+
continue;
|
|
1324
|
+
}
|
|
1325
|
+
if (!imgData?.data || !imgData.width || !imgData.height) continue;
|
|
1326
|
+
const { width: w, height: h } = imgData;
|
|
1327
|
+
if (w < MIN_DIM || h < MIN_DIM) continue;
|
|
1328
|
+
if (w * h > MAX_PIXELS) {
|
|
1329
|
+
warnings.push({ page: pageNumber, message: `\uC774\uBBF8\uC9C0 \uD06C\uAE30 \uCD08\uACFC\uB85C \uCD94\uCD9C \uC0DD\uB7B5 (${w}\xD7${h})`, code: "SKIPPED_IMAGE" });
|
|
1330
|
+
continue;
|
|
1331
|
+
}
|
|
1332
|
+
const hash = `${w}x${h}k${imgData.kind ?? "?"}h${fnv1a(imgData.data)}${dedupeId ? "" : "inline"}`;
|
|
1333
|
+
if (state.seen.has(hash)) continue;
|
|
1334
|
+
if (state.imageIndex >= MAX_IMAGES_PER_DOC || state.totalBytes >= MAX_TOTAL_IMAGE_BYTES) {
|
|
1335
|
+
if (!state.capWarned) {
|
|
1336
|
+
state.capWarned = true;
|
|
1337
|
+
warnings.push({ page: pageNumber, message: `\uC774\uBBF8\uC9C0 \uCD94\uCD9C \uC0C1\uD55C \uB3C4\uB2EC (${MAX_IMAGES_PER_DOC}\uAC1C/128MB) \u2014 \uC774\uD6C4 \uC774\uBBF8\uC9C0 \uC0DD\uB7B5`, code: "SKIPPED_IMAGE" });
|
|
1338
|
+
}
|
|
1339
|
+
continue;
|
|
1340
|
+
}
|
|
1341
|
+
const rgba = toRgba(imgData);
|
|
1342
|
+
if (!rgba) continue;
|
|
1343
|
+
const png = encodePng(w, h, rgba);
|
|
1344
|
+
state.imageIndex++;
|
|
1345
|
+
state.totalBytes += png.length;
|
|
1346
|
+
const filename = `image_${String(state.imageIndex).padStart(3, "0")}.png`;
|
|
1347
|
+
state.seen.set(hash, filename);
|
|
1348
|
+
images.push({ filename, data: png, mimeType: "image/png" });
|
|
1349
|
+
blocks.push({ type: "image", text: filename, pageNumber });
|
|
1350
|
+
}
|
|
1351
|
+
return { blocks, images };
|
|
1352
|
+
}
|
|
1353
|
+
function injectPageImageBlocks(blocks, pageImages) {
|
|
1354
|
+
if (pageImages.size === 0) return;
|
|
1355
|
+
const lastIndexForPage = /* @__PURE__ */ new Map();
|
|
1356
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
1357
|
+
const p = blocks[i].pageNumber;
|
|
1358
|
+
if (p !== void 0) lastIndexForPage.set(p, i);
|
|
1359
|
+
}
|
|
1360
|
+
const pageAtIndex = /* @__PURE__ */ new Map();
|
|
1361
|
+
for (const [p, last] of lastIndexForPage) pageAtIndex.set(last, p);
|
|
1362
|
+
const result = [];
|
|
1363
|
+
const injected = /* @__PURE__ */ new Set();
|
|
1364
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
1365
|
+
result.push(blocks[i]);
|
|
1366
|
+
const p = pageAtIndex.get(i);
|
|
1367
|
+
if (p !== void 0 && pageImages.has(p)) {
|
|
1368
|
+
result.push(...pageImages.get(p));
|
|
1369
|
+
injected.add(p);
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
for (const p of [...pageImages.keys()].sort((a, b) => a - b)) {
|
|
1373
|
+
if (injected.has(p)) continue;
|
|
1374
|
+
let at = result.length;
|
|
1375
|
+
for (let i = 0; i < result.length; i++) {
|
|
1376
|
+
const bp = result[i].pageNumber;
|
|
1377
|
+
if (bp !== void 0 && bp > p) {
|
|
1378
|
+
at = i;
|
|
1379
|
+
break;
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
result.splice(at, 0, ...pageImages.get(p));
|
|
1383
|
+
}
|
|
1384
|
+
blocks.length = 0;
|
|
1385
|
+
blocks.push(...result);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1223
1388
|
// src/pdf/quality.ts
|
|
1389
|
+
var RARE_JONG = /* @__PURE__ */ new Set([3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 18, 24, 25, 26]);
|
|
1390
|
+
var MOJIBAKE_MIN_HANGUL = 30;
|
|
1391
|
+
var MOJIBAKE_MAX_NOBATCHIM = 0.15;
|
|
1392
|
+
var MOJIBAKE_MIN_RAREBATCHIM = 0.25;
|
|
1224
1393
|
function computePageQuality(page, text) {
|
|
1225
1394
|
let total = 0;
|
|
1226
1395
|
let hangul = 0;
|
|
1396
|
+
let hangulNoBatchim = 0;
|
|
1397
|
+
let hangulRareBatchim = 0;
|
|
1227
1398
|
let control = 0;
|
|
1228
1399
|
let replacement = 0;
|
|
1229
1400
|
let pua = 0;
|
|
@@ -1241,6 +1412,9 @@ function computePageQuality(page, text) {
|
|
|
1241
1412
|
}
|
|
1242
1413
|
if (code >= 44032 && code <= 55203) {
|
|
1243
1414
|
hangul++;
|
|
1415
|
+
const jong = (code - 44032) % 28;
|
|
1416
|
+
if (jong === 0) hangulNoBatchim++;
|
|
1417
|
+
else if (RARE_JONG.has(jong)) hangulRareBatchim++;
|
|
1244
1418
|
continue;
|
|
1245
1419
|
}
|
|
1246
1420
|
if (code >= 57344 && code <= 63743 || code >= 56192 && code <= 56319) {
|
|
@@ -1252,6 +1426,9 @@ function computePageQuality(page, text) {
|
|
|
1252
1426
|
const puaRatio = pua / denom;
|
|
1253
1427
|
const controlCharRatio = control / denom;
|
|
1254
1428
|
const replacementCharRatio = replacement / denom;
|
|
1429
|
+
const hangulNoBatchimRatio = hangul > 0 ? hangulNoBatchim / hangul : 0;
|
|
1430
|
+
const hangulRareBatchimRatio = hangul > 0 ? hangulRareBatchim / hangul : 0;
|
|
1431
|
+
const garbledHangul = hangul >= MOJIBAKE_MIN_HANGUL && hangulNoBatchimRatio < MOJIBAKE_MAX_NOBATCHIM && hangulRareBatchimRatio >= MOJIBAKE_MIN_RAREBATCHIM;
|
|
1255
1432
|
let needsOcr = false;
|
|
1256
1433
|
let ocrReason;
|
|
1257
1434
|
if (total < LOW_TEXT_THRESHOLD) {
|
|
@@ -1266,6 +1443,9 @@ function computePageQuality(page, text) {
|
|
|
1266
1443
|
} else if (replacementCharRatio >= HIGH_REPLACEMENT_THRESHOLD) {
|
|
1267
1444
|
needsOcr = true;
|
|
1268
1445
|
ocrReason = "high_replacement";
|
|
1446
|
+
} else if (garbledHangul) {
|
|
1447
|
+
needsOcr = true;
|
|
1448
|
+
ocrReason = "garbled_hangul";
|
|
1269
1449
|
}
|
|
1270
1450
|
return {
|
|
1271
1451
|
page,
|
|
@@ -1274,6 +1454,8 @@ function computePageQuality(page, text) {
|
|
|
1274
1454
|
controlCharRatio,
|
|
1275
1455
|
replacementCharRatio,
|
|
1276
1456
|
puaRatio,
|
|
1457
|
+
hangulNoBatchimRatio,
|
|
1458
|
+
hangulRareBatchimRatio,
|
|
1277
1459
|
needsOcr,
|
|
1278
1460
|
ocrReason
|
|
1279
1461
|
};
|
|
@@ -3565,6 +3747,9 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3565
3747
|
const pageHeights = /* @__PURE__ */ new Map();
|
|
3566
3748
|
const pagesWithLargeImage = /* @__PURE__ */ new Set();
|
|
3567
3749
|
const skippedImagePages = /* @__PURE__ */ new Map();
|
|
3750
|
+
const imageState = createPdfImageState();
|
|
3751
|
+
const extractedImages = [];
|
|
3752
|
+
const pageImageBlocks = /* @__PURE__ */ new Map();
|
|
3568
3753
|
let parsedPages = 0;
|
|
3569
3754
|
for (let i = 1; i <= effectivePageCount; i++) {
|
|
3570
3755
|
if (pageFilter && !pageFilter.has(i)) continue;
|
|
@@ -3602,6 +3787,12 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3602
3787
|
}
|
|
3603
3788
|
const pageBlocks = extractPageBlocksWithLines(visible, i, opList, viewport.width, viewport.height);
|
|
3604
3789
|
for (const b of pageBlocks) blocks.push(b);
|
|
3790
|
+
try {
|
|
3791
|
+
const { blocks: imgBlocks, images: pageImages } = await extractPageImages(page, opList.fnArray, opList.argsArray, i, imageState, warnings);
|
|
3792
|
+
if (imgBlocks.length > 0) pageImageBlocks.set(i, imgBlocks);
|
|
3793
|
+
extractedImages.push(...pageImages);
|
|
3794
|
+
} catch {
|
|
3795
|
+
}
|
|
3605
3796
|
let pageText = "";
|
|
3606
3797
|
for (const b of pageBlocks) {
|
|
3607
3798
|
const t = b.text || "";
|
|
@@ -3623,11 +3814,11 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3623
3814
|
if (totalChars / Math.max(parsedPageCount, 1) < 10) {
|
|
3624
3815
|
if (options?.ocr) {
|
|
3625
3816
|
try {
|
|
3626
|
-
const { ocrPages } = await import("./provider-
|
|
3817
|
+
const { ocrPages } = await import("./provider-4ZJKV3DC.js");
|
|
3627
3818
|
const ocrBlocks = await ocrPages(doc, options.ocr, pageFilter, effectivePageCount);
|
|
3628
3819
|
if (ocrBlocks.length > 0) {
|
|
3629
3820
|
const ocrMarkdown = ocrBlocks.map((b) => b.text || "").filter(Boolean).join("\n\n");
|
|
3630
|
-
return { markdown: ocrMarkdown, blocks: ocrBlocks, metadata, warnings, isImageBased: true, pageQuality, qualitySummary: summarizeDocumentQuality(pageQuality) };
|
|
3821
|
+
return { markdown: ocrMarkdown, blocks: ocrBlocks, metadata, warnings, isImageBased: true, pageQuality, qualitySummary: summarizeDocumentQuality(pageQuality), images: extractedImages.length > 0 ? extractedImages : void 0 };
|
|
3631
3822
|
}
|
|
3632
3823
|
} catch {
|
|
3633
3824
|
}
|
|
@@ -3643,7 +3834,8 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3643
3834
|
low_text: "\uD14D\uC2A4\uD2B8\uAC00 \uAC70\uC758 \uC5C6\uB294 \uD398\uC774\uC9C0 (\uC2A4\uCE94/\uC774\uBBF8\uC9C0 \uCD94\uC815)",
|
|
3644
3835
|
high_pua: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (PUA \uBE44\uC728 \uB192\uC74C) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
|
|
3645
3836
|
high_control: "\uC81C\uC5B4\uBB38\uC790 \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
|
|
3646
|
-
high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00"
|
|
3837
|
+
high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
|
|
3838
|
+
garbled_hangul: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (\uD55C\uAE00 \uC790\uC18C \uBD84\uD3EC \uC774\uC0C1) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8\uAC00 \uAE68\uC84C\uC744 \uC218 \uC788\uC74C"
|
|
3647
3839
|
};
|
|
3648
3840
|
for (const pq of pageQuality) {
|
|
3649
3841
|
if (!pq.needsOcr || !pq.ocrReason) continue;
|
|
@@ -3663,6 +3855,7 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3663
3855
|
}
|
|
3664
3856
|
}
|
|
3665
3857
|
mergeCrossPageTables(blocks);
|
|
3858
|
+
injectPageImageBlocks(blocks, pageImageBlocks);
|
|
3666
3859
|
if (options?.formulaOcr && formulaBuffer) {
|
|
3667
3860
|
try {
|
|
3668
3861
|
await applyFormulaOcr(formulaBuffer, blocks, pageFilter, effectivePageCount, warnings, options.onProgress);
|
|
@@ -3691,7 +3884,8 @@ async function parsePdfDocument(buffer, options) {
|
|
|
3691
3884
|
warnings: warnings.length > 0 ? warnings : void 0,
|
|
3692
3885
|
isImageBased: isImageBased || void 0,
|
|
3693
3886
|
pageQuality,
|
|
3694
|
-
qualitySummary: summarizeDocumentQuality(pageQuality)
|
|
3887
|
+
qualitySummary: summarizeDocumentQuality(pageQuality),
|
|
3888
|
+
images: extractedImages.length > 0 ? extractedImages : void 0
|
|
3695
3889
|
};
|
|
3696
3890
|
} finally {
|
|
3697
3891
|
await doc.destroy().catch(() => {
|
|
@@ -3741,4 +3935,4 @@ export {
|
|
|
3741
3935
|
parsePdfDocument,
|
|
3742
3936
|
removeHeaderFooterBlocks
|
|
3743
3937
|
};
|
|
3744
|
-
//# sourceMappingURL=parser-
|
|
3938
|
+
//# sourceMappingURL=parser-KMMUS73Q.js.map
|