코드를 먼저 보여드립니다.
간단한 주석을 옆에 달아놓았습니다.
이 코드는 한/글 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"
마치며
사실 많이 활용될 것 같지 않은 예제 같기는 합니다.
그래도 굳이 의미를 부여하자면
페이지를 일일이 순회하면서 페이지번호를 체크하는 복잡한 방법 대신
이렇게 특정 조건의 페이지 문자열을 인자로 받아 일괄 삭제가 가능한 코드라는 점에서
기록차 포스팅으로 남겨둡니다.
또 다른 누군가에게도 도움이 되기를 바랍니다.
감사합니다.
행복한 하루 되세요!
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
문서 중 특정 컨트롤을 모두 삭제하는 아주 간단한 코드 (2) | 2022.12.05 |
---|---|
[QnA] 파이참에서 한/글 API 코드 자동완성을 하고 싶어요! (0) | 2022.12.05 |
[QnA] pythonwin.exe로 한/글의 TypeLibrary 생성하기 (1) | 2022.12.04 |
댓글