Files

5.5 KiB

HWP/HWPX ↔ HTML/CSS 도메인 가이드

목적: HWPX에서 문서 유형·스타일·템플릿을 추출하거나, HTML → HWPX → HWP 변환 시
하드코딩 없이 이 가이드를 참조하여 정확한 매핑을 수행한다.
출처: 한글과컴퓨터 공식 "글 문서 파일 구조 5.0" (revision 1.3, 2018-11-08)
범위: HWP 5.0 바이너리 스펙의 개념 체계 + HWPX XML 태그 + HTML/CSS 매핑


0. 문서 형식 관계

HWP (바이너리)          HWPX (XML)              HTML/CSS
─────────────────   ─────────────────────   ─────────────────
Compound File       ZIP Archive             단일 HTML 파일
├─ FileHeader       ├─ META-INF/            ├─ <head>
├─ DocInfo          │   └─ manifest.xml     │   ├─ <meta>
│  (글꼴, 스타일,   ├─ Contents/            │   └─ <style>
│   테두리/배경,     │   ├─ header.xml       └─ <body>
│   글자모양 등)     │   │  (DocInfo 대응)       ├─ 헤더 영역
├─ BodyText/        ├─ section0.xml     │   ├─ 본문
│  └─ Section0      │   │  (본문 대응)       │   └─ 푸터 영역
├─ BinData/         │   └─ section1.xml     └─ @page CSS
│  └─ 이미지 등     ├─ BinData/
└─ PrvImage         │   └─ 이미지 파일
                    └─ version.xml

핵심: HWP 바이너리의 레코드 구조와 HWPX XML의 엘리먼트는 1:1 대응한다.
이 가이드는 두 형식의 공통 개념 체계를 기준으로, CSS 변환까지 연결한다.


1. 단위 체계

1.1 HWPUNIT (글 내부 단위)

HWP는 1/7200 인치를 기본 단위로 사용한다.

변환 대상 공식 예시
HWPUNIT → mm hwpunit / 7200 * 25.4 7200 → 25.4mm (= 1인치)
HWPUNIT → pt hwpunit / 7200 * 72 7200 → 72pt
HWPUNIT → px (96dpi) hwpunit / 7200 * 96 7200 → 96px
mm → HWPUNIT mm / 25.4 * 7200 25.4mm → 7200
pt → HWPUNIT pt / 72 * 7200 10pt → 1000
def hwpunit_to_mm(hwpunit):  return hwpunit / 7200 * 25.4
def hwpunit_to_pt(hwpunit):  return hwpunit / 7200 * 72
def hwpunit_to_px(hwpunit, dpi=96):  return hwpunit / 7200 * dpi
def mm_to_hwpunit(mm):       return mm / 25.4 * 7200

1.2 글자 크기 (CharShape)

HWP의 글자 크기는 HWPUNIT 단위이지만 100배 스케일이 적용되어 있다.

HWP 값 실제 크기 CSS
1000 10pt font-size: 10pt
1200 12pt font-size: 12pt
2400 24pt font-size: 24pt
def charsize_to_pt(hwp_size):  return hwp_size / 100  # 1000 → 10pt

1.3 COLORREF (색상)

HWP는 0x00BBGGRR 형식(리틀 엔디안 BGR). CSS는 #RRGGBB.

HWP COLORREF 분해 CSS
0x00000000 R=0, G=0, B=0 #000000 (검정)
0x00FF0000 R=0, G=0, B=255 #0000ff (파랑)
0x0000FF00 R=0, G=255, B=0 #00ff00 (초록)
0x000000FF R=255, G=0, B=0 #ff0000 (빨강)
0x00FFFFFF R=255, G=255, B=255 #ffffff (흰색)
def colorref_to_css(colorref):
    r = colorref & 0xFF
    g = (colorref >> 8) & 0xFF
    b = (colorref >> 16) & 0xFF
    return f'#{r:02x}{g:02x}{b:02x}'

HWPX XML에서의 색상: #RRGGBB 형식으로 직접 기록됨 (변환 불필요).


2. 테두리/배경 (BorderFill)

HWP: HWPTAG_BORDER_FILL (DocInfo 레코드)
HWPX: <hh:borderFill> (header.xml 내)
용도: 표 셀, 문단, 쪽 테두리/배경에 공통 적용

2.1 테두리선 종류

HWP 값 이름 HWPX type 속성 CSS border-style
0 실선 SOLID solid
1 긴 점선 DASH dashed
2 점선 DOT dotted
3 -.-.-. DASH_DOT dashed (근사)
4 -..-.. DASH_DOT_DOT dashed (근사)
5 긴 Dash LONG_DASH dashed
6 큰 동그라미 CIRCLE dotted (근사)
7 2중선 DOUBLE double
8 가는선+굵은선 THIN_THICK double (근사)
9 굵은선+가는선 THICK_THIN double (근사)
10 가는+굵은+가는 THIN_THICK_THIN double (근사)
11 물결 WAVE solid (근사)
12 물결 2중선 DOUBLE_WAVE double (근사)
13 두꺼운 3D THICK_3D ridge
14 두꺼운 3D(역) THICK_3D_REV groove
15 3D 단선 3D outset
16 3D 단선(역) 3D_REV inset
없음 NONE none

2.2 테두리선 굵기

HWP 값 실제 굵기 HWPX width 속성 CSS border-width
0 0.1 mm 0.1mm 0.1mm0.4px
1 0.12 mm 0.12mm 0.12mm0.5px
2 0.15 mm 0.15mm 0.15mm0.6px
3 0.2 mm 0.2mm 0.2mm0.8px
4 0.25 mm 0.25mm 0.25mm1px
5 0.3 mm 0.3mm 0.3mm1.1px
6 0.4 mm 0.4mm 0.4mm1.5px
7 0.5 mm 0.5mm 0.5mm1.9px
8 0.6 mm 0.6mm 0.6mm2.3px
9 0.7 mm 0.7mm 0.7mm2.6px
10 1.0 mm 1.0mm 1mm3.8px
11 1.5 mm 1.5mm 1.5mm5.7px
12 2.0 mm 2.0mm 2mm7.6px
13 3.0 mm 3.0mm 3mm11.3px
14 4.0 mm 4.0mm 4mm15.1px
15 5.0 mm 5.0mm 5mm18.9px