한글 문서를 Markdown으로 꺼냅니다

한컴오피스 없이, 제목 구조·표·이미지가 살아 있는 Markdown으로. 순수 파이썬 CLI·라이브러리·로컬 웹 미리보기가 한 엔진을 함께 씁니다.

  • HWP 5.0HWPXHWPML 내용으로 판별
  • 의존성 olefilelxml 두 개
  • CLI·웹·라이브러리 출력 바이트 동일

한국의 공공·기업 문서는
HWP 안에 갇혀 있습니다

HWP·HWPX는 RAG 파이프라인에도, LLM 입력에도, 버전 관리에도 바로 쓸 수 없습니다. 기존 변환 도구는 표와 이미지 위치를 잃거나 한컴 설치를 요구하고, 개발자는 매번 같은 파싱 코드를 다시 짭니다. hwp2md는 그 문을 여는 열쇠입니다.

문서를 블록으로 읽고,
Markdown으로 다시 씁니다

  1. 읽기확장자가 아니라 파일 내용으로 HWP 5.0·HWPX를 가립니다
  2. 블록으로 나누기제목·단락·표·그림을 문서 순서대로 꺼냅니다
  3. Markdown으로 쓰기개요 수준은 #, 표는 GFM 표, 그림은 파일 링크가 됩니다

예시: 공고문의 개요 수준 제목은 # 기호가 붙은 Markdown 제목이 되고, 표는 파이프 표, 그림은 문서명_images 폴더의 이미지 링크가 됩니다.

같은 엔진, 세 가지 입구

터미널 한 줄, 브라우저 미리보기, 파이썬 코드. 어느 쪽으로 변환해도 같은 Markdown이 나옵니다.









아직 PyPI 배포 전입니다. 소스에서 pip install '.[web]'으로 설치하세요. Python 3.11 이상.

재활용에 필요한 것만
정확하게 옮깁니다

서식 재현 대신 구조를 지킵니다. 제목 계층·표·이미지가 다음 도구에서 바로 쓰이도록.

이런 작업에 맞춰 만들었습니다

문서를 다음 도구로 넘겨야 하는 사람들의 실제 요구에서 출발했습니다.

RAG 개발자

공공기관 HWP 수천 개를 지식베이스에

개요 수준이 Markdown 제목이 되어 제목 단위로 자르기 좋습니다. 머리말·꼬리말·쪽 번호는 본문에 섞지 않아 청크에 잡음이 들어가지 않습니다.

## 1. 사업 개요
…
## 2. 추진 절차
…
### 2.1 심사 기준
데이터 분석가

입찰 공고에서 예산·기간 표만

표는 첫 행이 헤더인 GFM 표가 됩니다. 셀 안 여러 줄은 <br>로 이어져 행·열 수가 그대로 남습니다.

| 구분 | 내용 |
|---|---|
| 지원 규모 | 총 10억 원 |
| 지원 기간 | 2026. 3. ~ 12. |
서버·오픈소스 사용자

한컴을 설치할 수 없는 리눅스 서버에서

순수 파이썬 3.11 이상, 기본 의존성은 olefile과 lxml 두 개입니다. 웹 미리보기용 의존성은 [web] extra에만 있습니다.

$ pip install .
$ hwp2md 공고문.hwp -o out/
✓ 공고문.hwp → out/공고문.md

문서는 내 컴퓨터를 떠나지 않습니다

웹 미리보기는 내 컴퓨터에서 실행하는 hwp2md serve입니다. 두 가지 처리 방식의 차이를 직접 확인하세요.

내 컴퓨터의 hwp2md serve가 메모리에서 변환

파일은 같은 컴퓨터에서 실행 중인 hwp2md serve 프로세스로 전달되어 메모리 안에서만 변환됩니다. 임시 파일을 만들지 않고, 결과를 돌려준 뒤 남는 사본이 없습니다.

인터넷 연결이 필요 없습니다. 기본 주소는 localhost:8770이며 인증이 없으니 외부에 공개하지 마세요.

지원 범위와 한계

지금 꺼내지 못하는 것을 먼저 밝힙니다. 변환할 때 빠진 요소는 화면과 CLI가 종류별 개수로 알려 줍니다. 변환하지 못하는 요소 전체 목록과 이유는 저장소의 docs/extraction-limits.md 에 있습니다.

  • 문서보안(DRM)이 걸린 파일은 변환할 수 없습니다. 공개된 형식이 없습니다.불가
  • 암호를 건 문서는 변환할 수 없습니다. 암호화 방식이 공개되지 않았고 암호가 필요합니다.불가
  • HWP 3.0 이하 문서는 변환할 수 없습니다. 파일 형식이 전혀 다릅니다.불가
  • 구형 차트는 데이터를 꺼내지 못하고 건너뜁니다. 객체 직렬화 형식이 수십 종이라 이번 범위에서 뺐습니다.불가
  • 쪽 번호·자동 번호는 출력하지 않습니다. 값을 알려면 쪽 나눔 계산이 필요합니다.불가
  • WMF·EMF 그림은 PNG로 바꾸지 않고 원본 그대로 저장합니다. 순수 파이썬 변환기가 없어 브라우저에서 안 보일 수 있습니다.부분
  • 문서 밖 파일에 연결된 그림과 본체가 빠진 그림은 꺼낼 수 없습니다. 문서 안에 그림 데이터가 없습니다.불가
  • 차트는 캐시된 값으로 제목과 표를 만듭니다. 실제 한글 문서의 차트로는 아직 확인하지 못했습니다.부분
  • 그 밖의 OLE 개체는 안에 든 원본 그림만 꺼내고 나머지는 건너뜁니다. 개체마다 형식이 다릅니다.부분
  • 단락 중간에 놓인 그림은 HWP 5.0에서는 단락 글자 뒤에 나오고, HWPX·HWPML에서는 그림 자리에서 단락이 나뉩니다. 위치를 맞추면 기존 출력이 넓게 바뀌어 보류했습니다.부분
  • 머리말·꼬리말은 본문에 넣지 않고 건너뛴 개수로만 알립니다. 쪽마다 반복되는 글이라 본문을 흐립니다.제외
  • 메모와 숨은 설명은 넣지 않고 개수로만 알립니다. 작성자 정보가 들어 있을 수 있습니다.제외
  • 글맵시·양식 개체는 건너뛰고 개수로 알립니다. 확인할 샘플 문서가 없습니다.제외
  • 책갈피는 출력하지 않습니다. 본문 내용이 없고 Markdown에 표준 앵커가 없습니다.제외
  • 병합된 표 칸은 빈 칸으로 남습니다. Markdown 표는 병합을 표현할 수 없어서입니다. 병합 보존(--table html)은 예정입니다.부분
  • 문서 하나당 .md 파일 하나로 나옵니다. 제목 단위 분할과 메타데이터 JSON은 아직 없습니다.예정
  • 한 번에 파일 하나씩 변환합니다. 폴더 일괄 변환은 아직 없습니다.예정
  • 아직 PyPI에 배포하지 않아 소스에서 설치합니다.예정
  • 글꼴·색·정렬·굵게 같은 서식은 옮기지 않습니다. 목표는 구조와 내용입니다. 파일 하나는 50MB까지.범위 밖

갇힌 문서를 꺼내 보세요

변환 도구 열기