Skip to content

표 페이지 분할 시 rowspan>1 셀이 분할 단위 산정에서 누락 (2025년 기부·답례품 보고서 양식 1쪽 하단) #398

@planet6897

Description

@planet6897

증상

samples/2025년 기부·답례품 실적 지자체 보고서_양식.hwpx 1쪽 하단에 다음 표(pi=22, 3×3, "<2025년 기부·답례품 실적 분석보고서 요약>")의 첫 행이 잘려 들어가고 제목 텍스트가 본문 영역 끝에 겹쳐서 그려진다. PDF 원본은 표 전체를 2쪽으로 미룬다.

원인

src/renderer/pagination/engine.rs::split_table_rows 가 페이지에 들어갈 첫 행 높이를 mt.row_heights[0] (rs=1 셀만 집계, 17.27px)로 판정.

  • 행 0의 rowspan=2 셀(35.4px, 제목 셀)이 분할 단위 산정에서 누락.
  • 19px 잔여 공간 ≥ 17.27px → 행 0을 페이지 1에 배치 → rowspan 셀이 19px 안에 들어가지 못해 시각적으로 잘려 그려짐.

src/renderer/height_measurer.rs:

  • row_heights 산출(line 466 등): cell.row_span == 1 필터.
  • is_row_splittable(line 1144), min_first_line_height_for_row(line 1156): 모두 동일 필터.

기대 동작

PDF/한글과 동일하게 rowspan 묶음 단위로 분할 가능 여부를 판정하여 첫 블록(행 0+1, 35.4px)이 잔여 공간에 들어가지 않으면 표 전체를 다음 페이지로 넘겨야 한다.

수정 방향

분할 가능 단위를 "행" → "rowspan 묶음 블록"으로 확장:

  1. MeasuredTable::row_block_for(row) 추가: 주어진 행에서 시작하는 rowspan>1 셀의 종료 행까지를 한 블록으로 반환 ((start_row, end_row, block_height)).
  2. split_table_rowsfirst_row_h를 블록 높이로 교체 (행 0이 rowspan=2 셀 시작점이면 행 0+1 합산 높이 35.4px).
  3. find_break_row도 블록 경계만 허용 (rowspan 중간에서 잘리지 않도록 결과를 다음 블록 경계로 스냅).
  4. 회귀 테스트: 본 샘플 + 기존 표 분할 테스트(tests/, pagination/tests.rs::test_typeset_page_break) 모두 통과.

재현

./target/debug/rhwp export-svg "samples/2025년 기부·답례품 실적 지자체 보고서_양식.hwpx"
# output/2025년 기부·답례품 실적 지자체 보고서_양식_001.svg 1쪽 하단에
# "<2025년 기부·답례품 실적 분석보고서 요약>" 텍스트가 그려짐

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