@clazic/kordoc 2.1.5 → 2.2.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.
Files changed (34) hide show
  1. package/README.md +67 -4
  2. package/dist/chunk-JJMA5HGQ.js +9617 -0
  3. package/dist/chunk-JJMA5HGQ.js.map +1 -0
  4. package/dist/{chunk-LP7HUOZB.js → chunk-XWET7ONC.js} +2 -2
  5. package/dist/chunk-ZWE3DS7E.js +39 -0
  6. package/dist/cli.js +114 -11
  7. package/dist/cli.js.map +1 -1
  8. package/dist/index.cjs +3134 -149
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +36 -4
  11. package/dist/index.d.ts +36 -4
  12. package/dist/index.js +3158 -148
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp.js +100 -7
  15. package/dist/mcp.js.map +1 -1
  16. package/dist/{page-range-737B4EZW.js → page-range-ALIRXAL5.js} +2 -1
  17. package/dist/provider-XVKP5OGI.js +167 -0
  18. package/dist/provider-XVKP5OGI.js.map +1 -0
  19. package/dist/resolve-Y3KMGD3R.js +187 -0
  20. package/dist/resolve-Y3KMGD3R.js.map +1 -0
  21. package/dist/tesseract-provider-MZ37ZKQW.js +31 -0
  22. package/dist/tesseract-provider-MZ37ZKQW.js.map +1 -0
  23. package/dist/{utils-EHWBYPP7.js → utils-4NP2VUFW.js} +3 -2
  24. package/dist/utils-4NP2VUFW.js.map +1 -0
  25. package/dist/{watch-TNLNQF2I.js → watch-4VVWG2WC.js} +4 -3
  26. package/dist/{watch-TNLNQF2I.js.map → watch-4VVWG2WC.js.map} +1 -1
  27. package/package.json +4 -2
  28. package/dist/chunk-A7G6BYLH.js +0 -5494
  29. package/dist/chunk-A7G6BYLH.js.map +0 -1
  30. package/dist/provider-A4FHJSID.js +0 -38
  31. package/dist/provider-A4FHJSID.js.map +0 -1
  32. /package/dist/{chunk-LP7HUOZB.js.map → chunk-XWET7ONC.js.map} +0 -0
  33. /package/dist/{page-range-737B4EZW.js.map → chunk-ZWE3DS7E.js.map} +0 -0
  34. /package/dist/{utils-EHWBYPP7.js.map → page-range-ALIRXAL5.js.map} +0 -0
