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

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

by 일코 2021. 8. 14.

질문주신 내용

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

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

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

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


0x는 파이썬에서 16진수의 정수를 의미하며, 이는 10진수로 변환하여 입력해도 무방합니다.

조금만 더 부연설명을 드리면, 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]로 자유롭게 작업 실시

 


donaricano-btn

댓글