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

커뮤니티질문 : GetText()에서 표, 글상자에서 텍스트 읽어오기?

by 일코 2021. 1. 22.
HwpCtrl.InitScan(0, 2);
alert(HwpCtrl.GetText());
HwpCtrl.ReleaseScan();

위 코드 내용은 한컴설명서에 있는 내용 입니다.
그런데 저렇게 하면 표, 글상자에 있는 내용은 읽어 오기 못 합니다.
특정 문단에 있는 내용을 읽어 싶은데 일반 글자는 읽어 오는데 표, 글상자에 있는 내용은 읽어오지 못 합니다.
고수님들 조언을 부탁 합니다.
 

https://www.hancom.com/board/devcommView.do?board_seq=48&artcl_seq=10844&pageInfo.page=&search_text=

 

www.hancom.com

API매뉴얼에 씌어있는 파라미터(대부분 숫자)들은, 신기하게도 조합이 가능하며
(파이썬의 경우) 조합하는 방법은 일반적으로 "더하기"이다.

위 질문의 경우는 (아마) InitScan이 문제가 된 상황인데,
결론부터 이야기하면, 파라미터가 잘못 입력되었다.

 


 

우선 API문서에서 InitScan 메서드의 설명을 찾아보자.

HwpCtrl API.hwp 문서의 113~114쪽

1. 우선 칭찬해~

"검색시작" 메서드인데, 설명도 참 길었다. 어떤 때는 장황한 매뉴얼이 불만일 수 있지만, 
"설마 이런 기능도 있을까?" 싶어 API매뉴얼을 찾아보면, 있을 때가 많다. 보통은 못 찾아서 못 써먹는다.
한/글이 단순한 워드프로세서가 아니라, 섬세한 API까지 제공되는 문서자동화 프로그램이라고 봐도 될 만큼.. (주관적)
각각의 메서드가 굉장히 깊은 고민이 녹아 있다는 느낌을 자주 받는다.

InitScan을 예로 들어보면,

"표 안에 있는 텍스트는 빼고 문자열을 추출" 한다든지, "표 안에 있는 텍스트만 문자열을 추출"한다든지,

... 아니다. 조합은 무궁무진하지만, 한 번 끄적여보겠다.

hwp.InitScan()  # 문서 전체를 대상으로 모든 컨트롤을 포함하여 문자열을 추출
hwp.InitScan(4)  # 전체를 대상으로 하되, 문자열 중 "누름틀" 등이 있으면 그 부분에서 끊어준다.
hwp.InitScan(4, 0)  # 캐럿 위치부터 탐색한다.
hwp.InitScan(4, 16, 3)  # 세 번째 문단부터 탐색을 시작한다.
hwp.InitScan(4, 16, 3, 10)  # 세 번째 문단 10번째 글자부터 탐색을 시작한다.
hwp.InitScan(None, 0xff)  # 컨트롤을 포함한 문서 전체를 대상으로, 선택영역만 탐색한다.
hwp.InitScan(None, 0x1ff)  # 컨트롤을 포함한 문서 전체를 대상으로, 선택영역만 역방향으로 탐색한다.

이런 식으로 API매뉴얼을 보면서 "16진수의 합"으로 옵션을 조합할 수 있다. 신박하지 않은가?
질문 주신 분께서도, 사실 여러 방면으로 API매뉴얼 등에서 예제나 해결책을 찾아보셨겠다는 느낌을 받는다.
의외로 등잔밑이 어둡다고, 메서드 설명 안에 문제해결방법이 있는 이런 경우도 있으니...

뭐 어쩌겠는가? 한컴에서 좀 더 가독성 좋게 신규메서드나 프로퍼티 포함해서
통합 API매뉴얼(ver.2020)이라도 배포해주었으면 하는 마음만 자꾸 커진다....

 


 

2. 그래서 위 질문에 대한 답변은,

HwpCtrl.InitScan(0, 2);

여기서 0과 2의 의미를 조합해보면,
"본문을 대상으로 검색(표나 글상자 등은 제외)하며 현재 캐럿 위치부터 해당 줄의 끝까지만 추출하라"는 의미이다.

간단히,

HwpCtrl.InitScan();

로 바꾸면 해결될 문제로 생각된다.

이번 포스팅은 여기서 끝.

댓글