Skip to content

PageBackground 이미지 fill_mode(Center 등)가 전체 페이지 늘림으로 렌더링됨 #975

@postmelee

Description

@postmelee

배경

#938 검증 중 추가 워터마크 샘플(143E433F503322BD33.hwp, Tistory [HWP 2010] 워터마크 예제)을 열어보니, 큰 컬러 배경 이미지가 페이지 전체로 늘어나 보이는 별도 문제가 확인됐다.

이 문제는 #938의 JPEG 워터마크 보정 대상이 아니다. #938은 그림 개체의 effect != RealPic + brightness/contrast 워터마크 보정이고, 이 샘플은 페이지 배경/BorderFill 이미지 경로다.

해당파일 다운로드 링크:
https://t1.daumcdn.net/cfile/tistory/143E433F503322BD33

Image

재현

  1. 143E433F503322BD33.hwp를 rhwp-studio 또는 rhwp export-svg로 연다.
  2. 문서의 파란 배경 이미지가 페이지 전체 크기로 늘어나 렌더링된다.
  3. dump 결과에서는 해당 이미지가 그림 개체가 아니라 페이지 배경 이미지로 확인된다.
border_fill[2] fill_type=Image  image(bin_id=3, mode=Center)

현재 동작

  • layout 단계에서는 PageBackgroundImage { fill_mode: img_fill.fill_mode }mode=Center를 보존한다.
  • 하지만 SVG/Canvas 렌더러에서 PageBackground 이미지를 항상 페이지 bbox 전체로 그린다.

관련 코드:

  • src/renderer/layout.rs: build_page_background()에서 PageBackgroundImage.fill_mode 보존
  • src/renderer/svg.rs: RenderNodeType::PageBackground 이미지 출력 시 preserveAspectRatio="none" + 전체 bbox 사용
  • src/renderer/web_canvas.rs: RenderNodeType::PageBackground 이미지 출력 시 draw_image(..., bbox 전체) 사용

기대 동작

PageBackground/BorderFill 이미지도 일반 이미지 채우기와 동일하게 ImageFillMode를 존중해야 한다.

  • Center: 원본 크기 또는 HWP가 지정한 배경 이미지 크기 기준으로 중앙 배치
  • FitToSize: 현재처럼 대상 영역에 맞춤
  • tile 계열: 반복 배치
  • 기타 위치 모드: 해당 기준점에 배치

범위

#938과 분리해서 처리한다. #938은 복학원서.hwp의 JPEG 워터마크 톤 보정에 집중하고, 이 이슈는 페이지 배경/BorderFill 이미지 fill mode 렌더링 정합만 다룬다.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions