mirror of
https://github.com/NomaDamas/k-skill.git
synced 2026-06-24 02:04:11 +00:00
The follow-up closes the last runnable-contract gaps from review by documenting the working one-shot npx form and separating Node API examples into a local project install path. The regression suite now locks both install notes so future edits do not drift back to broken command shapes. Constraint: Published kordoc CLI still requires pdfjs-dist at startup Constraint: Global NODE_PATH does not make ESM imports from kordoc resolvable in the documented examples Rejected: Keep bare `npx kordoc` examples | fails in a clean environment Rejected: Keep global-install Node API guidance | ESM import remains unresolved Confidence: high Scope-risk: narrow Reversibility: clean Directive: Keep HWP docs aligned to verified published kordoc surfaces until the package contract changes upstream Tested: node --test scripts/skill-docs.test.js Tested: npm run ci Tested: temp-dir local npm install kordoc pdfjs-dist plus markdownToHwpx -> sample.hwpx -> one-shot kordoc roundtrip smoke Not-tested: upstream unpublished kordoc features beyond the verified CLI and Node API surfaces
142 lines
4.9 KiB
Markdown
142 lines
4.9 KiB
Markdown
# HWP 문서 처리 가이드
|
|
|
|
## 이 기능으로 할 수 있는 일
|
|
|
|
- `.hwp`, `.hwpx`, `.hwpml` 문서를 Markdown으로 변환
|
|
- 문서를 JSON으로 구조화해 `blocks`, `metadata`까지 AI에 넘기기
|
|
- 폴더 단위 배치 변환
|
|
- `watch`로 폴더를 감시하며 새 문서를 계속 변환
|
|
- 두 버전 문서 비교
|
|
- HWPX 양식 필드 추출
|
|
- Markdown을 다시 HWPX로 역변환
|
|
|
|
## 먼저 필요한 것
|
|
|
|
- Node.js 18+
|
|
- CLI를 한 번만 쓸 때: `npx --yes --package kordoc --package pdfjs-dist kordoc --help`
|
|
- 반복 실행용 전역 설치: `npm install -g kordoc pdfjs-dist`
|
|
- Node API 예시를 따라갈 로컬 작업 디렉터리: `npm init -y && npm install kordoc pdfjs-dist`
|
|
- 현재 배포된 `kordoc` CLI는 시작 시 `pdfjs-dist`를 바로 불러오므로 PDF를 안 다뤄도 함께 설치해야 한다
|
|
- `import { markdownToHwpx } from "kordoc"` 같은 ESM 예시는 전역 `NODE_PATH`가 아니라 로컬 설치 기준으로 실행해야 한다
|
|
|
|
## 어떤 경로를 선택하나
|
|
|
|
이 스킬의 기본 경로는 **항상 `kordoc`** 이다.
|
|
|
|
- 문서 읽기/변환 → `kordoc`
|
|
- 구조화 JSON 추출 → `kordoc --format json`
|
|
- 연속 입력 폴더 처리 → `kordoc watch`
|
|
- 양식 필드 추출 → `parse()` + `extractFormFields()`
|
|
- 역변환 → `markdownToHwpx()`
|
|
- 문서 비교 → `compare()`
|
|
|
|
이 스킬은 단일한 `kordoc` 경로를 표준 흐름으로 유지한다.
|
|
|
|
## 기본 흐름
|
|
|
|
1. `kordoc`이 없으면 설치한다.
|
|
2. `.hwp`/`.hwpx`/`.hwpml`을 Markdown 또는 JSON으로 변환한다.
|
|
3. 표·이미지·메타데이터가 필요하면 JSON의 `blocks` / `metadata`를 확인한다.
|
|
4. 반복 입력 폴더는 `watch`, 양식 문서는 `extractFormFields`, 편집 roundtrip은 `markdownToHwpx` 경로로 이어간다.
|
|
5. 결과 파일 생성 여부와 구조를 확인한다.
|
|
|
|
## 예시
|
|
|
|
### Markdown 변환
|
|
|
|
```bash
|
|
npx --yes --package kordoc --package pdfjs-dist kordoc 보고서.hwp -o 보고서.md
|
|
```
|
|
|
|
### JSON 변환
|
|
|
|
```bash
|
|
npx --yes --package kordoc --package pdfjs-dist kordoc 검토서.hwpx --format json > 검토서.json
|
|
```
|
|
|
|
### 배치 처리
|
|
|
|
```bash
|
|
npx --yes --package kordoc --package pdfjs-dist kordoc ./문서함/* -d ./변환결과
|
|
```
|
|
|
|
### 페이지 범위 지정
|
|
|
|
```bash
|
|
npx --yes --package kordoc --package pdfjs-dist kordoc 보고서.hwp --pages 1-3
|
|
```
|
|
|
|
### 디렉터리 감시 변환
|
|
|
|
```bash
|
|
npx --yes --package kordoc --package pdfjs-dist kordoc watch ./문서함
|
|
```
|
|
|
|
### 양식 필드 추출
|
|
|
|
아래 Node API 예시는 `package.json`이 있는 로컬 작업 디렉터리에서:
|
|
|
|
```bash
|
|
npm init -y
|
|
npm install kordoc pdfjs-dist
|
|
```
|
|
|
|
이미 `package.json`이 있으면 `npm install kordoc pdfjs-dist`만 추가로 실행하면 된다.
|
|
|
|
```bash
|
|
node --input-type=module - <<'EOF'
|
|
import { parse, extractFormFields } from "kordoc";
|
|
|
|
const result = await parse("신청서.hwpx");
|
|
if (!result.success) {
|
|
console.error(result.error);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(JSON.stringify(extractFormFields(result.blocks), null, 2));
|
|
EOF
|
|
```
|
|
|
|
### Markdown → HWPX 역변환
|
|
|
|
```bash
|
|
node --input-type=module - <<'EOF'
|
|
import { markdownToHwpx } from "kordoc";
|
|
import { writeFileSync } from "node:fs";
|
|
|
|
const hwpx = await markdownToHwpx("# 제목\n\n본문\n\n| 항목 | 값 |\n| --- | --- |\n| 성명 | 홍길동 |");
|
|
writeFileSync("출력.hwpx", Buffer.from(hwpx));
|
|
EOF
|
|
```
|
|
|
|
### 문서 비교
|
|
|
|
```bash
|
|
node --input-type=module - <<'EOF'
|
|
import { compare } from "kordoc";
|
|
import { readFileSync } from "node:fs";
|
|
|
|
const before = readFileSync("이전버전.hwp");
|
|
const after = readFileSync("최신버전.hwpx");
|
|
const diff = await compare(before, after);
|
|
console.log(diff.stats);
|
|
EOF
|
|
```
|
|
|
|
## 결과 확인 포인트
|
|
|
|
- Markdown 출력: 제목/본문/표가 기대한 순서로 정리됐는지 확인한다.
|
|
- JSON 출력: `success`, `blocks`, `metadata`가 있는지 확인한다.
|
|
- 이미지/표 구조: `blocks` 안 `image`, `table` 타입이 필요한 만큼 잡혔는지 확인한다.
|
|
- 배치 처리: 입력 개수와 출력 개수가 크게 어긋나지 않는지 확인한다.
|
|
- 양식 필드 추출: `extractFormFields(result.blocks)` 결과가 비어 있지 않은지 확인한다.
|
|
- 역변환: 생성된 `.hwpx` 가 열리고 기본 서식/테이블이 유지되는지 확인한다.
|
|
- 문서 비교: `diff.stats` 의 added / removed / modified 값이 입력 변화와 맞는지 확인한다.
|
|
|
|
## 주의할 점
|
|
|
|
- 손상된 문서나 일부 특수 양식은 경고가 섞일 수 있다.
|
|
- 이미지 기반 PDF는 OCR provider가 없으면 품질이 제한될 수 있다.
|
|
- 양식 필드 추출은 템플릿 라벨 품질에 따라 일부 필드가 인식되지 않을 수 있다.
|
|
- 공문서 자동화 목적이면 Markdown만 보는 것보다 JSON `blocks`를 같이 확인하는 편이 안전하다.
|
|
- 현재 배포본 기준으로 문서화된 CLI 명령은 기본 변환과 `watch` 이며, 양식 처리와 비교는 Node API 예시를 기준으로 잡는 편이 안전하다.
|