Skip to content

HWP3 sample14 WMF metafile element y 좌표 순서 한컴 반대 — 캡션/박스 위치 어긋남 #864

@jangster77

Description

@jangster77

결함 개요

선행: PR #863 (closes #860) — BMP 콘텐츠 누락 fix 적용 완료. 그러나 시각 정합 잔여.

samples/hwp3-sample14.hwp (및 HWP5/HWPX 변환본) 의 WMF metafile 내 element y 좌표가 한컴 PDF / 편집기와 반대 순서로 렌더링.

시각 비교 (page 2/11)

시각 요소 rhwp-studio 한컴 편집기 / PDF
페이지 상단 캡션 outline (점선 박스) + 텍스트 "'P' 명령 이후..." BMP 박스 2개 (Vim 화면)
그 아래 BMP 박스 2개 (Vim 화면) 캡션 outline + 텍스트
paragraph 흐름 캡션 + 박스 후 본문 시작 위치 어긋남 박스 + 캡션 + 본문 흐름 정합

본질 진단 (PR #863 Stage D 결과)

<image href="data:image/svg+xml;base64,..."> 의 inner SVG element y 좌표:

요소 y 좌표 rhwp 위치 한컴 PDF 위치
rect (캡션 outline) 1008 아래
text (캡션 글자) 1205 아래
image (BMP Vim 박스) 1536 아래

rhwp: SVG 렌더링 시 y 작은 게 위 (top-down) → rect/text 위, image 아래
한컴: image 위 + rect/text 아래

진단된 시도 (PR #863 Stage D)

  1. `Window::as_view_box()` 가 origin 적용 — viewBox 시작점 정합
  2. viewBox 양방향 자동 확장 (min/max x/y) — element bbox cover
  3. y-flip framework (`Window::y_inverted`) 도입 — SetWindowExt y < 0 (Cartesian) 감지 (sample14 는 미적용)

이 3 시도로 BMP 콘텐츠 표시 + viewBox 정합 달성. 그러나 element y 순서 자체는 미정정.

WMF binary 분석 (RHWP_DEBUG_WMF trace)

  • SetWindowOrg: (329, 1536), (624, 1872)
  • SetWindowExt: (4231, 1189), (4176, 1400) — 모두 positive (top-down)
  • Placeable BoundingBox: (329, 1536) ~ (4560, 2725)
  • Window range: y ∈ [1536, 2725]
  • element y=1008, 1205 < window top=1536 → element 가 window 위쪽 밖

이는:

  • WMF binary 자체가 비정상 (element 가 BoundingBox 밖), 또는
  • WMF parser 가 record 좌표 잘못 추출, 또는
  • 한컴이 별도 y 변환 (e.g., logical_y → device_y 매핑) 적용

본질 가설

  1. H1: WMF binary 의 SetMapMode (MM_ANISOTROPIC 등) 처리 차이
  2. H2: WMF binary 의 SetViewportOrg / SetViewportExt 미처리 (현재 rhwp 가 Window 만 처리)
  3. H3: WMF record 의 좌표 변환 (logical → device) 처리 차이
  4. H4: 한컴이 element y 를 `origin_y + (origin_y + ext_y - y - elem_h)` 같은 변환 적용 (mirror 변환)

영향 sample

  • samples/hwp3-sample14.hwp (HWP3)
  • samples/hwp3-sample14-hwp5.hwp (HWP5 변환본)
  • samples/hwp3-sample14-hwp5.hwpx (HWPX 변환본)
  • 다른 WMF 보유 sample 도 영향 가능 (현재 sample13/exam_eng 등은 WMF 미사용)

권위 자료

  • pdf/hwp3-sample14-hwp5-2022.pdf (한컴 한글 2022, 11 페이지)
  • 사용자 한컴 편집기 screenshot (2/11쪽)

다음 단계 (제안)

  1. WMF binary 의 모든 record 추출 + dump (SetMapMode, SetViewport*, SetWindow* 등)
  2. WMF spec 정밀 분석 + element y 좌표 변환 로직 검증
  3. SetViewport* 처리 추가 (현재 미처리)
  4. 한컴 정합 정정 + 회귀 검증

CLAUDE.md 규칙 정합: EMF/WMF 는 공통 format 모듈 — HWP3 전용 분기 추가 금지.

선행

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions