hwp의 확장자를 갖고있는 한글문서를 이미지로 변환하는 작업을 시도해보려고 합니다.

저는 WPF를 주로 사용하기 때문에 WinForm은 익숙하지 않지만, 해당 프로젝트는 WinForm으로 작업했습니다.

그 이유에 대해서는 아래에서 이야기 하도록 하겠습니다.

 

우선은 기능이 정상적으로 동작하는지 확인하는 것이 목표이기 때문에 WinForm프로젝트로 간단하게 구현해봤습니다.

추후 WPF나 다양한 용도로 사용할 수 있도록 라이브러리 프로젝트로 만들수 있는지 시도해보겠습니다.

 

 

작업순서

작업순서는 다음과 같습니다.

  1. 한글 설치 확인
  2. WinForm프로젝트 생성
  3. 한글Control 추가 (COM 구성 요소)
  4. 코드작성
  5. 확인

 

한글 설치 확인

프로젝트 진행에 앞서 개발PC에 정품 라이센스가 인증된 한글 프로그램이 설치되어있는지 확인이 필요합니다.

그 이유는 WinForm프로젝트에서 한글에서 제공하는 Control을 사용하기 때문입니다.

한글 라이센스와 관련된 내용은 정확한 정보를 얻게되면 다시 작성하도록 하겠습니다.

 

 

WinForm프로젝트 생성

WinForm 프로젝트를 생성합니다.

프로젝트 최초 생성

 

WinForm프로젝트를 생성하면 다음과 같이 프로젝트가 생성됩니다.

디자인은 신경쓰지말고 한글문서를 이미지로 변환하는 기능에 포커스를 맞추도록 합니다.

 

한글 Control 추가

한글을 이미지로 변환하기 위해서는 한글 Control이 필요합니다.

앞서 말씀드렸듯이 저는 WinForm에 익숙하지 않기 때문에 [COM 구성 요소]에 있는 한글 Control을 추가하는 방법은 여러가지가 있을 수 있지만 제가 하는 방식을 사용하겠습니다.

 

순서

[도구상자] 메뉴 선택 -> 마우스 오른쪽 버튼 -> 메뉴에서 [항목 선택] 선택 -> [도구 상자 항목 선택]창에서 [COM 구성 요소] 탭 선택 -> 'HwpCtrl Control'의 이름을 가진 또는 비슷한 이름을 가진 Control을 선택 후 [확인]

도구 상자 항목 선택 화면 띄우기
HwpCtrl Control 추가하기

 

또 다른 방법

다른 방식으로는 화면 상단 탭에서 [도구] -> [도구 상자 항목 선택] 메뉴 선택 -> [도구 상자 항목 선택]창에서 [COM 구성 요소] 탭 선택 -> 'HwpCtrl Control'의 이름을 가진 또는 비슷한 이름을 가진 Control을 선택 후 [확인] 하시면 됩니다.

 

이제 WinForm의 윈도우에 클릭 or 드래그를 하면 'HwpCtrl Control'이 추가됩니다.

이렇게 'HwpCtrl Control'이라는 한글을 이미지로 변환하기 위해 필요한 Control이 추가되었습니다.

해당 컨트롤은 아마 자동으로 axHwpCtrl1 이라는 이름으로 생성될것입니다.

HwpCtrl Control 추가

해당 컨트롤에는 아마 한글 문서가 이미지화 되어 나타날 것 입니다. 하지만 목표는 문서를 이미지 파일로 만드는 것이기 때문에 해당 컨트롤의 위치나 크기는 중요하지 않습니다.

 

 

코드작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Windows.Forms;
 
namespace HwpToImageSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            Convert("C:\\Test\\test.hwp""C:\\Test\\Output"100);
        }
 
        private void Convert(string filePath, string outputPath, int dpi)
        {
            // 해당 경로에 파일이 존재하는지 확인
            if (System.IO.File.Exists(filePath))
            {
                string HNCRoot = @"HKEY_Current_User\Software\HNC\HwpCtrl\Modules";
 
                try
                {
                    // 보안모듈 레지스트리에 등록되어 있는지 확인
                    if (Microsoft.Win32.Registry.GetValue(HNCRoot, "FilePathCheckerModuleExample""Not Exist").Equals("Not Exist"))
                    {
                        // 등록되어 있지 않을경우 레지스트리에 등록
                        Microsoft.Win32.Registry.SetValue(HNCRoot, "FilePathCheckerModuleExample", Environment.CurrentDirectory + "\\FilePathCheckerModuleExample.dll");
                    }
 
                    // 불러옵니다.
                    axHwpCtrl1.RegisterModule("FilePathCheckDLL""FilePathCheckerModuleExample");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
 
                bool isHwpOpen = axHwpCtrl1.Open(filePath, "HWP""forceopen:true;versionwarning:false");
                if (isHwpOpen == false)
                {
                    // 한글 문서 열기 실패
                    return;
                }
 
                int totalPageCount = axHwpCtrl1.PageCount;
                for (int i = 0; i < totalPageCount; i++)
                {
                    string imageFilePath = System.IO.Path.Combine(outputPath, String.Format("page{0:0000}.gif", i + 1));
                    // 이미지 생성
                    axHwpCtrl1.CreatePageImage(imageFilePath, i.ToString(), dpi.ToString(), "24""gif");
                }
            }
        }
    }
}
cs

 

 

'Programming > C#, WPF' 카테고리의 다른 글

[WPF] WPF에서 Lottie 사용하기  (0) 2019.08.02
마샬링(Marshalling)  (0) 2019.06.12
[WPF] Bitmap to Image Converter  (0) 2019.05.26

+ Recent posts