본문 바로가기
업무자동화/파이썬-아래아한글 자동화 기초

[파이썬-한/글]GetText 사용시 탐색범위 지정하는 방법

by Martinii의 회사원코딩 2021. 8. 14.

질문주신 내용

양동훈 님께서 질문주신 내용

GetText는 한/글 문서 내의 모든 텍스트를 탐색하는 메서드입니다.

사용방법은 ①InitScan으로 초기화하고, ②GetText로 탐색한 후에 ③ReleaseScan으로 종료합니다.

재미있는 점은, 탐색범위 지정이 굉장히 유연한데, InitScan 실행시 optionRange 파라미터를 사용해서 옵션과 탐색범위를 정할 수 있습니다. 예를 들어 본문만, 역순으로, 라인별로 끊어서, 단락기호별로, 블록선택한 범위 내에서, 혹은 커서위치부터 등등 굉장히 유연하며, MovePosSetPos를 사용해서 탐색중인 문단 혹은 글자위치로 캐럿을 옮기는 것도 간편합니다. (어떤 면에서는 찾아바꾸기 액션과 유사해 보이지만, 

 

API매뉴얼 중 InitScan을 찾아보겠습니다. (HwpCtrl API.hwp 95페이지입니다.)

option, Range, (spara, spos, epara, epos) 등 2~6개 파라미터 활용

참고로 값 열의 "0x0001" 또는 "0x1"은, 16진수 1을 나타내는 표기법입니다. (파이썬과 동일)

조금만 더 부연설명을 드리면, option과 Range 파라미터는 더하기 연산으로 조합이 가능합니다.

무슨 뜻이냐면, Range로 범위를 지정할 때 "캐럿 위치부터 문서의 끝까지"로 지정하려면

0x0000 + 0x0007 = 0x0007이므로 Range=0x7이라고 지정하면 됩니다. (정수값을 그대로 입력해도 되고요.)

줄의 시작부터 줄의 끝까지로 지정하려면 0x0020+0x0002 = 0x0022이므로 Range=0x22로 지정하면 되는 거죠.

 

그러면 동훈님께서 질문 주신 두 가지,

① 페이지 범위 지정 탐색

② 현재 커서 위치 이후로만 탐색

 

이건 어떻게 옵션을 주면 좋을까요? 둘 다 의외로 간단할 수 있는데,

① 페이지 범위 지정 탐색 방법

커서를 해당 페이지 시작점으로 이동하고 나서 InitScan을 시작하면 됩니다.

# 5페이지로 이동
target_page = 5
hwp.HAction.Run("MoveDocBegin")  # 문서 시작으로 이동
for _ in range(target_page-1):
	hwp.HAction.Run("MovePageDown")  # 문서 시작으로 이동
    
hwp.InitScan(...)

특정 페이지까지만 탐색하는 방법은 대략 이렇습니다.

# 5페이지로 이동

target_page = 5
hwp.HAction.Run("MoveDocBegin")  # 문서 시작으로 이동
for _ in range(target_page-1):
	hwp.HAction.Run("MovePageDown")  # 문서 시작으로 이동

# 5~10페이지 탐색

current page = hwp.KeyIndicator()[3]
hwp.InitScan(option=0, Range=0x22)
while current_page <= 10:
    text = GetText()  # 탐색실시
    if text[0] in (0, 1):  # 문서끝에 도달한 경우
    	break  # while문 종료
    hwp.SetPos(201)  # MoveScanPos : GetText() 탐색위치로 커서 이동
    current page = hwp.KeyIndicator()[3]  # 현재 쪽번호
    print(text[1])  # text[1]로 자유롭게 작업 실시

댓글0