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

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

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")을 사용해 보시길.

댓글