Skip to content

WASM canvas 렌더러가 OLE 개체(RawSvg/Placeholder) 처리 누락 — bitmap.hwp/한셀OLE.hwp 빈 페이지 #275

@planet6897

Description

@planet6897

증상

samples/bitmap.hwp, samples/한셀OLE.hwp 를 rhwp-studio 에서 열면 파일 로드는 성공(1/1 페이지)하지만 본문이 완전히 빈 페이지로 렌더됨. 네이티브 CLI (rhwp export-svg) 는 정상 렌더 (46KB SVG, BMP 이미지 포함).

재현

  1. rhwp-studio 에서 파일 → 열기samples/bitmap.hwp 또는 samples/한셀OLE.hwp
  2. 상태 표시줄엔 파일명 — 1페이지 (N.Nms) 로 로드 완료 표시
  3. 편집 영역은 빈 페이지 (머리 여백 가이드만 보임)
  4. DevTools Console: 에러 없음 ([initDoc] 1~8 전부 완료)

근본 원인

두 파일 모두 첫 문단에 OLE 컨트롤이 들어있음:

  • bitmap.hwp — OLE 안에 BMP 이미지 임베드 (150×84mm)
  • 한셀OLE.hwp — OLE 안에 한셀 시트 OLE (106×14mm)

레이아웃 단계 (src/renderer/layout/shape_layout.rs:983-1094 ShapeObject::Ole) 에서:

  • OOXML 차트 / EMF 프리뷰 / 네이티브 BMP·PNG·JPEG → RenderNodeType::RawSvg (SVG 조각)
  • 전부 실패 시 → RenderNodeType::Placeholder

두 렌더러의 노드 처리 차이:

노드 타입 svg.rs (네이티브) web_canvas.rs (WASM)
RawSvg 처리 O 처리 X — 암묵 무시
Placeholder 처리 O 처리 X — 암묵 무시

src/renderer/web_canvas.rs:167-422 render_node match 에 RawSvg, Placeholder arm 이 없어 _ => catch-all (자식만 렌더) 로 빠지고, 둘 다 자식이 없어 결과적으로 아무것도 그려지지 않음.

영향 범위

  • BMP·JPEG·PNG 임베드된 모든 OLE 개체
  • EMF 프리뷰가 있는 OLE
  • OOXML 차트 (Task 차트/OLE 개체 렌더링 지원 #195 단계 8)
  • 최종 Placeholder 폴백까지 간 모든 OLE / 차트 실패 케이스

→ WASM 에서 전부 빈 렌더. 네이티브 SVG 는 정상.

재현 산출물

세션 중 생성:

  • rhwp-studio/e2e/debug-load-bug.test.mjs — puppeteer 재현 스크립트
  • 스크린샷 e2e/screenshots/debug-_bitmap.png, debug-_hancell_ole.png

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