Skip to content

큰 셀 cross-page split 결함 — inner-table-01.hwp 셀 내부 vpos 리셋 인코딩 미반영 (한글 2022 PDF mismatch) #697

@planet6897

Description

@planet6897

회귀 범위

  • 샘플: samples/inner-table-01.hwp (8행×2열 단일 표)
  • 권위 자료: pdf/inner-table-01-2022.pdf (한글 2022 변환)
  • 시각 RMSE: p1 26.4%, p2 22.6%

작업지시자 시각 판정 정합

정답 (PDF):

  • p1: 표 5행 (대상사업~검토의견·요구사항)이 본문 영역 거의 가득 차지
  • p2: 표 4행~ (사업개요부터) 정상

현재 rhwp 출력 (회귀):

  • p1: 표 전체가 본문 영역 상단 1/3 정도로 압축되어 짜부라진 형태
  • p2: 동일 행 일부가 중복으로 그려짐

회귀 본질

큰 셀(사업개요 행, h=48776 HU ≈ 172mm)이 한 페이지 본문 높이를 초과하여 PDF 는 행 단위로 다음 페이지에 통째 이월. 그러나 IR 은 셀 내부 문단들에 페이지 분할을 직접 인코딩 — 셀[11] paras 의 p[20]~p[25]ls[0].vpos 가 0 으로 리셋되어 있다 (분할 시작점 표시).

dump-pages:

=== 페이지 1 (global_idx=0, section=0, page_num=1) ===
  body_area: x=75.6 y=132.3 w=642.5 h=876.9
  단 0 (items=1, used=0.0px)
    PartialTable   pi=0 ci=2  rows=0..7  cont=false  8x2  vpos=0
                   split_start=0.0 split_end=459.7

=== 페이지 2 (global_idx=1, section=0, page_num=2) ===
  단 0 (items=1, used=677.6px)
    PartialTable   pi=0 ci=2  rows=6..8  cont=true   8x2  vpos=0
                   split_start=459.7 split_end=0.0

문제점:

  1. rows=0..7 cont=false 인데 1페이지 표 높이가 split_end=459.7px 로 본문 영역(876.9px)의 절반에 그침 → 표 자체가 작게 그려짐
  2. rows=6..8 cont=true — 6,7 행이 양 페이지에 중복 등장
  3. cont 플래그 짝(false/true) 이 잘못 — 이어지는 표는 1페이지에 cont=true (= 첫 조각) 가 되어야 자연스러움

핵심 영역

  • src/renderer/layout.rs PartialTable 분할 로직 — 셀 내부 문단 vpos 리셋 인식
  • 행 단위 split vs 셀 내부 split 정합화 (큰 셀이 본문 높이 초과 시 행 자체를 다음 페이지로 이월)
  • cont 플래그 의미 정정

영향 영역

샘플 영역
inner-table-01.hwp p1/p2 표 압축 + 행 중복 (확정)
큰 셀이 페이지 초과하는 다른 표 점검 필요

관련 이슈

검증 절차

  1. rhwp export-svg samples/inner-table-01.hwp -o /tmp/svg --debug-overlay
  2. p1/p2 SVG ↔ pdf/inner-table-01-2022.pdf 페이지별 비교 (RMSE -fuzz 5% 이내)
  3. dump-pages -p 0/1 결과에서 cont 플래그 짝 + 행 범위 정정 확인

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