본문 바로가기
아래아한글 자동화/pyhwpx 사용법

[pyhwpx] 한/글 문서의 수식 문자열 초간단 추출하기

by 일코 2024. 2. 1.

아래아한글에는 고유의 수식 언어인
HwpEqn이라는 체계가 있는데
이게 써볼수록 진국이다.

가재가 게편이라 그런지,
LaTeX과 유사한 듯 하면서도 HwpEqn이 더 간결하고 우월하다는 느낌도 든다.

하여튼,

어떤 분께서 한/글 개발자 포럼에 아래와 같은 질문을 남겨주셨다.

"내부"라 하심은, 수식문자열을 말씀하시는 거겠지?

 

1. 기존의 오토메이션API를 사용하는 방식

기존 한/글 오토메이션API를 이용하여
문서 내의 모든 수식을 추출해 오는 (내가 아는 한 가장 간결한) 방법은 아래와 같다.

"""
각 수식 밑에 수식String 삽입하는 코드
"""


import os
import win32com.client as win32


hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
hwp.RegisterModule(
    "FilePathCheckDLL", "FilePathCheckerModule")
hwp.Open(os.path.join(os.getcwd(), "수식샘플.hwp"))

ctrl = hwp.HeadCtrl
while ctrl:
    if ctrl.UserDesc == "수식":
        eqn_string = ctrl.Properties.Item("String")
        hwp.SetPosBySet(ctrl.GetAnchorPos(0))
        hwp.HAction.Run("MoveRight")
        hwp.HAction.Run("BreakPara")
        
        pset = hwp.HParameterSet.HInsertText
        hwp.HAction.GetDefault("InsertText", pset.HSet)
        pset.Text = eqn_string
        hwp.HAction.Execute("InsertText", pset.HSet)
        hwp.HAction.Run("BreakPara")
        hwp.HAction.Run("BreakPara")
    ctrl = ctrl.Next

 

pyhwpx를 사용하는 조금 더 간결한 방식

그리고 pyhwpx를 사용하는 방식도 위와 비슷한데,
hwp.ctrl_list라는 속성을 만들어 둬서,
리스트 컴프리헨션 같은 파이썬 문법으로 간결하게 정보를 꺼내올 수도 있다.
수식 밑에 수식문자열을 삽입하는 코드는 아래와 같다.

from pyhwpx import Hwp

hwp = Hwp()
hwp.open("./수식샘플.hwp")

for ctrl in hwp.ctrl_list:
    if ctrl.UserDesc == "수식":
        hwp.move_to_ctrl(ctrl)
        hwp.MoveRight()
        hwp.BreakPara()
        hwp.set_font(TextColor="Red")
        hwp.insert_text(ctrl.Properties.Item("String"))
        hwp.BreakPara()
파이써닉하게 모듈을 만들고 싶었다. for문을 쓸 수 있다는 것 자체가 내겐 행복이다.

 

실행결과는 동일하다. (삽입 글자색만 바꿔봤다.)

모듈을 내 입맛대로 만들었더니
내 맘에 쏙 드는 코드 스타일이 나오기는 하는데
많은 이들이 좋아해줬으면 더 좋겠다ㅎ

 

이번 포스팅은 여기서 마침!

포스팅과는 상관없음..

댓글