증상
`samples/exam_eng.hwp` 5 페이지 32번 문항의 빈칸(`__________ of being 'stimulus-driven',`) 표현부의 dash 시퀀스가 PDF 보다 넓게 렌더링되어 "of being 'stimulus-driven'," 가 우측으로 치우쳐 일부가 잘려 보임.
환경
- 파일: `samples/exam_eng.hwp` (8 페이지, 5 페이지 좌측 컬럼 32번 문항)
- 파라그래프: 문단 0.221 "32.- Education, at its best, ..."
- 라인: line_seg[10] (ts=600 ~ 664)
분석
문단 속성:
- `align=Justify`, `auto_right=true`
- char_shape\[100\]: `spacing=-13%`, `ratio=95%`
- line_seg[10]: `sw=31744 HU` (열 폭 전체), `cs=0`
- 빈칸은 소스 텍스트의 dash(`-`) 38~40 개 반복 + `of being 'stimulus-driven',`
SVG 에서 dash 1 개당 advance ≈ 12.11 px.
기대 advance (폰트 메트릭 + 자간):
- HY신명조 메트릭상 `-` glyph 폭 = 384/1024 em
- font_size=15.31 → 5.74 px
- ratio 0.95 적용 → 5.46 px
- letter_spacing(-13%) = -1.99 px
- 최종 advance ≈ 3.46 px (min clamp = 2.73 px 이상)
실측 12.11 px 는 기대치의 ~3.5 배. 이 차이는 Justify 분배 알고리즘이 dash 시퀀스 내부에 균등 분배해 ~8.6 px/char 의 잉여 폭을 추가한 결과로 추정. 한컴/PDF 는 같은 라인을 훨씬 압축해 표현하므로 `of being` 가 좌측에 위치.
비교
| 영역 |
PDF |
SVG |
차이 |
| dash 1 개 advance |
~3.5 px (추정) |
12.11 px |
+8.6 px/char |
| 빈칸 총 폭 |
~135 px |
~340 px |
+200 px |
| `of being` x 좌표 |
컬럼 중앙쯤 |
우측 단 가까이 |
잘림 발생 |
추정 원인 분류
- Justify 분배 정책: 반복 dash 같은 "leader-like" 시퀀스를 단어 사이 공백과 동일하게 spread 시키는 로직.
- 위치: `src/renderer/paragraph_layout.rs` 또는 `src/renderer/composer/line_breaking.rs`
- 폰트 메트릭: HY신명조 dash 폭이 한컴 기준과 다를 가능성.
- char_shape spacing 적용 누락: -13% 자간이 dash 런에는 적용 안 되는 경로 존재 가능.
재현
```bash
./target/release/rhwp export-svg samples/exam_eng.hwp -p 4 -o /tmp/p5
rsvg-convert -w 2200 /tmp/p5/exam_eng_005.svg -o /tmp/p5.png
pdftoppm -r 188 -f 5 -l 5 samples/exam_eng.pdf /tmp/p5_pdf
/tmp/p5.png 와 /tmp/p5_pdf-5.ppm 비교 → Q32 라인 확인
```
비고
Task #347 (표/그림 절대 좌표·셀 padding) 처리 중 발견되었으나 본 이슈와는 범위 무관 (텍스트 레이아웃 폭 계산 미변경). 별도 이슈로 분리.
마일스톤
v1.0.0 (M100)
증상
`samples/exam_eng.hwp` 5 페이지 32번 문항의 빈칸(`__________ of being 'stimulus-driven',`) 표현부의 dash 시퀀스가 PDF 보다 넓게 렌더링되어 "of being 'stimulus-driven'," 가 우측으로 치우쳐 일부가 잘려 보임.
환경
분석
문단 속성:
SVG 에서 dash 1 개당 advance ≈ 12.11 px.
기대 advance (폰트 메트릭 + 자간):
실측 12.11 px 는 기대치의 ~3.5 배. 이 차이는 Justify 분배 알고리즘이 dash 시퀀스 내부에 균등 분배해 ~8.6 px/char 의 잉여 폭을 추가한 결과로 추정. 한컴/PDF 는 같은 라인을 훨씬 압축해 표현하므로 `of being` 가 좌측에 위치.
비교
추정 원인 분류
재현
```bash
./target/release/rhwp export-svg samples/exam_eng.hwp -p 4 -o /tmp/p5
rsvg-convert -w 2200 /tmp/p5/exam_eng_005.svg -o /tmp/p5.png
pdftoppm -r 188 -f 5 -l 5 samples/exam_eng.pdf /tmp/p5_pdf
/tmp/p5.png 와 /tmp/p5_pdf-5.ppm 비교 → Q32 라인 확인
```
비고
Task #347 (표/그림 절대 좌표·셀 padding) 처리 중 발견되었으나 본 이슈와는 범위 무관 (텍스트 레이아웃 폭 계산 미변경). 별도 이슈로 분리.
마일스톤
v1.0.0 (M100)