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

현재 용지속성을 조회만 하고 싶다면?

by 회사원코딩 2020. 12. 21.
반응형

안녕하세요

한글문서관련 프로그램을 작성하는 개발자 입니다.

우연히 한컴 개발커뮤니티에서 “현재 용지정보 가져오기 PageSetup” 관련 답변을 달아 놓으신 걸 검색 했습니다.

다름이 아니라 알려 주신대로 하니 특정파일(AAA.hwp)를 열고 하면 ‘0값만 나옵니다.

아래 코드좀 봐주실 수 있으신가요? C#으로 되어 있습니다.

 AxHwpCtrl ax03 = new AxHwpCtrl();

ax03.CreateControl();

ax03.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample");

ax03.Clear();

ax03.Open(@"AAA.hwp");

HWPCONTROLLib.HwpAction hwpact = (HWPCONTROLLib.HwpAction)ax03.CreateAction("PageSetup");               

HWPCONTROLLib.HwpParameterSet 화면 = (HWPCONTROLLib.HwpParameterSet)hwpact.CreateSet();                   

HWPCONTROLLib.HwpParameterSet 메뉴 = (HWPCONTROLLib.HwpParameterSet)화면.CreateItemSet("PageDef", "PageDef");

hwpact.GetDefault(화면);

double 1 = Convert.ToDouble(메뉴.Item("TopMargin")) / 283.465;

이렇게 하면 0값만 나옵니다. (다른 마진도 마찬가지 입니다.)

AAA.hwp문서에 설정되어 있는 값을 가져오고 싶은데 잘 되질 않습니다.

중간에 메뉴.SetItem("TopMargin", MiliToHwpUnit(20));

값을 넣고 출력하면 '20'값이 출력 됩니다.

제 생각에 객체생성을 하면 기본값인 '0'으로 초기화 되는 느낌이 듭니다.

고수님의 조언 좀 부탁 드립니다.

이런 메일을 받았다. 필자는 개발자도 고수도 아닌 관계로, 한편으론 굉장히 송구한 마음이 들었다.


지난 포스팅에서, 상당히 상세하게 용지속성을 변경하는 몇 가지 방법에 대해 다룬 적이 있다.

 

4. 문서여백을 파이썬으로 바꿀 수 있을까?

안녕하세요? 한/글 자동화 응용편에 보시면, 한/글에서 녹화한 스크립트 매크로와 API매뉴얼의 기본적인 액션 생성 방법 두 가지 문법을 보여드렸습니다. [파이썬-아래아한글] API매뉴얼과 스크립

www.martinii.fun

번거로운 분들을 위해 코드만 보여드리면 대략 이렇다.

Act = hwp.CreateAction("PageSetup")
Set = Act.CreateSet()
Act.GetDefault(Set)
Set.SetItem("ApplyTo", 3)
Pset = Set.CreateItemSet("PageDef", "PageDef")
Pset.SetItem("TopMargin", 0)
Pset.SetItem("BottomMargin", 0)
Pset.SetItem("LeftMargin", 0)
Pset.SetItem("RightMargin", 0)
Pset.SetItem("HeaderLen", 0)
Pset.SetItem("FooterLen", 0)
Pset.SetItem("GutterLen", 0)
Act.Execute(Set)

페이지의 모든 여백, 머릿말과 꼬릿말, 제본여백을 0으로 주는 스크립트. 파이썬으로 한/글파일을 열고 위 코드를 실행하면,

코드실행 전 여백

이렇게 생겼던 쪽설정이

코드실행 후 여백

위처럼 바뀐다.

그런데 "설정"할 게 아니라, 현재값이 얼마인지 "조회"만 하고 싶다면?

코드는 사실 간단하다. 코드를 보여드리면,

Act = hwp.CreateAction("PageSetup")
Set = Act.CreateSet()
Act.GetDefault(Set)
위쪽여백 = Set.Item("PageDef").Item("TopMargin")
머리말여백 = Set.Item("PageDef").Item("HeaderLen")

print(위쪽여백)
print(머리말여백)

# Out[7]: 5668
# Out[8]: 4252

핵심은 Set.Item("PageDef").Item("TopMargin") 방식으로만 조회가 가능하다는 것이다.
(필자가 아는 한, 조회가능한 유일한 방식이다. 다른 방법은 4,000이나 8,000 또는 None을 리턴했다.)

위 과정을 캡쳐해보았다. 2분짜리 짧은 영상임.

용지설정이나 여백값을 조회하고 싶을 때

이번 포스팅은 여기서 마친다.

결론 : Set.Item("PageDef").Item("TopMargin")을 사용해 보시길.

반응형

댓글0