증상
samples/exam_kor.hwp 가 한컴 PDF 와 비교하여 24 페이지 로 출력됨. PDF 는 20 페이지 이며 마지막 페이지 푸터가 20/20 이어야 정상이지만 rhwp 는 24/20 으로 표시.
PDF (Hwp 2022 12.0.0.4426 출력): 20 페이지 (A4 595x841 pt)
rhwp (v0.7.7): 24 페이지 (페이지 번호 1~24, /20 표시)
원인 분류
rhwp dump-pages 의 hwp_used (HWP LineSeg.vertical_pos 기록값) 와 rhwp 의 used 비교 결과 다음 3 가지 메커니즘으로 분리됨:
(1) 컬럼 over-fill → orphan + hard break
| 위치 |
rhwp used |
hwp_used |
diff |
상태 |
| page 1 단 1 (pi=0.30 split) |
1207.6 |
1153.1 |
+54.5 |
#393 등록됨 |
| page 14 단 1 (pi=1.25 split) |
1193.5 |
1087.4 |
+106.2 |
#393 코멘트 추가 |
직후 paragraph 가 [쪽나누기] 일 때 직전 페이지의 미사용 컬럼을 비운 채 page break → 거의 빈 page 2 (49px), page 15 (104px) 발생.
→ #393 의 (A) col 1 reserve 과대 + (B) 항목별 누적 과대 의 합산 효과. #393 수정 시 함께 회귀 검증 필요.
(2) Square wrap 표 + 컬럼 불균형 (page 16)
| 위치 |
rhwp used |
hwp_used |
diff |
| page 16 단 0 |
1225.8 (본문 1211.3 초과) |
— |
overflow 14px |
| page 16 단 1 |
64.3 (2 items) |
1189.0 |
-1124.7 |
page 16 단 0 에 wrap=Square 표 4 개 (pi=33, 37, 40, 47) 가 들어가며 단 0 이 본문 높이 초과. 단 1 에 pi=48, 49 만 배치되고 pi=50 부터 page 17 로 밀림. HWP 는 단 1 에 pi=48~? 까지 채워 1189px 사용.
추정 원인: paginate_text_lines (engine.rs:702-711) 의 표 직후 trailing line_spacing 제외 로직이 단 0 over-fill 을 통과시킴 → 단 1 시작 시 다음 paragraph 가 fit 못 함.
(3) 일반 페이지 누적 -100~-300px
다음 페이지에서 rhwp 가 한컴보다 컬럼당 100300px 부족하게 채움:
| 페이지 |
단 0 diff |
단 1 diff |
| 4 |
-250.1 |
-212.1 |
| 5 |
-42.8 |
-333.6 |
| 7 |
-169.8 |
-229.3 |
| 8 |
-272.5 |
-119.5 |
| 10 |
-218.0 |
-212.9 |
| 12 |
-268.5 |
-276.7 |
| 13 |
-329.0 |
-130.3 |
| 19 |
-373.1 |
-50.5 |
추정 원인: 표/도형 (Shape) 배치 후 컬럼 잔여 공간 산정이 한컴과 다르게 작게 산정되어 다음 paragraph 가 일찍 다음 컬럼/페이지로 밀려남. (1) 의 over-fill 과 정반대 방향이며 별도 메커니즘.
원하는 동작
- exam_kor.hwp 가 정확히 20 페이지로 조판 (마지막 페이지 푸터
20/20)
- 다른 다단/표 포함 문서 무회귀 (exam_eng 8 페이지, k-water-rfp 27 페이지, synam-001 등 기존 케이스 유지)
수정 우선순위 권고
| 순위 |
대상 |
예상 효과 |
| 1 |
#393 해결 (옵션 A: col 1 reserve 정정) |
page 2, 15 해소 → 22 페이지로 감소 예상 |
| 2 |
(3) 표/도형 후 컬럼 잔여 공간 산정 |
페이지 4, 5, 12, 13 등 누적 부족 해소 → 20 페이지 도달 |
| 3 |
(2) Square wrap 표 over-fill 보호 |
page 16 정상화 (위 1, 2 해소 시 자연스럽게 풀릴 가능성) |
재현 / 검증
# 페이지 수 확인
rhwp export-svg samples/exam_kor.hwp -o output/svg/exam_kor/
ls output/svg/exam_kor/exam_kor_*.svg | wc -l # 20 이어야 정상
# 페이지별 컬럼 사용 진단
for p in $(seq 0 19); do
rhwp dump-pages samples/exam_kor.hwp -p $p 2>&1 | grep -E "단 [0-9]+|페이지"
done
마일스톤
v1.0.0 (M100)
관련
증상
samples/exam_kor.hwp가 한컴 PDF 와 비교하여 24 페이지 로 출력됨. PDF 는 20 페이지 이며 마지막 페이지 푸터가20/20이어야 정상이지만 rhwp 는24/20으로 표시.원인 분류
rhwp dump-pages의hwp_used(HWP LineSeg.vertical_pos 기록값) 와 rhwp 의used비교 결과 다음 3 가지 메커니즘으로 분리됨:(1) 컬럼 over-fill → orphan + hard break
직후 paragraph 가
[쪽나누기]일 때 직전 페이지의 미사용 컬럼을 비운 채 page break → 거의 빈 page 2 (49px), page 15 (104px) 발생.→ #393 의 (A) col 1 reserve 과대 + (B) 항목별 누적 과대 의 합산 효과. #393 수정 시 함께 회귀 검증 필요.
(2) Square wrap 표 + 컬럼 불균형 (page 16)
page 16 단 0 에
wrap=Square표 4 개 (pi=33, 37, 40, 47) 가 들어가며 단 0 이 본문 높이 초과. 단 1 에pi=48, 49만 배치되고pi=50부터 page 17 로 밀림. HWP 는 단 1 에pi=48~?까지 채워 1189px 사용.추정 원인:
paginate_text_lines(engine.rs:702-711) 의 표 직후 trailingline_spacing제외 로직이 단 0 over-fill 을 통과시킴 → 단 1 시작 시 다음 paragraph 가 fit 못 함.(3) 일반 페이지 누적 -100~-300px
다음 페이지에서 rhwp 가 한컴보다 컬럼당
100300px 부족하게 채움:추정 원인: 표/도형 (Shape) 배치 후 컬럼 잔여 공간 산정이 한컴과 다르게 작게 산정되어 다음 paragraph 가 일찍 다음 컬럼/페이지로 밀려남. (1) 의 over-fill 과 정반대 방향이며 별도 메커니즘.
원하는 동작
20/20)수정 우선순위 권고
재현 / 검증
마일스톤
v1.0.0 (M100)
관련