인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박주현님의 프로필 이미지
박주현

작성한 질문수

직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피

[응용] 폴더에 있는 한/글 파일을 모두 열기

여러 개의 한글 문서를 합치는 방법 관련 후속 문의

해결된 질문

작성

·

117

·

수정됨

2

여러 개의 한글 문서를 '문서 끼워 넣기' 기능을 이용해 합치는 방법 문의 -- 박주현 -- 24.10.17 14:56 관련입니다.

해당 문의에 대해 아래와 같이 코드를 답변 주셨었는데요.

 

from pyhwpx import Hwp  # 임포트

hwp = Hwp()  # 한/글 실행

# 샘플문서 생성
# 샘플문서 생성

import os

os.chdir("c:\\users\\user\\desktop\\combine")
for i in [
    "개구리",
    "너구리",
    "다람쥐",
    "라마",
    "미어캣",
    "방울새",
    "사자",
    "얼룩말",
    "지렁이",
    "참새",
    "코끼리",
    "토끼",
    "펭귄",
    "호랑이",
]:
    hwp.SelectAll()
    hwp.Delete()
    hwp.set_font(Height=40)
    hwp.insert_text(i)
    hwp.save_as(f"{i}.hwp")

# 끼워넣기
hwp.open(os.listdir()[0])  # "개구리.hwp" 열기
for i in os.listdir()[1:]:  # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복
    hwp.MoveDocEnd()  # 한/글의 문서 끝으로 이동해서
    hwp.insert_file(i)  # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) 
hwp.save_as("취합본.hwp")  # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장

hwp.Quit()  # 한/글 프로그램 종료

 

인터프리터 버전의 문제 및 pyhwpx 패키지 설치 등의 문제가 있었지만 그것들은 해결하였고, 코드가 동작하는데까지는 성공하였습니다.

일코님의 결과물과 제 결과물이 다릅니다.

일코님의 결과물은 아래 스크린샷과 같습니다.

일코.png


 

반면에, 저의 "통합본.hwp"을 열어보면, 한 페이지마다 하나의 동물 이름이 입력되어 있는 것이 아니라 한 페이지 안에 모든 13개의 동물 이름이 아래 괄호 안과 같이 붙어 있는 형태입니다.
(개구리너구리다람쥐라마미어캣방울새사자얼룩말지렁이참새코끼리토끼펭귄호랑이)

아래 스크린샷은 제 노트북 화면이니 함께 참고 부탁드립니다.

1.png

 

같은 코드인데 왜 결과가 다른지 혹시 이유를 문의드려도 될까요?

혹시 끼워넣기 할 때 새 페이지로 넘기기 한 후 끼워넣을 수 있는 코드가 있는지 아시는지요?

 

참고로, 제가 수동으로 빈문서를 열고, 끼워넣기(ctrl-o)를 통해 글자모양유지, 스타일유지, 문단모양유지, 쪽모양유지 체크한 상태에서 넣기 하면, 다음 페이지로 넘긴 상태에서 끼워넣기가 잘 됩니다.
반면에 제가 파이참에서 위 코드를 넣고 실행했을 때는 다음 페이지로 넘긴 상태에서 끼워넣기가 되는 것이 아니라 본래의 페이지의 맨 하단 커서 위치 뒤로 붙으므로 의도하는 결과가 아닙니다.

답변 1

0

일코님의 프로필 이미지
일코
지식공유자

주현님 안녕하세요?

hwp.insert_file 메서드는 아래아한글의 문서 끼워넣기( Ctrl- O )와 동일한 기능입니다.

아래아한글에서 (아마 특정 버전 이상부터는)

아래와 같은 옵션을 주고 문서를 25번 끼워넣기 하는 것과 같은데요.

image.png

위 화면에서 쪽 모양 유지 옵션이, 별도의 페이지로 끼워넣는 기능입니다.

 

추측해보건대, 주현님의 아래아한글 버전과 제 버전이 달라서 생기는 차이 아닌가 싶습니다.

hwp.insert_file(i, keep_section=True)로 파라미터를 추가하고 실행해도

한 페이지에 텍스트가 모두 들어가버린다면, hwp.BreakPage()를 추가로 실행하시면 되겠습니다.

코드는 아래와 같습니다.

#...

# 끼워넣기
hwp.open(os.listdir()[0])  # "개구리.hwp" 열기
for i in os.listdir()[1:]:  # 첫 번째(0) 파일은 제외하고 두 번째(1)파일부터 아래 들여쓰기한 코드 반복
    hwp.MoveDocEnd()  # 한/글의 문서 끝으로 이동해서
    hwp.BreakPage()  # <----------------------- 페이지나누기(Ctrl-Enter)
    hwp.insert_file(i)  # 문서끼워넣기(기본값은 섹션, 글자, 문단, 스타일 모두 유지) 
hwp.save_as("취합본.hwp")  # 반복이 끝났으면 "취합본.hwp"로 다른이름으로저장

hwp.Quit()  # 한/글 프로그램 종료

 

이렇게 hwp.BreakPage()를 추가해서 다시 실행해보시면 페이지가 나눠져서 병합되어 있을 것입니다.

 

박주현님의 프로필 이미지
박주현
질문자

유레카~ hwp.BreakPage() 를 코드에 추가하니 일코님과 동일한 결과가 나타납니다.

[참고] hwp.insert_file(i, keep_section=True) 로 바꾸는 것은 실행결과에 변화가 없었음.

해결책을 알려주셔서 감사합니다.

hwp.BreakPage() # <----------------------- 페이지나누기(Ctrl-Enter)

박주현님의 프로필 이미지
박주현

작성한 질문수

질문하기