kordoc 4.7.2 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -2
- package/dist/{-CVPGGSAB.js → -URO5XBEB.js} +11 -9
- package/dist/{chunk-IMY4LQ3J.js → chunk-2ANLGAUG.js} +2 -2
- package/dist/{chunk-7CWNBDWQ.js → chunk-37SAM3LH.js} +3 -3
- package/dist/{chunk-QXC5NPO2.js → chunk-3CBHCDYD.js} +418 -80
- package/dist/chunk-3CBHCDYD.js.map +1 -0
- package/dist/{chunk-PV6WSN6E.cjs → chunk-5IRX3TQP.cjs} +3 -3
- package/dist/chunk-5IRX3TQP.cjs.map +1 -0
- package/dist/{chunk-O4VLHQVG.js → chunk-7OHDTS5Q.js} +2 -2
- package/dist/{chunk-I4TP7HYB.js → chunk-BN33O25L.js} +1 -1
- package/dist/chunk-BN33O25L.js.map +1 -0
- package/dist/{chunk-E2XTVK7H.cjs → chunk-CX2LRBC5.cjs} +11 -11
- package/dist/chunk-CX2LRBC5.cjs.map +1 -0
- package/dist/chunk-DCZVOIEO.cjs.map +1 -1
- package/dist/{chunk-Y3VDFFAW.js → chunk-E6OJKTYS.js} +2 -2
- package/dist/{chunk-IN2AOMX6.js → chunk-F7RZZI5P.js} +3 -3
- package/dist/{chunk-46VU6YXF.cjs → chunk-GGZ5PSJO.cjs} +4 -4
- package/dist/chunk-GGZ5PSJO.cjs.map +1 -0
- package/dist/chunk-GS7T56RP.cjs.map +1 -1
- package/dist/{chunk-IVSEGHI2.js → chunk-HFVMCUXF.js} +3 -3
- package/dist/{chunk-TYIFZT5H.js → chunk-HS4762CD.js} +2 -2
- package/dist/{chunk-DZBMQC2N.cjs → chunk-J7DBL77B.cjs} +2 -2
- package/dist/chunk-J7DBL77B.cjs.map +1 -0
- package/dist/{chunk-VXB52EWX.js → chunk-L2Q3NLHX.js} +2 -2
- package/dist/{chunk-URTDBXV6.cjs → chunk-L5CDTOC3.cjs} +1 -1
- package/dist/chunk-L5CDTOC3.cjs.map +1 -0
- package/dist/{chunk-PGDJUJ4L.js → chunk-NFCQ5XNT.js} +2 -2
- package/dist/{chunk-P7HPLWEP.js → chunk-OKE6G67G.js} +2 -2
- package/dist/{chunk-YU3PLOX4.cjs → chunk-OKISH2NK.cjs} +6 -6
- package/dist/chunk-OKISH2NK.cjs.map +1 -0
- package/dist/{chunk-JMWBMGNH.js → chunk-S4SMUQAT.js} +2 -2
- package/dist/{chunk-BSWJCSG7.js → chunk-TXRTH5BV.js} +2 -2
- package/dist/{chunk-FJBOVJAG.js → chunk-VPAYFTMH.js} +3 -3
- package/dist/{chunk-QKHN7LEV.js → chunk-WG473BIB.js} +2 -2
- package/dist/{chunk-VEBTOI3I.js → chunk-WXC4HKSD.js} +3 -3
- package/dist/{chunk-4VNUQYUE.js → chunk-XINP35F4.js} +1 -1
- package/dist/chunk-XINP35F4.js.map +1 -0
- package/dist/{chunk-GLZMUKYL.js → chunk-YB2TYOYY.js} +3 -3
- package/dist/{chunk-LJW5EQXS.js → chunk-ZEQPTIWN.js} +8 -3
- package/dist/chunk-ZEQPTIWN.js.map +1 -0
- package/dist/chunks-M64IY7AK.js +10 -0
- package/dist/cli.js +22 -22
- package/dist/cli.js.map +1 -1
- package/dist/{formula-7D3MLOSV.cjs → formula-3K5KC3VV.cjs} +9 -9
- package/dist/formula-3K5KC3VV.cjs.map +1 -0
- package/dist/{formula-GHGK7T3S.js → formula-7BNCJ55B.js} +3 -3
- package/dist/{formula-RTGCS55B.js → formula-YRMQ7BTI.js} +4 -4
- package/dist/{image-ocr-PRI2JKDW.cjs → image-ocr-CBMJIJTQ.cjs} +12 -12
- package/dist/image-ocr-CBMJIJTQ.cjs.map +1 -0
- package/dist/{image-ocr-2UMWFGRS.js → image-ocr-O7TKPDTY.js} +8 -8
- package/dist/{image-ocr-TQ5THN35.js → image-ocr-XRVXVYKO.js} +6 -6
- package/dist/index.cjs +896 -553
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -3
- package/dist/index.d.ts +52 -3
- package/dist/index.js +420 -77
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +19 -18
- package/dist/mcp.js.map +1 -1
- package/dist/{model-bundle-5RLZV7P2.js → model-bundle-GNDUKNME.js} +5 -5
- package/dist/{models-RSHR2BY7.js → models-TJ45RB2Z.js} +5 -5
- package/dist/page-range-P7SDW6LR.cjs.map +1 -1
- package/dist/{parser-FXEIK3VJ.js → parser-5MLJHSRX.js} +8 -8
- package/dist/{parser-QPMTNRPU.js.map → parser-5MLJHSRX.js.map} +1 -1
- package/dist/{parser-SCQ7NJUJ.cjs → parser-GIVQWVKJ.cjs} +28 -28
- package/dist/parser-GIVQWVKJ.cjs.map +1 -0
- package/dist/{parser-QPMTNRPU.js → parser-U3SMCGRK.js} +8 -8
- package/dist/{parser-FXEIK3VJ.js.map → parser-U3SMCGRK.js.map} +1 -1
- package/dist/pdf-ocr-BUBZA4EE.cjs +14 -0
- package/dist/pdf-ocr-BUBZA4EE.cjs.map +1 -0
- package/dist/pdf-ocr-HITVPJLV.js +13 -0
- package/dist/pdf-ocr-K4WOCJGJ.js +16 -0
- package/dist/{profile-io-I4UGTNP6.js → profile-io-VATWYLZX.js} +3 -3
- package/dist/{rasterize-QY3XJKCH.js → rasterize-PNRXMSL2.js} +2 -2
- package/dist/render-YY5RKZEB.js +10 -0
- package/dist/seal-5ZNJXOOQ.js +10 -0
- package/dist/{setup-T2BY3VME.js → setup-OEUDZ4BT.js} +3 -3
- package/dist/{watch-JJE2UGVK.js → watch-USNQJXQC.js} +10 -10
- package/package.json +2 -2
- package/dist/chunk-46VU6YXF.cjs.map +0 -1
- package/dist/chunk-4VNUQYUE.js.map +0 -1
- package/dist/chunk-DZBMQC2N.cjs.map +0 -1
- package/dist/chunk-E2XTVK7H.cjs.map +0 -1
- package/dist/chunk-I4TP7HYB.js.map +0 -1
- package/dist/chunk-LJW5EQXS.js.map +0 -1
- package/dist/chunk-PV6WSN6E.cjs.map +0 -1
- package/dist/chunk-QXC5NPO2.js.map +0 -1
- package/dist/chunk-URTDBXV6.cjs.map +0 -1
- package/dist/chunk-YU3PLOX4.cjs.map +0 -1
- package/dist/chunks-RNP6VLGK.js +0 -10
- package/dist/formula-7D3MLOSV.cjs.map +0 -1
- package/dist/image-ocr-PRI2JKDW.cjs.map +0 -1
- package/dist/parser-SCQ7NJUJ.cjs.map +0 -1
- package/dist/pdf-ocr-HPRM24SP.js +0 -16
- package/dist/pdf-ocr-I6DISTBR.js +0 -13
- package/dist/pdf-ocr-JNWL65YW.cjs +0 -14
- package/dist/pdf-ocr-JNWL65YW.cjs.map +0 -1
- package/dist/render-HEQX5DII.js +0 -10
- package/dist/seal-NB2YJ5F4.js +0 -10
- /package/dist/{-CVPGGSAB.js.map → -URO5XBEB.js.map} +0 -0
- /package/dist/{chunk-IMY4LQ3J.js.map → chunk-2ANLGAUG.js.map} +0 -0
- /package/dist/{chunk-7CWNBDWQ.js.map → chunk-37SAM3LH.js.map} +0 -0
- /package/dist/{chunk-O4VLHQVG.js.map → chunk-7OHDTS5Q.js.map} +0 -0
- /package/dist/{chunk-Y3VDFFAW.js.map → chunk-E6OJKTYS.js.map} +0 -0
- /package/dist/{chunk-IN2AOMX6.js.map → chunk-F7RZZI5P.js.map} +0 -0
- /package/dist/{chunk-IVSEGHI2.js.map → chunk-HFVMCUXF.js.map} +0 -0
- /package/dist/{chunk-TYIFZT5H.js.map → chunk-HS4762CD.js.map} +0 -0
- /package/dist/{chunk-VXB52EWX.js.map → chunk-L2Q3NLHX.js.map} +0 -0
- /package/dist/{chunk-PGDJUJ4L.js.map → chunk-NFCQ5XNT.js.map} +0 -0
- /package/dist/{chunk-P7HPLWEP.js.map → chunk-OKE6G67G.js.map} +0 -0
- /package/dist/{chunk-JMWBMGNH.js.map → chunk-S4SMUQAT.js.map} +0 -0
- /package/dist/{chunk-BSWJCSG7.js.map → chunk-TXRTH5BV.js.map} +0 -0
- /package/dist/{chunk-FJBOVJAG.js.map → chunk-VPAYFTMH.js.map} +0 -0
- /package/dist/{chunk-QKHN7LEV.js.map → chunk-WG473BIB.js.map} +0 -0
- /package/dist/{chunk-VEBTOI3I.js.map → chunk-WXC4HKSD.js.map} +0 -0
- /package/dist/{chunk-GLZMUKYL.js.map → chunk-YB2TYOYY.js.map} +0 -0
- /package/dist/{chunks-RNP6VLGK.js.map → chunks-M64IY7AK.js.map} +0 -0
- /package/dist/{formula-GHGK7T3S.js.map → formula-7BNCJ55B.js.map} +0 -0
- /package/dist/{formula-RTGCS55B.js.map → formula-YRMQ7BTI.js.map} +0 -0
- /package/dist/{image-ocr-2UMWFGRS.js.map → image-ocr-O7TKPDTY.js.map} +0 -0
- /package/dist/{image-ocr-TQ5THN35.js.map → image-ocr-XRVXVYKO.js.map} +0 -0
- /package/dist/{model-bundle-5RLZV7P2.js.map → model-bundle-GNDUKNME.js.map} +0 -0
- /package/dist/{models-RSHR2BY7.js.map → models-TJ45RB2Z.js.map} +0 -0
- /package/dist/{pdf-ocr-HPRM24SP.js.map → pdf-ocr-HITVPJLV.js.map} +0 -0
- /package/dist/{pdf-ocr-I6DISTBR.js.map → pdf-ocr-K4WOCJGJ.js.map} +0 -0
- /package/dist/{profile-io-I4UGTNP6.js.map → profile-io-VATWYLZX.js.map} +0 -0
- /package/dist/{rasterize-QY3XJKCH.js.map → rasterize-PNRXMSL2.js.map} +0 -0
- /package/dist/{render-HEQX5DII.js.map → render-YY5RKZEB.js.map} +0 -0
- /package/dist/{seal-NB2YJ5F4.js.map → seal-5ZNJXOOQ.js.map} +0 -0
- /package/dist/{setup-T2BY3VME.js.map → setup-OEUDZ4BT.js.map} +0 -0
- /package/dist/{watch-JJE2UGVK.js.map → watch-USNQJXQC.js.map} +0 -0
package/README.md
CHANGED
|
@@ -86,6 +86,28 @@ MCP 등록 대신 스킬(SKILL.md) 형태로 쓰려면:
|
|
|
86
86
|
|
|
87
87
|
---
|
|
88
88
|
|
|
89
|
+
## v4.8.0 변경사항
|
|
90
|
+
|
|
91
|
+
- **📑 `--format json` 에 페이지별 마크다운 (#68)**: JSON 결과에 `pages: [{ pageNumber, markdown }]` 이 기본으로 들어갑니다. v4.7.3 의 실제 페이지 경계(`pageMode: "layout"`)를 그대로 써서, RAG 인용 각주나 뷰어 페이지 동기화에 쪽 단위 본문을 바로 쓸 수 있습니다. 문서를 다시 파싱하지 않고 이미 만든 블록의 `pageNumber` 로 가르기 때문에 비용은 파싱 시간의 1% 미만입니다(24쪽 PDF 기준 parse 399ms / pages 2.5ms). `--pages 3-5` 를 쓰면 `pages` 에도 3~5쪽만 담기고, 페이지 번호를 매기지 않는 포맷(DOCX 등)에서는 `pages` 자체가 없습니다. 라이브러리에서는 `blocksToPages(blocks)` 로도 같은 값을 얻습니다. (@sorbetsharkroundhand 제안)
|
|
92
|
+
|
|
93
|
+
```jsonc
|
|
94
|
+
{
|
|
95
|
+
"markdown": "# 전체 문서…",
|
|
96
|
+
"pages": [
|
|
97
|
+
{ "pageNumber": 1, "markdown": "# 1페이지…" },
|
|
98
|
+
{ "pageNumber": 2, "markdown": "2페이지…" }
|
|
99
|
+
],
|
|
100
|
+
"blocks": [/* … */],
|
|
101
|
+
"metadata": { "pageCount": 2, "pageMode": "layout" }
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
여러 페이지에 걸친 표는 현 IR 구조상 시작 페이지의 한 블록이라, 표가 이어지는 중간 페이지의 `markdown` 은 빈 문자열입니다(항목 자체는 남깁니다 — 배열 길이 = 쪽수).
|
|
106
|
+
|
|
107
|
+
## v4.7.3 변경사항
|
|
108
|
+
|
|
109
|
+
- **📄 HWP/HWPX 실제 페이지 경계 복원 (#66)**: 한컴 저장본의 조판 캐시(HWPX `linesegarray` / HWP5 `PARA_LINE_SEG`)로 실제 페이지를 복원합니다 — `pageCount`·블록별 `pageNumber` 가 섹션 근사가 아닌 **실제 쪽 번호**가 되고, `parse(buffer, { pages: "3-5" })` 가 실제 3~5쪽을 반환합니다. 신호 4종(vertpos 역행·명시 쪽나눔·분할 표의 셀 흐름 리셋·분할 직후 이중 카운트 억제)을 결합해 실코퍼스 hwp↔hwpx↔pdf 쌍 대조에서 페이지 수 전수 일치. 조판 캐시가 없는 생성 파일은 종전대로 섹션 근사로 동작하며, 새 메타데이터 **`pageMode: "layout" | "section"`** 으로 구분됩니다(근사 상태에서 `pages` 필터 사용 시 `PAGE_BOUNDARY_APPROXIMATE` 경고). RAG 페이지 인용·뷰어 동기화용. (@sorbetsharkroundhand 제안)
|
|
110
|
+
|
|
89
111
|
## v4.7.2 변경사항
|
|
90
112
|
|
|
91
113
|
- **🔒 폐쇄망(내부망) 배포 대응**: `KORDOC_OFFLINE=1` 로 모든 아웃바운드 통신(OCR 모델 다운로드·watch webhook)을 요청 발신 전에 차단하고, `KORDOC_ROOT=<디렉토리>` 로 MCP 서버의 파일 읽기·쓰기를 해당 디렉토리 하위로 제한합니다(둘 다 opt-in — 미설정 시 기존 동작 그대로). 인터넷 없는 망에 반입하는 오프라인 설치 번들은 `node scripts/pack-offline.mjs [--with-ocr] [--with-models]` 로 만들고, OCR 모델은 `kordoc models --export/--import` 로 SHA-256 검증과 함께 옮깁니다. 절차와 보안성 검토용 근거는 [docs/offline-deployment.md](docs/offline-deployment.md) 참조.
|
|
@@ -572,7 +594,7 @@ MCP 등록 대신 스킬(SKILL.md) 형태로 쓰려면:
|
|
|
572
594
|
- **문서 비교 (Diff)** — IR 레벨 블록 비교로 신구대조표 생성. HWP↔HWPX 크로스 포맷 지원.
|
|
573
595
|
- **양식 인식** — 공문서 테이블에서 label-value 쌍 자동 추출. 성명, 소속, 전화번호 등.
|
|
574
596
|
- **구조화 파싱** — `IRBlock[]`과 `DocumentMetadata`에 직접 접근. 마크다운 넘어선 데이터 활용.
|
|
575
|
-
- **페이지 범위** — `parse(buffer, { pages: "1-3" })` — 필요한 페이지만 빠르게.
|
|
597
|
+
- **페이지 범위** — `parse(buffer, { pages: "1-3" })` — 필요한 페이지만 빠르게. 한컴 저장본은 실제 쪽 번호 기준(`metadata.pageMode: "layout"`), 조판 캐시 없는 생성 파일은 섹션 근사(`"section"`).
|
|
576
598
|
- **Markdown → HWPX** — 역변환. AI가 생성한 내용을 바로 공문서로.
|
|
577
599
|
- **OCR** — 스캔/이미지 PDF 텍스트 추출. 내장 엔진(`ocr: true`, PP-OCRv5 korean) 또는 외부 프로바이더(Tesseract, Claude Vision 등).
|
|
578
600
|
- **Watch 모드** — `kordoc watch ./수신함 -d ./변환결과 --webhook https://...`
|
|
@@ -796,7 +818,7 @@ for (const p of r.pageQuality ?? []) {
|
|
|
796
818
|
npx kordoc 사업계획서.hwpx # 터미널 출력
|
|
797
819
|
npx kordoc 보고서.hwp -o 보고서.md # 파일 저장
|
|
798
820
|
npx kordoc *.pdf -d ./변환결과/ # 일괄 변환
|
|
799
|
-
npx kordoc 검토서.hwpx --format json # JSON (blocks + metadata 포함)
|
|
821
|
+
npx kordoc 검토서.hwpx --format json # JSON (blocks + pages + metadata 포함)
|
|
800
822
|
npx kordoc 보고서.hwpx --pages 1-3 # 페이지 범위
|
|
801
823
|
npx kordoc fill 신청서.hwpx -f '성명=홍길동,주소=서울' -o 결과.hwpx # 양식 채우기
|
|
802
824
|
npx kordoc fill 신청서.hwpx -j values.json -o 결과.hwpx # JSON 파일로 채우기
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
HwpxSession,
|
|
5
5
|
PRESET_ALIAS,
|
|
6
6
|
ValueCursor,
|
|
7
|
+
blocksToPages,
|
|
7
8
|
blocksToPdf,
|
|
8
9
|
compare,
|
|
9
10
|
detectFormat,
|
|
@@ -52,9 +53,9 @@ import {
|
|
|
52
53
|
resolveBuiltinTemplate,
|
|
53
54
|
unknownFontWarnings,
|
|
54
55
|
validateHwpx
|
|
55
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-3CBHCDYD.js";
|
|
56
57
|
import "./chunk-7FCNOKOR.js";
|
|
57
|
-
import "./chunk-
|
|
58
|
+
import "./chunk-XINP35F4.js";
|
|
58
59
|
import "./chunk-MOL7MDBG.js";
|
|
59
60
|
import {
|
|
60
61
|
applySplices,
|
|
@@ -62,7 +63,7 @@ import {
|
|
|
62
63
|
buildRangeSplices,
|
|
63
64
|
placeSealHwpx,
|
|
64
65
|
scanSectionXml
|
|
65
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-F7RZZI5P.js";
|
|
66
67
|
import {
|
|
67
68
|
DEFAULT_REDACT_RULES,
|
|
68
69
|
redactMarkdown,
|
|
@@ -70,10 +71,10 @@ import {
|
|
|
70
71
|
} from "./chunk-DZIXKL7E.js";
|
|
71
72
|
import {
|
|
72
73
|
blocksToChunks
|
|
73
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-TXRTH5BV.js";
|
|
74
75
|
import {
|
|
75
76
|
blocksToMarkdown
|
|
76
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-OKE6G67G.js";
|
|
77
78
|
import {
|
|
78
79
|
SPACE_EM_FIXED,
|
|
79
80
|
SPACE_EM_FONT,
|
|
@@ -83,11 +84,11 @@ import {
|
|
|
83
84
|
renderHwpxToSvg,
|
|
84
85
|
simulateWrap,
|
|
85
86
|
simulateWrapKeepWord
|
|
86
|
-
} from "./chunk-
|
|
87
|
-
import "./chunk-
|
|
87
|
+
} from "./chunk-VPAYFTMH.js";
|
|
88
|
+
import "./chunk-ZEQPTIWN.js";
|
|
88
89
|
import {
|
|
89
90
|
VERSION
|
|
90
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-L2Q3NLHX.js";
|
|
91
92
|
export {
|
|
92
93
|
BUILTIN_TEMPLATES,
|
|
93
94
|
DEFAULT_REDACT_RULES,
|
|
@@ -100,6 +101,7 @@ export {
|
|
|
100
101
|
applySplices,
|
|
101
102
|
blocksToChunks,
|
|
102
103
|
blocksToMarkdown,
|
|
104
|
+
blocksToPages,
|
|
103
105
|
blocksToPdf,
|
|
104
106
|
buildParagraphSplices,
|
|
105
107
|
buildRangeSplices,
|
|
@@ -161,4 +163,4 @@ export {
|
|
|
161
163
|
unknownFontWarnings,
|
|
162
164
|
validateHwpx
|
|
163
165
|
};
|
|
164
|
-
//# sourceMappingURL=-
|
|
166
|
+
//# sourceMappingURL=-URO5XBEB.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ensureModelsIn,
|
|
4
4
|
getModelStatusIn,
|
|
5
5
|
getModelsDir
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WG473BIB.js";
|
|
7
7
|
|
|
8
8
|
// src/ocr/models.ts
|
|
9
9
|
import { join } from "path";
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
parseCharacterDict,
|
|
81
81
|
ocrModelPath
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-2ANLGAUG.js.map
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
HEADING_RATIO_H1,
|
|
3
3
|
HEADING_RATIO_H2,
|
|
4
4
|
HEADING_RATIO_H3
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BN33O25L.js";
|
|
6
6
|
import {
|
|
7
7
|
safeMax,
|
|
8
8
|
safeMin
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S4SMUQAT.js";
|
|
10
10
|
|
|
11
11
|
// src/pdf/image-regions.ts
|
|
12
12
|
import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
@@ -3686,4 +3686,4 @@ export {
|
|
|
3686
3686
|
extractPageBlocksWithLines,
|
|
3687
3687
|
mergeCrossPageTables
|
|
3688
3688
|
};
|
|
3689
|
-
//# sourceMappingURL=chunk-
|
|
3689
|
+
//# sourceMappingURL=chunk-37SAM3LH.js.map
|