본문 바로가기

IT

[Ubuntu/Linux] 한글파일(hwp)을 텍스트(txt) 혹은 웹문서(html)로 변환하자!


안녕하세요, 개발자 윤진입니다.


얼마 전에 우분투에서 사용할 수 있는 한글뷰어를 소개하였는데요,

[Ubuntu/Linux] 한글과 컴퓨터의 한글 파일(.hwp)을 우분투에서 읽어보자! (evince-hwp)


한글뷰어로는 한글파일(hwp)을 볼 수만(read) 있기 때문에,

한글파일의 내용물을 활용(write)할 수가 없습니다.


따라서 이번에는 한글 파일을 다른 형식의 파일로 변환하여,

한글파일을 소스로 활용할 수 있는 방법을 알아보도록 하겠습니다.


이번에도 무척이나 다행스럽게,

한글파일을 다른 포맷으로 변환해주는 오픈소스 프로젝트가 있습니다.




meteOr님의 pyhwp 프로젝트 방문하기

meteOr님이 고군분투하며 2014년에 어느정도 완성한 프로젝트로 보입니다.

이런 오픈소스로 인해 수많은 사람들이 어려운 작업을 쉽게 할 수 있죠. :)


pyhwp는 python 기반으로 작성되어져 있기 때문에 pip로 다운로드 받을 수 있습니다.

pip는 "Pip Installs Packages" 혹은 "Pip installs Pythons"의 약자로,

파이선으로 작성된 패키지를 손쉽게 설치/관리할 수 있도록 도와주는 프로그램입니다.



우분투에서 apt 명령어로 우선 pip를 설치할 수 있습니다.

$ sudo apt-get install python-pip

pip 설치를 위해 python 관련 패키지들이 함께 설치가 됩니다.

설치가 완료되면 pip 명령어를 바로 사용할 수 있습니다.


$ pip

Usage:  
  pip <command> [options]

Commands:
  install                     Install packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  zip                         DEPRECATED. Zip individual packages.
  unzip                       DEPRECATED. Unzip individual packages.
  bundle                      DEPRECATED. Create pybundles.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output.
  --log-file <path>           Path to a verbose non-appending log, that only logs failures. This log is active by default at
                              /home/storycompiler/.pip/pip.log.
  --log <path>                Path to a verbose appending log. This log is inactive by default.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               Path to alternate CA bundle.
storycompiler@storycompiler:~$ pip

Usage:  
  pip <command> [options]

Commands:
  install                     Install packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  zip                         DEPRECATED. Zip individual packages.
  unzip                       DEPRECATED. Unzip individual packages.
  bundle                      DEPRECATED. Create pybundles.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output.
  --log-file <path>           Path to a verbose non-appending log, that only logs failures. This log is active by default at
                              /home/storycompiler/.pip/pip.log.
  --log <path>                Path to a verbose appending log. This log is inactive by default.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --timeout <sec>             Set the socket timeout (default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
  --cert <path>               Path to alternate CA bundle.


이제 pip 명령어를 사용하여 pyhwp를 설치합니다.

$ pip install --user --pre pyhwp



홈디렉토리 아래에 총 6개의 변환 프로그램이 설치되었습니다.

$ ls -al
합계 32
drwxrwxr-x 2 storycompiler storycompiler 4096  2월  8 00:43 .
drwx------ 5 storycompiler storycompiler 4096  2월  8 00:43 ..
-rwxrwxr-x 1 storycompiler storycompiler  297  2월  8 00:43 hwp5html
-rwxrwxr-x 1 storycompiler storycompiler  295  2월  8 00:43 hwp5odt
-rwxrwxr-x 1 storycompiler storycompiler  297  2월  8 00:43 hwp5proc
-rwxrwxr-x 1 storycompiler storycompiler  297  2월  8 00:43 hwp5spec
-rwxrwxr-x 1 storycompiler storycompiler  295  2월  8 00:43 hwp5txt
-rwxrwxr-x 1 storycompiler storycompiler  297  2월  8 00:43 hwp5view


사용법은 아주 간단합니다.

$ ./hwp5html -h
HWPv5 to HTML converter

Usage:
    hwp5html [options] <hwp5file> [<out-directory>]
    hwp5html -h | --help
    hwp5html --version

Options:
    -h --help           Show this screen
    --version           Show version
    --loglevel=<level>  Set log level.
    --logfile=<file>    Set log file


변환하고자 하는 파일과 변환한 파일을 저장할 디렉토리만 적어주면 됩니다.

$ ./hwp5html test/test.hwp test

테스트 디렉토리에 있는 test.hwp 파일을 다시 test 디렉토리에 넣어보았습니다.

-rw-rw-r-- 1 storycompiler storycompiler 49557  2월  8 00:50 index.xhtml
-rw-rw-r-- 1 storycompiler storycompiler 17849  2월  8 00:50 styles.css

위처럼 두 개의 파일이 생성되었습니다.

xhtml 문서를 열어보니 제대로 변환이 되어 있네요.

브라우저로 실행하니 표도 제법 그럴듯하게 변환되어 있었습니다. :)


이 정도면 충분히 hwp의 컨텐츠를 소스로 사용할 수 있겠네요~

오늘은 여기서 마치겠습니다.


그럼 즐거운 하루 보내세요~

끝_


* References

https://en.wikipedia.org/wiki/Pip_%28package_manager%29

https://pip.pypa.io/en/stable/

https://github.com/mete0r/pyhwp