From 3940b2f32930e106a912830892dc3097be204c0f Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Tue, 21 Jul 2026 04:00:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?docs:=20minimal=20README=20=E2=80=94=20one?= =?UTF-8?q?=20proof=20line,=20one=20code=20sample,=20links=20as=20the=20so?= =?UTF-8?q?urce=20of=20detail?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- README.md | 281 +++++-------------------------- README_EN.md | 297 +++++---------------------------- docs/images/redline-hancom.png | Bin 151292 -> 0 bytes 3 files changed, 86 insertions(+), 492 deletions(-) delete mode 100644 docs/images/redline-hancom.png diff --git a/README.md b/README.md index ce3a37b..9072a75 100644 --- a/README.md +++ b/README.md @@ -1,236 +1,63 @@

python-hwpx

- 한컴 없이 HWPX를 안전하게 자동화하는 Python 계층 — 최소 범위 편집, 검증된 저작, 모든 쓰기에 영수증. + 한컴 없이 HWPX를 읽고, 고치고, 만드는 순수 파이썬 라이브러리

PyPI Python - License - Docs Tests Hancom open + License

한국어 | English

---- - -> **python-hwpx는 한컴 없이 HWPX를 안전하게 자동화하는 Python 계층입니다.** 기존 -> 문서는 최소 범위만 수정하고, 새 문서는 실제 한컴 수용이 검증된 형태로 생성하며, -> 모든 쓰기에 변경·보존·검증 영수증을 남기고, 완전한 해석과 렌더링은 전문 백엔드에 -> 위임할 수 있습니다. - -- **최소 범위 편집** — 미수정 part는 저장 시 바이트 그대로 유지됩니다(patch 경로 - 바이트 보존 497/497, 동결 코퍼스 v2 · 2026-07-19). -- **검증된 저작** — 밑바닥 생성도 실제 한컴이 받아들이는 형태로 냅니다(산출물 한컴 - 오픈 476/476 all-pass, 실저작 품질 게이트 58/58). -- **모든 쓰기에 영수증** — 대표 저장 경로는 [Safe Write Contract](docs/safe-write-contract.md)의 - `MutationReport`(`hwpx.mutation-report/v1`)로 실제 쓰기 모드·보존 등급·검증 결과를 - **측정해** 반환합니다. +기존 문서는 손댄 곳만 고치고(미수정 영역은 바이트 그대로), 새 문서는 실제 +한컴오피스가 받아들이는 형태로 만듭니다. 산출물은 실제 한컴으로 전수 측정해 +그대로 공개합니다 — [실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html). ---- - -## 🧩 HWPX Stack (3종) - -| 계층 | 레포 | 역할 | +| | 레포 | 역할 | |---|---|---| -| 📦 라이브러리 | **[`python-hwpx`](https://github.com/airmang/python-hwpx)** | 순수 파이썬 HWPX 파싱·편집·생성 코어 | -| 🔌 MCP 서버 | [`hwpx-mcp-server`](https://github.com/airmang/hwpx-mcp-server) | MCP 클라이언트(Claude Desktop, VS Code 등)에서 HWPX 조작 | -| 🎯 에이전트 스킬 | [`hwpx-plugin`](https://github.com/airmang/hwpx-plugins) | 에이전트가 HWPX를 바로 쓰게 해주는 first-party 플러그인·스킬 번들 | - -`hwpx-mcp-server`와 `hwpx-plugin`은 같은 프로젝트가 직접 유지보수하는 first-party 연동 -구성요소입니다(유지보수 관계를 뜻하며, 한컴 등 외부 기관의 인증을 뜻하지 않습니다). - -현재 PyPI 공개 릴리스는 `python-hwpx 3.8.0`입니다. 일반 -`pip install python-hwpx`로 이 릴리스를 설치할 수 있습니다. -현재 패키지 분류는 `Development Status :: 3 - Alpha`입니다. 이 분류는 API와 제품의 -성숙도를 나타내며, 공개 버전이나 플러그인의 최소 호환 버전을 대신하지 않습니다. - ---- - -## 실측으로 말합니다 — Published Corpus - -이 스택의 산출물은 주장 대신 **실제 한컴오피스 전수 측정**으로 검증됩니다 -(동결 코퍼스 v2, N=497 산출물, 2026-07-19, 실한컴 12.0.0.3288 COM/GUI 오라클; -상세·주의사항은 -[실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html)): - -- **한컴 오픈 수용률 476/476 all-pass** (동결 코퍼스 v2 · 2026-07-19 · 실한컴 COM - `Open()` 판정 · rule-of-three 하한 99.37%) · 파싱 96.2%(458/476) -- **미수정 영역 바이트 보존 497/497** (patch 경로 한정, zip-part diff · 오라클 불요) - · **개인정보 0-leak** (35문서/합성 140값) -- 렌더 검증 416/476 (실한컴 `SaveAs("PDF")`) + 정직 버킷 43건(변경추적 문서의 PDF - export는 한컴 자체가 거부 — 실측 한계로 발행) + 미검증 17건 -- wild 공개 양식 채움은 구조결함 픽스 후 **무음 서식파괴 16.7%**(판정 66조합, 못 담는 타깃은 typed 거부 35건·산출분 pass 17/28) — **낮은 숫자도 그대로 발행**하고 잔여(페이지 리플·표 shape)를 명명합니다 - -

- python-hwpx가 남긴 변경추적과 AI 에이전트 메모가 실제 한/글에서 열린 화면 -

-

python-hwpx로 작성한 변경추적(취소선·삽입)과 AI 에이전트 메모 — 실제 한/글에서 연 화면입니다.

