Skip to content

페이지네이션: 셀 분할 시 중첩 표가 limit 초과해도 항상 첫 페이지에 노출 #324

@planet6897

Description

@planet6897

증상

samples/hwpx/form-002.hwpx SVG 출력에서 page 2 상단에 와야 할 "연구개발계획서 제출시…" 부분이 page 1 하단에 표출됨.

재현

cargo build --release
./target/release/rhwp export-svg samples/hwpx/form-002.hwpx -o output/svg/form-002/
# page 1: \"연구개발계획서…\" inner table 이 하단에 보임 (HWP/PDF 기준 page 2)
# page 2: \"산소탑재효율…\" 등 inner table 본문만 표시됨

비교: samples/hwpx/form-002.pdf page 1/2 (정답).

분석

대상 문서 구조 (외부 표 26x27, 셀[73] r=19, c=0, rs=1, cs=27):

  • 셀 높이 63539 HWPUNIT (≈847px), 29 paragraphs
  • p[28] = 1x1 inner 표 ("연구개발계획서 제출시…"), vpos=25376
  • page 1 PartialTable rows=0..20 (cont=false), page 2 rows=19..26 (cont=true) — row 19 이 페이지 분할됨
  • HWP 가용량 ≈ 946.8px, rhwp 사용량 925.6px (diff -21.2px)

근본 원인: src/renderer/layout/table_layout.rs::compute_cell_line_ranges()has_table_in_para 분기.

// 2071-2079행
if offset_remaining > 0.0 { /* offset 소비 */ }
else if limit_remaining > 0.0 {
    if para_h <= limit_remaining { limit_remaining -= para_h; }
    // limit 초과 시 무처리
}
// 2081-2085행
if offset_remaining > 0.0 || (… content_offset 관련) {
    result.push((line_count, line_count));   // 스킵
} else {
    result.push((0, line_count));            // ❗ 항상 표시
}

가시성 결정 시 limit_remaining 검사가 누락되어, 셀 분할 시 limit 초과 후 등장하는 중첩 표 문단이 무조건 첫 페이지에 표시됨. 일반 문단은 line 루프 내 if limit_remaining <= 0.0 { break; } 로 정상 차단됨.

수정 방향

has_table_in_para 분기에서 content_limit > 0.0 && para_h > limit_remaining 인 경우 atomic 단위로 다음 페이지로 미루기:

} else {
    result.push((line_count, line_count));   // 다음 페이지로
    limit_remaining = 0.0;
}

영향 범위

  • 셀 안에 중첩 표가 있고 셀이 페이지 분할되는 모든 문서
  • form 류 / 템플릿 문서에서 빈번할 수 있음

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