본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] 한/글 문서 쪼개기 프로그램에서 멈춰 있어요..

by 일코 2022. 11. 8.

안녕하세요. 유투브 열심히 잘 보고 있습니다. 
제게 꼭필요한 한글쪼개기 파일을 사용해보려고 하는데... 자꾸 에러가 나서 문의드립니다.
원래 파일쪼개기 실행하면, 접근허용 누른후에는 파일쪼개기 실행파일은 아무것도 안보이는것이 맞나요?? 사진첨부합니다.
파일쪼개기 실행하고, 한글문서 선택하고 있으면 꼭 멈춰있는것 같애요.
그러다 다시 파일쪼개기를 클릭했더니 또 오류가 나네요. 
어떻게 사용해야 하는걸까요? 
도와주셔서 감사드립니다. 
수고하세요~

추측해보건대,

아래아한글 2014 이하 버전에는 쪽 복사 기능을 제공하지 않기 때문에 발생하는 오류라고 생각됩니다.

질문 주신 분 캡쳐화면을 보니 한/글2014 또는 VP를 사용하고 계신 것 같네요..

현재 제 컴퓨터에는 한/글 2020 버전이 설치되어 있습니다.
저 영상 작성 당시에는 아마 2018을 사용중이었던 것으로 기억합니다.

페이지를 나누는 코드를 작성할 때

API명령어 중 하나인 "쪽 복사하기", "쪽 자르기" 및 "쪽 붙이기" 기능을 활용해서 간편하게 작성을 했는데,

이번 포스팅에서는 파이썬으로 한/글 문서를 직접 한 쪽씩 잘라내서 따로 저장하는 프로그램을 만들어보겠습니다.

코드는 제법 간단한데요. 여백정보나 쪽번호, 머릿말 및 꼬리말 등은 무시한 상태입니다..

전체 코드와 실행화면을 먼저 보여드리겠습니다.

import win32com.client as win32  # 한/글 열기 위한 모듈

hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")  # 한/글 실행
hwp.XHwpWindows.Item(0).Visible = True  # 한/글 백그라운드 해제
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")  # 보안모듈 실행
hwp.Run("FileOpen")  # 파일 열기 팝업 띄우기

page_count = hwp.XHwpDocuments.Item(0).XHwpDocumentInfo.PageCount  # 전체 페이지수 저장
filepath = hwp.XHwpDocuments.Item(0).FullName  # 현재 열린 문서의 전체경로 저장

hwp.HAction.Run("MoveDocBegin")  # 문서 시작점으로 이동해서
for i in range(1, page_count + 1):  # 페이지 수(1~23)만큼 순회하면서
    hwp.HAction.Run("MoveSelLineEnd")  # 라인전체(한페이지) 선택
    조판부호_보이는_상태 = hwp.SelectionMode  # 조판안보이면 선택 안 됨
    if not 조판부호_보이는_상태:  # 조판부호가 숨겨져 있으면
        hwp.Run("ViewOptionCtrlMark")  # 조판부호 보이게 변경
        hwp.HAction.Run("MoveDocBegin")  # 다시 문서 시작점으로 이동해서
        hwp.HAction.Run("MoveSelLineEnd")  # 라인전체 선택
    hwp.HAction.GetDefault("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)  # 다른이름으로 저장 액션 생성
    hwp.HParameterSet.HFileOpenSave.filename = filepath.replace(".hwp", f"#{i}.hwp")  # 원래파일명#페이지.hwp로 저장
    hwp.HParameterSet.HFileOpenSave.Format = "HWP"  # 포맷은 Native HWP
    hwp.HAction.Execute("FileSaveAs_S", hwp.HParameterSet.HFileOpenSave.HSet)  # 다른이름저장 실행
    hwp.HAction.Run("Delete")  # 현재문서 페이지 조판부호 삭제
    hwp.HAction.Run("Delete")  # 현재문서 빈 페이지 삭제
if not 조판부호_보이는_상태:  # 조판부호 보이게 바꿨으면 
    hwp.Run("ViewOptionCtrlMark")  # 다시 조판부호 안보이게 변경

msgbox = hwp.XHwpMessageBox  # 메시지박스 생성
msgbox.string = f"총 {page_count}개의 파일로 \r\n분할작업이 완료되었습니다."
msgbox.Flag = 0  # [확인] 버튼만 나타나게 설정
msgbox.DoModal()  # 메시지박스 보이기

hwp.Clear(1)  # 문서 변경내용 버리고
hwp.Quit()  # 한/글 종료
주석을 나름 꼼꼼하게 달았으므로 부가설명은 생략합니다.

위 코드를 파이참으로 한 번 실행해보겠습니다.

원하는 대로 잘 작동하는 것 같네요.

pyinstaller로 컴파일해서 실행파일을 만들어보겠습니다.

c:\...\> pip install pyinstaller
c:\...\> pyinstaller -F -w 문서쪼개기.py
-F 는 한 개의 exe파일로 생성하는 옵션, -w는 콘솔창을 띄우지 않는 옵션입니다.
실행 후 하위에 생성된 dist 폴더에 들어가면 컴파일된 exe파일이 생성되어 있습니다.

 

원래는 시간이 제법 오래 걸립니다. 두 번째 컴파일이라 금방 끝났어요..

코드 자체는 30줄 밖에 아닌데,

파이썬과 pywin32모듈 등이 모두 포함되어 있어 용량이 10메가 정도가 되었네요.

마지막으로 컴파일한 exe파일을 실행해보겠습니다.

잘 작동하는 것 같네요.

컴파일한 실행파일도 업로드해둡니다. 도움이 되었으면 좋겠습니다.

문서쪼개기.zip
10.08MB

궁금한 점 있으면 댓글로 알려주시길 바랍니다.

그럼 이번 포스팅은 여기서 마칩니다.

행복한 하루 되세요!

앞으로도 도움이 되는 콘텐츠를 만들어 가겠습니다.

 

댓글