해결된 질문
작성
·
40
1
답변 2
1
1
상하님, 안녕하세요?
우선, XHwpCharacterShape은
현재 커서 위치 또는 선택영역의 글자속성을 조회하거나 변경할 수 있습니다.
아래는 그 예시입니다.
import win32com.client as win32
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Item(0).Visible = True
# 아래아한글 빈 창이 열림
charshape = hwp.XHwpDocuments.Item(0).XHwpCharacterShape
# 다 타이핑하기 귀찮아서 charshape이라는 변수로 만들어놓음
charshape.Bold = True
pset = hwp.HParameterSet.HInsertText
pset.Text = "Hello world!\r" # \r은 엔터
hwp.HAction.Execute("InsertText", pset.HSet)
# 두꺼운 글자 입력
charshape.Bold = False
pset = hwp.HParameterSet.HInsertText
pset.Text = "Hello world!\r"
hwp.HAction.Execute("InsertText", pset.HSet)
# 얇은 글자 입력
hwp.Run("SelectAll")
charshape.Italic = True
hwp.Run("Cancel")
# 모두 선택 후 이탤릭 적용
단락별로 실행결과를 보여드리기 위해 jupyter로 실행했습니다.
다만, 직접 열어놓은 한/글 창에 파이썬으로 접근하기 위해서는
아래와 같이 다소 긴 코드를 입력해야 합니다.
import win32com.client as win32
import pythoncom
hwp = None
context = pythoncom.CreateBindCtx(0)
running_coms = pythoncom.GetRunningObjectTable()
monikers = running_coms.EnumRunning()
for moniker in monikers:
name = moniker.GetDisplayName(context, moniker)
if name.startswith('!HwpObject.'):
obj = running_coms.GetObject(moniker)
hwp = win32.gencache.EnsureDispatch(
obj.QueryInterface(pythoncom.IID_IDispatch))
hwp.XHwpWindows.Active_XHwpWindow.Visible = True
if not hwp:
hwp = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
hwp.XHwpWindows.Active_XHwpWindow.Visible = True
위 코드를 실행하면 현재 실행되어 있는 한/글 문서에 hwp라는 변수로 접근 가능하게 되고
작성해두신 자동화 코드를 이어서 실행하시면 됩니다.
참고로,
API나 win32com 특성상 코드가 굉장히 길기 때문에
제가 미리 짜둔 코드를 간편하게 활용하실 수 있도록
pyhwpx라는 파이썬 모듈을 제작하여 배포하고 있습니다.
(`pip install pyhwpx`로 설치 가능합니다.)
win32com으로 생성하는 hwp 객체와 거의 동일한 인터페이스에
(내부적으로는 거의 모두 오토메이션API로 돌아가기 때문입니다.)
몇 가지 편리한 기능을 추가하였으니,
pyhwpx를 사용해보실 것을 추천드립니다.
예를 들어 위의 코드는 아래처럼 실행하실 수 있습니다.
도움이 되었길 바랍니다.
궁금한 점 있으면 언제든 질문 남겨주세요!
행복한 하루 되세요^^