직장인

[회사원] 업무 코딩기록 - (PyHwpx)Hwp_File Slicing(3EA)

cyy1211 2024. 12. 24. 15:39
728x90
반응형
import os
from pyhwpx import Hwp

# 작업 대상 파일 경로 설정
folder_path = "C:\\Users\\user\\Desktop\\VSCode(python)\\(CODE)Pyhwpx\\raw"
output_folder_path = "C:\\Users\\user\\Desktop\\VSCode(python)\\(CODE)Pyhwpx\\result"  # 결과물이 저장될 경로

# 바탕화면으로 이동
os.chdir(os.path.join(os.environ["USERPROFILE"], "desktop"))

# 분할파일 저장할 폴더 생성 (폴더가 없을 경우에만 생성)
if not os.path.exists(output_folder_path):
    os.mkdir(output_folder_path)

# 원본문서 열기
Hwp = Hwp()
cur_view_state = Hwp.ViewProperties.Item("OptionFlag")
if cur_view_state not in (2, 6):
    prop = Hwp.ViewProperties
    prop.SetItem("OptionFlag", 6)
    Hwp.ViewProperties = prop

# 작업 대상 파일 열기 (hwp와 hwpx 모두 지원)
hwp_file_path_hwp = os.path.join(folder_path, "test.hwp")
hwp_file_path_hwpx = os.path.join(folder_path, "test.hwpx")

# 파일이 존재하는지 확인하고 열기
if os.path.exists(hwp_file_path_hwpx):
    Hwp.open(hwp_file_path_hwpx)
elif os.path.exists(hwp_file_path_hwp):
    Hwp.open(hwp_file_path_hwp)
else:
    print("작업할 파일이 존재하지 않습니다.")
    exit()

# 3페이지씩 잘라서 저장하기(HWP문서 쪽번호 순차배열필수, 조판부호에서 새쪽번호로 시작 모두 삭제, 그림형식 표는 글자처럼 취급으로 선처리)
i = 1
while True:
    prop = Hwp.ViewProperties
    prop.SetItem("OptionFlag", cur_view_state)
    Hwp.ViewProperties = prop
    try:
        Hwp.MoveDocBegin()  # 문서 처음으로 이동 후,
        Hwp.goto_page(3)  # 3페이지로 가서(페이지수 변경 시 숫자 수정)
        Hwp.MovePageEnd()  # 3페이지 끝에서부터
        Hwp.MoveSelDocBegin()  # 문서 시작까지 선택(Sel)
        Hwp.save_block_as(os.path.join(output_folder_path, f"{i}.hwp"))  # 선택영역 블록저장(1.hwp, 2.hwp, 3.hwp, ....)
        Hwp.DeleteBack()  # 선택영역 삭제
        Hwp.Delete()  # 빈 줄 삭제
        i += 1  # 다음 파일 준비
    except:  # 오류 나면(hwp.goto_page는 범위를 벗어난 정수를 입력하면 오류 발생)
        break  # while문 종료

# 한글 프로세스 종료
try:
    Hwp.Quit()  # pyhwpx에서 제공하는 종료 명령(존재할 경우)
except AttributeError:
    print("pyhwpx 종료 명령 실패, 강제 종료 시도 중...")

print("끝.")

 

※ 상기 코드는 일코(ilco)님 도움을 받아 작성하였습니다.

728x90
반응형