배경
#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_y 가 layout_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)
compute_cell_line_ranges 정상 vpos delta 보정
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 산출 정합
제안 방향
- 셀별 vpos 가드 —
cell.paragraphs.first().line_segs.first().vpos 가 0 인 경우만 vpos 기반 정합 적용 (한컴 인코딩 정상 케이스)
- 회귀 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 통과
관련
배경
#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.hwpcell[11] (사업개요, 26 paras):src/renderer/layout/table_partial.rs의 셀 paragraph 루프에서para_y가layout_composed_paragraphreturn 값으로 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)
compute_cell_line_ranges정상 vpos delta 보정table_partial.rsparagraph 시작 y 의 vpos 기반 보정→ 둘 다
samples/hwpx/form-002.hwpxp1 (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.rslayout_composed_paragraph의 line y 산정제안 방향
cell.paragraphs.first().line_segs.first().vpos가 0 인 경우만 vpos 기반 정합 적용 (한컴 인코딩 정상 케이스)검증
- 전사 데이터 수집/유통체계 구축정상 표시관련