본질
samples/basic/shortcut.hwp 페이지 1 의 헤더 표 (pi=1 '커서 이동', pi=29 '지우기') 가 단일 LINE_SEG TAC 1x1 표 + ColumnDef 동반 paragraph. 표 직후 본문 paragraph 사이 spacing 이 PDF 권위(한글 2022) 대비 ~38 px 압축.
Task #770 의 정정 대상 (pi=36 등 다중 LINE_SEG 패턴) 과 영역이 다름. 단일 LINE_SEG 케이스는 Task #770 가드 통과 안 함 (last.vpos > first.vpos 조건 미달).
재현
cargo run --release --bin rhwp -- export-svg samples/basic/shortcut.hwp -p 0 -o /tmp/x
PDF 페이지 1: 헤더 ('커서 이동') ~ 본문 ('빈칸 삽입') 거리 ≈ 60 px.
rhwp 페이지 1: 동일 거리 ≈ 21 px.
→ rhwp 38 px 압축.
IR 분석
pi=1 (페이지 1 '커서 이동' 헤더 — 결함)
[PS] ps_id=2 line=100/Percent spacing: before=0 after=0
ls[0]: vpos=0, lh=2332, ls=0 ← 단일 LINE_SEG (lh=2332 = 31.1 px)
[0] 단정의: 1단, 유형=일반, 간격=10mm
[0] 구분선: type=3, width=1, color=0x000000ff
[1] 표: 1x1, RowBreak, treat_as_char=true
[1] [outer_margin] left=283 right=283 top=283 bottom=283 (=1mm)
vpos_end = lh = 31.1 px. layout advance 31.1 px. PDF 정합 ~50+ px 필요.
pi=36 (페이지 2 '파일' 헤더 — Task #770 정정 완료)
ls[0]: vpos=0, lh=1200, ls=0 ← LINE_SEG 2개
ls[1]: vpos=1200, lh=2332, ls=0
vpos_end = 1200 + 2332 = 47.1 px. Task #770 의 3중 가드 (ColumnDef + 다중 LINE_SEG + last.lh > first.lh) 통과 후 advance 정합.
영향 paragraph
페이지 1 의 두 헤더 표:
- pi=1 ('커서 이동'): 단일 LINE_SEG, ColumnDef + Table
- pi=29 ('지우기'): 단일 LINE_SEG, ColumnDef + Table
dump-pages 페이지 1:
단 0 (items=1, used=69.1px, hwp_used≈53.1px, diff=+16.0px) ← pi=0 큰 헤더
단 1 (items=1, used=31.1px, zone_y_offset=69.1) ← pi=1 표 (단일 LINE_SEG)
단 2 (items=14, ..., zone_y_offset=100.2) ← 본문 시작
본문 zone_y_offset = 100.2 = 69.1 + 31.1. 표 직후 즉시 본문. PDF 와 38 px 차이.
Root cause 가설
가설 A: HWP parser 의 LINE_SEG 통합 인코딩
HWP 일부 paragraph 의 LINE_SEG 가 변환 시 다중 → 단일로 통합. pi=1 본질적으로 다중 LINE_SEG 이지만 IR 에서 단일로 인코딩.
가설 B: ColumnDef "간격" 의 미적용
pi=1 의 ColumnDef "간격=10mm (2835 HU = 37.8 px)" 이 단 1단이라 column-gap 으로 사용되지 않음. 이 값이 다단 영역 진입 시 추가 top-spacing 으로 적용되어야 할 가능성 (38 px 정확히 일치).
가설 C: 한컴 PDF 의 디자인 spacing
한컴 2022 PDF 가 단일 LINE_SEG 헤더 paragraph 에도 표 후속 디자인 spacing 추가 (HWPSPEC 외 자체 디자인).
정정 방향 후보
| 후보 |
위치 |
위험 |
| H1: ColumnDef.column_gap 을 단 1단 케이스에서 top-spacing 으로 적용 |
layout.rs ColumnDef 처리 |
ColumnDef 의미 변경 → 광범위 회귀 |
| H2: 단일 LINE_SEG TAC 표 + ColumnDef paragraph 에 표 후속 spacing 추가 |
layout_table_item TAC 분기 |
가드 식별자 부족 (pi=1 vs 다른 케이스) |
| H3: HWP parser 의 LINE_SEG 변환 정정 (다중 LINE_SEG 으로 통합 분리) |
parser/hwp5 |
본질 영역, 광범위 영향 |
영향 범위
samples/basic/shortcut.hwp 페이지 1 의 pi=1, pi=29 (단일 LINE_SEG 헤더 표)
- 다른 샘플 중 동일 패턴 (단일 LINE_SEG ColumnDef + 1x1 TAC 표) 가능성
우선순위
Task #768 (PR #772) + Task #770 (PR #771) 머지 후 별도 task 로 진행. 본 결함은 단일 LINE_SEG 케이스로 Task #770 의 영역 확장 또는 별도 메커니즘 필요.
관련 자료
본질
samples/basic/shortcut.hwp페이지 1 의 헤더 표 (pi=1 '커서 이동', pi=29 '지우기') 가 단일 LINE_SEG TAC 1x1 표 + ColumnDef 동반 paragraph. 표 직후 본문 paragraph 사이 spacing 이 PDF 권위(한글 2022) 대비 ~38 px 압축.Task #770 의 정정 대상 (pi=36 등 다중 LINE_SEG 패턴) 과 영역이 다름. 단일 LINE_SEG 케이스는 Task #770 가드 통과 안 함 (last.vpos > first.vpos 조건 미달).
재현
PDF 페이지 1: 헤더 ('커서 이동') ~ 본문 ('빈칸 삽입') 거리 ≈ 60 px.
rhwp 페이지 1: 동일 거리 ≈ 21 px.
→ rhwp 38 px 압축.
IR 분석
pi=1 (페이지 1 '커서 이동' 헤더 — 결함)
vpos_end = lh = 31.1 px. layout advance 31.1 px. PDF 정합 ~50+ px 필요.
pi=36 (페이지 2 '파일' 헤더 — Task #770 정정 완료)
vpos_end = 1200 + 2332 = 47.1 px. Task #770 의 3중 가드 (ColumnDef + 다중 LINE_SEG + last.lh > first.lh) 통과 후 advance 정합.
영향 paragraph
페이지 1 의 두 헤더 표:
dump-pages 페이지 1:
본문 zone_y_offset = 100.2 = 69.1 + 31.1. 표 직후 즉시 본문. PDF 와 38 px 차이.
Root cause 가설
가설 A: HWP parser 의 LINE_SEG 통합 인코딩
HWP 일부 paragraph 의 LINE_SEG 가 변환 시 다중 → 단일로 통합. pi=1 본질적으로 다중 LINE_SEG 이지만 IR 에서 단일로 인코딩.
가설 B: ColumnDef "간격" 의 미적용
pi=1 의 ColumnDef "간격=10mm (2835 HU = 37.8 px)" 이 단 1단이라 column-gap 으로 사용되지 않음. 이 값이 다단 영역 진입 시 추가 top-spacing 으로 적용되어야 할 가능성 (38 px 정확히 일치).
가설 C: 한컴 PDF 의 디자인 spacing
한컴 2022 PDF 가 단일 LINE_SEG 헤더 paragraph 에도 표 후속 디자인 spacing 추가 (HWPSPEC 외 자체 디자인).
정정 방향 후보
영향 범위
samples/basic/shortcut.hwp페이지 1 의 pi=1, pi=29 (단일 LINE_SEG 헤더 표)우선순위
Task #768 (PR #772) + Task #770 (PR #771) 머지 후 별도 task 로 진행. 본 결함은 단일 LINE_SEG 케이스로 Task #770 의 영역 확장 또는 별도 메커니즘 필요.
관련 자료
samples/basic/shortcut.hwp페이지 1pdf/basic/shortcut-2022.pdfsrc/renderer/layout.rs::layout_table_itemtac_seg_applied 분기