본문 바로가기
업무자동화/파이썬-아래아한글 자동화 응용

[파이썬-아래아한글] 제가 아래아한글 작업을 자동화하는 요령은..

by Martinii의 회사원코딩 2020. 7. 28.

안녕하세요?

회사원코딩의 신명진입니다.

아래아한글 홈페이지 - 고객지원 - 개발자료실에 가면

아래아한글을 코딩으로 자동화할 수 있는 다양한 언어 예제와 API 매뉴얼이 있습니다.

VB, MFC, C#, JS 등의 언어로 구현이 되어 있어요.

파이썬 코드도 이와 크게 다르지 않아서, API 매뉴얼을 어느 정도 읽어보시면

독학으로도 충분히 파이썬 자동화를 하실 수 있습니다.

(링크 : https://www.hancom.com/board/devdataList.do?gnb0=25&gnb1=81 )

 

신기하게도 아래아한글의 API는 같은 기능을 가지고도 구현방법이 여러가지입니다.

이게 제일 생소했던 부분인데, (문의메일을 보면 이 부분 때문에 "방대하고 어렵다"고 느끼시는 분도 많은 것 같아요.)

사실 파이썬에서 예쁜 시각화 툴로 많이 사용하는 bokeh 같은 경우도

저수준, 고수준의 문법을 둘 다 사용할 수 있잖아요?

아래아한글API도 그런 방식으로,

개발자의 편의를 위해 만들어놓은 단축 명령어들이 다양하게 만들어져 있다고 이해하면 될 것 같습니다.

그럼에도 제가 가장 간편하게 사용하는 방법은 역시

"스크립트 매크로 녹화(Shift-Alt-H)"입니다.

직관적으로 제가 원하는 기능을 그대로 구현하면서, 해당 코드를 알아낼 수 있으니까요.

코드가 약간 길어지지만, 원하는 대로 굴러간다면 장땡 아니겠습니까?

 

간단한 예를 들어볼게요.

페이지 설정에 들어가서 모든 여백과 머릿말/꼬릿말, 제본영역을 0으로 만드는 작업을

아래아한글 내에서 스크립트녹화(Shift-Alt-H) 해보면 아래와 같습니다.

function OnScriptMacro_script5()
{
	HAction.GetDefault("PageSetup", HParameterSet.HSecDef.HSet);
	with (HParameterSet.HSecDef)
	{
		PageDef.LeftMargin = MiliToHwpUnit(0.0);
		PageDef.RightMargin = MiliToHwpUnit(0.0);
		PageDef.TopMargin = MiliToHwpUnit(0.0);
		PageDef.BottomMargin = MiliToHwpUnit(0.0);
		PageDef.HeaderLen = MiliToHwpUnit(0.0);
		PageDef.FooterLen = MiliToHwpUnit(0.0);
		HSet.SetItem("ApplyClass", 24);
		HSet.SetItem("ApplyTo", 3);
	}
	HAction.Execute("PageSetup", HParameterSet.HSecDef.HSet);
}

아시겠지만 위는 JS코드입니다. 위 코드를 파이썬으로 옮기면 아래와 같습니다.

(인스턴스명을 붙인 것 말고는 거의 차이가 없습니다.)

import win32com.client as win32  # win32com 모듈 임포트
hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")  # 아래아한글을 여는 코드
hwp.XHwpWindows.Item(0).Visible = True  # 숨김해제


# 아래부터 페이지 여백 설정하는 코드
hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet)  # 초기화

hwp.HParameterSet.HSecDef.PageDef.LeftMargin = hwp.MiliToHwpUnit(0.0)  # 좌측여백
hwp.HParameterSet.HSecDef.PageDef.RightMargin = hwp.MiliToHwpUnit(0.0)  # 우측여백
hwp.HParameterSet.HSecDef.PageDef.TopMargin = hwp.MiliToHwpUnit(0.0)  # 상단여백
hwp.HParameterSet.HSecDef.PageDef.BottomMargin = hwp.MiliToHwpUnit(0.0)  # 하단여백
hwp.HParameterSet.HSecDef.PageDef.HeaderLen = hwp.MiliToHwpUnit(0.0)  # 머릿말
hwp.HParameterSet.HSecDef.PageDef.FooterLen = hwp.MiliToHwpUnit(0.0)  # 꼬릿말
hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 24)  # 적용범위 분류
hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 3)  # 적용범위

hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet)  # 실행

생각보다 코드 줄이 길지만, 잘 작동합니다.

 

 

이 코드는 여러분의 어떤 작업에 활용할 수 있을까요?

스캔한 A4사이즈 이미지파일 뭉치를 아래아한글 보고서 말미에 참고자료로 넣는 경우라면,

1. 아래아한글 파일의 모든 여백을 0으로 만든다.

2. InsertPicture 메서드 등을 이용해서 이미지를 차례로 삽입한다.

3. 그대로 저장하거나 SaveAs메서드를 이용해 PDF로 익스포트한다.

이런 경우가 있겠네요.

 

우리 회사는, "집착한다" 싶을 정도로 아래아한글에 의존하는 부분이 많습니다. 저도 그렇고요.

(사실 어도비 아크로뱃이나 한PDF를 사용하면 훨씬 간편한 작업일 수도 있겠네요...)

 

페이지 설정은 자동화 업무에 많이 활용하는 작업은 아닙니다만(직접 설정해서 저장해놓으면 되니까요..)

아래아한글 API가 기본적으로 어떤 식으로 굴러가는지 이해하기 쉬운 예제라고 생각돼서

적어보았습니다.

 

앞으로도 간단한 메서드 설명과 예제로 틈틈이 포스팅하겠습니다.

아래아한글API 관련해서 궁금한 점이나 제안 있으면 언제든 댓글로 남겨주세요.

대댓글이나 새 포스팅으로 답변드리겠습니다.

행복한 하루 되세요!

댓글5

  • 2020.11.18 15:59

    비밀댓글입니다
    답글

  • API님 코드상에는 hwp가 한/글 오브젝트가 아니고 app이 오브젝트입니다.
    hwp를 변수지정하지 마시고,
    그냥 app.Open을 실행하신 다음
    app.HAction.Run~ 방식으로 코드를 변경해보세요.
    답글

  • 전민구 2021.09.22 21:45

    포스팅해주신 한글 자동화 관련 내용을 보고 도움을 많이 받고 있습니다. 감사 드립니다.

    특히 매크로를 녹화해서 파이썬에서 실행하는 것에 도움을 많이 받고 있는데요,

    표를 복사해 붙여 넣는 코드를 작성하던 중 막히는 부분이 있어 문의를 드립니다.

    hwp.HParameterSet.HSelectionOpt.Option = 3

    표 붙여넣기 옵션에서 아래에 붙여넣기 옵션을 선택한 것인데, 아래와 같은 오류가 나고 있습니다.

    Library.HSelectionOpt object has no attribute 'Option'

    테이블생성하는 매크로를 옮길 때도 Parameter Set 부분에서 오류가 났었는데.. 어떤 문제가 있는 건지..ㅠㅠ
    도움 주실 수 있을까요?

    ※ 스팸방지(?)가 걸려서 전체 코드를 적지 못했습니다.
    답글

    • Option을 option으로 변경해 보시기 바랍니다^^ 특히 일회성 작업이면서 표를 생성하거나 그라데이션을 주거나 하는 긴 코드는 녹화 매크로를 그대로 실행하는 RunScriptMacro 를 활용하시면 훨씬 간편합니다. 참고하시기 바랍니다.

  • 전민구 2021.09.23 12:35

    감사합니다! 간단한 문제였네요 ㅜㅜ
    답글