Skip to content

exam_eng.hwp 1페이지 단 1 끝부분이 다음 페이지로 밀림 (다단 전환 vpos 보정 오류) #386

@planet6897

Description

@planet6897

증상

samples/exam_eng.hwp 1페이지 SVG 출력에서 11번 선택지 ④⑤와 12번 전체가
2페이지로 밀림. 한컴 PDF 출력에서는 1페이지에 모두 포함됨.
LAYOUT_OVERFLOW 경고는 발생하지 않음 (Task #356 검증망 우회).

재현

rhwp export-svg samples/exam_eng.hwp -p 0
# → 1페이지 단 1 마지막에 11번 ③ 까지만 표시

분석 결과

dump-pages -p 0:

  • 단 0: used=1114.4px, hwp_used≈1205.8px (diff -91.4px)
  • 단 1: used=1186.2px, hwp_used≈ 969.1px (diff +217.1px)

표/그림/문단 개별 height는 HWP 선언값과 일치. 단 1 누적 단계에서 +217px 부풀림.

Task #356 관계

Task #356(local/task356 브랜치, devel 미머지)의 detect_inter_paragraph_vpos_reset
헬퍼는 같은 단(column_start 일치)의 vpos 리셋만 감지. 다단 전환은 의도적으로 제외:

if prev_last.column_start != cur_first.column_start { return false; }

본 케이스는 단 0(column_start=0) → 단 1(column_start≠0) 전환 케이스로,
#356 헬퍼 적용 대상이 아닌 별개 결함.

원인 후보

src/renderer/pagination/engine.rs:245-285 (Initial commit 도입, Task #62에서 일부 가드 추가)의
vpos 기반 current_height 보정 로직:

  • prev_pagination_para (engine.rs:65)는 함수 레벨, 컬럼 전환 시 리셋되지 않음
  • advance_column_or_new_page()current_height = 0.0으로 리셋 (state.rs:120)
  • 그러나 단 1 첫 문단 처리 시 보정 로직이 단 0 마지막 문단의 vpos_end 기준으로
    current_height를 다시 상향 → 단 1에서 사용 가능 높이가 줄어 끝부분 5개 항목이 밀려남
  • 보정 조건에 컬럼 경계(prev.column_start == cur.column_start) 가드가 없음

환경

  • 파일: samples/exam_eng.hwp (총 8페이지 PDF, A3 세로)
  • 컬럼 다단 + 블록 도형/표 동시 존재 페이지에서 발현
  • 베이스 브랜치: devel

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