증상
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(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
증상
samples/exam_eng.hwp1페이지 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:표/그림/문단 개별 height는 HWP 선언값과 일치. 단 1 누적 단계에서 +217px 부풀림.
Task #356 관계
Task #356(
local/task356브랜치, devel 미머지)의detect_inter_paragraph_vpos_reset헬퍼는 같은 단(column_start 일치)의 vpos 리셋만 감지. 다단 전환은 의도적으로 제외:
본 케이스는 단 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)current_height를 다시 상향 → 단 1에서 사용 가능 높이가 줄어 끝부분 5개 항목이 밀려남
prev.column_start == cur.column_start) 가드가 없음환경
samples/exam_eng.hwp(총 8페이지 PDF, A3 세로)devel