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

[3/5, HwpEqn] 컨트롤 탐색방법(feat. 파이썬)

by 일코 2020. 12. 18.

지난 포스팅은...

 

[2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법

(1) 안녕하세요 ~ 저는 유튜브 회사원코딩 구독자입니다. 올려주신 영상들 잘 시청하고 있습니다. 문의드릴 사항으로는 한글 파일을 이미지로 변환하여 저장하고, 한글파일내의 텍스트의 위치

www.martinii.fun


지난 포스팅에서는 수식을 선택해놓은 상태에서, 어떻게 하면 수식의 텍스트를 추출할 수 있는지를 보여주었다. 파이썬으로 해당 텍스트를 가져오기만 하면, 그 다음은 LaTeX로 변환해서 저장하든, 웹에 업로드를 하든 자유롭게 활용할 수 있을 것이기 때문이다.

그러면 이번 포스팅에서는, 추출하기 전에 수식을 차례로 선택하는 과정을 파이썬 코드로 진행해 보겠다. 지난 포스팅에서 언급한 바와 같이, GetAnchorPos(0), SetPos(List, Para, Pos), 그리고 FindCtrl() 등 세 가지 메서드를 이용하는 방법을 소개한다. 너무 자세한 설명은 생략하였으나, 댓글로 질문 남길 시 답변드릴 예정.

코드를 먼저 소개한다. 문서 안의 수식을 차례로 선택하는 파이썬 코드.

"""모든 수식 텍스트 차례로 dict로 얻기.
키는 (List, Para, Pos), 값은 eqn_string"""


def extract_eqn(hwp):  # 이전 포스팅에서 소개한, 수식 추출방법을 함수로 정의
    Act = hwp.CreateAction("EquationModify")
    Set = Act.CreateSet()
    Pset = Set.CreateItemSet("EqEdit", "EqEdit")
    Act.GetDefault(Pset)
    return Pset.Item("String")
    

eqn_dict = {}  # 사전 형식의 자료 생성 예정
ctrl = hwp.HeadCtrl  # 첫 번째 컨트롤(HeadCtrl)부터 탐색 시작.


while ctrl != None:  # 끝까지 탐색을 마치면 ctrl이 None을 리턴하므로.
    nextctrl = ctrl.Next  # 미리 nextctrl을 지정해 두고,
    if ctrl.CtrlID == "eqed":  # 현재 컨트롤이 "수식eqed"인 경우
        position = ctrl.GetAnchorPos(0)  # 해당 컨트롤의 좌표를 position 변수에 저장
        position = position.Item("List"), position.Item("Para"), position.Item("Pos")
        hwp.SetPos(*position)  # 해당 컨트롤 앞으로 캐럿(커서)을 옮김
        hwp.FindCtrl()  # 해당 컨트롤 선택
        eqn_string = extract_eqn()  # 문자열 추출
        eqn_dict[position] = eqn_string  # 좌표가 key이고, 수식문자열이 value인 사전 생성
    ctrl = nextctrl  # 다음 컨트롤 탐색
hwp.Run("Cancel")  # 완료했으면 선택해제

위 코드를 실행한 결과는 아래와 같다.

"찾기"도 그렇지만 "컨트롤 탐색" 또한 최적화가 잘 되어 있는 덕분인지, 굉장히 빨리 탐색이 끝난다.

간단한 코드 설명은 주석으로 달아 두었으며, 자세한 설명은 생략한다. 이해가 안되거나 궁금한 부분이 있는 경우,

1. 편하게 댓글로 문의 남겨놓으시거나,

2. HWP API 문서 중 "HwpCtrl API.hwp" 파일을 검색해볼 것.


이번 포스팅도 짧게 여기서 마친다. 어떤 독자들은 이런 궁금증을 가져보았을 수도 있다.

"수식"에서 "문자열 추출"이 가능하다면, 역으로 "수식문자열"만으로 "수식"을 만들 수 있지 않을까?

물론 가능하다. 그걸 다음 포스팅에서 다룰 예정이다.

 

 


다음 포스팅은...

 

[4/5, HwpEqn] 수식문자열로 수식 만드는 방법

지난 포스팅은... [3/5, HwpEqn] 컨트롤 탐색방법(feat. 파이썬) 지난 포스팅은... [2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법 (1) 안녕하세요 ~ 저는 유튜브 회사원코딩 구독자입니다. 올려주신

www.martinii.fun

 

댓글