Skip to content

셀 paragraph y 시각 배치 vpos 정합 — Task #697 후속 (form-002 회귀 가드 필요) #700

@planet6897

Description

@planet6897

배경

#697 처리 중 발견된 후속 영역. inner-table-01.hwp 의 cell-internal split 정합화 작업에서, compute_cell_line_ranges 의 line_ranges 산출은 vpos 리셋 검출로 PDF 정합화 했으나, paragraph 시각 배치 자체가 line_height + line_spacing 누적 기반 이라 한컴 vpos 와 ~50px 어긋난다.

결함 본질

samples/inner-table-01.hwp cell[11] (사업개요, 26 paras):

항목 rhwp 한컴 vpos
paragraph 분포 폭 ~407px (line_h+ls 누적) 459.7px (vpos 누적)
차이 −52px (rhwp compact)

src/renderer/layout/table_partial.rs 의 셀 paragraph 루프에서 para_ylayout_composed_paragraph return 값으로 line metric 누적. 이 metric 이 paragraph 사이 spacing 산출 방식 (spacing_before/after) 차이로 한컴 vpos 와 어긋난다.

부수 결함 (동일 원인)

p2 첫 paragraph 누락 — - 전사 데이터 수집/유통체계 구축

PDF p2 첫 줄: - 전사 데이터 수집/유통체계 구축 (p[17], vpos=27920 → 끝 405.83px)
rhwp p2 첫 줄: - 생성형 AI 기반 ... (p[18])

원인: pagination 단계 split_end_content_limit=459.7 산출이 한컴 cut 위치(389405px)와 어긋남. rhwp 의 line_h+ls 누적 cum 이 한컴 vpos 누적 metric 보다 작아 더 많은 paragraph 가 visible 처리됨. p[17~19] 가 잘못 p1 에 들어가고 p2 시작이 p[18] 로 어긋남.

시도한 정정 (Task #697 Stage 3-2)

  1. compute_cell_line_ranges 정상 vpos delta 보정
  2. table_partial.rs paragraph 시작 y 의 vpos 기반 보정

둘 다 samples/hwpx/form-002.hwpx p1 (PartialTable 26x27, split_end=443px) 회귀 발생: 마지막 paragraph 누락. 일반화 가드 필요.

핵심 영역

  • src/renderer/pagination/engine.rs 의 split_end_content_limit 산출 — 한컴 vpos 단위와 정합 필요
  • src/renderer/layout/table_partial.rs 셀 paragraph 루프 (L514-) para_y 갱신
  • src/renderer/layout/paragraph_layout.rs layout_composed_paragraph 의 line y 산정
  • 셀별 paragraph 사이 spacing 산출 정합

제안 방향

  1. 셀별 vpos 가드cell.paragraphs.first().line_segs.first().vpos 가 0 인 경우만 vpos 기반 정합 적용 (한컴 인코딩 정상 케이스)
  2. 회귀 fixture 군 사전 검증 — form-002, exam_kor, k-water-rfp, hwp3-sample 등 광범위 RMSE 검증 후 적용

검증

  • 시각 정합: inner-table-01 p1/p2 SVG ↔ PDF -fuzz 5% 이내
  • p2 첫 줄에 - 전사 데이터 수집/유통체계 구축 정상 표시
  • 회귀: form-002.hwpx p1 paragraph 누락 없음, 전체 cargo test 통과

관련

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