- -> 이 숫자들은 *생성물 수용률* 축입니다(우리가 만든 파일을 실제 한컴이 받아들이는가). -> 문서 *파싱 recall*과는 다른 축이므로 파서 프로젝트 수치와 병치 비교하지 마세요. +| 📦 | **`python-hwpx`** | 순수 파이썬 HWPX 코어 (이 레포) | +| 🔌 | [`hwpx-mcp-server`](https://github.com/airmang/hwpx-mcp-server) | MCP 클라이언트(Claude Desktop 등)에서 HWPX 조작 | +| 🎯 | [`hwpx-plugin`](https://github.com/airmang/hwpx-plugins) | 에이전트용 플러그인·스킬 번들 | ---- - -## 왜 python-hwpx인가 - -- **코어 편집에 한컴오피스 설치 불필요** — HWPX는 ZIP+XML(OWPML/OPC) 구조라, 순수 파이썬으로 Windows·macOS·Linux·CI 어디서나 읽고 씁니다. -- **읽기부터 생성까지 한 코어** — 텍스트/서식 추출, 문단·표·양식 편집, 새 문서 생성, XSD 스키마 검증을 하나의 API로 처리합니다. -- **에이전트·자동화 친화** — 같은 프로젝트가 유지보수하는 `hwpx-mcp-server`와 `hwpx-plugin`이 코어에 연결됩니다. - -문서 파싱·편집·생성은 순수 Python으로 수행할 수 있습니다. 다만 페이지 나눔, 표 넘침, -글꼴 대체 등 최종 시각 품질을 확언하려면 필요에 따라 실제 한컴 렌더 오라클을 별도로 사용합니다. - -## 빠른 시작 +## 시작하기 ```bash -pip install python-hwpx # Python 3.10+ · lxml ≥ 4.9 +pip install python-hwpx # Python 3.10+ ``` ```python from hwpx import HwpxDocument -# 기존 문서 열기 → 편집 → 저장 doc = HwpxDocument.open("보고서.hwpx") doc.add_paragraph("자동화로 추가한 문단입니다.") doc.save_to_path("보고서-수정.hwpx") - -# 새 문서 만들기 -new = HwpxDocument.new() -new.add_paragraph("python-hwpx로 만든 새 문서") -new.save_to_path("새문서.hwpx") ``` -> 💡 컨텍스트 매니저도 지원합니다 — `with` 블록을 벗어나면 리소스가 자동 정리됩니다: -> ```python -> with HwpxDocument.open("보고서.hwpx") as doc: -> doc.add_paragraph("자동으로 리소스가 정리됩니다.") -> doc.save_to_path("결과물.hwpx") -> ``` - -`open`/`new` → `edit`/`extract` → `save_to_path` 흐름만 잡으면 나머지는 필요할 때 확장하면 됩니다. - ## 무엇을 하나 -### 🔍 읽기 · 추출 -- 텍스트/HTML/Markdown 내보내기 — `export_text()` · `export_html()` · `export_markdown()` -- **풍부한 Markdown** — `export_rich_markdown()`은 인라인 서식(`**굵게**`·`*기울임*`·`~~취소선~~`), 중첩 표(colspan/rowspan 안전), 도형 텍스트, 이미지, 각주/미주, 하이퍼링크, 제목(`#`/`##`) 자동 감지까지 보존 -- **문서 ingest 게이트웨이** — `hwpx.ingest.DocumentIngestor`가 HWPX를 감지해 rich Markdown과 섹션/표 메타데이터로 정규화 -- `TextExtractor` / `ObjectFinder` — 섹션·문단 순회, 태그·속성·XPath로 객체 탐색 (`hp:tab`은 `\t`로 보존, roundtrip 안전) +- **읽기·추출** — 텍스트/HTML/rich Markdown 내보내기(서식·중첩 표·각주 보존), XPath 객체 탐색 +- **편집** — 문단·표·이미지·머리글/바닥글·메모·각주, 줄간격·여백·쪽번호 등 서식 +- **양식 채우기** — 라벨·경로 기반 셀 채움, 바이트 보존 구조 편집(행·열·오토핏·shrink-to-fit) +- **생성** — 조립형 builder, 공문 lint·결재란, 사진대지·명패·조직도, mail merge, 신구대조표 +- **변경추적·목차** — redline 저작, 네이티브 목차·상호참조 +- **검증·안전** — XSD·패키지 검증 CLI, 열림 안전 게이트, 모든 쓰기에 영수증(`MutationReport`) -```python -doc = HwpxDocument.open("보고서.hwpx") -md = doc.export_rich_markdown( - image_dir="out/images", # BinData 이미지를 디스크에 추출 - image_ref_prefix="images/", # 마크다운 내 ![](images/...) 경로 접두 - detect_headings=True, # Ⅰ./1. 패턴 기반 #/## 자동 -) -``` +자세한 내용: [사용 가이드](docs/usage.md) · [API 레퍼런스](https://airmang.github.io/python-hwpx/) · [예제](docs/examples.md) -### ✏️ 편집 -- 문단 추가/삭제/서식, Run 단위 볼드·이탤릭·밑줄·색상 -- 섹션 추가/삭제(`add_section(after=)`·`remove_section()`, manifest 자동 관리) -- 표 생성·셀 텍스트·병합/분할·중첩 테이블, 이미지 임베드, 머리글/바닥글, 메모(앵커 기반), 각주/미주, 북마크/하이퍼링크, 다단 편집 -- **기존 문서 서식 편집** — 정렬·줄간격·들여쓰기·문단 간격, 용지·여백·방향, 쪽번호, 불릿/번호 -- **스타일 기반 치환** — 색상·밑줄·`charPrIDRef`로 Run을 필터링해 선택 교체(`replace_text_in_runs`·`find_runs_by_style`) +## 신뢰의 근거 -```python -# 빨간색 텍스트만 찾아서 치환 -doc.replace_text_in_runs("임시", "확정", text_color="#FF0000") -``` +- [안전한 쓰기 계약](docs/safe-write-contract.md) — 보존 등급을 쓰기 전에 판정하고, 실제 변경을 측정한 영수증을 반환합니다(fail-closed) +- [지원 매트릭스](docs/support-matrix.md) — 기능별 실제 지원 등급, 안 되는 것도 등급으로 명시 +- [실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html) — 실한컴 전수 측정 수치와 주의사항, 낮은 숫자도 그대로 발행 -### 🖊️ 양식 채우기 (byte-preserving) -- 누름틀(클릭히어) 필드 조회·서식 보존 채움, 라벨 기반 셀 탐색(`find_cell_by_label`)·경로 채우기(`fill_by_path`) -- **바이트 보존 구조 편집** — 셀 채우기 / 행·열·표 삭제·삽입 / 열 너비 오토핏 / 폰트 shrink-to-fit 을 문서 재조립 없이 수행해 양식 서식을 그대로 보존. 미수정 영역은 `hwpx.patch`가 section XML 바이트를 splice해 손대지 않음 - -```python -doc = HwpxDocument.open("신청서.hwpx") -result = doc.fill_by_path({ - "성명 > right": "홍길동", - "소속 > right": "플랫폼팀", -}) -doc.save_to_path("신청서-작성완료.hwpx") -print(result["applied_count"], result["failed_count"]) -``` +현재 개발 상태는 Alpha입니다 — API는 바뀔 수 있습니다. -### 🏗️ 생성 · 공문서 도구 -- `hwpx.builder` — Section/Heading/Table/Image/Header 조립형 생성 + 하드게이트 저장 리포트 -- 공문서 도구 — `official_lint`(항목기호 위계·"끝." 표시·붙임·날짜 lint), 결재란 프리셋 -- `advanced_generators` — 사진대지(image_grid)·회의 명패·표 기반 조직도 -- `mail_merge` — 템플릿+데이터 N부 대량 생성, 표 합계·평균 계산 -- `doc_diff` — 문단 LCS diff·신구대조표·참조 정합 lint -- `style_profile` — 참조 문서 프로파일 추출·적용, 템플릿 레지스트리 - -### ✅ 검증 · 안전 · 저수준 -- XSD 스키마 + 패키지 구조 검증 — CLI `hwpx-validate` · `hwpx-validate-package`, `hwpx-analyze-template` -- `validate_editor_open_safety` — 저장/팩/리페어/빌더 출력 게이트, `openSafety` 증거 반환 -- `hwpx.tools.fuzz`(시드 결정적 시나리오·3중 오라클) · `hwpx.tools.layout_preview`(페이지 박스 근사 HTML/PNG 자기검증) · `opc.security`(XML entity·ZIP 압축 폭탄 가드) -- `hwpx.oxml` 데이터클래스로 OWPML 스키마 ↔ Python 객체 직접 조작, HWPML 2016→2011 네임스페이스 자동 정규화 - -```bash -hwpx-validate-package 보고서.hwpx -hwpx-analyze-template 보고서.hwpx -``` - -> 전체 기능·클래스·메서드 목록은 [사용 가이드](docs/usage.md)와 [API 레퍼런스](https://airmang.github.io/python-hwpx/api_reference.html)를 참고하세요. - -## 안전한 쓰기 계약 (Safe Write Contract) - -대표 저장 경로(`save_to_path` · `save_to_stream` · `to_bytes`)는 **요청한 보존 등급을 -쓰기 전에 판정하고, 실제로 무엇을 바꿨는지 측정한 영수증**을 돌려줍니다. - -```python -from hwpx.mutation_report import PreservationDowngradeError - -# 영수증과 함께 저장 — 달성 가능한 가장 강한 보존 등급 자동 선택(mode="auto" 기본) -report = doc.save_to_path("결과.hwpx", return_report=True) -print(report.actual_mode) # "patch" | "rebuild" -print(report.preservation.untouched_part_payloads.to_dict()) # {"verified": 17, "changed": 0} - -# patch 등급 강제 — 미달이면 아무것도 쓰지 않고 예외(fail-closed) -try: - doc.save_to_path("결과.hwpx", mode="patch", fallback="error") -except PreservationDowngradeError as exc: - print(exc.offending_parts, exc.suggestion) -``` - -- `mode="patch" | "rebuild" | "auto"`(기본 `auto`) · `fallback="error" | "rebuild"`(기본 `error`) -- `mode="patch"` + `fallback="error"`에서 미수정 part의 바이트 동일성을 지킬 수 없으면 - **아무것도 쓰지 않고** `PreservationDowngradeError`를 던집니다(무음 rebuild 없음). -- `MutationReport`는 `requestedMode`/`actualMode`/`fallbackUsed`, 변경 part와 좌표 명시 - 범위, 보존 3층(part 페이로드·ZIP 레코드·전체 패키지), 검증 3항목(`passed`/`failed`/`not_performed`)을 - **측정해** 반환합니다. - -> 파라미터 전체와 `MutationReport` 스키마는 [안전한 쓰기 계약 문서](docs/safe-write-contract.md)를 참고하세요. - -## 지원 매트릭스 - -능력 영역별 실제 등급입니다(동결 코퍼스 v2 · 2026-07-19 · 실한컴 12.0.0.3288 오라클). -등급 어휘: **Parse / Preserve / Edit / Create / Render-verified / -Unsupported-but-preserved / Unsupported-and-rejected**. - -| 능력 영역 | 상태 | 증거 | -|---|---|---| -| 문단·표 저작/편집 | Parse·Preserve·Edit·Create·Render-verified | 오픈 476/476 · 실저작 게이트 58/58 · 렌더 416 | -| 표 구조 변경(행·열·표, 오토핏) | Preserve·Edit | `hwpx.table_patch` · 바이트 보존 497/497 | -| 양식 채움(byte-splice) | Preserve·Edit | `hwpx.patch`·`table_patch`·`body_patch` · 보존 497/497 (wild 무음 서식파괴 16.7%·typed 거부 35/66, 잔여 명명) | -| 그림 삽입/치환 | Edit·Create | `add_picture`·`replace_picture` (복잡 개체는 한컴 확인 권장) | -| 차트 | Unsupported-but-preserved | 생성 API 없음 · 기존 차트 part는 patch 보존 | -| 수식 | Parse·Unsupported-but-preserved | 저작 API 없음 · 기존 수식 파싱·patch 보존 | -| 변경추적(redline) | Edit·Create | `add_tracked_*` · 실한컴 `IsTrackChange=1` (한컴이 PDF export 거부 → `render_unavailable` 정직 집계) | -| 메모(코멘트) | Edit·Create·Render-verified | `add_memo*` · 실 Windows 한컴 검증 | -| 각주/미주 | Edit·Create | `add_footnote`·`add_endnote` (렌더 독립 게이트 미측정) | -| 네이티브 목차/상호참조 | Create·Render-verified | `add_native_toc`·`toc_verify` · 구조 15/15 · 페이지 정합 5/5 | -| 암호화 HWPX | Unsupported-and-rejected | 복호화 없음 · 암호화 part는 파싱 단계 예외로 거부 | -| HWP 5.x 바이너리 | Unsupported-and-rejected | ZIP 아님 → 열기 시 `BadZipFile` (HWPX로 변환 후 사용) | -| 누름틀(form field) 생성 | Parse·Edit | 기존 필드 조회·서식보존 채움 · **신규 누름틀 생성 도구는 미제공** | - -> 각 등급의 판정 근거와 상세 증거 포인터는 [지원 매트릭스 문서](docs/support-matrix.md)를 참고하세요. - -## 대항 라이브러리 비교 +## 비교 | | python-hwpx | pyhwpx | pyhwp | |---|---|---|---| @@ -238,58 +65,32 @@ Unsupported-but-preserved / Unsupported-and-rejected**. | **한/글 설치** | 불필요 | 필요 (Windows COM) | 불필요 | | **크로스 플랫폼** | ✅ Linux / macOS / Windows / CI | ❌ Windows 전용 | ✅ | | **편집/생성 API** | ✅ | ✅ (COM) | ❌ 대부분 읽기 | -| **스키마 검증** | ✅ | ❌ | ❌ | -| **AI 에이전트 연동 (MCP)** | ✅ `hwpx-mcp-server` | ❌ | ❌ | +| **AI 에이전트 연동 (MCP)** | ✅ | ❌ | ❌ | -> HWP(v5 바이너리) 파일은 지원하지 않습니다. 한컴오피스에서 HWPX로 변환 후 사용하세요. +> HWP(v5 바이너리)는 지원하지 않습니다. 한컴오피스에서 HWPX로 변환 후 사용하세요. ## 알려진 제약 -- `add_shape()` / `add_control()`은 한/글이 요구하는 모든 하위 요소를 생성하지 않습니다. 복잡한 개체 추가 시 한/글에서 열어 검증하세요. -- 이미지 바이너리 임베드는 지원하지만 `` 요소의 완전 자동 생성은 제공하지 않습니다. -- 암호화된 HWPX 파일의 암복호화는 지원하지 않습니다. - -## 더 보기 - -- **[🚀 빠른 시작](docs/quickstart.md)** · **[📚 사용 가이드](docs/usage.md)** — 첫 파일 열기부터 문단·표·메모·섹션 편집, 텍스트 추출·검증까지 -- **[💡 예제 모음](docs/examples.md)** · [`examples/`](examples/) — `build_release_checklist.py`(메모·스타일 편집 HWPX 생성), `extract_text.py`(CLI 텍스트 추출), `find_objects.py`(OWPML 노드 추적) 등 -- **[📐 스키마 개요](docs/schema-overview.md)** · **[🔧 설치 검증](docs/installation.md)** -- **[🔬 HWPX 내부 실전 가이드](docs/internals/)** — 실제 한/글 동작에서 확인된 HWPUNIT·조판 캐시·목차 필드·OPC 재패킹·메모·오라클 한계 -- **[📖 전체 문서 (Sphinx)](https://airmang.github.io/python-hwpx/)** — API 레퍼런스·50+ 실전 패턴·FAQ -- **[📝 CHANGELOG](CHANGELOG.md)** · **[🤝 CONTRIBUTING](CONTRIBUTING.md)** · **[👥 CONTRIBUTORS](CONTRIBUTORS.md)** +- `add_shape()` / `add_control()`은 한/글이 요구하는 모든 하위 요소를 생성하지 않습니다. +- `` 그림 개체의 완전 자동 생성은 제공하지 않습니다. +- 암호화된 HWPX는 지원하지 않습니다. ## 기여하기 -버그 리포트, 기능 제안, PR 모두 환영합니다. - -- **[help wanted 이슈](https://github.com/airmang/python-hwpx/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)** — 지금 들어오기 좋은 입구입니다. 시작 전에 이슈에 코멘트로 방향을 남겨주세요. -- **[마일스톤](https://github.com/airmang/python-hwpx/milestones)** — 공개 로드맵입니다. 프로젝트가 어디로 가는지 여기서 보입니다. -- **[Discussions](https://github.com/airmang/python-hwpx/discussions)** — 질문·아이디어는 이슈 대신 여기로. -- **[내부 실전 가이드](docs/internals/)** — HWPX 내부 구조가 처음이라면 여기부터. 개발 흐름은 [CONTRIBUTING.md](CONTRIBUTING.md)에 있습니다. - -```bash -git clone https://github.com/airmang/python-hwpx.git -cd python-hwpx -pip install -e ".[dev]" -pytest -``` +[help wanted](https://github.com/airmang/python-hwpx/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) · +[로드맵](https://github.com/airmang/python-hwpx/milestones) · +[Discussions](https://github.com/airmang/python-hwpx/discussions) · +[내부 실전 가이드](docs/internals/) · +[CONTRIBUTING](CONTRIBUTING.md) ## 감사의 말 -아래 공개 표준·프로젝트에 빚지고 있습니다. - -- **[OWPML — 개방형 워드프로세서 마크업 언어 (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985)** — HWPX가 기반하는 한국 산업 표준 -- **[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model)** — OWPML 요소 구조 참조 모델 · **[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib)** — 오라클 샘플 코퍼스 -- **[edwardkim/rhwp](https://github.com/edwardkim/rhwp)** — 멱등성·검증 게이트 설계 영감 -- **범정부오피스** — 공무 문서 편집 워크플로 아이디어 - -## License - -Apache License 2.0. See LICENSE and NOTICE. - -## Maintainer +[OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — 기반 표준 · +[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model) — 구조 참조 · +[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib) — 오라클 샘플 · +[edwardkim/rhwp](https://github.com/edwardkim/rhwp) — 검증 게이트 영감 · +범정부오피스 — 워크플로 아이디어 -Primary maintainer/contact: **Kohkyuhyun** ([@airmang](https://github.com/airmang)) +## License · Maintainer -- ✉️ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com) -- 🐙 [@airmang](https://github.com/airmang) +Apache-2.0 ([LICENSE](LICENSE) · [NOTICE](NOTICE)) — **Kohkyuhyun** [@airmang](https://github.com/airmang) · [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com) diff --git a/README_EN.md b/README_EN.md index 0662080..57478b4 100644 --- a/README_EN.md +++ b/README_EN.md @@ -1,304 +1,97 @@

python-hwpx

- A Python layer for safely automating HWPX without Hancom — minimal-scope edits, verified authoring, a receipt on every write. + A pure-Python library to read, edit, and create HWPX — no Hancom Office required

PyPI Python - License - Docs Tests Hancom open + License

한국어 | English

---- - -> **python-hwpx is a Python layer for safely automating HWPX without Hancom.** It -> edits existing documents in the minimal scope, generates new documents in a form -> verified to be accepted by real Hancom, leaves change/preservation/verification -> receipts on every write, and can delegate full interpretation and rendering to -> specialized backends. - -- **Minimal-scope edits** — untouched parts stay byte-for-byte on save (byte - preservation 497/497 on the patch path, frozen corpus v2 · 2026-07-19). -- **Verified authoring** — from-scratch generation lands in a form real Hancom - accepts (produced-output Hancom open 476/476 all-pass, authoring quality gate 58/58). -- **A receipt on every write** — the representative save paths return a - [Safe Write Contract](docs/safe-write-contract.md) `MutationReport` - (`hwpx.mutation-report/v1`) that **measures** the actual write mode, preservation - grade, and verification result. +Existing documents are edited in place — untouched regions stay byte-identical. +New documents are produced in a form real Hancom Office accepts, and every output +is measured against real Hancom and published as-is — +[measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html). ---- - -## 🧩 HWPX Stack (3 components) - -| Layer | Repo | Role | +| | Repo | Role | |---|---|---| -| 📦 Library | **[`python-hwpx`](https://github.com/airmang/python-hwpx)** | Pure-Python HWPX parsing / editing / generation core | -| 🔌 MCP server | [`hwpx-mcp-server`](https://github.com/airmang/hwpx-mcp-server) | Manipulate HWPX from MCP clients (Claude Desktop, VS Code, etc.) | -| 🎯 Agent skill | [`hwpx-plugin`](https://github.com/airmang/hwpx-plugins) | First-party plugin / skill bundle that lets agents use HWPX directly | - -`hwpx-mcp-server` and `hwpx-plugin` are first-party integration components maintained -directly by the same project ("first-party" describes the maintenance relationship, -not certification by Hancom or any third party). - -The current public PyPI release is `python-hwpx 3.7.0`. A plain -`pip install python-hwpx` installs this release. -The current package classifier is `Development Status :: 3 - Alpha`. This classifier -reflects the maturity of the API and product; it does not stand in for the public -version or the minimum compatible version of the plugin. - ---- - -## We speak in measurements — Published Corpus - -The outputs of this stack are verified by **exhaustive measurement against real -Hancom Office**, not by claims (frozen corpus v2, N=497 produced outputs, 2026-07-19, -real Hancom 12.0.0.3288 COM/GUI oracle; details and caveats in the -[measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html)): - -- **Hancom open-acceptance 476/476 all-pass** (frozen corpus v2 · 2026-07-19 · real - Hancom COM `Open()` · rule-of-three lower bound 99.37%) · parsing 96.2% (458/476) -- **Byte preservation of untouched regions 497/497** (patch path only, zip-part diff · - no oracle needed) · **personal-info 0-leak** (35 docs / 140 synthetic values) -- 416/476 render-verified (real Hancom `SaveAs("PDF")`) + honesty bucket of 43 (PDF - export of tracked-change documents is refused by Hancom itself — a measured - limitation) + 17 unverified -- Wild-form filling after the structural-defect fix: **silent layout breakage 16.7%** (66 judged combos; impossible targets are 35 typed refusals, produced fills pass 17/28) — **we publish the low numbers as-is** and name the residual (page ripple, table shape) - -

- Tracked changes and AI-agent memos written by python-hwpx, opened in real Hancom Office -

-

Tracked changes (strikethrough/insertion) and AI-agent margin memos written by python-hwpx — opened in real Hancom Office.

+| 📦 | **`python-hwpx`** | Pure-Python HWPX core (this repo) | +| 🔌 | [`hwpx-mcp-server`](https://github.com/airmang/hwpx-mcp-server) | Drive HWPX from MCP clients (Claude Desktop, etc.) | +| 🎯 | [`hwpx-plugin`](https://github.com/airmang/hwpx-plugins) | Plugin / skill bundle for agents | -> These numbers are on the *output acceptance* axis (does real Hancom accept the files we produce). -> This is a different axis from document *parsing recall*, so do not compare it side by side with parser-project figures. - ---- - -## Why python-hwpx - -- **No Hancom Office required for core editing** — HWPX is a ZIP+XML (OWPML/OPC) structure, so pure Python reads and writes it anywhere: Windows, macOS, Linux, CI. -- **From reading to generation in one core** — text/format extraction, paragraph/table/form editing, new-document generation, and XSD schema validation are all handled by one API. -- **Agent- and automation-friendly** — `hwpx-mcp-server` and `hwpx-plugin`, maintained by the same project, connect to the core. - -Document parsing, editing, and generation can be done in pure Python. However, to -assert final visual quality — page breaks, table overflow, font substitution, and so -on — you separately use a real Hancom render oracle as needed. - -## Quick start +## Getting started ```bash -pip install python-hwpx # Python 3.10+ · lxml ≥ 4.9 +pip install python-hwpx # Python 3.10+ ``` ```python from hwpx import HwpxDocument -# Open an existing document → edit → save -doc = HwpxDocument.open("보고서.hwpx") -doc.add_paragraph("자동화로 추가한 문단입니다.") -doc.save_to_path("보고서-수정.hwpx") - -# Create a new document -new = HwpxDocument.new() -new.add_paragraph("python-hwpx로 만든 새 문서") -new.save_to_path("새문서.hwpx") +doc = HwpxDocument.open("report.hwpx") +doc.add_paragraph("A paragraph added by automation.") +doc.save_to_path("report-edited.hwpx") ``` -> 💡 A context manager is also supported — resources are cleaned up automatically on leaving the `with` block: -> ```python -> with HwpxDocument.open("보고서.hwpx") as doc: -> doc.add_paragraph("자동으로 리소스가 정리됩니다.") -> doc.save_to_path("결과물.hwpx") -> ``` - -Once you have the `open`/`new` → `edit`/`extract` → `save_to_path` flow, you can expand into the rest as needed. - ## What it does -### 🔍 Read · Extract -- Text/HTML/Markdown export — `export_text()` · `export_html()` · `export_markdown()` -- **Rich Markdown** — `export_rich_markdown()` preserves inline formatting (`**bold**` · `*italic*` · `~~strikethrough~~`), nested tables (colspan/rowspan safe), shape text, images, footnotes/endnotes, hyperlinks, and heading auto-detection (`#`/`##`) -- **Document ingest gateway** — `hwpx.ingest.DocumentIngestor` detects HWPX and normalizes it into rich Markdown plus section/table metadata -- `TextExtractor` / `ObjectFinder` — iterate sections/paragraphs, find objects by tag/attribute/XPath (`hp:tab` is preserved as `\t`, roundtrip-safe) - -```python -doc = HwpxDocument.open("보고서.hwpx") -md = doc.export_rich_markdown( - image_dir="out/images", # extract BinData images to disk - image_ref_prefix="images/", # prefix for ![](images/...) paths in the markdown - detect_headings=True, # auto #/## based on Ⅰ./1. patterns -) -``` - -### ✏️ Edit -- Add/remove/format paragraphs, run-level bold/italic/underline/color -- Add/remove sections (`add_section(after=)` · `remove_section()`, manifest managed automatically) -- Create tables, cell text, merge/split, nested tables, image embedding, headers/footers, memos (anchor-based), footnotes/endnotes, bookmarks/hyperlinks, multi-column editing -- **Edit formatting of existing documents** — alignment · line spacing · indentation · paragraph spacing, paper · margins · orientation, page numbers, bullets/numbering -- **Style-based replacement** — filter runs by color · underline · `charPrIDRef` and replace selectively (`replace_text_in_runs` · `find_runs_by_style`) - -```python -# Find and replace only red text -doc.replace_text_in_runs("임시", "확정", text_color="#FF0000") -``` - -### 🖊️ Form filling (byte-preserving) -- Query and format-preserving fill of click-here (누름틀) fields, label-based cell lookup (`find_cell_by_label`) · path-based fill (`fill_by_path`) -- **Byte-preserving structural editing** — cell filling / row·column·table delete·insert / column-width autofit / shrink-to-fit fonts performed without reassembling the document, preserving the form's formatting exactly. Untouched regions are left byte-for-byte intact by `hwpx.patch`, which splices section XML bytes - -```python -doc = HwpxDocument.open("신청서.hwpx") -result = doc.fill_by_path({ - "성명 > right": "홍길동", - "소속 > right": "플랫폼팀", -}) -doc.save_to_path("신청서-작성완료.hwpx") -print(result["applied_count"], result["failed_count"]) -``` - -### 🏗️ Generation · Official-document tools -- `hwpx.builder` — assembly-style generation of Section/Heading/Table/Image/Header + a hard-gated save report -- Official-document tools — `official_lint` (item-marker hierarchy · "끝." marker · attachments · date lint), approval-block presets -- `advanced_generators` — photo boards (image_grid) · meeting nameplates · table-based org charts -- `mail_merge` — bulk generation of N copies from template + data, table sum/average computation -- `doc_diff` — paragraph LCS diff · old/new comparison tables · reference-consistency lint -- `style_profile` — extract and apply reference-document profiles, template registry - -### ✅ Validation · Safety · Low-level -- XSD schema + package structure validation — CLI `hwpx-validate` · `hwpx-validate-package`, `hwpx-analyze-template` -- `validate_editor_open_safety` — gate for save/pack/repair/builder output, returns `openSafety` evidence -- `hwpx.tools.fuzz` (seeded deterministic scenarios · triple oracle) · `hwpx.tools.layout_preview` (page-box approximation HTML/PNG, self-verifying) · `opc.security` (XML entity · ZIP compression-bomb guards) -- Directly manipulate OWPML schema ↔ Python objects via `hwpx.oxml` dataclasses, with automatic HWPML 2016→2011 namespace normalization - -```bash -hwpx-validate-package 보고서.hwpx -hwpx-analyze-template 보고서.hwpx -``` - -> For the full list of features, classes, and methods, see the [usage guide](docs/usage.md) and the [API reference](https://airmang.github.io/python-hwpx/api_reference.html). - -## Safe Write Contract - -The representative save paths (`save_to_path` · `save_to_stream` · `to_bytes`) -**decide the requested preservation grade before writing and return a receipt that -measures what actually changed.** - -```python -from hwpx.mutation_report import PreservationDowngradeError - -# Save with a receipt — picks the strongest achievable grade (mode="auto" default) -report = doc.save_to_path("result.hwpx", return_report=True) -print(report.actual_mode) # "patch" | "rebuild" -print(report.preservation.untouched_part_payloads.to_dict()) # {"verified": 17, "changed": 0} +- **Read & extract** — text/HTML/rich Markdown export (formatting, nested tables, footnotes preserved), XPath object search +- **Edit** — paragraphs, tables, images, headers/footers, memos, footnotes; line spacing, margins, page numbers +- **Form filling** — label/path-based cell filling, byte-preserving structural edits (rows, columns, autofit, shrink-to-fit) +- **Create** — composable builder, official-document lint and approval blocks, photo sheets, nameplates, org charts, mail merge, old-vs-new comparison tables +- **Tracked changes & TOC** — redline authoring, native table of contents and cross-references +- **Verify & safety** — XSD/package validation CLIs, open-safety gate, a receipt on every write (`MutationReport`) -# Force patch grade — writes nothing and raises if it can't be met (fail-closed) -try: - doc.save_to_path("result.hwpx", mode="patch", fallback="error") -except PreservationDowngradeError as exc: - print(exc.offending_parts, exc.suggestion) -``` - -- `mode="patch" | "rebuild" | "auto"` (default `auto`) · `fallback="error" | "rebuild"` (default `error`). -- With `mode="patch"` + `fallback="error"`, if an untouched part cannot stay - byte-identical the save writes **nothing** and raises `PreservationDowngradeError` - (no silent rebuild). -- `MutationReport` reports `requestedMode`/`actualMode`/`fallbackUsed`, changed parts - with coordinate-tagged byte ranges, three preservation layers (part payload · ZIP - record · whole package), and three verification values (`passed`/`failed`/`not_performed`) - — all **measured**, never asserted. - -> Full parameters and the `MutationReport` schema are in the [Safe Write Contract doc](docs/safe-write-contract.md). - -## Support matrix +More: [usage guide](docs/usage.md) · [API reference](https://airmang.github.io/python-hwpx/) · [examples](docs/examples.md) -Actual per-capability grade (frozen corpus v2 · 2026-07-19 · real Hancom 12.0.0.3288 -oracle). Status vocabulary: **Parse / Preserve / Edit / Create / Render-verified / -Unsupported-but-preserved / Unsupported-and-rejected**. +## Why you can trust it -| Capability | Status | Evidence | -|---|---|---| -| Paragraph·table authoring/editing | Parse·Preserve·Edit·Create·Render-verified | open 476/476 · authoring gate 58/58 · render 416 | -| Table structure change (row·col·table, autofit) | Preserve·Edit | `hwpx.table_patch` · byte preservation 497/497 | -| Form filling (byte-splice) | Preserve·Edit | `hwpx.patch`·`table_patch`·`body_patch` · byte preservation 497/497 (wild fidelity after the structural-defect fix: silent breakage 16.7%, typed refusals 35/66, produced pass 17/28; remaining work) | -| Picture insert/replace | Edit·Create | `add_picture`·`replace_picture` (verify complex objects in Hancom) | -| Chart | Unsupported-but-preserved | no create API · existing chart parts patch-preserved | -| Equation | Parse·Unsupported-but-preserved | no authoring API · existing equations parsed·patch-preserved | -| Tracked changes (redline) | Edit·Create | `add_tracked_*` · real Hancom `IsTrackChange=1` (Hancom refuses PDF export → `render_unavailable`, honestly bucketed) | -| Memo (comment) | Edit·Create·Render-verified | `add_memo*` · verified on real Windows Hancom | -| Footnote/endnote | Edit·Create | `add_footnote`·`add_endnote` (no independent render gate) | -| Native TOC / cross-reference | Create·Render-verified | `add_native_toc`·`toc_verify` · structure 15/15 · page alignment 5/5 | -| Encrypted HWPX | Unsupported-and-rejected | no decryption · encrypted parts rejected at parse | -| HWP 5.x binary | Unsupported-and-rejected | not a ZIP → `BadZipFile` on open (convert to HWPX first) | -| Click-here field (누름틀) creation | Parse·Edit | existing fields queried·format-preservingly filled · **no dedicated new-field creation tool** | +- [Safe Write Contract](docs/safe-write-contract.md) — the preservation grade is decided before writing, and a measured receipt of actual changes is returned (fail-closed) +- [Support matrix](docs/support-matrix.md) — real support grades per capability; what doesn't work is graded too +- [Measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html) — exhaustive real-Hancom measurements with caveats; low numbers are published as-is -> Grade rationale and detailed evidence pointers are in the [support matrix doc](docs/support-matrix.md). +Development status is Alpha — the API may change. -## Comparison with competing libraries +## Comparison | | python-hwpx | pyhwpx | pyhwp | |---|---|---|---| | **Target format** | `.hwpx` (OWPML/OPC) | `.hwpx` | `.hwp` (v5 binary) | | **Hancom install** | Not required | Required (Windows COM) | Not required | | **Cross-platform** | ✅ Linux / macOS / Windows / CI | ❌ Windows only | ✅ | -| **Edit/generate API** | ✅ | ✅ (COM) | ❌ mostly read-only | -| **Schema validation** | ✅ | ❌ | ❌ | -| **AI agent integration (MCP)** | ✅ `hwpx-mcp-server` | ❌ | ❌ | +| **Edit/create API** | ✅ | ✅ (COM) | ❌ mostly read | +| **AI agent integration (MCP)** | ✅ | ❌ | ❌ | > HWP (v5 binary) files are not supported. Convert to HWPX in Hancom Office first. ## Known limitations -- `add_shape()` / `add_control()` do not generate every child element Hancom requires. When adding complex objects, verify by opening in Hancom. -- Image binary embedding is supported, but full automatic generation of the `` element is not provided. -- Encryption/decryption of encrypted HWPX files is not supported. - -## More - -- **[🚀 Quick start](docs/quickstart.md)** · **[📚 Usage guide](docs/usage.md)** — from opening your first file to editing paragraphs/tables/memos/sections and text extraction/validation -- **[💡 Examples](docs/examples.md)** · [`examples/`](examples/) — `build_release_checklist.py` (generate HWPX with memo/style edits), `extract_text.py` (CLI text extraction), `find_objects.py` (trace OWPML nodes), and more -- **[📐 Schema overview](docs/schema-overview.md)** · **[🔧 Install verification](docs/installation.md)** -- **[🔬 HWPX internals field guide](docs/internals/)** — HWPUNIT · layout cache · TOC fields · OPC repacking · memos · oracle limits, verified against real Hancom behavior -- **[📖 Full docs (Sphinx)](https://airmang.github.io/python-hwpx/)** — API reference · 50+ practical patterns · FAQ -- **[📝 CHANGELOG](CHANGELOG.md)** · **[🤝 CONTRIBUTING](CONTRIBUTING.md)** · **[👥 CONTRIBUTORS](CONTRIBUTORS.md)** +- `add_shape()` / `add_control()` do not generate every sub-element Hancom requires. +- Fully automatic generation of `` picture objects is not provided. +- Encrypted HWPX files are not supported. ## Contributing -Bug reports, feature proposals, and PRs are all welcome. - -- **[help-wanted issues](https://github.com/airmang/python-hwpx/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)** — good entry points right now; please leave a comment on the issue before starting. -- **[Milestones](https://github.com/airmang/python-hwpx/milestones)** — the public roadmap; see where the project is heading. -- **[Discussions](https://github.com/airmang/python-hwpx/discussions)** — questions and ideas go here instead of the issue tracker. -- **[Internals field guide](docs/internals/)** — start here if HWPX internals are new to you; the development workflow is in [CONTRIBUTING.md](CONTRIBUTING.md). - -```bash -git clone https://github.com/airmang/python-hwpx.git -cd python-hwpx -pip install -e ".[dev]" -pytest -``` +[help wanted](https://github.com/airmang/python-hwpx/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) · +[roadmap](https://github.com/airmang/python-hwpx/milestones) · +[Discussions](https://github.com/airmang/python-hwpx/discussions) · +[internals field guide](docs/internals/) · +[CONTRIBUTING](CONTRIBUTING.md) ## Acknowledgements -This project is indebted to the following open standards and projects. - -- **[OWPML — Open Word-processor Markup Language (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985)** — the Korean industrial standard HWPX is based on -- **[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model)** — reference model for OWPML element structure · **[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib)** — oracle sample corpus -- **[edwardkim/rhwp](https://github.com/edwardkim/rhwp)** — inspiration for idempotence / verification-gate design -- **범정부오피스 (Whole-of-government Office)** — ideas for official-document editing workflows - -## License - -Apache License 2.0. See LICENSE and NOTICE. - -## Maintainer +[OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — underlying standard · +[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model) — structure reference · +[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib) — oracle samples · +[edwardkim/rhwp](https://github.com/edwardkim/rhwp) — verification-gate inspiration · +the Korean government office suite — workflow ideas -Primary maintainer/contact: **Kohkyuhyun** ([@airmang](https://github.com/airmang)) +## License · Maintainer -- ✉️ [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com) -- 🐙 [@airmang](https://github.com/airmang) +Apache-2.0 ([LICENSE](LICENSE) · [NOTICE](NOTICE)) — **Kohkyuhyun** [@airmang](https://github.com/airmang) · [kokyuhyun@hotmail.com](mailto:kokyuhyun@hotmail.com) diff --git a/docs/images/redline-hancom.png b/docs/images/redline-hancom.png deleted file mode 100644 index 39c78264e2163e8a2c8b56106864b778ae79d312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151292 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 G=KlpjDgb=| From 6bafb86764aa634be130f96224ceb88eb484f2e3 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:36:02 +0900 Subject: [PATCH 2/3] =?UTF-8?q?docs:=20recalibrate=20README=20=E2=80=94=20?= =?UTF-8?q?keep=20the=20measured-results=20section=20and=20two=20flagship?= =?UTF-8?q?=20examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- README.md | 49 +++++++++++++++++++++++++++++++++++++------- README_EN.md | 58 ++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 91 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 9072a75..15616af 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@

한국어 | English

기존 문서는 손댄 곳만 고치고(미수정 영역은 바이트 그대로), 새 문서는 실제 -한컴오피스가 받아들이는 형태로 만듭니다. 산출물은 실제 한컴으로 전수 측정해 -그대로 공개합니다 — [실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html). +한컴오피스가 받아들이는 형태로 만듭니다. HWPX는 ZIP+XML(OWPML/OPC) 구조라 +Windows·macOS·Linux·CI 어디서든 순수 파이썬으로 동작합니다. | | 레포 | 역할 | |---|---|---| @@ -49,13 +49,45 @@ doc.save_to_path("보고서-수정.hwpx") 자세한 내용: [사용 가이드](docs/usage.md) · [API 레퍼런스](https://airmang.github.io/python-hwpx/) · [예제](docs/examples.md) -## 신뢰의 근거 +### 양식 채우기 — 서식은 그대로, 값만 -- [안전한 쓰기 계약](docs/safe-write-contract.md) — 보존 등급을 쓰기 전에 판정하고, 실제 변경을 측정한 영수증을 반환합니다(fail-closed) -- [지원 매트릭스](docs/support-matrix.md) — 기능별 실제 지원 등급, 안 되는 것도 등급으로 명시 -- [실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html) — 실한컴 전수 측정 수치와 주의사항, 낮은 숫자도 그대로 발행 +```python +doc = HwpxDocument.open("신청서.hwpx") +result = doc.fill_by_path({ + "성명 > right": "홍길동", + "소속 > right": "플랫폼팀", +}) +doc.save_to_path("신청서-작성완료.hwpx") +``` + +라벨 기준으로 셀을 찾아 채우고, 손대지 않은 영역은 원본 바이트가 그대로 유지됩니다. + +### 저장에는 영수증이 따라옵니다 + +```python +report = doc.save_to_path("결과.hwpx", return_report=True) +print(report.actual_mode) # "patch" — 문서 재조립 없이 저장됨 +print(report.preservation.untouched_part_payloads.to_dict()) + # {"verified": 17, "changed": 0} +``` -현재 개발 상태는 Alpha입니다 — API는 바뀔 수 있습니다. +요청한 보존 등급을 지킬 수 없으면 아무것도 쓰지 않고 실패합니다(fail-closed). +전체 규칙은 [안전한 쓰기 계약](docs/safe-write-contract.md)에 있습니다. + +## 실측으로 말합니다 + +산출물 전수를 실제 한컴오피스로 측정해 그대로 공개합니다(동결 코퍼스 N=497): + +- **한컴 오픈 476/476 all-pass** — 우리가 만든 파일을 실한컴이 전부 엽니다 +- **미수정 영역 바이트 보존 497/497** · 개인정보 0-leak +- **렌더 검증 416/476** + 정직 버킷 43 — 한컴 자체가 PDF export를 거부한 케이스도 숨기지 않고 집계 +- 낮은 숫자도 그대로 발행합니다 — 전체 수치·주의사항: [실측 코퍼스 메트릭](https://airmang.github.io/python-hwpx/corpus-metrics.html) + +기능별로 되는 것과 안 되는 것은 [지원 매트릭스](docs/support-matrix.md)에 등급으로 +명시되어 있습니다. 현재 개발 상태는 Alpha입니다 — API는 바뀔 수 있습니다. + +> 위 수치는 *생성물 수용률* 축입니다(만든 파일을 실한컴이 받는가). 문서 *파싱 recall*과는 +> 다른 축이므로 파서 프로젝트 수치와 병치 비교하지 마세요. ## 비교 @@ -83,6 +115,9 @@ doc.save_to_path("보고서-수정.hwpx") [내부 실전 가이드](docs/internals/) · [CONTRIBUTING](CONTRIBUTING.md) +HWPX 내부 구조가 처음이라면 [내부 실전 가이드](docs/internals/)부터 — 실제 한/글 +동작에서 확인된 조판 캐시·목차 필드·OPC 재패킹 같은 실전 지식을 정리해 두었습니다. + ## 감사의 말 [OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — 기반 표준 · diff --git a/README_EN.md b/README_EN.md index 57478b4..6646b02 100644 --- a/README_EN.md +++ b/README_EN.md @@ -15,9 +15,9 @@

한국어 | English

Existing documents are edited in place — untouched regions stay byte-identical. -New documents are produced in a form real Hancom Office accepts, and every output -is measured against real Hancom and published as-is — -[measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html). +New documents are produced in a form real Hancom Office accepts. HWPX is a +ZIP+XML (OWPML/OPC) format, so everything runs in pure Python on +Windows, macOS, Linux, and CI. | | Repo | Role | |---|---|---| @@ -44,19 +44,55 @@ doc.save_to_path("report-edited.hwpx") - **Read & extract** — text/HTML/rich Markdown export (formatting, nested tables, footnotes preserved), XPath object search - **Edit** — paragraphs, tables, images, headers/footers, memos, footnotes; line spacing, margins, page numbers - **Form filling** — label/path-based cell filling, byte-preserving structural edits (rows, columns, autofit, shrink-to-fit) -- **Create** — composable builder, official-document lint and approval blocks, photo sheets, nameplates, org charts, mail merge, old-vs-new comparison tables +- **Create** — composable builder, official-document lint and approval blocks, photo sheets, nameplates, org charts, mail merge, comparison tables - **Tracked changes & TOC** — redline authoring, native table of contents and cross-references - **Verify & safety** — XSD/package validation CLIs, open-safety gate, a receipt on every write (`MutationReport`) More: [usage guide](docs/usage.md) · [API reference](https://airmang.github.io/python-hwpx/) · [examples](docs/examples.md) -## Why you can trust it +### Form filling — values change, formatting doesn't -- [Safe Write Contract](docs/safe-write-contract.md) — the preservation grade is decided before writing, and a measured receipt of actual changes is returned (fail-closed) -- [Support matrix](docs/support-matrix.md) — real support grades per capability; what doesn't work is graded too -- [Measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html) — exhaustive real-Hancom measurements with caveats; low numbers are published as-is +```python +doc = HwpxDocument.open("application.hwpx") +result = doc.fill_by_path({ + "성명 > right": "홍길동", + "소속 > right": "플랫폼팀", +}) +doc.save_to_path("application-filled.hwpx") +``` + +Cells are located by their labels; everything you didn't touch keeps its +original bytes. + +### Every save comes with a receipt + +```python +report = doc.save_to_path("out.hwpx", return_report=True) +print(report.actual_mode) # "patch" — saved without rebuilding the document +print(report.preservation.untouched_part_payloads.to_dict()) + # {"verified": 17, "changed": 0} +``` -Development status is Alpha — the API may change. +If the requested preservation grade can't be honored, nothing is written +(fail-closed). Full rules: [Safe Write Contract](docs/safe-write-contract.md). + +## Measured, not claimed + +Every output is measured against real Hancom Office and published as-is +(frozen corpus, N=497): + +- **Hancom opens 476/476 all-pass** — real Hancom opens every file we produce +- **Byte preservation of untouched regions 497/497** · personal-info 0-leak +- **Render-verified 416/476** + honesty bucket of 43 — cases where Hancom itself refuses PDF export are counted, not hidden +- Low numbers are published as-is — full figures and caveats: [measured corpus metrics](https://airmang.github.io/python-hwpx/corpus-metrics.html) + +What works and what doesn't is graded per capability in the +[support matrix](docs/support-matrix.md). Development status is Alpha — the API +may change. + +> These numbers are on the *output acceptance* axis (does real Hancom accept the +> files we produce) — a different axis from document *parsing recall*, so do not +> compare them side by side with parser-project figures. ## Comparison @@ -84,6 +120,10 @@ Development status is Alpha — the API may change. [internals field guide](docs/internals/) · [CONTRIBUTING](CONTRIBUTING.md) +New to HWPX internals? Start with the [internals field guide](docs/internals/) — +layout caches, TOC fields, OPC repacking and other behaviors verified against +real Hancom. + ## Acknowledgements [OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — underlying standard · From 1eca0b32f598b01b8225dc07ac13fb1642348d01 Mon Sep 17 00:00:00 2001 From: airmang <38392618+airmang@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:41:07 +0900 Subject: [PATCH 3/3] docs: restore the indebted-to acknowledgements format Co-Authored-By: Claude Fable 5 --- README.md | 11 ++++++----- README_EN.md | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 15616af..2734a63 100644 --- a/README.md +++ b/README.md @@ -120,11 +120,12 @@ HWPX 내부 구조가 처음이라면 [내부 실전 가이드](docs/internals/) ## 감사의 말 -[OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — 기반 표준 · -[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model) — 구조 참조 · -[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib) — 오라클 샘플 · -[edwardkim/rhwp](https://github.com/edwardkim/rhwp) — 검증 게이트 영감 · -범정부오피스 — 워크플로 아이디어 +아래 공개 표준·프로젝트에 빚지고 있습니다. + +- **[OWPML — 개방형 워드프로세서 마크업 언어 (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985)** — HWPX가 기반하는 한국 산업 표준 +- **[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model)** — OWPML 요소 구조 참조 모델 · **[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib)** — 오라클 샘플 코퍼스 +- **[edwardkim/rhwp](https://github.com/edwardkim/rhwp)** — 멱등성·검증 게이트 설계 영감 +- **범정부오피스** — 공무 문서 편집 워크플로 아이디어 ## License · Maintainer diff --git a/README_EN.md b/README_EN.md index 6646b02..c10ff30 100644 --- a/README_EN.md +++ b/README_EN.md @@ -126,11 +126,12 @@ real Hancom. ## Acknowledgements -[OWPML (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985) — underlying standard · -[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model) — structure reference · -[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib) — oracle samples · -[edwardkim/rhwp](https://github.com/edwardkim/rhwp) — verification-gate inspiration · -the Korean government office suite — workflow ideas +This project is indebted to the following open standards and projects. + +- **[OWPML — Open Word-Processor Markup Language (KS X 6101)](https://www.kssn.net/search/stddetail.do?itemNo=K001010119985)** — the Korean industrial standard HWPX is built on +- **[hancom-io/hwpx-owpml-model](https://github.com/hancom-io/hwpx-owpml-model)** — OWPML element-structure reference model · **[neolord0/hwpxlib](https://github.com/neolord0/hwpxlib)** — oracle sample corpus +- **[edwardkim/rhwp](https://github.com/edwardkim/rhwp)** — inspiration for idempotency and verification gates +- **the Korean government office suite** — official-document workflow ideas ## License · Maintainer