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

문서 중 짝수(또는 홀수)페이지를 전부 삭제하는 파이썬코드

by 일코 2022. 12. 5.

코드를 먼저 보여드립니다.

간단한 주석을 옆에 달아놓았습니다.

이 코드는 한/글 2014 이하 버전에서는 작동하지 않습니다.
act = hwp.CreateAction("DeletePage")  # DeletePage 액션 생성
pset = act.CreateSet()  # 파라미터셋 생성
act.GetDefault(pset)  # 파라미터셋에 현재값 대입
pset.SetItem("Range", 2)  # 삭제범위 설정. {2:RangeCustom에서 지정한 페이지만 삭제, 0:현재 쪽 삭제(RangeCustom 무시), 1:선택한 모든 쪽 삭제}
pset.SetItem("RangeCustom", ", ".join([str(i) for i in range(1, hwp.XHwpDocuments.Item(0).XHwpDocumentInfo.PageCount + 1) if i % 2]))  # 범위 임의설정
act.Execute(pset)  # 변경된 파라미터셋 값으로 액션 실행

# 한/글의 페이지 선택 문법(Print, DeletePage 등 페이지 선택시 사용됨)
# "i-j" : i쪽부터 j쪽까지 
# "i, j" : i쪽 및 j쪽
#
# 예시
# "1, 2": 1, 2페이지만 삭제
# "1-10": 1 ~ 10페이지 전부 삭제
# "1, 3-6, 8-10" : 1, 3, 4, 5, 6, 8, 9, 10페이지 삭제

 

 

실행해보면

의도하는 대로 잘 실행되네요.

 

5번째 라인이 유난히 길어요.

이해를 돕기 위해 하나씩 풀어서 예시코드를 보여드리오니 참고하시기 바랍니다.

>>> pages = hwp.XHwpDocuments.Item(0).XHwpDocumentInfo.PageCount  # 전체 쪽수
>>> pages
4

>>> list(range(pages))  # range함수 인덱스는 0부터 시작하는데, 한/글의 페이지선택은 1부터 시작하므로
[0, 1, 2, 3]

>>> list(range(1, pages+1))  # 이렇게 시작 인덱스를 0 대신 1로 고치고, 종료 인덱스도 1을 더함.
[1, 2, 3, 4]

>>> a = [str(i) for i in range(1, hwp.XHwpDocuments.Item(0).XHwpDocumentInfo.PageCount + 1) if i % 2]
>>> a  # 2로 나눠서 몫이 0이 아닌 페이지만 선택
["1", "3"]

>>> ", ".join(a)  # ", "를 구분자로 하여 리스트의 요소 문자열들을 전부 병합
"1, 3"

>>> b = [str(i) for i in range(1, hwp.XHwpDocuments.Item(0).XHwpDocumentInfo.PageCount + 1) if not i % 2]
>>> b  # 2로 나눠서 몫이 0인 페이지만 선택
["2", "4"]

>>> ", ".join(b)
"2, 4"

 

마치며

사실 많이 활용될 것 같지 않은 예제 같기는 합니다.

그래도 굳이 의미를 부여하자면

페이지를 일일이 순회하면서 페이지번호를 체크하는 복잡한 방법 대신

이렇게 특정 조건의 페이지 문자열을 인자로 받아 일괄 삭제가 가능한 코드라는 점에서

기록차 포스팅으로 남겨둡니다.

또 다른 누군가에게도 도움이 되기를 바랍니다.

 

감사합니다.

행복한 하루 되세요!

댓글