Type Here to Get Search Results !

07 Go언어:HWP자동화: 글꼴 바꾸기

이 글에서는 Go언어 및 gohwp 라이브러리를 이용하여 한글 HWP 글꼴(폰트) 변경을 하는 방법을 보여드리도록 하겠습니다.


문서 작성 과정에서 글꼴 변경은 필수적인 작업 중 하나입니다. 특히 여러 사람이 작성한 문서를 취합해서 편집할 때  서로 다른 글꼴과 문단 모양 등으로 어려움을 겪을 수 있습니다.


한글 오토메이션에서 글자 모양을 바꾸는 것은 기본적으로 CharShape 액션을 이용하면 됩니다. CharShape로 다룰 수 있는 글자 모양 옵션은 글꼴, 크기, 장평, 자간, 글자색, 등등 정말 다양합니다. 하지만 여기에서는 우선 글꼴(폰트)만 설명하겠습니다. 뒤에서 언급하겠지만, Go언어에서만 해당되는 문제인지 글꼴 변경에 제약이 있다보니 내용을 한정 지었습니다.


우선 gohwp를 이용한 글꼴 바꾸는 코드는 아래와 같습니다.


HWP 글꼴 바꾸기 예제 

package main

import (
    "github.com/b612nightsky/gohwp"
)

func main() {
    hwp := gohwp.Initialize()
    defer hwp.UnInitialize()
    hwp.ShowWindow(true)
    hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample")

    // 처음 기본 글꼴
    hwp.ActionWithParameters("InsertText", "Text", "안녕하세요(시작 기본 글꼴)\r\n")

    // SetFont로 글꼴 바꾸기
    hwp.SetFont("맑은 고딕")
    hwp.InsertText("안녕하세요(맑은 고딕)\r\n")

    // CreateAction메서드로 글꼴 바꾸기
    act := hwp.CreateAction("CharShape")
    set := act.CreateSet()
    act.GetDefault(set)
    set.SetItem("FaceNameHangul", "궁서체")
    act.Execute(set)
    hwp.InsertText("안녕하세요(궁서체)\r\n")

    // HAction메서드로 글꼴 바꾸기
    hact := hwp.HAction()
    hset := hwp.HParameterSet().HCharShape()
    hact.GetDefault("CharShape", hset.HSet())
    hset.FaceNameHangul("굴림체")
    hact.Execute("CharShape", hset.HSet())
    hwp.InsertText("안녕하세요(굴림체)")
}


위의 코드를 실행하면 다음과 같은 문서창이 나타납니다.



위에서 3가지 방법으로 글꼴(폰트)를 바꾸었습니다.


SetFont("글꼴 이름") 메서드

첫 번째 방법은 SetFont("맑은 고딕")으로 "맑은 고딕" 글꼴로 변경하였습니다. SetFont는 제가 편의상 만들어놓은 메서드입니다. 다른 글자 모양은 다루지 않고, 오로지 글꼴을 바꾸는 데 사용됩니다.

CreateAction 메서드 활용

CreateAction를 이용하여 "궁서체" 글꼴로 변경하는 것이 두 번째 예시입니다. 앞서 첫 번째 방법에 비해 긴 코드를 작성해야 하지만, 글꼴 외에도 다른 글자 모양 옵션을 지정할 수 있습니다. 아마 한글 HWP에서 스크립트 매크로를 기록해서 보게 되면 두 번째와 좀 더 유사하지 않을까 싶습니다.

HAction 메서드 활용

세 번째 방법은 HAction 메서드를 사용하여 "굴림체"로 글꼴을 변경합니다. HAction 메서드는 CreateAction 메서드와 유서하지만 코드 작성 방식이 다릅니다.

두 번째와 세 번째 방법을 유심히 보시면 됩니다. 차이가 있는 듯 하지만 두 방법 모두 전체 흐름은 똑같습니다. 액션 및 파라미터 세트를 정의하고, 파라미터 세트를 초기화하고, 값을 넣어주고 실행하기까지 표현하는 방법이 다를 뿐 똑같은 행위를 하고 있습니다. 이 두 가지 방법을 눈에 익히셔야 합니다. 모든 액션들을 다루는 기본적인 방법입니다. 


위에서 3가지 방법만 보였지만 다음과 같은 방법을 쓸 수 있습니다.

hwp.ActionWithParameters("CharShape","FaceNameHangul","맑은 고딕")
hwp.ActionObject().ActionShape().CharShape("FaceNameHangul","맑은 고딕")


한글, 영어, 일본어 등 문자별 글꼴 설정

위 예제 잘 살펴보시면 FaceNameHangul이라는 파라미터 값에 글꼴 이름을 넣어주었습니다. FaceNameHangul은 한글 문자에 대한 글꼴을 나타냅니다. 여기에서는 간단하게 보여드리기 위해서 FaceNameHangul만 보여드렸습니다.

