Skip to content

exam_kor.hwp 24페이지 → 20페이지 정합 (한컴 PDF 호환) #435

@planet6897

Description

@planet6897

증상

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-pageshwp_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)

관련

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions