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

파이썬-한/글API로 수식 자동삽입(feat. 밍밍님)

by 일코 2021. 8. 10.

질문주신 내용은..

수식삽입 관련 문의


제가 참고하라고 남겼던 114번 글은, 삽입방법이 들어있긴 하지만, 문맥상 기존에 있던 수식을 전부 해체 및 저장해서, 새로운 페이지나 새로운 문서에 집어넣기 위해 사전으로 저장하고, 사전에서 추출해오는 코드였습니다.

포스팅에 있던 코드 중 밍밍님께서 질문 주신 내용에 대한 부분만 추출해보면 아래와 같습니다.

from time import sleep

import win32com.client as win32


hwpeqn_text = "a ^{m} ÷a ^{n} = {cases{a ^{m-n} ~~&(m>n)#1&(m=n)#{1} over {a ^{n-m}}&(m<n)}}"

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")
hwp.XHwpWindows.Item(0).Visible = True

hwp.HAction.GetDefault("EquationCreate", hwp.HParameterSet.HEqEdit.HSet)
hwp.HParameterSet.HEqEdit.EqFontName = "HancomEQN"
hwp.HParameterSet.HEqEdit.string = hwpeqn_text
hwp.HParameterSet.HEqEdit.BaseUnit = hwp.PointToHwpUnit(25.0)
hwp.HAction.Execute("EquationCreate", hwp.HParameterSet.HEqEdit.HSet)
sleep(1)

hwp.FindCtrl()
hwp.HAction.GetDefault("EquationPropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
hwp.HParameterSet.HShapeObject.HSet.SetItem("ShapeType", 3)
hwp.HParameterSet.HShapeObject.Version = "Equation Version 60"
hwp.HParameterSet.HShapeObject.EqFontName = "HancomEQN"
hwp.HParameterSet.HShapeObject.HSet.SetItem("ApplyTo", 0)
hwp.HParameterSet.HShapeObject.HSet.SetItem("TreatAsChar", 1)
hwp.HAction.Execute("EquationPropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
hwp.Run("Cancel")

 

밍밍님께서 적어주신 수식문자열은 (Latex이 아니고) 한/글 수식문자열인데,

한/글 수식문자열은 다행히(?) 위처럼 API 명령어만 가지고 삽입할 수 있습니다.

만약 mathml 문자열이라면 수식편집기(Ctrl-N-M)에서 "불러오기(Alt-M)" 를 사용하는 방법 말고는 모르겠습니다;


위 코드를 라인별로 실행한 화면을 아래 남겨놓습니다.

한/글API로 수식 삽입

API명령어는 대부분 이해하실 거라 믿습니다.

한 가지만 부연설명드리면, 코드 중간과 마지막쯤에 Execute가 두 번 나오는데, 처음 삽입된 수식은 경우에 따라 폰트가 너무 안예쁘게 나옵니다. 그래서 폰트를 변경하는 두 번째 Execute를 실행한 다음에야 한/글의 미려한 폰트가 적용되는 것을 보실 수 있는데, 한/글의 버그인지 (제 버그인지) 다 우겨넣고 Execute 한번에 실행하면 예쁜 폰트가 적용이 안 되는 것 같더라고요.

도움이 되었길 바랍니다.

행복한 하루 되세요^^


donaricano-btn

 

댓글