kordoc 4.21.0 → 4.21.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 +5 -1
- package/dist/{-LJL6UNRO.js → -HOKFROKW.js} +11 -11
- package/dist/{chunk-VSSMJKOX.js → chunk-2R4EUTY2.js} +6 -6
- package/dist/{chunk-WB6RROCW.js → chunk-3G3LTCET.js} +2 -2
- package/dist/{chunk-3ITKDX7E.cjs → chunk-7FVTFUXA.cjs} +54 -18
- package/dist/chunk-7FVTFUXA.cjs.map +1 -0
- package/dist/{chunk-ALCZCRIU.js → chunk-7UW6DY3C.js} +17 -5
- package/dist/chunk-7UW6DY3C.js.map +1 -0
- package/dist/{chunk-QQERGR6C.js → chunk-AIFZNEJ7.js} +142 -65
- package/dist/chunk-AIFZNEJ7.js.map +1 -0
- package/dist/{chunk-MCMMGZOJ.js → chunk-AP3S75PG.js} +16 -4
- package/dist/chunk-AP3S75PG.js.map +1 -0
- package/dist/{chunk-2OTAFZ2Y.cjs → chunk-BB3KW4XQ.cjs} +6 -6
- package/dist/{chunk-2OTAFZ2Y.cjs.map → chunk-BB3KW4XQ.cjs.map} +1 -1
- package/dist/{chunk-JUFEZMXC.cjs → chunk-D6IL33RT.cjs} +3 -3
- package/dist/{chunk-JUFEZMXC.cjs.map → chunk-D6IL33RT.cjs.map} +1 -1
- package/dist/{chunk-D4EDAS3V.js → chunk-DD2MPABZ.js} +3 -3
- package/dist/{chunk-ZJDZH647.js → chunk-ECZUYB6D.js} +2 -2
- package/dist/{chunk-JL525ZAU.cjs → chunk-GMYWSEE3.cjs} +3 -3
- package/dist/{chunk-JL525ZAU.cjs.map → chunk-GMYWSEE3.cjs.map} +1 -1
- package/dist/{chunk-G57LD7SG.js → chunk-HMCHEPXZ.js} +2 -2
- package/dist/{chunk-O33PS3VI.js → chunk-IW3ZJ5LL.js} +45 -9
- package/dist/{chunk-SEVFALDF.js.map → chunk-IW3ZJ5LL.js.map} +1 -1
- package/dist/{chunk-JEKZXUIJ.js → chunk-IZHZO5E5.js} +2 -2
- package/dist/{chunk-WUJNUWZ4.js → chunk-LGADKCYX.js} +2 -2
- package/dist/{chunk-SEVFALDF.js → chunk-LIAVMG4G.js} +44 -8
- package/dist/{chunk-O33PS3VI.js.map → chunk-LIAVMG4G.js.map} +1 -1
- package/dist/{chunk-OVBIDELJ.js → chunk-LW33OVQI.js} +2 -2
- package/dist/{chunk-UYKDMNLD.cjs → chunk-NRMHYBTC.cjs} +2 -2
- package/dist/{chunk-UYKDMNLD.cjs.map → chunk-NRMHYBTC.cjs.map} +1 -1
- package/dist/{chunk-T3EVQHOP.js → chunk-O2BKYY75.js} +2 -2
- package/dist/{chunk-HDP2H33I.js → chunk-PCXFMUED.js} +2 -2
- package/dist/{chunk-7QL3G7UF.cjs → chunk-PZU22IY6.cjs} +35 -23
- package/dist/chunk-PZU22IY6.cjs.map +1 -0
- package/dist/{chunk-FNHELO37.js → chunk-Q4XAUAGE.js} +2 -2
- package/dist/{chunk-ZNCOOG54.js → chunk-QRIAJTU7.js} +2 -2
- package/dist/{chunk-O23XMVMP.js → chunk-RFRJIPGS.js} +2 -2
- package/dist/{chunk-GYPEF6GQ.js → chunk-S327K362.js} +2 -2
- package/dist/{chunk-LRHVFJ5J.js → chunk-TSBVZCBA.js} +3 -3
- package/dist/{chunk-6EXVHTBH.js → chunk-VVWO34BY.js} +2 -2
- package/dist/{chunk-XZ3HIQXC.js → chunk-WG34ORJP.js} +2 -2
- package/dist/{chunk-6SG56DDC.js → chunk-YW42IW7C.js} +2 -2
- package/dist/chunks-TTRGQKFY.js +10 -0
- package/dist/cli.js +31 -31
- package/dist/cli.js.map +1 -1
- package/dist/{formula-AD75YRCB.js → formula-34RCXKEG.js} +3 -3
- package/dist/{formula-JULH7HF6.js → formula-35PO5MW2.js} +4 -4
- package/dist/{formula-B7GGECPZ.cjs → formula-FHGR4UV6.cjs} +9 -9
- package/dist/{formula-B7GGECPZ.cjs.map → formula-FHGR4UV6.cjs.map} +1 -1
- package/dist/{image-ocr-3C3K64AD.js → image-ocr-BYJZTWG3.js} +9 -9
- package/dist/{image-ocr-E2IN6D4B.cjs → image-ocr-CD7SSTEI.cjs} +15 -15
- package/dist/{image-ocr-E2IN6D4B.cjs.map → image-ocr-CD7SSTEI.cjs.map} +1 -1
- package/dist/{image-ocr-2UJ6QP63.js → image-ocr-HNQK2OP5.js} +6 -6
- package/dist/index.cjs +632 -555
- 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 +137 -60
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +24 -24
- package/dist/mcp.js.map +1 -1
- package/dist/{model-bundle-XT5IXIZ3.js → model-bundle-NXG7OETS.js} +5 -5
- package/dist/{models-NDSZF5T2.js → models-4YHBHWXN.js} +5 -5
- package/dist/{parse-worker-v2-XTDC2E3M.js → parse-worker-v2-KPHG3RC3.js} +12 -12
- package/dist/{parser-V2JLOQIC.cjs → parser-37HOABN7.cjs} +136 -133
- package/dist/parser-37HOABN7.cjs.map +1 -0
- package/dist/{parser-VE7A5K7X.js → parser-CYWDSJYM.js} +12 -9
- package/dist/{parser-VE7A5K7X.js.map → parser-CYWDSJYM.js.map} +1 -1
- package/dist/{parser-3W5XWIE5.js → parser-WLKWE5QO.js} +15 -12
- package/dist/{parser-3W5XWIE5.js.map → parser-WLKWE5QO.js.map} +1 -1
- package/dist/pdf-ocr-G73YRMIF.cjs +19 -0
- package/dist/pdf-ocr-G73YRMIF.cjs.map +1 -0
- package/dist/pdf-ocr-PIKCU6SC.js +18 -0
- package/dist/pdf-ocr-RSZCNNJI.js +22 -0
- package/dist/{profile-io-7Z6CPLR2.js → profile-io-H75AWHYJ.js} +3 -3
- package/dist/{rasterize-IF2FNQ7Y.js → rasterize-EEKHZQ2W.js} +3 -3
- package/dist/{redact-doc-HE42N4TZ.js → redact-doc-OP4WFLGW.js} +11 -11
- package/dist/{render-6ZE75NBK.js → render-ES74GRBO.js} +7 -7
- package/dist/seal-B4WNDB6F.js +10 -0
- package/dist/{setup-ZTYMTCEJ.js → setup-APD2PCWT.js} +3 -3
- package/dist/visual-EZKGDCRC.js +20 -0
- package/dist/{watch-WELSQDEN.js → watch-NNEZSURA.js} +12 -12
- package/package.json +1 -1
- package/dist/chunk-3ITKDX7E.cjs.map +0 -1
- package/dist/chunk-7QL3G7UF.cjs.map +0 -1
- package/dist/chunk-ALCZCRIU.js.map +0 -1
- package/dist/chunk-MCMMGZOJ.js.map +0 -1
- package/dist/chunk-QQERGR6C.js.map +0 -1
- package/dist/chunks-XOKXUJ67.js +0 -10
- package/dist/parser-V2JLOQIC.cjs.map +0 -1
- package/dist/pdf-ocr-KZ56UECD.js +0 -20
- package/dist/pdf-ocr-L4EUIDIW.js +0 -16
- package/dist/pdf-ocr-XPLOCBYI.cjs +0 -17
- package/dist/pdf-ocr-XPLOCBYI.cjs.map +0 -1
- package/dist/seal-N2Q7WC4V.js +0 -10
- package/dist/visual-3YC2PLLG.js +0 -20
- /package/dist/{-LJL6UNRO.js.map → -HOKFROKW.js.map} +0 -0
- /package/dist/{chunk-VSSMJKOX.js.map → chunk-2R4EUTY2.js.map} +0 -0
- /package/dist/{chunk-WB6RROCW.js.map → chunk-3G3LTCET.js.map} +0 -0
- /package/dist/{chunk-D4EDAS3V.js.map → chunk-DD2MPABZ.js.map} +0 -0
- /package/dist/{chunk-ZJDZH647.js.map → chunk-ECZUYB6D.js.map} +0 -0
- /package/dist/{chunk-G57LD7SG.js.map → chunk-HMCHEPXZ.js.map} +0 -0
- /package/dist/{chunk-JEKZXUIJ.js.map → chunk-IZHZO5E5.js.map} +0 -0
- /package/dist/{chunk-WUJNUWZ4.js.map → chunk-LGADKCYX.js.map} +0 -0
- /package/dist/{chunk-OVBIDELJ.js.map → chunk-LW33OVQI.js.map} +0 -0
- /package/dist/{chunk-T3EVQHOP.js.map → chunk-O2BKYY75.js.map} +0 -0
- /package/dist/{chunk-HDP2H33I.js.map → chunk-PCXFMUED.js.map} +0 -0
- /package/dist/{chunk-FNHELO37.js.map → chunk-Q4XAUAGE.js.map} +0 -0
- /package/dist/{chunk-ZNCOOG54.js.map → chunk-QRIAJTU7.js.map} +0 -0
- /package/dist/{chunk-O23XMVMP.js.map → chunk-RFRJIPGS.js.map} +0 -0
- /package/dist/{chunk-GYPEF6GQ.js.map → chunk-S327K362.js.map} +0 -0
- /package/dist/{chunk-LRHVFJ5J.js.map → chunk-TSBVZCBA.js.map} +0 -0
- /package/dist/{chunk-6EXVHTBH.js.map → chunk-VVWO34BY.js.map} +0 -0
- /package/dist/{chunk-XZ3HIQXC.js.map → chunk-WG34ORJP.js.map} +0 -0
- /package/dist/{chunk-6SG56DDC.js.map → chunk-YW42IW7C.js.map} +0 -0
- /package/dist/{chunks-XOKXUJ67.js.map → chunks-TTRGQKFY.js.map} +0 -0
- /package/dist/{formula-AD75YRCB.js.map → formula-34RCXKEG.js.map} +0 -0
- /package/dist/{formula-JULH7HF6.js.map → formula-35PO5MW2.js.map} +0 -0
- /package/dist/{image-ocr-3C3K64AD.js.map → image-ocr-BYJZTWG3.js.map} +0 -0
- /package/dist/{image-ocr-2UJ6QP63.js.map → image-ocr-HNQK2OP5.js.map} +0 -0
- /package/dist/{model-bundle-XT5IXIZ3.js.map → model-bundle-NXG7OETS.js.map} +0 -0
- /package/dist/{models-NDSZF5T2.js.map → models-4YHBHWXN.js.map} +0 -0
- /package/dist/{parse-worker-v2-XTDC2E3M.js.map → parse-worker-v2-KPHG3RC3.js.map} +0 -0
- /package/dist/{pdf-ocr-KZ56UECD.js.map → pdf-ocr-PIKCU6SC.js.map} +0 -0
- /package/dist/{pdf-ocr-L4EUIDIW.js.map → pdf-ocr-RSZCNNJI.js.map} +0 -0
- /package/dist/{profile-io-7Z6CPLR2.js.map → profile-io-H75AWHYJ.js.map} +0 -0
- /package/dist/{rasterize-IF2FNQ7Y.js.map → rasterize-EEKHZQ2W.js.map} +0 -0
- /package/dist/{redact-doc-HE42N4TZ.js.map → redact-doc-OP4WFLGW.js.map} +0 -0
- /package/dist/{render-6ZE75NBK.js.map → render-ES74GRBO.js.map} +0 -0
- /package/dist/{seal-N2Q7WC4V.js.map → seal-B4WNDB6F.js.map} +0 -0
- /package/dist/{setup-ZTYMTCEJ.js.map → setup-APD2PCWT.js.map} +0 -0
- /package/dist/{visual-3YC2PLLG.js.map → visual-EZKGDCRC.js.map} +0 -0
- /package/dist/{watch-WELSQDEN.js.map → watch-NNEZSURA.js.map} +0 -0
package/README.md
CHANGED
|
@@ -62,6 +62,8 @@ npx kordoc fill --template gian -j 값.json -o 기안문.hwpx
|
|
|
62
62
|
|
|
63
63
|
`--jobs`는 파일 단위 병렬 변환이며 메모리 사용도 늘어납니다. [병렬 변환 안내](docs/parallel-batch.md)
|
|
64
64
|
|
|
65
|
+
보고서·계획서·개조식·서울방침은 `#` 제목 바로 뒤 인용문(`> …하고자 함`)이 요약 상자가 됩니다(개조식은 표지가 있을 때(기본) 본문 첫 쪽 제목 상자 아래 — `cover:false` 면 첫 `#` 이 장 머리라 인용문은 ※ 참고). 보고 목적 한 문장(쉼표 허용) 3줄 이내로 쓰고, 넘거나 두 문장 이상이면 경고합니다. 업무보고는 `> ▪ …` 인용문이 자리와 관계없이 성과 요약 상자가 됩니다.
|
|
66
|
+
|
|
65
67
|
### JavaScript / TypeScript
|
|
66
68
|
|
|
67
69
|
```typescript
|
|
@@ -111,10 +113,12 @@ await writeFile("보고서.hwpx", Buffer.from(hwpx))
|
|
|
111
113
|
|
|
112
114
|
## 최근 업데이트
|
|
113
115
|
|
|
114
|
-
최신 배포: **[4.21.
|
|
116
|
+
최신 배포: **[4.21.2](https://github.com/chrisryugj/kordoc/releases/tag/v4.21.2)** · 2026-10-09
|
|
115
117
|
|
|
116
118
|
| 버전 | 주요 변경 |
|
|
117
119
|
| --- | --- |
|
|
120
|
+
| 4.21.2 | 개조식 제목 뒤 요약이 1×1 요약 상자로(종전 ※ 참고)·요약 3줄·한 문장 검사, HWP3 중첩 한도·암호 HWPX 누적 압축 해제 상한 |
|
|
121
|
+
| 4.21.1 | 이미지 OCR 에서 같은 줄 조각이 갈려 순서가 뒤집히던 것과 테두리 없는 영수증 표의 품목 행이 섞이던 것 (#141) |
|
|
118
122
|
| 4.21.0 | 중앙부처 기관 서식 `--agency`(보도자료 2,670건·52개 기관 실측 단계 글꼴·크기·2단계 부호 ◦·❍·표 머리·기관 색), 보도자료 담당 표 사람별 행(`--press-people`), 폭표 없는 글꼴의 생성 폭 계산 보정 |
|
|
119
123
|
| 4.20.0 | 표기법 검수 7룰(기간 대시·요일·금액 한글·공공언어·맞춤법·2타)과 문서 직접 검수·수치 대조·단계별 서식 편차, 견본 HWPX 단계별 서식 학습(`levels`·`--levels-from`), `compare`·`patch --json`, 패치 무결성 검사, 붙여넣기 흔적 정리 |
|
|
120
124
|
| 4.19.2 | rhwp v0.8.7 파서 수정 반영 — HWP3 체크박스 □, HWP5 짝 없는 서로게이트 □, 손상 CFB 복구의 본문 경로 오인 수정, HWPX 압축 해제 상한을 엔트리 읽는 도중에 적용 |
|
|
@@ -54,17 +54,17 @@ import {
|
|
|
54
54
|
unknownFontWarnings,
|
|
55
55
|
usesGaejosikMunche,
|
|
56
56
|
validateHwpx
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-AIFZNEJ7.js";
|
|
58
58
|
import {
|
|
59
59
|
blocksToPages
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-IZHZO5E5.js";
|
|
61
61
|
import {
|
|
62
62
|
applySplices,
|
|
63
63
|
buildParagraphSplices,
|
|
64
64
|
buildRangeSplices,
|
|
65
65
|
placeSealHwpx,
|
|
66
66
|
scanSectionXml
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-DD2MPABZ.js";
|
|
68
68
|
import {
|
|
69
69
|
DEFAULT_REDACT_RULES,
|
|
70
70
|
redactMarkdown,
|
|
@@ -72,7 +72,7 @@ import {
|
|
|
72
72
|
} from "./chunk-3WSNLH4B.js";
|
|
73
73
|
import {
|
|
74
74
|
blocksToChunks
|
|
75
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-S327K362.js";
|
|
76
76
|
import {
|
|
77
77
|
SPACE_EM_FIXED,
|
|
78
78
|
SPACE_EM_FONT,
|
|
@@ -97,20 +97,20 @@ import {
|
|
|
97
97
|
renderSceneToHtml,
|
|
98
98
|
simulateWrap,
|
|
99
99
|
simulateWrapKeepWord
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-2R4EUTY2.js";
|
|
101
101
|
import "./chunk-7FCNOKOR.js";
|
|
102
|
-
import "./chunk-
|
|
102
|
+
import "./chunk-YW42IW7C.js";
|
|
103
103
|
import "./chunk-VQFA55IC.js";
|
|
104
|
-
import "./chunk-
|
|
104
|
+
import "./chunk-HMCHEPXZ.js";
|
|
105
105
|
import {
|
|
106
106
|
blocksToMarkdown,
|
|
107
107
|
flattenLayoutTables,
|
|
108
108
|
hasStructuredCellContent
|
|
109
|
-
} from "./chunk-
|
|
110
|
-
import "./chunk-
|
|
109
|
+
} from "./chunk-VVWO34BY.js";
|
|
110
|
+
import "./chunk-LW33OVQI.js";
|
|
111
111
|
import {
|
|
112
112
|
VERSION
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-Q4XAUAGE.js";
|
|
114
114
|
export {
|
|
115
115
|
AGENCY_COMMON_NAME,
|
|
116
116
|
BUILTIN_TEMPLATES,
|
|
@@ -204,4 +204,4 @@ export {
|
|
|
204
204
|
usesGaejosikMunche,
|
|
205
205
|
validateHwpx
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=-
|
|
207
|
+
//# sourceMappingURL=-HOKFROKW.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
HEADING_RATIO_H3,
|
|
10
10
|
tidyScriptTags,
|
|
11
11
|
unframeLayoutTables
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YW42IW7C.js";
|
|
13
13
|
import {
|
|
14
14
|
parsePageRange
|
|
15
15
|
} from "./chunk-VQFA55IC.js";
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
findChildByLocalName,
|
|
23
23
|
hwpFaceToCssStack,
|
|
24
24
|
parseRenderStyles
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-HMCHEPXZ.js";
|
|
26
26
|
import {
|
|
27
27
|
MAX_COLS,
|
|
28
28
|
MAX_ROWS,
|
|
@@ -33,18 +33,18 @@ import {
|
|
|
33
33
|
flattenLayoutTables,
|
|
34
34
|
mapPuaText,
|
|
35
35
|
markNonLayoutTable
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-VVWO34BY.js";
|
|
37
37
|
import {
|
|
38
38
|
loadSharp,
|
|
39
39
|
rasterizePageSvg
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-LW33OVQI.js";
|
|
41
41
|
import {
|
|
42
42
|
KordocError,
|
|
43
43
|
escapeHtml,
|
|
44
44
|
precheckZipSize,
|
|
45
45
|
sanitizeHref,
|
|
46
46
|
toArrayBuffer
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-Q4XAUAGE.js";
|
|
48
48
|
|
|
49
49
|
// src/render/svg-render.ts
|
|
50
50
|
import JSZip from "jszip";
|
|
@@ -7803,4 +7803,4 @@ export {
|
|
|
7803
7803
|
cropRect,
|
|
7804
7804
|
extractRenderedRegions
|
|
7805
7805
|
};
|
|
7806
|
-
//# sourceMappingURL=chunk-
|
|
7806
|
+
//# sourceMappingURL=chunk-2R4EUTY2.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
KordocError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Q4XAUAGE.js";
|
|
5
5
|
|
|
6
6
|
// src/hwpx/profile-io.ts
|
|
7
7
|
import { z } from "zod";
|
|
@@ -89,4 +89,4 @@ export {
|
|
|
89
89
|
formatProfileSchema,
|
|
90
90
|
parseFormatProfileJson
|
|
91
91
|
};
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-3G3LTCET.js.map
|
|
@@ -9,10 +9,10 @@ var _chunkTK3FDAEEcjs = require('./chunk-TK3FDAEE.cjs');
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkPZU22IY6cjs = require('./chunk-PZU22IY6.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkNRMHYBTCcjs = require('./chunk-NRMHYBTC.cjs');
|
|
16
16
|
|
|
17
17
|
// src/ocr/ruling-lines.ts
|
|
18
18
|
var INK_LUMA_MAX = 205;
|
|
@@ -1414,7 +1414,7 @@ var OcrEngine = class _OcrEngine {
|
|
|
1414
1414
|
]);
|
|
1415
1415
|
const sharpAny = sharpModRaw;
|
|
1416
1416
|
const sharpMod = typeof sharpAny === "function" ? sharpAny : _nullishCoalesce(sharpAny.default, () => ( sharpAny));
|
|
1417
|
-
const dir =
|
|
1417
|
+
const dir = _chunkPZU22IY6cjs.getOcrModelsDir.call(void 0, );
|
|
1418
1418
|
const sessionOpts = {
|
|
1419
1419
|
graphOptimizationLevel: "all",
|
|
1420
1420
|
executionProviders: ["cpu"],
|
|
@@ -1422,11 +1422,11 @@ var OcrEngine = class _OcrEngine {
|
|
|
1422
1422
|
// paddle2onnx 변환 잔여물 W 로그 폭주 억제
|
|
1423
1423
|
};
|
|
1424
1424
|
const [det, rec, dictYml] = await Promise.all([
|
|
1425
|
-
ortMod.InferenceSession.create(_path.join.call(void 0, dir,
|
|
1426
|
-
ortMod.InferenceSession.create(_path.join.call(void 0, dir,
|
|
1427
|
-
_promises.readFile.call(void 0, _path.join.call(void 0, dir,
|
|
1425
|
+
ortMod.InferenceSession.create(_path.join.call(void 0, dir, _chunkPZU22IY6cjs.OCR_DET_MODEL.filename), sessionOpts),
|
|
1426
|
+
ortMod.InferenceSession.create(_path.join.call(void 0, dir, _chunkPZU22IY6cjs.OCR_REC_MODEL.filename), sessionOpts),
|
|
1427
|
+
_promises.readFile.call(void 0, _path.join.call(void 0, dir, _chunkPZU22IY6cjs.OCR_REC_DICT.filename), "utf-8")
|
|
1428
1428
|
]);
|
|
1429
|
-
const dict =
|
|
1429
|
+
const dict = _chunkPZU22IY6cjs.parseCharacterDict.call(void 0, dictYml);
|
|
1430
1430
|
if (dict.length === 0) throw new Error("OCR \uC0AC\uC804 \uD30C\uC2F1 \uC2E4\uD328 \u2014 \uBAA8\uB378 \uCE90\uC2DC\uB97C \uC0AD\uC81C \uD6C4 \uC7AC\uB2E4\uC6B4\uB85C\uB4DC\uD558\uC138\uC694");
|
|
1431
1431
|
return new _OcrEngine({ det, rec, dict, ort: ortMod, sharp: sharpMod });
|
|
1432
1432
|
}
|
|
@@ -1754,7 +1754,7 @@ async function tryImport(name, loader) {
|
|
|
1754
1754
|
return await loader();
|
|
1755
1755
|
} catch (e) {
|
|
1756
1756
|
throw new Error(
|
|
1757
|
-
`\uB0B4\uC7A5 OCR \uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 optional dependency '${name}' \uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \`npm install ${name}\` \uD6C4 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.${
|
|
1757
|
+
`\uB0B4\uC7A5 OCR \uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 optional dependency '${name}' \uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \`npm install ${name}\` \uD6C4 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.${_chunkNRMHYBTCcjs.OPTIONAL_DEP_INSTALL_HINT} \uC6D0\uC778: ${e.message}`
|
|
1758
1758
|
);
|
|
1759
1759
|
}
|
|
1760
1760
|
}
|
|
@@ -1868,7 +1868,7 @@ async function runPdfOcr(buffer, targets, mode, warnings, onProgress, detectTabl
|
|
|
1868
1868
|
() => Promise.resolve().then(() => _interopRequireWildcard(require("@hyzyla/pdfium")))
|
|
1869
1869
|
);
|
|
1870
1870
|
if (mode === "builtin") {
|
|
1871
|
-
await
|
|
1871
|
+
await _chunkPZU22IY6cjs.ensureOcrModels.call(void 0, (p) => {
|
|
1872
1872
|
if (p.phase === "download" && p.downloaded === 0) {
|
|
1873
1873
|
process.stderr.write(`[kordoc-ocr] ${p.spec.name} \uB2E4\uC6B4\uB85C\uB4DC \uC911 (~${p.spec.sizeMb}MB)...
|
|
1874
1874
|
`);
|
|
@@ -2000,30 +2000,65 @@ async function closerReads(rgba, rw, rh, pdfH, hi, regions, engine) {
|
|
|
2000
2000
|
}
|
|
2001
2001
|
return out;
|
|
2002
2002
|
}
|
|
2003
|
+
function groupOcrLines(items) {
|
|
2004
|
+
const order = items.map((_, i) => i).sort((a, b) => items[a].y + items[a].h / 2 - (items[b].y + items[b].h / 2));
|
|
2005
|
+
const lines = [];
|
|
2006
|
+
for (const i of order) {
|
|
2007
|
+
const it = items[i], c = it.y + it.h / 2;
|
|
2008
|
+
const line = lines.find((l) => {
|
|
2009
|
+
const lc = l.reduce((s, j) => s + items[j].y + items[j].h / 2, 0) / l.length;
|
|
2010
|
+
const minH = Math.min(it.h, ...l.map((j) => items[j].h));
|
|
2011
|
+
return Math.abs(c - lc) <= minH / 2 && l.every((j) => {
|
|
2012
|
+
const ov = Math.min(it.x + it.w, items[j].x + items[j].w) - Math.max(it.x, items[j].x);
|
|
2013
|
+
return ov < Math.min(it.w, items[j].w) / 2;
|
|
2014
|
+
});
|
|
2015
|
+
});
|
|
2016
|
+
if (line) line.push(i);
|
|
2017
|
+
else lines.push([i]);
|
|
2018
|
+
}
|
|
2019
|
+
return lines;
|
|
2020
|
+
}
|
|
2003
2021
|
function ocrItemsToBlocks(items, pageNumber, pdfW, pdfH, scale, extraLines, detectTables = true, opList = { fnArray: [], argsArray: [] }) {
|
|
2004
|
-
const
|
|
2022
|
+
const bottoms = items.map((it) => it.y + it.h);
|
|
2023
|
+
const xs = items.map((it) => ({ x: it.x, r: it.x + it.w, space: false }));
|
|
2024
|
+
for (const line of groupOcrLines(items)) {
|
|
2025
|
+
if (line.length < 2) continue;
|
|
2026
|
+
const sorted = line.map((j) => items[j].y + items[j].h).sort((a, b) => a - b);
|
|
2027
|
+
for (const j of line) bottoms[j] = sorted[Math.floor(sorted.length / 2)];
|
|
2028
|
+
const byX = [...line].sort((a, b) => items[a].x - items[b].x);
|
|
2029
|
+
for (let k = 1; k < byX.length; k++) {
|
|
2030
|
+
const L = xs[byX[k - 1]], R = xs[byX[k]];
|
|
2031
|
+
if (R.x >= L.r) continue;
|
|
2032
|
+
const mid = (R.x + L.r) / 2, half = Math.min(items[byX[k - 1]].h, items[byX[k]].h) * 0.15;
|
|
2033
|
+
L.r = Math.max(L.x + 1, mid - half);
|
|
2034
|
+
R.x = Math.min(R.r - 1, mid + half);
|
|
2035
|
+
R.space = true;
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
const norm = items.map((it, i) => {
|
|
2005
2039
|
const h = it.h / scale;
|
|
2006
2040
|
return {
|
|
2007
2041
|
text: it.text,
|
|
2008
|
-
x: Math.round(
|
|
2042
|
+
x: Math.round(xs[i].x / scale),
|
|
2009
2043
|
// NormItem.y 는 pdfjs transform[5] = 베이스라인 (bottom-up) — 잉크 하단으로 근사
|
|
2010
|
-
y: Math.round(pdfH -
|
|
2011
|
-
w: Math.round(
|
|
2044
|
+
y: Math.round(pdfH - bottoms[i] / scale),
|
|
2045
|
+
w: Math.round((xs[i].r - xs[i].x) / scale),
|
|
2012
2046
|
h: Math.round(h),
|
|
2013
2047
|
// 박스는 잉크 외곽(engine tightBoxes) — 한글 줄 잉크 높이 ≈ 0.9em
|
|
2014
2048
|
fontSize: Math.max(1, Math.round(h / 0.9)),
|
|
2015
2049
|
fontName: "ocr",
|
|
2016
|
-
isHidden: false
|
|
2050
|
+
isHidden: false,
|
|
2051
|
+
...xs[i].space ? { hasSpaceBefore: true } : {}
|
|
2017
2052
|
};
|
|
2018
2053
|
});
|
|
2019
|
-
return
|
|
2054
|
+
return _chunkPZU22IY6cjs.extractPageBlocksWithLines.call(void 0, norm, pageNumber, opList, pdfW, pdfH, extraLines, detectTables);
|
|
2020
2055
|
}
|
|
2021
2056
|
async function tryImport2(name, loader) {
|
|
2022
2057
|
try {
|
|
2023
2058
|
return await loader();
|
|
2024
2059
|
} catch (e) {
|
|
2025
2060
|
throw new Error(
|
|
2026
|
-
`OCR \uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 optional dependency '${name}' \uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \`npm install ${name}\` \uD6C4 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.${
|
|
2061
|
+
`OCR \uC744 \uC0AC\uC6A9\uD558\uB824\uBA74 optional dependency '${name}' \uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \`npm install ${name}\` \uD6C4 \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.${_chunkNRMHYBTCcjs.OPTIONAL_DEP_INSTALL_HINT} \uC6D0\uC778: ${e.message}`
|
|
2027
2062
|
);
|
|
2028
2063
|
}
|
|
2029
2064
|
}
|
|
@@ -2061,5 +2096,6 @@ function bgraToRgba(bgra) {
|
|
|
2061
2096
|
|
|
2062
2097
|
|
|
2063
2098
|
|
|
2064
|
-
|
|
2065
|
-
|
|
2099
|
+
|
|
2100
|
+
exports.getOcrEngine = getOcrEngine; exports.detectRulingLines = detectRulingLines; exports.rulingToPdfLines = rulingToPdfLines; exports.deskewPage = deskewPage; exports.MAX_OCR_PIXELS = MAX_OCR_PIXELS; exports.runPdfOcr = runPdfOcr; exports.groupOcrLines = groupOcrLines; exports.ocrItemsToBlocks = ocrItemsToBlocks;
|
|
2101
|
+
//# sourceMappingURL=chunk-7FVTFUXA.cjs.map
|