티스토리 뷰

프로그래밍/hwp

hwp MissingNo.

쉬피드 2021. 8. 25. 17:49
728x90
반응형

hwpjs의 난항

hwpjs를 만들며 어려운것은 여러가지가 있다
첫번째로는 각각의 헤더를 정렬하는 방식이다.

특정한 규칙이 있긴 하지만, 무언가 정확하게 어떤 규칙인지 알기 어려운게 이걸 만드는 내가 머리가 나빠서인 이유가 가장 크겠지만
원래 개발하면서 남탓을 해야 자아를 유지할 수 있는 법이다.
그렇기 때문에 무언가 덕지덕지 붙어 결국 헷갈리게 되는 구조라는 생각이 든다.

공식 문서에 나와있든 BodyText의 구조로 보면 HWPTAG를 접두사로 하는 각각의 tag_id가 목적에 맞게 정렬되면 되는데,
이 순서에 대한, 또는 특정 상황에 따른 구조형태를 문서화 시켜줬으면 좋겠다라는 생각이 들었다.

어찌됐건 각각의 단락, 하나의 데이터 배열이 끝나는 조건은 처음에 텍스트만 확인하고 예제문서를 활용해 비교해볼떄는

HWPTAG_PARA_HEADER

가 구분을 하는 줄 알았지만, 예외상황이 많다.
다각형이나 도형 등 그림그리기는 아직 지원예정에 전혀 없어 분석하지 않아 모르지만
그 외의 글상자. 테이블 각주 미주 주석 글넘버 들여쓰기 등의 상황에 있을 때,

HWPTAG_CTRL_HEADER가 추가가 되며 이것은 HEADER보다 먼저 나온다.

PARA_HEADER가 먼저 나오는 경우 PARA_HEADER가 나오더라도, 특정한 상황에서는 스킵해야하기도 한다.

또한 PARA_TEXT에서 CTRL_HEADER와 유사한 객체 정보를 얻을 수 있는데 어떤걸 기준점으로 삼아야 정확하게 한글에서처럼 객체별로 각각의 데이터를 배열화 시키거나 나눌 수 있는지 아직도 불명확하다.

그렇기에 어느정도 구현은 해넀지만 조금만 복잡하거나 예외적인 구조가 나오면 제대로 로드하지 못하는 문서가 많다

그리고 이러한 기준은 순서대로 데이터를 읽으면서 각각의 객체별로 데이터를 넘겨줘야 웹에서 그에 형식에 맞게 출력할 수 있을텐데,
앞선글에서 말한 LINE_SEG에서의 부정확한 데이터,
맨 처음 단락. 초기 데이터에 필수적으로 들어가는 32 바이트 크기의 PARA_TEXT 헤더 부분은 설명이 되어있지 않다.

저러한 부분은 명확하게 설명되어있지 않은 ctrl_id나 ctrl_object_id, control_mask 등의 값에서 무언가 얻어낼 수 있을거라 생각되지만 알 수 없다.

특히 다단의 경우 구조는 어느정도 파악이 되나 이것을 구분하여 출력하기에 기준이 매우 어렵다.
그리고 글상자의 경우 테두리 정보를 얻어낼 방법이 공식문서에서는 전혀 보이지 않는다.

atno(Auto Number)가 겹치는경우 중간의 텍스트가 생략이 되는데 이러한 부분도 아이러니한게.
PARA_TEXT에는 일반적인 텍스트가 저장되지만, 한글에서 제공하는 글번호나, 글머리모양 등 특정한 커스텀 데이터가 들어가면 이 부분이 ctrl_id로 대체 되는데
텍스트는 utf-16le로 인코딩이 되면서 저러한 ctrl_id는 utf-8로 인코딩이 되어있다는 것이다.
그래서 읽어낼때 이 부분을 따로 떼어서 읽어야 하며 한글 문서 구조특성상 javascript로 읽을 때, 텍스트가 길면 이 부분에서 상당한 처리속도 로스가 발생한다
마찬가지로 코딩도 그렇고 읽기 불편하다.

결론

결과적으로 hwpjs가 어느정도 퀄리티 있게 나오려면 저러한 HWPTAG의 MissingNo를 최소한 단락을 구분하는데에는 지장이 없을정도로 읽어야 하지 않을까 싶다.

이게 문제지만,

728x90

'프로그래밍 > hwp' 카테고리의 다른 글

HWPTAG_FOOTNOTE_SHAPE 문서 오류  (0) 2022.05.02
HWP Header DOCINFO STYLE 누락 부분  (0) 2022.05.02
hwpjs 웹뷰어.  (0) 2021.08.12
HWP 5.X파일의 구조.  (1) 2021.08.01
hwp 포맷 분석과 웹 뷰어 만들기  (0) 2021.07.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함