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

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

by 일코 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 관련해서 궁금한 점이나 제안 있으면 언제든 댓글로 남겨주세요.

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

행복한 하루 되세요!

 


국내 유일의 파이썬+한컴오피스 업무자동화 입문강의

 

움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 인프런 | 강의

파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., - 강의 소개

www.inflearn.com

 

댓글