문자에 따라 FaceNameHangul, FaceNameLatin, FaceNameHanja, FaceNameJapanese, FaceNameOther, FaceNameSymbol, FaceNameUser가 있습니다. 

영문자나 한자, 기호 등까지 변경된 글꼴을 적용하려면 -Latin, -Hanja, -Symbol 등도 다 변경해야 합니다. 이게 귀찮아서 첫 번째 방법인 SetFont 메서드를 만들어 놓은 겁니다...(하지만 한글과 영어를 각각 다른 글꼴을 사용한다면 그리 유용하지 않을 경우도 있습니다.)


글꼴 목록 : 단일 목록으로 표시

아래 그림과 같이 "도구" → "환경설정" → "글꼴" 탭에서 "글꼴 목록"에서 "단일 목록으로 표시"를 하셔야 합니다. 탭별 목록으로 되어 있을 경우, 시스템 글꼴만 변경 가능합니다.



글꼴 변경을 정리하면,
  • 글자 모양은CharShape 액션을 이용
  • 한글, 영어, 일본어 등 문자에 따라 글꼴 지정을 달리할 수 있음
  • "도구" → "환경설정" → "글꼴" 탭에서 "글꼴 목록"에서 "단일 목록으로 표시"


여담으로 이것 때문에 정말 많이 헤맸습니다. Go언어로 HWP를 다룰 수 있을까 생각을 가지고 처음 연습 삼아 시도했던 것이 바로 글꼴 변경이었습니다. 대충 특이해 보이는 글꼴로 변경하는 것을 테스트를 해보는데 어떠한 에러도 없는데 글꼴이 변경되지 않았습니다. 심지어 그냥 글꼴 변경만 안되는 것이 아니라 뒤따르는 다른 액션까지 실행이 안되는 일이 벌어지기도 했습니다.
한글오토메이션 관련 문서나 Python으로 HWP 자동화를 하시는 분들의 블로그 등 자료를 찾아봐도 정말 알 수 없었던 문제였습니다. 아마 Python은 문제가 없었으니 언급이 안되는 것이겠죠. 작성된 코드를 이리저리 바꿔봐야 되는 것이 없으니 정말 답답하고, Go언어로 해서는 안되는 것인가 생각하며 그냥 포기할 생각도 있었습니다.
보름 정도 틈만 나면 구글링과 이것저것 시도를 해봤었는데, 어느 순간 글꼴이 변경되는 것을 보았습니다. 그동안 글꼴이 안 바뀌다가 왜 바뀌었는지 차근차근 살펴봤더니, 앞서 시도하던 독특한 글꼴이 아니라 타이핑이 귀찮아서 그냥 "궁서체"로 입력했었는데, 그게 마침 시스템글꼴에 있었던 글꼴이었습니다.
참 별것도 아닌 문제였죠. 보름 동안 이것저것하면서 느꼈던 것이 Go언어로 HWP를 다루기에 너무 불편하다는 것이었고, 지금 gohwp 작업을 하게 된 계기이기도 합니다...
(24.05.07. 수정) 이 문제와 관련하여 왜 다른 사람들은 언급이 없었을까, 다른 프로그래밍 언어에서는 이러한 문제가 없는 걸까 검색을 하고 고민을 하던 중 "단일 목록으로 표시"를 하면 굳이 시스템 글꼴에 없어도 된다는 것을 알게 되었습니다. 다만, 정말 간혹 글꼴이 변경되지 않는 글꼴이 있는데, 이는 직접 확인하셔야 합니다.


유의 사항: 시스템 글꼴만 가능합니다.  (24.05.07. 삭제)


위 그림은 HWP에서 글꼴을 변경할 때 볼 수 있는 글꼴 목록입니다. 앞서 보여드린 코드에서 글꼴 변경은 "시스템글꼴" 목록에 있는 글꼴(폰트)로만 변경 가능합니다. 그럼, 몇개 안되는 시스템글꼴만 사용해야 하는가 의문이 생기시겠지만, 방법이 있습니다. 시스템글꼴 목록을 수정해놓으면 됩니다.


시스템글꼼 목록 수정하기

"도구" → "환경설정" → "글꼴" 탭


위 그림을 보시면 환경설정 글꼴 탭에 "글꼴 목록 설정..."버튼이 있습니다. 해당 버튼을 누르면 아래와 같이 글꼴 목록을 설정할 수 있습니다.


이제 원하는 글꼴을 시스템글꼴 목록에 넣어주면 됩니다. 다만, 모든 글꼴에 대해 테스트하지 않았지만 몇몇 글꼴은 시스템글꼴 목록에 넣어도 글꼴 변경이 안되는 몇몇 글꼴이 있긴 합니다. 다행인 것은 뒤에 따라오는 액션에는 영향을 주지는 않습니다. 

댓글 쓰기

0 댓글
* Please Don't Spam Here. All the Comments are Reviewed by Admin.