package/README.md CHANGED
@@ -160,6 +160,17 @@ const hwpxBuffer = await markdownToHwpx("# 제목\n\n본문 텍스트\n\n| 이
160
160
  writeFileSync("출력.hwpx", Buffer.from(hwpxBuffer))
161
161
  ```
162
162
 
163
+ ### XLSX 생성 (역변환)
164
+
165
+ ```typescript
166
+ import { markdownToXlsx } from "@clazic/kordoc"
167
+
168
+ const xlsxBuffer = await markdownToXlsx("# 보고서\n\n| 항목 | 값 |\n| --- | --- |\n| 매출 | 1억 |")
169
+ writeFileSync("출력.xlsx", Buffer.from(xlsxBuffer))
170
+ ```
171
+
172
+ 테이블은 별도 시트로, 헤딩·코드블록·인용구 스타일이 자동 적용됩니다.
173
+
163
174
  ### 페이지 범위 지정
164
175
 
165
176
  ```typescript
@@ -167,14 +178,44 @@ const result = await parse(buffer, { pages: "1-3" }) // 1~3 페이지만
167
178
  const result = await parse(buffer, { pages: [1, 5, 10] }) // 특정 페이지
168
179
  ```
169
180
 
170
- ### OCR (이미지 PDF)
181
+ ### OCR (이미지 스캔 PDF)
182
+
183
+ 이미지 기반 PDF는 자동으로 감지되며, 설치된 AI CLI를 자동 탐색하여 OCR을 수행합니다.
184
+
185
+ **CLI — 자동 탐색 (권장)**
186
+
187
+ ```bash
188
+ kordoc scan.pdf # 자동: gemini → claude → codex → ollama → tesseract 순으로 탐색
189
+ kordoc scan.pdf --ocr gemini # gemini CLI 강제 지정
190
+ kordoc scan.pdf --ocr claude # claude CLI 강제 지정
191
+ kordoc scan.pdf --ocr codex # codex CLI 강제 지정
192
+ kordoc scan.pdf --ocr ollama # Ollama REST API 사용 (기본 모델: gemma4:27b)
193
+ kordoc scan.pdf --ocr tesseract # tesseract.js 사용 (npm install tesseract.js 필요)
194
+ kordoc scan.pdf --ocr off # OCR 비활성화
195
+ ```
196
+
197
+ > 이미 구독 중인 gemini / claude / codex CLI가 있다면 API 키 설정 없이 바로 동작합니다.
198
+
199
+ **라이브러리 API — 커스텀 프로바이더**
171
200
 
172
201
  ```typescript
202
+ // 단순 텍스트 반환
173
203
  const result = await parse(buffer, {
174
204
  ocr: async (pageImage, pageNumber, mimeType) => {
175
205
  return await myOcrService.recognize(pageImage)
176
206
  }
177
207
  })
208
+
209
+ // 구조화된 Markdown 반환 (테이블/헤딩 보존)
210
+ const result = await parse(buffer, {
211
+ ocr: async (pageImage, pageNumber, mimeType) => {
212
+ const md = await myVisionLLM.extractMarkdown(pageImage)
213
+ return { markdown: md }
214
+ }
215
+ })
216
+
217
+ // 자동 탐색 활성화 (CLI 동작과 동일)
218
+ const result = await parse(buffer, { ocrMode: "auto" })
178
219
  ```
179
220
 
180
221
  ## CLI
@@ -183,11 +224,30 @@ const result = await parse(buffer, {
183
224
  # 전역 설치 (권장)
184
225
  npm install -g @clazic/kordoc
185
226
 
227
+ # 문서 → Markdown 파싱
186
228
  kordoc 사업계획서.hwpx # 터미널 출력
187
229
  kordoc 보고서.hwp -o 보고서.md # 파일 저장
188
230
  kordoc *.pdf -d ./변환결과/ # 일괄 변환
189
231
  kordoc 검토서.hwpx --format json # JSON (blocks + metadata 포함)
190
232
  kordoc 보고서.hwpx --pages 1-3 # 페이지 범위
233
+ kordoc 문서.hwpx --image-dir ./이미지 # 이미지 저장 폴더 지정
234
+
235
+ # 이미지 스캔 PDF → Markdown (자동 OCR)
236
+ kordoc scan.pdf # 자동: 설치된 AI CLI 탐색
237
+ kordoc scan.pdf --ocr gemini # gemini CLI 지정
238
+ kordoc scan.pdf --ocr claude # claude CLI 지정
239
+ kordoc scan.pdf --ocr codex # codex CLI 지정
240
+ kordoc scan.pdf --ocr ollama # Ollama (KORDOC_OLLAMA_MODEL 환경변수로 모델 지정)
241
+ kordoc scan.pdf --ocr tesseract # tesseract.js (npm install tesseract.js 필요)
242
+
243
+ # Markdown → 문서 변환
244
+ kordoc convert 보고서.md # → 보고서.hwpx (기본)
245
+ kordoc convert 보고서.md -f xlsx # → 보고서.xlsx
246
+ kordoc convert 보고서.md -o 최종보고서.hwpx # 출력 경로 지정
247
+ kordoc convert 보고서.md --image-dir ./이미지 # 이미지 폴더 지정
248
+ kordoc convert 보고서.md --template 기본.hwpx # HWPX 템플릿 적용
249
+
250
+ # 폴더 감시 모드
191
251
  kordoc watch ./수신함 -d ./변환결과 # 폴더 감시 모드
192
252
  kordoc watch ./문서 --webhook https://api/hook # 웹훅 알림
193
253
  ```
@@ -296,11 +356,12 @@ HWP 5.x를 제외한 모든 포맷 지원. 설치 없이 바로 연결 가능합
296
356
  }
297
357
  ```
298
358
 
299
- **7개 도구:**
359
+ **8개 도구:**
300
360
 
301
361
  | 도구 | 설명 |
302
362
  |------|------|
303
- | `parse_document` | HWP/HWPX/PDF/XLSX/DOCX → 마크다운 (메타데이터 포함) |
363
+ | `parse_document` | HWP/HWPX/PDF/XLSX/DOCX → 마크다운 (메타데이터·이미지 포함, `image_dir` 지원) |
364
+ | `convert_document` | Markdown → HWPX 또는 XLSX 변환 (이미지 폴더·템플릿 지원) |
304
365
  | `detect_format` | 매직 바이트로 포맷 감지 |
305
366
  | `parse_metadata` | 메타데이터만 빠르게 추출 |
306
367
  | `parse_pages` | 특정 페이지 범위만 파싱 |
@@ -328,7 +389,8 @@ HWP 5.x를 제외한 모든 포맷 지원. 설치 없이 바로 연결 가능합
328
389
  |------|------|
329
390
  | `compare(bufferA, bufferB, options?)` | IR 레벨 문서 비교 |
330
391
  | `extractFormFields(blocks)` | IRBlock[]에서 양식 필드 인식 |
331
- | `markdownToHwpx(markdown)` | Markdown → HWPX 역변환 |
392
+ | `markdownToHwpx(markdown, options?)` | Markdown → HWPX 역변환 (이미지·템플릿 지원) |
393
+ | `markdownToXlsx(markdown, options?)` | Markdown → XLSX 역변환 (테이블 별도 시트) |
332
394
  | `blocksToMarkdown(blocks)` | IRBlock[] → Markdown 문자열 |
333
395
 
334
396
  ### 타입
@@ -341,6 +403,7 @@ import type {
341
403
  DiffResult, BlockDiff, CellDiff, DiffChangeType,
342
404
  FormField, FormResult,
343
405
  OcrProvider, WatchOptions,
406
+ MarkdownToXlsxOptions,
344
407
  } from "@clazic/kordoc"
345
408
  ```
346
409