Type Here to Get Search Results !

12 Go언어:HWP자동화: 그림 삽입, 캡션 넣기

이번에는 Go언어와 gohwp를 이용하여 그림을 삽입하고, 간단하게 캡션을 넣는 것을 보이도록 하겠습니다.


취미 삼아 개인적으로 정리를 하던 문서가 있었습니다. 쪽마다 지정된 위치에 그림들이 위치해야 했고, 그게 100쪽이 좀 넘는 분량이었습니다. 상당수 그림은 흰색 배경이라 그림의 경계 선을 넣기도 해야 했습니다. 글을 작성하는 것보다 매 쪽마다 그림을 넣고 개체 속성을 변경하는 것이 정말 시간을 잡아먹는 일이었습니다. 그때는 취미라 시간이 생길 때마다 조금씩 했었는데, 급한 업무였다면 정말 고난이지 않았을까 싶습니다.


다행스럽게도 그림을 삽입하는 InsertPicture 메서드는 IHwpObject 객체가 가지고 있습니다. 다른 말로 하면 그림 삽입하는 것은 메서드 하나 호출하면 끝납니다.

package main

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

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

    // 그림 삽입
    hwp.InsertPicture("C:\\Users\\byul\\Downloads\\hwp.png", true, 1, false, false, 0, 77, 77)

    // 개체 속성 , 그림 주변에 선 그리기
    hwp.FindCtrl()
    act := hwp.HAction()
    set := hwp.HParameterSet().HShapeObject()
    act.GetDefault("ShapeObjDialog", set.HSet())
    subset := set.ShapeDrawLineAttr()
    subset.Width(hwp.MiliToHwpUnit(0.2))
    subset.Style(int32(hwp.HwpLineType("Solid")))
    act.Execute("ShapeObjDialog", set.HSet())

    // 캡션 입력
    hwp.ActionObject().ActionInput().ShapeObjAttachCaption()
    hwp.InsertText("이것은 그림 캡션입니다.")

    // 캡션 위치 변경
    subset2 := set.ShapeCaption()
    subset2.Side(2) // 0 왼쪽, 1 오른쪽, 2 위, 3 아래
    act.Execute("ShapeObjDialog", set.HSet())

    // 그림 아래로 내려가서 글쓰기
    hwp.ActionObject().ActionEdit().Cancel()
    hwp.ActionObject().ActionEdit().MoveLineEnd()
    hwp.InsertText("\r\n\r\n그림 아래 문단에서 문자 입력")
}

위의 예제 코드를 실행하면 다음 그림과 같습니다.



그림 삽입

InsertPicture 메서드를 살펴보면 다음과 같습니다.

InsertPicture(path string, embeded bool, sizeoption int, reverse, watermark bool, effect, width, height int) IDHwpCtrlCode

  • path: 삽입할 이미지 파일, URL 사용 가능
  • embeded: 이미지 파일을 문서내에 포함할지 여부 (True/False).
  • sizeoption: 0: 원본 크기, 1: 지정한 크기, 2: 셀의 크기 맞추기, 3: 원본 비율 유지 셀의 크기 맞추기
  • reverse: 이미지의 반전 유무 (True/False)
  • watermark: watermark효과 유무 (True/False)
  • effect: 0: 원본 이미지, 1: 그레이스케일, 2: 흑백효과
  • width : 그림의 가로 크기 지정. 단위는 mm

설명은 위와 같지만, gohwp에서는 path 외 인자들은 ...interface{}로 되어 있기 때문에 입력하지 않아도 그림은 삽입됩니다.


개체 속성 - 외곽 선 넣기

위의 예제에서는 그림을 삽입하고 바로 캐럿, 즉 커서가 위치한 곳에서 "개체 속성"을 설정합니다. 이때 액션은 ShapeObjDialog이며, 파라미터 세트는 HShapeObject입니다.

외곽에 선을 넣기 위해 HShapeObject 파라미터 세트에서 ShapeDrawLineAttr() 메서드로 서브 파라미터 세트를 가져옵니다.
ShapeDrawLineAttr() 메서드가 가져오는 것은 HDrawLineAttr 그리기 개체 선 속성 파라미터 세트로, 선의 굵기(Width), 선의 모양(Style)을 설정하고 액션을 실행합니다.


캡션 넣기

현재 커서가 그림에 위치하고 있기에 바로 캡션을 넣습니다.
ShapeObjAttachCaption() 메서드로 캡션을 넣었는데, 다르게 표현하면 다음과 같습니다.
hwp.Run("ShapeObjAttachCaption")

한글 HWP에서 캡션을 넣으면 기본적으로 아래에 위치하게 됩니다. 이를 위로 올리려면 다시 "개체 속성"을 다뤄야 하는데, 마침 ShapeObjDialog 액션과 HShapeObject 파라미터 세트는 앞서 정의하였습니다. 다만 캡션 속성을 다루는 HCaption 파라미터 세트를 가져와야 하는데, ShapeCaption() 메서드로 해당 파라미터 세트를 가져옵니다.
캡션의 위치(Side)를 설정하고 액션을 다시 실행합니다.


이제 그림에서 볼일은 끝났으니 커서가 위치한 줄의 끝으로 이동하고 줄바꿈 하면서 다음 글을 입력합니다.

댓글 쓰기

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