Skip to content

exam_eng.hwp p5 Q32: dash 시퀀스의 Justify 폭 부풀림 #352

@planet6897

Description

@planet6897

증상

`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 좌표 컬럼 중앙쯤 우측 단 가까이 잘림 발생

추정 원인 분류

  1. Justify 분배 정책: 반복 dash 같은 "leader-like" 시퀀스를 단어 사이 공백과 동일하게 spread 시키는 로직.
    • 위치: `src/renderer/paragraph_layout.rs` 또는 `src/renderer/composer/line_breaking.rs`
  2. 폰트 메트릭: HY신명조 dash 폭이 한컴 기준과 다를 가능성.
  3. 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)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions