python
Python3에서 만나는 pyhwp
짱가라
2023. 1. 13. 17:08
728x90
반응형
두 줄 요약
- 그간 한글 파일(hwp V5) 파싱 및 처리기인 pyhwp는 파이썬 2 환경에서만 동작하였다.
- 최신 업데이트 버전인 0.1b12에서 python3.x을 지원한다.
참고 문서
- 공식 문서
위 사이트에서는 pyhwp 0.1b8(2014-11-03) 내용이지만 pyhwp 0.1b12에서도 대부분 적용이 된다. 메뉴얼에 예시된 대로 동작하지 않는 경우가 가끔 있는데 사용자의 미숙 때문인지 버전이 올라가면서 바뀐 것인지는 확인되지 않는다,
아래 영문 페이지에 짝이 되는 국문 페이지가 존재하기는 하나 아직 정비 중인지 영문 페이지에 비해 내용이 부실하다. 사용법 등에 관련해서는 위의 페이지를 참고하는 쪽이 여러 모로 편하다.
- 공식 문서(영문)
이 영문 문서를 보면 가장 최신 버전이 hwp 0.1b12(2019-04-08)임을 알 수 있다. 그 위에 hwp 0.1b13(unreleased) 항목이 있는 것으로 보면 개선에 박차를 가하고 있는 것은 아닐까 하는 행복 회로를 돌려보게 된다.
pyhwp의 기능
HWP V5 파일 처리기
- 사용법
hwp5proc <command> [<args>...]
hwp5proc [--version]
hwp5proc [--help]
hwp5proc [--help-commands]
--version Show version and copyright information.
-h --help Show help messages.
--help-commands Show available commands.
각 명령에 따른 구체적인 사용법은 국문 공식 문서를 확인하기 바란다.
- hwp5proc version: hwp v5 파일의 HWP 파일 포맷 버전을 출력한다.
- hwp5proc header: hop v5 파일 헤더를 출력한다.
- hwp5proc summaryinfo: hwp v5 파일의 HWP 파일 포맷 버전을 출력한다.
- hwp5proc ls: hwp v5 파일의 스트림 목록을 출력한다
$ hwp5proc ls sample/sample-5017.hwp
\x05HwpSummaryInformation
BinData/BIN0002.jpg
BinData/BIN0002.png
BinData/BIN0003.png
BodyText/Section0
DocInfo
DocOptions/_LinkDoc
FileHeader
PrvImage
PrvText
Scripts/DefaultJScript
Scripts/JScriptVersion
- hwp5proc cat: hwp v5 파일의 지정된 스트림을 표준출력으로 출력한다.
$ hwp5proc cat samples/sample-5017.hwp BinData/BIN0002.jpg | file -
$ hwp5proc cat samples/sample-5017.hwp BinData/BIN0002.jpg > BIN0002.jpg
$ hwp5proc cat samples/sample-5017.hwp PrvText | iconv -f utf-16le -t utf-8
$ hwp5proc cat --vstreams samples/sample-5017.hwp PrvText.utf8
$ hwp5proc cat --vstreams samples/sample-5017.hwp FileHeader.txt
이 명령이 기대한 대로 동작하지 않는다. prvText의 경우에는 디코딩이 정확히 이루어져 표준 출력이 되는데 BodyText/Section0과 같이 본문의 경우에는 디코싱에서 에러가 발생하고 만다. 사실 이 문제 때문에 hwp5file를 사용할 수 있는 파이썬 모듈을 찾게 된 것인데 다소 아쉬움이 남는다. 그러나 이 아쉬움은 사용자의 미숙 때문인지 모른다.
- hwp5proc unpack: hwp v5 파일의 지정된 스트림을 표준출력으로 출력한다.
$ hwp5proc unpack samples/sample-5017.hwp
$ ls sample-5017
$ hwp5proc unpack --vstreams samples/sample-5017.hwp
$ cat sample-5017/PrvText.utf8
- hwp5proc records: 레코드 구조를 출력한다.
$ hwp5proc records samples/sample-5017.hwp DocInfo
$ hwp5proc records samples/sample-5017.hwp DocInfo --range=0-2
- hwp5proc models: 지정된 record-stream을 파싱한 바이너리 모델들을 출력한다.
$ hwp5proc models samples/sample-5017.hwp DocInfo
$ hwp5proc models samples/sample-5017.hwp BodyText/Section0
$ hwp5proc models samples/sample-5017.hwp docinfo
$ hwp5proc models samples/sample-5017.hwp bodytext/0
- hwp5proc find: 지정된 조건을 만족하는 레코드 모델들을 찾는다.
$ hwp5proc find --model=Paragraph samples/*.hwp
$ hwp5proc find --tag=HWPTAG_PARA_TEXT samples/*.hwp
$ hwp5proc find --tag=66 samples/*.hwp
- hwp5proc xml (실험적): hwp v5 파일을 XML로 변환한다.
$ hwp5proc xml samples/sample-5017.hwp > sample-5017.xml
$ xmllint --format sample-5017.xml
HWP V5 변환기
- hwp5odt: hwp v5 파일을 odt 파일로 변환한다.
hwp5odt [options] [--embed-image] <hwp5file>
hwp5odt [options] --styles <hwp5file>
hwp5odt [options] --content [--embed-image] <hwp5file>
hwp5odt [options] --document [--no-embed-image] <hwp5file>
hwp5odt -h | --help
hwp5odt --version
- hwp5html: hwp v5 파일을 html 파일로 변환한다.
hwp5html [options] <hwp5file> [<out-directory>]
hwp5html -h | --help
hwp5html --version
- hwp5txt: hwp v5 파일을 txt 파일로 변환한다.
hwp5txt [options] <hwp5file>
hwp5txt -h | --help
hwp5txt --version
728x90
반응형