Type Here to Get Search Results !

06 Go언어:HWP자동화: 파일 열기, 저장하기, 다른 이름으로 저장하기


한글 HWP 문서를 자동화하여 작성하는 경우 필연적으로 HWP 문서를 열거나, 저장하는 등의 행위를 반복하게 됩니다. 특히나 빈 문서부터 하나하나 채워 넣어가는 것은 생각보다 업무 효율이 좋지 않고, 미리 만들어둔 서식의 문서를 이용하여, 문서를 열고 수정하고 다른 이름으로 저장하는 것이 편할 때도 많습니다.


이번에는 단순하게 한글 HWP 파일 열기(Open), 저장하기(Save), 다른 이름으로 저장하기(SaveAs)를 Go언어와 gohwp패키지를 이용하여 어떻게 구현하는지 보여드리겠습니다.


혹시 아래의 예제 중 HWP 문서를 열 때, 

"ᄒᆞᆫ글을 이용하여 위 파일에 접근하려는 시도(파일의 손상 또는 유출의 위험 등)가 있습니다. 정상적인 작업 과정에만 접근을 허용하십시오" 

등의 문구와 팝업창을 보게 되신다면, "03 Go언어:HWP자동화: 한컴 오토메이션 보안승인모듈"을 참조 바랍니다.


HWP 파일 열기, 저장하기 역시 HAction, HParameterSet 등으로 액션과 파라미터를 정의하고 값을 지정하는 등의 방법이 있긴 하지만, IHwpObject 객체의 메서드를 이용하여 가장 단순하게 접근하는 방법을 보이겠습니다. 참고로 IHwpObject는 자동화 객체의 최상위 객체로 저희 예제에서 Initialize() 메서드로 받아오는 객체입니다.


다음 코드는 파일을 저장(Save), 열기(Open), 다른이름으로 저장(SaveAs)를 다 담아낸 예제입니다.


package main

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

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

    // HWPX 파일로 다른 이름으로 저장하기
    hwp.InsertText("문서 저장 및 열기 테스트")
    hwp.SaveAs("D:\\문서저장테스트.hwpx")
    hwp.Clear(0)

    // HWPX 파일 열기 / 저장하기
    hwp.Open("D:\\문서저장테스트.hwpx")
    hwp.InsertText("\r\n\r\n문서 열기")
    hwp.Save()
    hwp.Clear(0)

    // HWP 확장자 바꿔 저장하기
    hwp.Open("D:\\문서저장테스트.hwpx")
    hwp.InsertText("\r\n\r\n확장자 바꿔 저장하기")
    hwp.SaveAs("D:\\확장자바꿔저장하기.hwp", "HWP")
    hwp.ActionObject().FrameActionFile().FileQuit()
}

위 코드를 실행하면 순식간에 다음과 같이 2개의 파일이 생깁니다.


다른 이름으로 저장하기(SaveAs)


// HWPX 파일로 다른 이름으로 저장하기
hwp.InsertText("문서 저장 및 열기 테스트")
hwp.SaveAs("D:\\문서저장테스트.hwpx")
hwp.Clear(0)

처음 빈 문서 창을 띄우고 InsertText()로 문자를 입력한 뒤, SaveAs("절대경로+파일명")으로 다른 이름 저장을 하였습니다. 

왜 갑자기 다른 이름으로 저장일까 싶겠지만, 저장 전까지는 실질적으로 파일이 존재하지 않은 "빈 문서" 상태이기 때문입니다. 뒤에 설명하겠지만 IHwpObject의 Save() 메서드는 기존 문서 파일이 없으면 "새이름으로 저장" 창이 뜨게 됩니다.

다시 위의 코드 설명으로 돌아와서, SaveAs 메서드는 다음 3개의 문자열(string) 인자를 받을 수 있습니다.

hwp.SaveAs("path","format","arg")


  • path는 "절대경로+파일명"
  • format은 "HWP", "HWPX", "RTF", "MSWORD" 등의 문서 포맷을 지칭합니다.
  • arg는 format에 따른 옵션을 지정할 수 있습니다.


format과 arg는 위 예제와 같이 생략 가능합니다.

format는 기본적으로 "HWP"라고 하는데, 위에서 보인 것처럼 path에 확장자를 hwpx로 해버려도 됩니다.

개인적으로는 저장하면서 arg에 옵션을 넣어본적이 없습니다..


hwp.Clear(0)


이건 현재 편집 중인 문서의 내용을 닫고 빈문서 상태로 돌아가는 메서드입니다. 0 값을 넣은 것은 문서의 내용이 변경되었을 경우, 저장 여부를 묻는 팝업창이 뜨게 하는 값인데 이미 다른 이름으로 저장하였기 때문에 묻지 않고 문서를 닫을 것 입니다.


파일 열기(Open) / 저장하기(Save)


// HWPX 파일 열기 / 저장하기
hwp.Open("D:\\문서저장테스트.hwpx")
hwp.InsertText("\r\n\r\n문서 열기")
hwp.Save()
hwp.Clear(0)


파일 열기 Open() 메서드는 위에서 "절대경로+파일명" 문자열 인자를 하나만 넣었는 데, 본래는 아래와 같이 3개의 문자열 값을 받는 메서드 입니다.


hwp.Open("path","format","arg")


format과 arg는 생략이 가능합니다. arg에 대해서는 HwpAutomation.pdf를 참조하시면 됩니다.


hwp.Save(bool)


위 예제에서는 Save() 메서드에 아무런 인자를 넣지 않았습니다만, IHwpObject의 Save 메서드는 bool 타입의 인자를 받습니다. 생략하면 true 값입니다.

  • true인 경우, 문서가 변경된 경우에만 저장합니다.
  • false인 경우, 변경 여부에 상관 없이 무조건 저장합니다.


이번에는 빈 문서 상태가 아닌, 먼저 존재하는 파일을 열었기 때문에 Save() 메서드를 이용했습니다. 빈 문서 상태에서 Save() 메서드를 쓰게 되면 "새이름으로 저장" 팝업 창이 뜨게 됩니다.



기타


hwp.SaveAs("D:\\확장자바꿔저장하기.hwp", "HWP")
hwp.ActionObject().FrameActionFile().FileQuit()


확장자를 바꿔서 저장하는 예제입니다. 다른 이름으로 저장을 하면서 파일명과 포맷 위치에서 "HWP"로 바꿔줬을 뿐입니다.


hwp.ActionObject().FrameActionFile().FileQuit()


마지막 줄은 HWP를 종료하는 액션으로 본래는 다음과 같이 Run() 메서드로 실행시키는 액션이나, 제가 액션 이름을 다 못 외우기 때문에 죄다 메서드로 지정해놓은 것 입니다.


hwp.Run("FileQuit")


지금까지 한글 HWP 파일 열기(Open), 저장하기(Save), 다른 이름으로 저장하기(SaveAs)를 살펴봤습니다. 앞서 언급했듯이 HAction을 이용하는 방법도 있지만 더 손쉽게 이용할 수 있기 때문에 IHwpObject의 메서드로만 설명드렸습니다.


나중에 다른 포스팅에서 설명할 기회가 있겠지만, Document 객체의 메서드로도 동일하게 열고, 저장하는 것을 할 수 있습니다. 가장 기본적으로는 위의 IHwpObject의 메서드로 사용한다고 생각하시면 됩니다.

댓글 쓰기

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