글문서파일구조 5.0 Hwp Document File Formats 5.0 revision 1.3:20181108
차례 저작권 1 본문서에대하여... 2 I. 글 5.0 파일구조 3 1. 개요 5 2. 자료형설명 6 3. 글파일구조 7 3.1. 글파일구조요약 7 3.2. 스토리지별저장정보 7 3.2.1. 파일인식정보 7 3.2.2. 문서정보 8 3.2.3. 본문 9 3.2.4. 문서요약 12 3.2.5. 바이너리데이터 12 3.2.6. 미리보기텍스트 12 3.2.7. 미리보기이미지 13 3.2.8. 문서옵션 13 3.2.9. 스크립트 13 3.2.10. XML 템플릿 13 3.2.11. 문서이력관리 14 3.2.12. 참고문헌 15 4. 데이터레코드 16 4.1. 데이터레코드구조 16 4.2. 문서정보 의데이터레코드 17
4.2.1. 문서속성 17 4.2.2. 아이디매핑헤더 17 4.2.3. 바이너리데이터 18 4.2.4. 글꼴 20 4.2.5. 테두리 / 배경 21 4.2.6. 글자모양 24 4.2.7. 탭정의 26 4.2.8. 문단번호 26 4.2.9. 글머리표 27 4.2.10. 문단모양 28 4.2.11. 스타일 ( 문단스타일 ) 29 4.2.12. 문서임의의데이터 30 4.2.13. 배포용문서데이터 31 4.2.14. 호환문서 32 4.2.15. 레이아웃호환성 32 4.3. 본문 의데이터레코드 33 4.3.1. 문단헤더 Tag ID : HWPTAG_PARA_HEADER 33 4.3.2. 문단의텍스트 34 4.3.3. 문단의글자모양 34 4.3.4. 문단의레이아웃 35 4.3.5. 문단의영역태그 35 4.3.6. 컨트롤헤더 35 4.3.7. 문단리스트헤더 36 4.3.8. 컨트롤임의의데이터 36 4.3.9. 개체공통속성을포함하는컨트롤 ( 개체컨트롤 ) 36 4.3.9.1. 표개체 39 4.3.9.2. 그리기개체 ( 선, 사각형, 타원, 호, 다각형, 곡선 ) 40 4.3.9.2.1. 개체요소 40 4.3.9.2.2. 선개체 42 4.3.9.2.3. 사각형개체 43 4.3.9.2.4. 타원개체 43 4.3.9.2.5. 다각형개체 45 4.3.9.2.6. 호개체 45
4.3.9.2.7. 곡선개체 45 4.3.9.3. 글수식개체 46 4.3.9.4. 그림개체 (HWPTAG_SHAPE_COMPONENT_PICTURE) 46 4.3.9.5. OLE 개체 (HWPTAG_SHAPE_COMPONENT_OLE) 49 4.3.9.6. 차트개체 50 4.3.9.7. 묶음개체 (HWPTAG_SHAPE_COMPONENT_CONTAINER) 51 4.3.9.8. 동영상개체 (HWPTAG_VIDEO_TDATA) 51 4.3.10. 개체이외의컨트롤 52 4.3.10.1. 구역정의 53 4.3.10.1.1. 용지설정 54 4.3.10.1.2. 각주 / 미주모양 55 4.3.10.1.3. 쪽테두리 / 배경 56 4.3.10.2. 단정의 56 4.3.10.3. 머리말 / 꼬리말 57 4.3.10.4. 각주 / 미주 57 4.3.10.5. 자동번호 58 4.3.10.6. 새번호지정 58 4.3.10.7. 감추기 58 4.3.10.8. 홀 / 짝수조정 59 4.3.10.9. 쪽번호위치 59 4.3.10.10. 찾아보기표식 59 4.3.10.11. 책갈피 60 4.3.10.12. 글자겹침 60 4.3.10.13. 덧말 60 4.3.10.14. 숨은설명 60 4.3.10.15. 필드시작 61 4.4. 문서이력관리 62 4.4.1. 문서이력관리란 62 4.4.2. 문서이력관리레코드정보 62 4.4.2.1. 히스토리아이템정보시작 62 4.4.2.2. 히스토리아이템정보끝 62 4.4.2.3. 히스토리아이템버전 63 4.4.2.4. 히스토리날짜 63
4.4.2.5. 히스토리작성자 63 4.4.2.6. 히스토리설명 63 4.4.2.7. 비교정보 63 4.4.2.8. 가장마지막최근문서 63 변경사항이력 65
저작권 ( 주 ) 한글과컴퓨터 ( 이하 한컴 ) 는문서형식의개방성과표준화에대하여적극찬성합니다. 한컴은 글 97의문서형식을무상으로지원한바있으며, 글 2002~2010 문서의 XML 형식은 HWPML 에대해서도문서형식을공개한바있습니다. 개방형문서표준화및코드관련위원회에도적극적으로참여하여파일형식의표준화와개방성을위해노력해왔습니다. 이러한결과로 HWPML 스펙이 OWPML 란이름으로한국산업표준 (KS X 6101:2011) 으로제정되었습니다. 또한, 한컴오피스에서기록물장기보존표준포맷인 PDF/A-1 의지원과 ISO 국제문서형식인 ODF 와 OOXML 파일형식의불러오기와저장하기를적극적으로지원하였습니다. 본문서를열람하고자하는자라면누구에게나제공되는것이며, 본문서를열람하는것외에복사, 배포, 게재및본문서에기재되어있는내용을사용하고자하는자는한글과컴퓨터의본저작권을충분히인식하고동의하여야합니다. 본문서를누구나열람, 복사, 배포, 게재및사용을자유롭게할수있습니다. 다만, 배포는원내용이일체수정되지않은원본또는복사본으로제한됩니다. 원본및복사본은한컴에서제공하는스펙의최신버전을포함하고있어야합니다. 한컴은한컴오피스 글문서파일 (.hwp) 공개문서에따라얻은결과물을기초로또다른독점적, 배타적권리를취득하고이를 ( 주 ) 한글과컴퓨터를상대로행사하고자하는자를상대로는적극적으로권리행사를할수도있습니다. 그리고, 본문서및본문서에기재된내용을참고하여개발한결과물에대한모든저작권은결과물을개발한개인또는단체에있을것입니다. 그러나반드시개발결과물에 본제품은한글과컴퓨터의 글문서파일 (.hwp) 공개문서를참고하여개발하였습니다. 라고제품내사용자인터페이스, 매뉴얼, 도움말및소스에모두기재하여야하며제품이이러한구성물이없을시에는존재하는구성물에만기재합니다. 한컴은본문서및본문서에기재된내용을참고하여개발한결과물에대해서어떠한정확성, 진실성도보증하지아니합니다. 1
본문서에대하여... 본문서는 글워드프로세서의파일저장형식중, 글 2002 이후제품에서사용되는 글문서파일형식 5.0 에관하여설명한다. 본문서는 글문서파일형식 5.0의주요한자료형식및파일구조, 레코드구조에대해서설명한다. 글문서수식, 차트, 배포용문서, 글문서파일형식 3.0, HWPML 에관해서는별도의문서에서설명한다. 2
I. 글 5.0 파일구조 (Hwp Document File Format 5.0)
4
1. 개요 글의문서파일은사용자가따로지정하지않는한.HWP를기본확장자로가진다. 문서파일에저장되는내용은, 실제사용자가입력한문서의내용과문자장식정보뿐만아니라문서를편집할당시의글꼴에대한정보, 조판에영향을주는설정사항 ( 용지종류, 여백정보등 ) 도포함된다. 글문서파일형식 5.0은 2000년 10월이후에출시된 글제품군 ( 글워디안, 글 2002, 글 2005, 글 2007, 글 2010, 글 2014, 글 2018 등 ) 에서생성되며, 문서버전에따라큰골격은유지되나, 추가적인정보들에의해약간의차이가있다. 글문서파일형식 5.0은파일의크기를최소화하기위하여압축기능을이용한다. 압축된문서파일도기본적인정보를저장하는부분은압축되지않으며, 실제압축되는부분은사용자가입력한본문과그림관련데이터부분이다. 글은문서파일의압축에 zlib.org 의 zlib을사용했다. zlib은웹상에소스가공개되어있는공개소프트웨어이다. zlib은 zlib License 를따르며, 이는소스의자유로운사용이가능하며해당소스를사용한 2차산출물에대한소스공개의무가없다. 자세한사항은 zlib에포함되어있는라이센스문서파일을참조하기바란다. 글문서파일형식 5.0의구조는윈도우즈의복합파일 (Compound File) 에기초를두며, 문자코드는 ISO-10646 표준을기반으로한다. 대부분의문자정보는유니코드 (UTF-16LE) 형식으로전달되고, 저장된다. Compound File 에대한접근방법은 OLE 관련자료또는 MSDN 을참고 StgOpenStorage(), IStorage::Open(),... 5
2. 자료형설명 앞으로계속되는설명에서 글의문서파일에저장되는정보는아래표에설명하는자료형을이용해 표현한다. 자료형에서한바이트는 8 비트로표현되며, 두바이트이상의길이를가지는자료형은최하위바이트가 가장먼저저장되고, 최상위바이트가가장나중에저장되는리틀엔디언 (Little-endian) 형태이다. 파일에저장되는자료가배열 (array) 일때는 자료형 array[ 개수 ] 와같이표현한다. 예를들어 10 개의 원소를갖는 word 배열이면 word array[10] 과같이표현한다. 자료형 길이 부호 설명 BYTE 1 부호없는한바이트 (0~255) WORD 2 16비트컴파일러에서 unsigned int 에해당 DWORD 4 16비트컴파일러에서 unsigned long 에해당 WCHAR 2 글의기본코드로유니코드기반문자 HWPUNIT 4 1/7200 인치로표현된 글내부단위 SHWPUNIT 4 1/7200 인치로표현된 글내부단위 UINT8 1 unsigned int8 에해당 UINT16 2 unsigned int16 에해당 UINT32(=UINT) 4 unsigned int32 에해당 INT8 1 signed int8 에해당 INT16 2 signed int16 에해당 INT32 4 signed int32 에해당 HWPUNIT16 2 INT16 과같다. COLORREF 4 RGB값 (0x00bbggrr) 을십진수로표시 (rr : red 1 byte, gg : green 1 byte, bb : blue 1 byte) BYTE stream 일련의 BYTE로구성됨. 본문내에서다른구조를참조할경우에사용됨. 표 1 자료형 WCHAR 는 글의내부코드로표현된문자한글자를표현하는자료형이다. 글의내부코드는한글, 영문, 한자를비롯해모든문자가 2 바이트의일정한길이를가진다. HWPUNIT 과 SHWPUNIT 는문자의크기, 그림의크기, 용지여백등, 문서를구성하는요소들의크기를표현하기위한자료형이다. 문서출력장치의해상도는가변적이기때문에, 크기정보를점 ( 도트 ) 의수로표현할수는없다. 따라서일정한단위를기준으로해야하는데, 글에서는 1/7200 인치를기본단위로사용한다. 예를들어 [ 가로 2 인치 x 세로 1 인치 ] 짜리그림의크기를 HWPUNIT 형으로표현하면각각 14400 x 7200이된다. 6
3. 글파일구조 3.1. 글파일구조요약 글의문서파일은개괄적으로다음표와같은구조를가진다. 복합파일 (Compound File) 구조를 가지기때문에, 내부적으로스토리지 (Storage) 와스트림 (Stream) 을구별하기위한이름을가진다. 하나의스트림에는일반적인바이너리나레코드구조로데이터가저장되고, 스트림에따라서압축 / 암호 화되기도한다. Storage Stream 설명구별이름길이 ( 바이트 ) 레코드구조압축 / 암호화 파일인식정보 FileHeader 고정 문서정보 DocInfo 고정 본문 BodyText Section0 Section1 가변... 문서요약 \005HwpSummaryInformation 고정 바이너리데이터 BinData BinaryData0 BinaryData1... 가변 미리보기텍스트 PrvText 고정 미리보기이미지 PrvImage 가변 문서옵션 스크립트 XML 템플릿 문서이력관리 DocOptions _LinkDoc DrmLicense... Scripts DefaultJScript JScriptVersion... XMLTemplate Schema Instance... DocHistory VersionLog0 VersionLog1... 표 2 전체구조 가변 가변 가변 가변 압축된문서파일의경우문서파일을읽는쪽에서는 파일인식정보 항목의 압축 플래그를살펴보고, 압축된파일이면압축을풀어서처리해야한다. 이후의설명에서는압축이풀린상태의파일을기준으로한다. 문서정보 와 본문 문서이력관리 에사용되는 레코드구조 는이후 데이터레코드 란에서구조설명과사용되는레코드들에대한상세한설명을한다. 3.2. 스토리지별저장정보 3.2.1. 파일인식정보 7
글의문서파일이라는것을나타내기위해 파일인식정보 가저장된다. FileHeader 스트림에저장되는데이터는다음과같다. BYTE array[32] 32 signature. 문서파일은 "HWP Document File" 파일버전. 0xMMnnPPrr 의형태 ( 예 5.0.3.0) MM: 문서형식의구조가완전히바뀌는것을나타냄. 숫자가다르면구버전과호환불가능. nn: 큰구조는동일하나, 큰변화가있는것을나타냄. 숫자가다르면구버전과호환불가능. DWORD 4 PP: 구조는동일, Record 가추가되었거나, 하위버전에서호환되지않는정보가추가된것을나타냄. 숫자가달라도구버전과호환가능. rr: Record 에정보들이추가된것을나타냄. 숫자가달라도구버전과호환가능. 속성범위설명 bit 0 압축여부 bit 1 암호설정여부 bit 2 배포용문서여부 bit 3 스크립트저장여부 bit 4 DRM 보안문서여부 bit 5 XMLTemplate 스토리지존재여부 bit 6 문서이력관리존재여부 bit 7 전자서명정보존재여부 DWORD 4 bit 8 공인인증서암호화여부 bit 9 전자서명예비저장여부 bit 10 공인인증서 DRM 보안문서여부 bit 11 CCL 문서여부 bit 12 모바일최적화여부 bit 13 개인정보보안문서여부 bit 14 변경추적문서여부 bit 15 공공누리 (KOGL) 저작권문서 bit 16 비디오컨트롤포함여부 bit 17 차례필드컨트롤포함여부 bit 18~31 예약속성범위설명 bit 0 CCL, 공공누리라이선스정보 DWORD 4 bit 1 복제제한여부동일조건하에복제허가여부 bit 2 ( 복제제한인경우무시 ) bit 3~31 예약 EncryptVersion 0 : None 1 : ( 글 2.5 버전이하 ) DWORD 4 2 : ( 글 3.0 버전 Enhanced) 3 : ( 글 3.0 버전 Old) 4 : ( 글 7.0 버전이후 ) 공공누리 (KOGL) 라이선스지원국가 BYTE 1 6 : KOR 15 : US BYTE array[207] 207 예약전체길이 256 표 3 파일인식정보 3.2.2. 문서정보 8
본문에사용중인글꼴, 글자속성, 문단속성, 탭, 스타일등에문서내공통으로사용되는세부정보를 담고있다. DocInfo 스트림에저장되는데이터는다음과같다. Tag ID 길이 ( 바이트 ) 레벨설명 HWPTAG_DOCUMENT_PROPERTIES 30 0 문서속성 ( 표 14 참조 ) HWPTAG_ID_MAPPINGS 32 0 아이디매핑헤더 ( 표 15 참조 ) HWPTAG_BIN_DATA 가변 1 바이너리데이터 ( 표 17 참조 ) HWPTAG_FACE_NAME 가변 1 글꼴 ( 표 19 참조 ) HWPTAG_BORDER_FILL 가변 1 테두리 / 배경 ( 표 23 참조 ) HWPTAG_CHAR_SHAPE 72 1 글자모양 ( 표 33 참조 ) HWPTAG_TAB_DEF 14 1 탭정의 ( 표 36 참조 ) HWPTAG_NUMBERING 가변 1 문단번호 ( 표 38 참조 ) HWPTAG_BULLET 10 1 글머리표 ( 표 42 참조 ) HWPTAG_PARA_SHAPE 54 1 문단모양 ( 표 43 참조 ) HWPTAG_STYLE 가변 1 스타일 ( 표 47 참조 ) HWPTAG_MEMO_SHAPE 22 1 메모모양 HWPTAG_TRACK_CHANGE_AUTHOR 가변 1 변경추적작성자 HWPTAG_TRACK_CHANGE 가변 1 변경추적내용및모양 HWPTAG_DOC_DATA 가변 0 문서임의의데이터 ( 표 49 참조 ) HWPTAG_FORBIDDEN_CHAR 가변 0 금칙처리문자 HWPTAG_COMPATIBLE_DOCUMENT 4 0 호환문서 ( 표 54 참조 ) HWPTAG_LAYOUT_COMPATIBILITY 20 1 레이아웃호환성 ( 표 56 참조 ) HWPTAG_DISTRIBUTE_DOC_DATA 256 0 배포용문서 HWPTAG_TRACKCHANGE 1032 1 변경추적정보 전체길이 가변 표 4 문서정보 각각의세부정보는 < 문서정보 의데이터레코드 > 란에서추가로다룬다. 3.2.3. 본문문서의본문에해당되는문단, 표, 그리기개체등의내용이저장된다. BodyText 스토리지는본문의구역에따라 Section%d 스트림 (%d는구역의번호 ) 으로구분된다. 구역의개수는문서정보의문서속성에저장된다. 각구역의첫문단에는구역정의레코드가저장되고, 각단설정의첫문단에는단정의레코드가저장된다. 각구역의가장끝위치에는확장바탕쪽 ( 마지막쪽, 임의쪽 ) 관련정보가저장되고, 마지막구역의가장끝위치에는메모관련정보가저장된다. Section 스트림에저장되는데이터는문단들 ( 문단리스트 ) 이며, 다음과같은문단정보들이반복된다. Tag ID 길이 ( 바이트 ) 레벨설명 HWPTAG_PARA_HEADER 22 0 문단헤더 ( 표 58 참조 ) HWPTAG_PARA_TEXT 가변 1 문단의텍스트 ( 표 60 참조 ) HWPTAG_PARA_CHAR_SHAPE 가변 1 문단의글자모양 ( 표 61 참조 ) HWPTAG_PARA_LINE_SEG 가변 1 문단의레이아웃 9
HWPTAG_PARA_RANGE_TAG 가변 1 문단의영역태그 ( 표 63 참조 ) HWPTAG_CTRL_HEADER 4 1 컨트롤헤더 ( 표 64 참조 ) HWPTAG_LIST_HEADER 6 2 문단리스트헤더 ( 표 65 참조 ) HWPTAG_PAGE_DEF 40 2 용지설정 HWPTAG_FOOTNOTE_SHAPE 30 2 각주 / 미주모양 HWPTAG_PAGE_BORDER_FILL 14 2 쪽테두리 / 배경 HWPTAG_SHAPE_COMPONENT 4 2 개체 HWPTAG_TABLE 가변 2 표개체 HWPTAG_SHAPE_COMPONENT_LINE 20 3 직선개체 HWPTAG_SHAPE_COMPONENT_RECTANGLE 9 3 사각형개체 HWPTAG_SHAPE_COMPONENT_ELLIPSE 60 3 타원개체 HWPTAG_SHAPE_COMPONENT_ARC 25 3 호개체 HWPTAG_SHAPE_COMPONENT_POLYGON 가변 3 다각형개체 HWPTAG_SHAPE_COMPONENT_CURVE 가변 3 곡선개체 HWPTAG_SHAPE_COMPONENT_OLE 26 3 OLE 개체 HWPTAG_SHAPE_COMPONENT_PICTURE 가변 3 그림개체 HWPTAG_CTRL_DATA 가변 2 컨트롤임의의데이터 HWPTAG_EQEDIT 가변 2 수식개체 HWPTAG_SHAPE_COMPONENT_TEXTART 가변 3 글맵시 HWPTAG_FORM_OBJECT 가변 2 양식개체 HWPTAG_MEMO_SHAPE 22 1 메모모양 HWPTAG_MEMO_LIST 4 1 메모리스트헤더 HWPTAG_CHART_DATA 2 2 차트데이터 HWPTAG_VIDEO_DATA 가변 3 비디오데이터 HWPTAG_SHAPE_COMPONENT_UNKNOWN 36 3 Unknown 전체길이 가변 표 5 본문 문단에컨트롤이포함되는경우컨트롤헤더이후로문단리스트헤더와같은컨트롤의레코드데이터가 저장된다. o 제어문자 ( 컨트롤 ) 표, 그림등일반문자로표현할수없는요소를표현하기위해서문자코드중일부분을특수용도로 사용하고있다. 문단내용중에문자코드가 0-31 인문자들은특수용도로사용된다. 이미 13 번문자는문단내용의 끝식별기호로사용된다는것은설명한바있다. 이외의특수문자들은표나그림등, 일반문자로 표현할수없는문서장식요소를표현하기위해서제어문자 ( 컨트롤 ) 로사용된다. 제어문자는다음세가지형식이존재한다. - 문자컨트롤 [char] = 하나의문자로취급되는문자컨트롤 / size = 1 - 인라인컨트롤 [inline] = 별도의오브젝트포인터를가리키지않는단순한인라인컨트롤 / size = 8 - 확장컨트롤 [extended] = 별도의오브젝트가데이터를표현하는확장컨트롤 / size = 8 코드설명컨트롤형식 0 unusable char 1 예약 extended 2 구역정의 / 단정의 extended 3 필드시작 ( 누름틀, 하이퍼링크, 블록책갈피, 표계산식, 문서요약, 사용자정보, 현재날짜 / 시간, 문서날짜 / 시간, 파일경로, 상호참조, 메일머지, 메모, 교정부호, 개인정보 ) extended 10
4 필드끝 inline 5-7 예약 inline 8 title mark inline 9 탭 inline 10 한줄끝 (line break) char 11 그리기개체 / 표 extended 12 예약 extended 13 문단끝 (para break) char 14 예약 extended 15 숨은설명 extended 16 머리말 / 꼬리말 extended 17 각주 / 미주 extended 18 자동번호 ( 각주, 표등 ) extended 19-20 예약 inline 21 페이지컨트롤 ( 감추기, 새번호로시작등 ) extended 22 책갈피 / 찾아보기표식 extended 23 덧말 / 글자겹침 extended 24 하이픈 char 25-29 예약 char 30 묶음빈칸 char 31 고정폭빈칸 char 표 6 제어문자 문서파일에서문단내용을읽다가제어문자를발견하면, 문서를읽는쪽에서는제어문자종류에따라읽어들이거나건너뛰어다음데이터의시작위치까지파일포인터를옮기기위한적절한처리를수행해야한다. 제어문자가운데는또다른문단리스트를포함하는경우도있기때문에, 제어문자를일반문자처럼처리하면문서파일을정상적으로읽을수없다. 표, 각주등과같은문단리스트를포함하는컨트롤문자들은독자적인문단리스트를가진다. 해당리스트들은아래와같은리스트헤더정보를포함한다. 실제문단들은그다음에 serialize 된다. 문단내에서컨트롤은세가지형식에따라다음과같은차이가있다. 문자컨트롤부가정보없이문자하나로표현되는제어문자이다. (3번째 ch) 0 1 2 3 4 5 6 7 8 9 10 11 A B C ch D E F G H I J 13 인라인컨트롤부가정보가 12바이트 (6 WCHAR) 이내에서표현될수있는제어문자이다. info 에부가정보를다넣지못하는경우는확장컨트롤로대체된다.(3~9까지 8개의 ch) 0 1 2 3 4 5 6 7 8 9 10 11 A B ch info ch C 13 확장컨트롤 제어문자는포인터를가지고있고, 포인터가가리키는곳에실제오브젝트가존재하는제어문자이 11
다.(3~9 까지 8 개의 ch) 0 1 2 3 4 5 6 7 8 9 10 11 A B ch pointer ch C 13 Control Object Instance 본문서에부가설명없이 컨트롤 또는 제어문자 이라고하면바로이확장컨트롤을지칭하는것이다. 3.2.4. 문서요약 \005HwpSummaryInfomation 스트림에는 글메뉴의 파일- 문서정보- 문서요약 에서입력한내용이저장된다. Summary Information 에대한자세한설명은 MSDN을참고 The Summary Information Property Set The DocumentSummaryInformation and UserDefined Property Set Name Property ID string Property ID VT type Title PIDSI_TITLE 0x00000002 VT_LPSTR Subject PIDSI_SUBJECT 0x00000003 VT_LPSTR Author PIDSI_AUTHOR 0x00000004 VT_LPSTR Keywords PIDSI_KEYWORDS 0x00000005 VT_LPSTR Comments PIDSI_COMMENTS 0x00000006 VT_LPSTR Last Saved By PIDSI_LASTAUTHOR 0x00000008 VT_LPSTR Revision Number PIDSI_REVNUMBER 0x00000009 VT_LPSTR Last Printed PIDSI_LASTPRINTED 0x0000000B VT_FILETIME (UTC) Create Time/Date( (*)) PIDSI_CREATE_DTM 0x0000000C VT_FILETIME (UTC) Last saved Time/Date( (*)) PIDSI_LASTSAVE_DTM 0x0000000D VT_FILETIME (UTC) Number of Pages PIDSI_PAGECOUNT 0x0000000E VT_I4 Date String(User define) HWPPIDSI_DATE_STR 0x00000014 VT_LPSTR Para Count(User define) HWPPIDSI_PARACOUN T 0x00000015 VT_I4 표 7 문서요약 3.2.5. 바이너리데이터 BinData 스토리지에는그림이나 OLE 개체와같이문서에첨부된바이너리데이터가각각의스트림으 로저장된다. 3.2.6. 미리보기텍스트 PrvText 스트림에는미리보기텍스트가유니코드문자열로저장된다. 12
3.2.7. 미리보기이미지 PrvImage 스트림에는미리보기이미지가 BMP 또는 GIF 형식으로저장된다. 3.2.8. 문서옵션 DocOptions 스토리지에는연결문서, 배포용문서, 공인인증서 DRM, 전자서명관련정보가각각의스트림으로저장된다. _LinkDoc 스트림에는연결된문서의경로가저장된다. DrmLicense 스트림에는 DRM Packaging 의 Verision 정의가저장된다. DrmRootSect 스트림에는암호화알고리즘이저장된다. CertDrmHeader 스트림에는 DRM Packaging 의 Verision 정의가저장된다. CertDrmInfo 스트림에는공인인증서 DRM 정보가저장된다. DigitalSignature 스트림에는전자서명정보가저장된다. PublicKeyInfo 스트림에는공개키정보가저장된다. 3.2.9. 스크립트 Scripts 스토리지에는 Script 코드를저장한다. JScriptVersion 스트림에는 Script Version 이저장된다. 자료형 길이 ( 바이트 ) 설명 DWORD 4 스크립트버전 HIGH DWORD 4 스크립트버전 LOW 전체길이 8 표 8 스크립트버전 DefaultJScript 스트림에는 Script 헤더, 소스, Pre 소스, Post 소스가저장된다. 자료형 길이 ( 바이트 ) 설명 DWORD 4 스크립트헤더길이 (len1) WCHAR array[len1] 2 len1 스크립트헤더 DWORD 4 스크립트소스길이 (len2) WCHAR array[len2] 2 len2 스크립트소스 DWORD 4 스크립트 Pre 소스길이 (len3) WCHAR array[len3] 2 len3 스크립트 Pre 소스 DWORD 4 스크립트 Post 소스길이 (len4) WCHAR array[len4] 2 len4 스크립트 Post 소스 DWORD 4 스크립트 end flag (-1) 전체길이 20 + (2 len1) + (2 len2) + (2 len3) + (2 len4) 표 9 스크립트 3.2.10. XML 템플릿 13
XMLTemplate 스토리지에는 XML Template 정보를저장한다. _SchemaName 스트림에는 Schema 이름문자열이저장된다. 자료형 길이 ( 바이트 ) 설명 DWORD 4 Schema 이름길이 (len1) WCHAR array[len1] 2 len1 Schema 이름 전체길이 4 + (2 len1) 표 10 Schema 이름정보 Schema 스트림에는 Schema 문자열이저장된다. 자료형 길이 ( 바이트 ) 설명 DWORD 4 Schema 길이 (len1) WCHAR array[len1] 2 len1 Schema 전체길이 4 + (2 len1) 표 11 Schema 길이정보 Instance 스트림에는 Instance 문자열이저장된다. 자료형 길이 ( 바이트 ) 설명 DWORD 4 Instance 길이 (len1) WCHAR array[len1] 2 len1 Instance 전체길이 4 + (2 len1) 표 12 Instance 정보 3.2.11. 문서이력관리 글메뉴의 파일-문서이력관리 에서표시및생성되는문서의이력정보를저장하는장소이다. 문서이력정보의각각의아이템은 히스토리 혹은 히스토리아이템 이라하며 글 Compound 구조내에서각아이템은 DocHistory 라는스토리지내부에 VersionLog%d(%d 는버전 ) 이름의스트림으로저장된다. 또한, 각각아이템은압축, 암호화되어저장된다. 이력정보데이터를 DocHistory 라는새로운스토리지로저장한다. DocHistory 스토리지에이력정보아이템은추후추가정보가저장되었을때하위호환성을위하여다음의구조로저장한다. 14
DocHistory : 스토리지 VersionLog0 : 이력정보스트림 VersionLog1 : 이력정보스트림 VersionLog2 : 이력정보스트림... HistoryLastDoc : 최종문서스트림 [ 버전정보스토리지구조 ] 히스토리아이템아이템시작레코드히스토리정보레코드 1 히스토리정보레코드 2 히스토리정보레코드 3.. ( 사용자, 시간, 날짜등...) 이력정보데이터레코드아이템끝레코드 [ 히스토리아이템스트림구조 ] 히스토리아이템아이템시작레코드히스토리정보레코드 1 히스토리정보레코드 2 히스토리정보레코드 3.. ( 사용자, 시간, 날짜등...) 이력정보데이터레코드아이템끝레코드 [ 히스토리아이템스트림구조 ] RECORD_HEADER 자료형 BYTE UINT 자료형 DATA 설명레코드 Type 추가데이터블록 (RD) BYTE 크기 RECORD_DATA (RD) 설명레코드 Type에따른다양한정보 ( 스트링, Bit flag등 ) 3.2.12. 참고문헌 [ 레코드구성 ] Bibliography 스토리지에는참고문헌정보가.XML 파일형태로저장한다. 15
4. 데이터레코드 4.1. 데이터레코드구조 논리적으로연관된데이터들을헤더정보와함께저장하는방식을데이터레코드라고한다. 레코드구조를가지는스트림은연속된여러개의레코드로구성된다. 데이터레코드는헤더와데이터로구성되며각헤더정보를활용하여전체논리적구조를생성하게된다. 레코드의헤더에는데이터확장에대비한정보를가지고있다. 따라서이후에 글의기능이확장되어레코드에데이터가추가되는경우에도하위버전의 글이상위버전의 글문서를읽을수있도록하위호환성이보장된다. 그림 45 레코드구조 레코드헤더의크기는 32bits이고 TagID(10bits), Level(10bits), Size(12bits) 로구성된다. Tag ID : 레코드가나타내는데이터의종류를나타내는태그이다. Tag ID에는 10 비트가사용되므로 0x000-0x3FF 까지가능하다. - 0x000-0x00F = 일반레코드태그가아닌특별한용도로사용한다. - 0x010-0x1FF = 글에의해내부용으로예약된영역 (HWPTAG_BEGIN = 0x010) - 0x200-0x3FF = 외부어플리케이션이사용할수있는영역 Level : 대부분하나의오브젝트는여러개의레코드로구성되는것이일반적이기때문에하나의레코드가아닌 " 논리적으로연관된연속된레코드 " 라는개념이필요하다. 레벨은이와같이연관된레코드의논리적인묶음을표현하기위한정보이다. 스트림을구성하는모든레코드는계층구조로표현할수있는데, 레벨은바로이계층구조에서의 depth를나타낸다. Size : 데이터영역의길이를바이트단위로나타낸다. 12개의비트가모두 1일때는데이터영역의길이가 4095 바이트이상인경우로, 이때는레코드헤더에연이어길이를나타내는 DWORD 가추가된다. 즉, 4095 바이트이상의데이터일때레코드는다음과같이표현된다. 레코드 헤더 (DWORD) 길이 (DWORD) 데이터 그림 46 확장데이터레코드구조 16
4.2. 문서정보 의데이터레코드 문서정보 ( DocInfo ) 에서사용되는데이터레코드는다음과같다. Tag ID Value 의미 HWPTAG_DOCUMENT_PROPERTIES HWPTAG_BEGIN 문서속성 HWPTAG_ID_MAPPINGS HWPTAG_BEGIN+1 아이디매핑헤더 HWPTAG_BIN_DATA HWPTAG_BEGIN+2 BinData HWPTAG_FACE_NAME HWPTAG_BEGIN+3 Typeface Name HWPTAG_BORDER_FILL HWPTAG_BEGIN+4 테두리 / 배경 HWPTAG_CHAR_SHAPE HWPTAG_BEGIN+5 글자모양 HWPTAG_TAB_DEF HWPTAG_BEGIN+6 탭정의 HWPTAG_NUMBERING HWPTAG_BEGIN+7 번호정의 HWPTAG_BULLET HWPTAG_BEGIN+8 불릿정의 HWPTAG_PARA_SHAPE HWPTAG_BEGIN+9 문단모양 HWPTAG_STYLE HWPTAG_BEGIN+10 스타일 HWPTAG_DOC_DATA HWPTAG_BEGIN+11 문서의임의의데이터 HWPTAG_DISTRIBUTE_DOC_DATA HWPTAG_BEGIN+12 배포용문서데이터 RESERVED HWPTAG_BEGIN+13 예약 HWPTAG_COMPATIBLE_DOCUMENT HWPTAG_BEGIN+14 호환문서 HWPTAG_LAYOUT_COMPATIBILITY HWPTAG_BEGIN+15 레이아웃호환성 HWPTAG_TRACKCHANGE HWPTAG_BEGIN+16 변경추적정보 HWPTAG_MEMO_SHAPE HWPTAG_BEGIN+76 메모모양 HWPTAG_FORBIDDEN_CHAR HWPTAG_BEGIN+78 금칙처리문자 HWPTAG_TRACK_CHANGE HWPTAG_BEGIN+80 변경추적내용및모양 HWPTAG_TRACK_CHANGE_AUTHOR HWPTAG_BEGIN+81 변경추적작성자 표 13 문서정보의데이터레코드 4.2.1. 문서속성 Tag ID : HWPTAG_DOCUMENT_PROPERTIES 자료형 길이 ( 바이트 ) 설명 UINT16 2 구역개수문서내각종시작번호에대한정보 UINT16 2 페이지시작번호 UINT16 2 각주시작번호 UINT16 2 미주시작번호 UINT16 2 그림시작번호 UINT16 2 표시작번호 UINT16 2 수식시작번호문서내캐럿의위치정보 UINT32 4 리스트아이디 UINT32 4 문단아이디 UINT32 4 문단내에서의글자단위위치 전체길이 26 표 14 문서속성 4.2.2. 아이디매핑헤더 Tag ID : HWPTAG_ID_MAPPINGS 17
자료형 길이 ( 바이트 ) 설명 INT32 array[18] 72 아이디매핑개수 ( 표 16 참조 ) 전체길이 72 doc version 에따라가변적 표 15 아이디매핑헤더 값 0 바이너리데이터 1 한글글꼴 2 영어글꼴 3 한자글꼴 4 일어글꼴 5 기타글꼴 6 기호글꼴 7 사용자글꼴 8 테두리 / 배경 9 글자모양 10 탭정의 11 문단번호 12 글머리표 13 문단모양 14 스타일 15 메모모양 (5.0.2.1 이상 ) 16 변경추적 (5.0.3.2 이상 ) 17 변경추적사용자 (5.0.3.2 이상 ) 설명 표 16 아이디매핑개수인덱스 4.2.3. 바이너리데이터 Tag ID : HWPTAG_BIN_DATA 자료형 길이 ( 바이트 ) 설명 그림, OLE 등의바이너리데이터아이템에대한정보 UINT16 2 속성 ( 표 18 참조 ) WORD 2 Type이 "LINK" 일때, 연결파일의절대경로길이 (len1) WCHAR array[len1] 2 len1 Type이 "LINK" 일때, 연결파일의절대경로 WORD 2 Type이 "LINK" 일때, 연결파일의상대경로길이 (len2) WCHAR array[len2] 2 len2 Type이 "LINK" 일때, 연결파일의상대경로 UINT16 2 Type이 "EMBEDDING" 이거나 "STORAGE" 일때, BINDATASTORAGE 에저장된바이너리데이터의아이디 WORD 2 Type이 "EMBEDDING" 일때, 바이너리데이터의형식이름의길이 (len3) Type이 "EMBEDDING" 일때 extension("." 제외 ) jpg WCHAR array[len3] 2 len3 그림의경우 bmp gif OLE의경우 ole 전체길이 가변 10 + (2 len1) + (2 len2) + (2 len3) 바이트 표 17 바이너리데이터 18
범위 구분 값 설명 0x0000 LINK. 그림외부파일참조 bit 0~3 Type 0x0001 EMBEDDING. 그림파일포함 0x0002 STORAGE. OLE 포함 0x0000 스토리지의디폴트모드따라감 bit 4~5 압축 0x0010 무조건압축 0x0020 무조건압축하지않음 0x0000 아직 access 된적이없는상태 bit 8~9 상태 0x0100 access에성공하여파일을찾은상태 0x0200 access가실패한에러상태 0x0300 링크 access가실패했으나무시된상태 표 18 바이너리데이터속성 19
4.2.4. 글꼴 Tag ID : HWPTAG_FACE_NAME 자료형 길이 ( 바이트 ) 설명 BYTE 1 속성 ( 표 15 참조 ) WORD 2 글꼴이름길이 (len1) WCHAR array[len1] 2 len1 글꼴이름 BYTE 1 대체글꼴유형 ( 표 16 참조 ) WORD 2 대체글꼴이름길이 (len2) WCHAR array[len2] 2 len2 대체글꼴이름 BYTE array[10] 10 글꼴유형정보 ( 표 17 참조 ) WORD 2 기본글꼴이름길이 (len3) WCHAR array[len3] 2 len3 기본글꼴이름 전체길이 가변 18 + (2 len1) + (2 len2) + (2 len3) 바이트 표 19 글꼴 값 0x80 0x40 0x20 대체글꼴존재여부글꼴유형정보존재여부기본글꼴존재여부 설명 표 20 글꼴속성 값 0 원래종류를알수없을때 1 트루타입글꼴 (TTF) 2 글전용글꼴 (HFT) 설명 표 21 대체글꼴유형 BYTE 1 글꼴계열 BYTE 1 세리프유형 BYTE 1 굵기 BYTE 1 비례 BYTE 1 대조 BYTE 1 스트로크편차 BYTE 1 자획유형 BYTE 1 글자형 BYTE 1 중간선 BYTE 1 X-높이 표 22 글꼴유형정보 20
4.2.5. 테두리 / 배경 Tag ID : HWPTAG_BORDER_FILL UINT16 2 속성 ( 표 24 참조 ) UINT8 array[4] 4 4방향테두리선종류 ( 표 25 참조 ) UINT8 array[4] 4 4방향테두리선굵기 ( 표 26 참조 ) COLORREF array[4] 16 4방향테두리선색상. UINT8 1 대각선종류 ( 표 27 참조 ) UINT8 1 대각선굵기 COLORREF 4 대각선색깔 BYTE stream n 채우기정보 ( 표 28 참조 ) 전체길이가변 32+n 바이트 표 23 테두리 / 배경속성 범위 bit 0 3D 효과의유무 bit 1 그림자효과의유무 Slash 대각선모양 ( 시계방향으로각각의대각선유무를나타냄 ) 000 : none bit 2~4 010 : slash 011 : LeftTop --> Bottom Edge 110 : LeftTop --> Right Edge 111 : LeftTop --> Bottom & Right Edge BackSlash 대각선모양 ( 반시계방향으로각각의대각선유무를나타냄 ) 000 : none bit 5~7 010 : / back slash 011 : RightTop --> Bottom Edge 110 : RightTop --> Left Edge 111 : RightTop --> Bottom & Left Edge bit 8~9 Slash 대각선꺽은선 bit 10 BackSlash 대각선꺽선 bit 11 Slash 대각선모양 180도회전여부 bit 12 BackSlash 대각선모양 180도회전여부 bit 13 중심선유무. 설명 표 24 테두리 / 배경속성 값 0 실선 1 긴점선 2 점선 3 -.-.-.-. 4 -..-..-.. 5 Dash 보다긴선분의반복 6 Dot 보다큰동그라미의반복 7 2 중선 8 가는선 + 굵은선 2 중선 9 굵은선 + 가는선 2 중선 10 가는선 + 굵은선 + 가는선 3 중선 11 물결 12 물결 2 중선 13 두꺼운 3D 설명 21
14 두꺼운 3D( 광원반대 ) 15 3D 단선 16 3D 단선 ( 광원반대 ) 표 25 테두리선종류 값설명값설명 0 0.1 mm 8 0.6 mm 1 0.12 mm 9 0.7 mm 2 0.15 mm 10 1.0 mm 3 0.2 mm 11 1.5 mm 4 0.25 mm 12 2.0 mm 5 0.3 mm 13 3.0 mm 6 0.4 mm 14 4.0 mm 7 0.5 mm 15 5.0 mm 표 26 테두리선굵기 값 0 Slash 1 BackSlash 2 CrookedSlash 설명 표 27 대각선종류 22
UINT 4 채우기종류 (type) 0x00000000 : 채우기없음 0x00000001 : 단색채우기 0x00000002 : 이미지채우기 0x00000004 : 그러데이션채우기 단색채우기 (type & 0x0000001!= 0) COLORREF 4 배경색 COLORREF 4 무늬색 INT32 4 무늬종류 ( 표 29 참조 ) 그러데이션채우기 (type & 0x0000004!= 0) INT16 2 그러데이션유형 ( 표 30 참조 ) INT16 2 그러데이션의기울임 ( 시작각 ) INT16 2 그러데이션의가로중심 ( 중심 X 좌표 ) INT16 2 그러데이션의세로중심 ( 중심 Y 좌표 ) INT16 2 그러데이션번짐정도 (0-100) INT16 2 그러데이션의색수 (num). ( 워디안 / 글2002/SE 에서는항상 2이다.) INT32 4 num 색상이바뀌는곳의위치. (num > 2 일경우에만 ) COLORREF array[num] 4 num 색상 이미지채우기 (type & 0x0000002!= 0) BYTE 1 이미지채우기유형 ( 표 31 참조 ) BYTE stream 5 그림정보 ( 표 32 참조 ) DWORD 4 type의 0x0004 비트가켜져있으면 size(= 추가적인그라데이션바이트 ) = 1, 아니면 size = 0 BYTE 1 그러데이션번짐정도의중심 (0..100) DWORD 4 추가채우기속성길이 (size) BYTE size 추가채우기속성 - 그러데이션일경우 (type & 0x0000001!= 0) 번짐정도의중심 (0~100) : 1byte 전체길이가변 8 + n 바이트 표 28 채우기정보 값 1 - - - - 2 3 \\\\\ 4 ///// 5 +++++ 6 xxxxx 설명 표 29 채우기무늬종류 값 1 줄무늬형 2 원형 3 원뿔형 4 사각형 설명 표 30 그러데이션유형 23
값 0 바둑판식으로 - 모두 1 바둑판식으로 - 가로 / 위 2 바둑판식으로 - 가로 / 아래 3 바둑판식으로 - 세로 / 왼쪽 4 바둑판식으로 - 세로 / 오른쪽 5 크기에맞추어 6 가운데로 7 가운데위로 8 가운데아래로 9 왼쪽가운데로 10 왼쪽위로 11 왼쪽아래로 12 오른쪽가운데로 13 오른쪽위로 14 오른쪽아래로 15 NONE 설명 표 31 이미지채우기유형 INT8 1 밝기 INT8 1 명암그림효과값 0 REAL_PIC BYTE 1 1 GRAY_SCALE 2 BLACK_WHITE 4 PATTERN8x8 UINT16 2 BinItem의아이디참조값 전체길이 5 표 32 그림정보 설명 4.2.6. 글자모양 Tag ID : HWPTAG_CHAR_SHAPE WORD array[7] 14 언어별글꼴 ID(FaceID) 참조값 ( 표 34 참조 ) UINT8 array[7] 7 언어별장평, 50%~200%( 표 34 참조 ) INT8 array[7] 7 언어별자간, -50%~50%( 표 34 참조 ) UINT8 array[7] 7 언어별상대크기, 10%~250%( 표 34 참조 ) INT8 array[7] 7 언어별글자위치, -100%~100%( 표 34 참조 ) INT32 4 기준크기, 0pt~4096pt UINT32 4 속성 ( 표 30 참조 ) INT8 1 그림자간격, -100%~100% INT8 1 그림자간격, -100%~100% COLORREF 4 글자색 COLORREF 4 밑줄색 COLORREF 4 음영색 COLORREF 4 그림자색 UINT16 2 글자테두리 / 배경 ID(CharShapeBorderFill ID) 참조값 (5.0.2.1 이상 ) COLORREF 4 취소선색 (5.0.3.0 이상 ) 전체길이 72 표 33 글자모양 24
값 0 한글 1 영어 2 한자 3 일어 4 기타 5 기호 6 사용자 설명 표 34 글꼴에대한언어 bit 0 bit 1 범위구분값설명 기울임여부진하게여부 0 없음 bit 2~3 밑줄종류 1 글자아래 3 글자위 bit 4~7 밑줄모양 ( 표 25 참조 ) 0 없음 1 실선 2 점선 bit 8~10 외곽선종류 3 굵은실선 ( 두꺼운선 ) 4 파선 ( 긴점선 ) 5 일점쇄선 (-.-.-.-.) 6 이점쇄선 (-..-..-..) 0 없음 bit 11~12 그림자종류 1 비연속 2 연속 bit 13 양각여부 bit 14 음각여부 bit 15 위첨자여부 bit 16 아래첨자여부 bit 17 Reserved. bit 18~20 취소선여부 0 없음 1 검정 동그라미 강조점 bit 21~24 강조점종류 2 속빈동그라미강조점 3 ˇ 4 5 6 : bit 25 글꼴에어울리는빈칸사용여부 bit 26~29 취소선모양 ( 표 25 참조 ) bit 30 Kerning 여부 표 35 글자모양속성 25
4.2.7. 탭정의 Tag ID : HWPTAG_TAB_DEF UINT32 4 속성 INT16 4 count 탭정보 (count 개수 ) HPWUNIT 4 탭의위치탭의종류값 0 왼쪽 UINT8 1 1 오른쪽 2 가운데 3 소수점 UINT8 1 채움종류 ( 표 25 참조 ) UINT16 2 8 바이트를맞추기위한예약 전체길이 8+(8 count) 표 36 탭정의 설명 bit 0 bit 1 범위 설명문단왼쪽끝자동탭 ( 내어쓰기용자동탭 ) 유무문단오른쪽끝자동탭유무표 37 탭정의속성 4.2.8. 문단번호 Tag ID : HWPTAG_NUMBERING BYTE stream 8 문단머리정보 ( 표 39 참조 ) WORD 2 번호형식길이 (len) WCHAR array[len] 2 len UINT16 2 시작번호 번호형식. 불릿문단의경우에는사용되지않는다. 문자열내특정문자에제어코드 (^) 를붙임으로써 글에서표시되는번호문단머리의형식을제어한다. ^n : 레벨경로를표시한다.( 예 : 1.1.1.1.1.1.1) ^N : 레벨경로를표시하며마지막에마침표를하나더찍는다.( 예 : 1.1.1.1.1.1.1.) 표 36 참조 ) UINT 4 수준별시작번호 (5.0.2.5 이상 ) WORD 2 확장번호형식길이 (len) WCHAR array[len] 2 len 확장번호형식. 불릿문단의경우에는사용되지않는다. 문자열내특정문자에제어코드 (^) 를붙임으로써 글에서표시되는번호문단머리의형식을제어한다. ^n : 레벨경로를표시한다.( 예 : 7 회반복 수준 (1~7) 각레벨에해당하는숫자또는문자또는기호를표시 7 회반복수준 (1~7) 3 회반복 수준 (8~10) 각레벨에해당하는숫자또는문자또는기호를표시 26
1.1.1.1.1.1.1) ^N : 레벨경로를표시하며마지막에마침표를하나더찍는다.( 예 : 1.1.1.1.1.1.1.) 표 36 참조 ) UINT 4 확장수준별시작번호 (5.1.0.0 이상 ) 수준 (8~10) 전체길이 가변 10 + (2 len)) 7 + 2 + (4 7) (2 len)) 3 + (4 3) 바이트 표 38 문단번호 UINT 4 속성 ( 표 40 참조 ) HWPUNIT16 2 너비보정값 HWPUNIT16 2 본문과의거리 UINT 4 글자모양아이디참조 전체길이 8 표 39 문단머리정보 bit 0~1 bit 2 bit 3 bit 4 범위구분값설명 문단의정렬종류 번호너비를실제인스턴스문자열의너비에따를지여부 자동내어쓰기여부 수준별본문과의거리종류 표 40 문단머리정보속성 0 왼쪽 1 가운데 2 오른쪽 0 false 1 true 0 false 1 true 0 글자크기에대한상대비율 1 값 값 0 1, 2, 3 1 동그라미쳐진 1, 2, 3 2 I, II, III 3 i, ii, iii 4 A, B, C 5 a, b, c 6 동그라미쳐진 A, B, C 7 동그라미쳐진 a, b, c 8 가, 나, 다 9 동그라미쳐진가, 나, 다 10 ㄱ, ㄴ, ㄷ 11 동그라미쳐진ㄱ, ㄴ, ㄷ 12 일, 이, 삼 13 一, 二, 三 14 동그라미쳐진一, 二, 三 설명 표 41 문단번호형식 4.2.9. 글머리표 Tag ID : HWPTAG_BULLET 27
BYTE stream 8 문단머리의정보 WCHAR 2 글머리표문자 INT32 4 이미지글머리표여부 ( 글머리표 :0, 이미지글머리표 : ID) BYTE stream 4 이미지글머리 ( 대비, 밝기, 효과, ID) WCHAR 2 체크글머리표문자 전체길이 20 표 42 글머리표 4.2.10. 문단모양 Tag ID : HWPTAG_PARA_SHAPE UINT32 4 속성 1( 표 44 참조 ) INT32 4 왼쪽여백 INT32 4 오른쪽여백 INT32 4 들여쓰기 / 내어쓰기 INT32 4 문단간격위 INT32 4 문단간격아래 INT32 4 줄간격. 글 2007 이하버전 (5.0.2.5 버전미만 ) 에서사용. UINT16 2 탭정의아이디 (TabDef ID) 참조값 UINT16 2 번호문단 ID(Numbering ID) 또는글머리표문단모양 ID(Bullet ID) 참조값 UINT16 2 테두리 / 배경모양 ID(BorderFill ID) 참조값 INT16 2 문단테두리왼쪽간격 INT16 2 문단테두리오른쪽간격 INT16 2 문단테두리위쪽간격 INT16 2 문단테두리아래쪽간격 UINT32 4 속성 2( 표 40 참조 ) (5.0.1.7 버전이상 ) UINT32 4 속성 3( 표 41 참조 ) (5.0.2.5 버전이상 ) UINT32 4 줄간격 (5.0.2.5 버전이상 ) 전체길이 54 표 43 문단모양 bit 0~1 bit 2~4 bit 5~6 bit 7 bit 8 범위구분값설명 줄간격종류. 글 2007 이하버전에서사용. 정렬방식 줄나눔기준영어단위 줄나눔기준한글단위 편집용지의줄격자사용여부 0 글자에따라 (%) 1 고정값 2 여백만지정 0 양쪽정렬 1 왼쪽정렬 2 오른쪽정렬 3 가운데정렬 4 배분정렬 5 나눔정렬 0 단어 1 하이픈 2 글자 0 어절 1 글자 28
bit 9~15 공백최소값 0%~75% bit 16 외톨이줄보호여부 bit 17 다음문단과함께여부 bit 18 문단보호여부 bit 19 문단앞에서항상쪽나눔여부 0 글꼴기준 1 위쪽 bit 20~21 세로정렬 2 가운데 3 아래 bit 22 글꼴에어울리는줄높이여부 0 없음 1 개요 bit 23~24 문단머리모양종류 2 번호 3 글머리표 (bullet) bit 25~27 문단수준 1수준~7수준 bit 28 문단테두리연결여부 bit 29 문단여백무시여부 bit 30 문단꼬리모양 표 44 문단모양속성 1 범위 구분 값 설명 bit 0~1 한줄로입력여부 bit 2~3 Reserved bit 4 한글과영어간격을자동조절여부 bit 5 한글과숫자간격을자동조절여부표 45 문단모양속성2 bit 0~4 범위구분값설명 줄간격종류 표 46 줄간격종류 0 글자에따라 1 고정값 2 여백만지정 3 최소 4.2.11. 스타일 ( 문단스타일 ) Tag ID : HWPTAG_STYLE WORD 2 길이 (len1) WCHAR array[len1] 2 len1 로컬스타일이름. 한글윈도우에서는한글스타일이름 WORD 2 길이 (len2) WCHAR array[len2] 2 len2 영문스타일이름 BYTE 1 속성 ( 표 43 참조 ) BYTE 1 다음스타일아이디참조값 INT16 2 언어아이디 ( 표 48 참조 ) UINT16 2 문단모양아이디참조값 ( 문단모양의아이디속성 ) 스타일의종류가문단인경우반드시지정해야한다. UINT16 2 글자모양아이디 ( 글자모양의아이디속성 ) 스타일의종류가글자인경우반드시지정해야한다. 29
전체길이가변 12 + (2 len1) + (2 len2) 바이트 표 47 스타일 bit 0~2 범위구분값설명 스타일종류 표 48 스타일종류 0 문단스타일 1 글자스타일 4.2.12. 문서임의의데이터 라벨문서인지여부나인쇄대화상자의정보를저장한다. Tag ID : HWPTAG_DOC_DATA 자료형 길이 ( 바이트 ) 설명 Parameter Set 가변 파라미터셋 ( 표 50 참조 ) 전체길이 가변 표 49 문서임의의데이터 30
파라미터아이템의개수만큼아이템데이터를얻는다. WORD 2 파라미터셋 ID INT16 2 파라미터셋에존재하는아이템개수 (n) Parameter Item 가변 n 파라미터아이템 ( 표 51 참조 ) 전체길이가변 4 + ( 가변 n) 바이트 표 50 파라미터셋 자료형 길이 ( 바이트 ) 설명 WORD 2 파라미터아이템 ID WORD 2 파라미터아이템종류 ( 표 52 참조 ) Parameter Item Type 가변 파라미터아이템데이터 전체길이 가변 4 + 가변바이트 표 51 파라미터아이템 값구분자료형설명 0 PIT_NULL UINT NULL 1 PIT_BSTR WORD 문자열길이 (slen) WCHAR array[len] 문자열 2 PIT_I1 UINT INT8 3 PIT_I2 UINT INT16 4 PIT_I4 UINT INT32 5 PIT_I UINT INT 6 PIT_UI1 UINT UINT8 7 PIT_UI2 UINT UINT16 8 PIT_UI4 UINT UINT32 9 PIT_UI UINT UINT 0x8000 PIT_SET Parameter Set 파라미터셋 0x8001 PIT_ARRAY INT16 파라미터셋개수 ParameterArray 파라미터셋배열 0x8002 PIT_BINDATA UINT16 바이너리데이터 ID 표 52 파라미터아이템종류 4.2.13. 배포용문서데이터배포용문서에서는모든스트림에배포용문서데이터가들어간다. Tag ID : HWPTAG_DISTRIBUTE_DOC_DATA 자료형 길이 ( 바이트 ) 설명 BYTE array[256] 256 배포용문서데이터 전체길이 표 53 배포용문서데이터 31
4.2.14. 호환문서 Tag ID : HWPTAG_COMPATIBLE_DOCUMENT 자료형 길이 ( 바이트 ) 설명 UINT32 4 대상프로그램 ( 표 55 참조 ) 전체길이 4 표 54 호환문서 값 0 글문서 ( 현재버전 ) 1 글 2007 호환문서 2 MS 워드호환문서 설명 표 55 대상프로그램 4.2.15. 레이아웃호환성 Tag ID : HWPTAG_LAYOUT_COMPATIBILITY UINT32 4 글자단위서식 UINT32 4 문단단위서식 UINT32 4 구역단위서식 UINT32 4 개체단위서식 UINT32 4 필드단위서식 전체길이 20 표 56 레이아웃호환성 32
4.3. 본문 의데이터레코드 본문에서사용되는데이터레코드는다음과같다. Tag ID Value 설명 HWPTAG_PARA_HEADER HWPTAG_BEGIN+50 문단헤더 HWPTAG_PARA_TEXT HWPTAG_BEGIN+51 문단의텍스트 HWPTAG_PARA_CHAR_SHAPE HWPTAG_BEGIN+52 문단의글자모양 HWPTAG_PARA_LINE_SEG HWPTAG_BEGIN+53 문단의레이아웃 HWPTAG_PARA_RANGE_TAG HWPTAG_BEGIN+54 문단의영역태그 HWPTAG_CTRL_HEADER HWPTAG_BEGIN+55 컨트롤헤더 HWPTAG_LIST_HEADER HWPTAG_BEGIN+56 문단리스트헤더 HWPTAG_PAGE_DEF HWPTAG_BEGIN+57 용지설정 HWPTAG_FOOTNOTE_SHAPE HWPTAG_BEGIN+58 각주 / 미주모양 HWPTAG_PAGE_BORDER_FILL HWPTAG_BEGIN+59 쪽테두리 / 배경 HWPTAG_SHAPE_COMPONENT HWPTAG_BEGIN+60 개체 HWPTAG_TABLE HWPTAG_BEGIN+61 표개체 HWPTAG_SHAPE_COMPONENT_LINE HWPTAG_BEGIN+62 직선개체 HWPTAG_SHAPE_COMPONENT_RECTANGLE HWPTAG_BEGIN+63 사각형개체 HWPTAG_SHAPE_COMPONENT_ELLIPSE HWPTAG_BEGIN+64 타원개체 HWPTAG_SHAPE_COMPONENT_ARC HWPTAG_BEGIN+65 호개체 HWPTAG_SHAPE_COMPONENT_POLYGON HWPTAG_BEGIN+66 다각형개체 HWPTAG_SHAPE_COMPONENT_CURVE HWPTAG_BEGIN+67 곡선개체 HWPTAG_SHAPE_COMPONENT_OLE HWPTAG_BEGIN+68 OLE 개체 HWPTAG_SHAPE_COMPONENT_PICTURE HWPTAG_BEGIN+69 그림개체 HWPTAG_SHAPE_COMPONENT_CONTAINER HWPTAG_BEGIN+70 컨테이너개체 HWPTAG_CTRL_DATA HWPTAG_BEGIN+71 컨트롤임의의데이터 HWPTAG_EQEDIT HWPTAG_BEGIN+72 수식개체 RESERVED HWPTAG_BEGIN+73 예약 HWPTAG_SHAPE_COMPONENT_TEXTART HWPTAG_BEGIN+74 글맵시 HWPTAG_FORM_OBJECT HWPTAG_BEGIN+75 양식개체 HWPTAG_MEMO_SHAPE HWPTAG_BEGIN+76 메모모양 HWPTAG_MEMO_LIST HWPTAG_BEGIN+77 메모리스트헤더 HWPTAG_CHART_DATA HWPTAG_BEGIN+79 차트데이터 HWPTAG_VIDEO_DATA HWPTAG_BEGIN+82 비디오데이터 HWPTAG_SHAPE_COMPONENT_UNKNOWN HWPTAG_BEGIN+99 Unknown 표 57 본문의데이터레코드 4.3.1. 문단헤더 Tag ID : HWPTAG_PARA_HEADER text(=chars) UINT32 4 if (nchars & 0x80000000) { nchars &= 0x7fffffff; } control mask UINT32 4 (UINT32)(1<<ctrlch) 조합 ctrlch는 HwpCtrlAPI.Hwp 2.1 CtrlCh 참고 UINT16 2 문단모양아이디참조값 UINT8 1 문단스타일아이디참조값 UINT8 1 단나누기종류 ( 표 59 참조 ) UINT16 2 글자모양정보수 33
UINT16 2 range tag 정보수 UINT16 2 각줄에대한 align에대한정보수 UINT32 4 문단 Instance ID (unique ID) UINT16 2 변경추적병합문단여부. (5.0.3.2 버전이상 ) 전체길이 24 표 58 문단헤더 값 0x01 0x02 0x04 0x08 구역나누기다단나누기쪽나누기단나누기 설명 표 59 단나누기종류 텍스트의수가 1 이상이면문자수만큼텍스트를로드하고그렇지않을경우 PARA_BREAK 로문단을 생성한다. 4.3.2. 문단의텍스트 Tag ID : HWPTAG_PARA_TEXT 자료형 길이 ( 바이트 ) 설명 WCHAR array[sizeof(nchars)] 2 nchars 문자수만큼의텍스트 전체길이 가변 (2 nchars) 바이트 표 60 문단텍스트 문단은최소하나의문자 Shape buffer 가존재하며, 첫번째 pos가반드시 0이어야한다. 예를들어문자길이 40자짜리문단이 10자씩 4가지다른글자모양으로구성되어있다면 buffer 는다음과같다. 모양 1 모양 2 모양 3 모양 4 m_pos=0, m_id=1 m_pos=10, m_id=2 m_pos=20, m_id=3 m_pos=30, m_id=4 그림 47 문단버퍼구조 텍스트문자 Shape 레코드를글자모양정보수 (Character Shapes) 만큼읽는다. 4.3.3. 문단의글자모양 Tag ID : HWPTAG_PARA_CHAR_SHAPE UINT32 4 글자모양이바뀌는시작위치 UINT32 4 글자모양 ID 전체길이가변 8 n 표 61 문단의글자모양 34
4.3.4. 문단의레이아웃 문단의각줄을출력할때사용한 Cache 정보이며, 문단정보의 각줄에대한 align 에대한정보 수 만큼반복한다. Tag ID : HWPTAG_PARA_LINE_SEG 자료형 길이 ( 바이트 ) 설명 UINT32 4 텍스트시작위치 INT32 4 줄의세로위치 INT32 4 줄의높이 INT32 4 텍스트부분의높이 INT32 4 줄의세로위치에서베이스라인까지거리 INT32 4 줄간격 INT32 4 컬럼에서의시작위치 INT32 4 세그먼트의폭 태그 -bit 0 : 페이지의첫줄인지여부 UINT32 4 전체길이 36 -bit 1 : 컬럼의첫줄인지여부 -bit 16 : 텍스트가배열되지않은빈세그먼 트인지여부 -bit 17 : 줄의첫세그먼트인지여부 -bit 18 : 줄의마지막세그먼트인지여부 -bit 19 : 줄의마지막에 auto-hyphenation 이 수행되었는지여부. -bit 20 : indentation 적용 -bit 21 : 문단머리모양적용 -bit 31 : 구현상의편의를위한 property 표 62 문단의레이아웃 4.3.5. 문단의영역태그 range tag 정보를정보수만큼읽어온다. range tag 는텍스트의일정영역을마킹하는용도로사용되 며, 글자모양과는달리각영역은서로겹칠수있다.( 형광펜, 교정부호등 ) Tag ID : HWPTAG_PARA_RANGE_TAG UINT32 4 영역시작 UINT32 4 영역끝 UINT32 4 태그 ( 종류 + 데이터 ) : 상위 8비트가종류를하위 24비트가종류별로다른설명을부여할수있는임의의데이터를나타낸다. 전체길이가변 12 n 표 63 문단의영역태그 4.3.6. 컨트롤헤더 컨트롤문자가존재하면컨트롤문자로부터존재하는컨트롤정보를생성한다. 35
Tag ID : HWPTAG_CTRL_HEADER UINT32 4 전체길이 4 컨트롤 ID 컨트롤 ID 이하속성들은 CtrlID 에따라다르다. - 각컨트롤및개체참고 표 64 컨트롤헤더 4.3.7. 문단리스트헤더 Tag ID : HWPTAG_LIST_HEADER INT16 2 문단수속성범위구분값설명 0 가로 bit 0~2 텍스트방향 1 세로 UINT32 4 2 내용에따라폭이늘어남 0 top bit 5~6 세로정렬 1 center 2 bottom 전체길이 6 0 일반적인줄바꿈 bit 3~4 문단의줄바꿈 1 자간을조종하여한줄을유지 표 65 문단리스트헤더 4.3.8. 컨트롤임의의데이터 컨트롤의필드이름이나하이퍼링크정보를저장한다. Tag ID : HWPTAG_CTRL_DATA 자료형 길이 ( 바이트 ) 설명 Parameter Set 가변 파라미터셋 ( 표 50 참조 ) 전체길이 가변 표 66 컨트롤임의의데이터 4.3.9. 개체공통속성을포함하는컨트롤 ( 개체컨트롤 ) extended type의컨트롤은종류를나타내는식별기호로 32 비트 ID가사용된다. 컨트롤코드가큰범주를나타내는식별기호라고한다면, 컨트롤 ID는세부분류를나타내는식별기호인셈이다. 예를들어단정의컨트롤 ID는 MAKE_4CHID('c', 'o', 'l', 'd') 같은형식으로정의한다. MAKE_4CHID(a, b, c, d) (((a) << 24) ((b) << 16) ((c) << 8) (d)) 36
컨트롤 ID 개체공통속성 개체요소속성 1 표 MAKE_4CHID('t', 'b', 'l', ' ') 2 ( 그리기개체 ) 선사각형타원 MAKE_4CHID('$', 'l', 'i', 'n') MAKE_4CHID('$', 'r', 'e', 'c') MAKE_4CHID('$', 'e', 'l', 'l') 호다각형곡선 MAKE_4CHID('$', 'a', 'r', 'c') MAKE_4CHID('$', 'p', 'o', 'l') MAKE_4CHID('$', 'c', 'u', 'r') 3 글 97 수식 MAKE_4CHID('e', 'q', 'e', 'd') 4 그림 MAKE_4CHID('$', 'p', 'i', 'c') 5 OLE MAKE_4CHID('$', 'o', 'l', 'e') 6 묶음개체 MAKE_4CHID('$', 'c', 'o', 'n') 표 67 개체공통속성을포함하는컨트롤과컨트롤 ID 자료형 길이 ( 바이트 ) 설명 BYTE stream n 개체공통속성 ( 표 69 참조 ) BYTE stream n2 캡션정보가있으면캡션리스트정보를얻는다 ( 표 71 참조 ) 전체길이 가변 n + n2 바이트 표 68 개체공통속성 자료형 길이 ( 바이트 ) 설명 UINT32 4 ctrl ID UINT32 4 속성 ( 표 70 참조 ) HWPUNIT 4 세로오프셋값 HWPUNIT 4 가로오프셋값 HWPUNIT 4 width 오브젝트의폭 HWPUNIT 4 height 오브젝트의높이 INT32 4 z-order HWPUNIT16 array[4] 2 4 오브젝트의바깥 4방향여백 UINT32 4 문서내각개체에대한고유아이디 (instance ID) INT32 4 쪽나눔방지 on(1) / off(0) WORD 2 개체설명문글자길이 (len) WCHAR array[len] 2 len 개체설명문글자 전체길이 가변 46 + (2 len) 바이트 표 69 개체공통속성 bit 0 bit 1 bit 2 범위구분값설명 bit 3~4 bit 5~7 글자처럼취급여부예약줄간격에영향을줄지여부 세로위치의기준 (VertRelTo) 세로위치의기준에대한상대적인배열방식 0 paper 1 page 2 para VerRelTo이 paper 나 page 이면 top, 0 그렇지않으면 left 1 VerRelTo이 paper 나 page 이면 center VerRelTo 이 paper 나 page 이면 bottom, 2 그렇지않으면 right 3 VerRelTo이 paper 나 page 이면 inside 4 VerRelTo이 paper 나 page 이면 outside 37
bit 8~9 bit 10~12 bit 13 bit 14 bit 15~17 bit 18~19 bit 20 bit 21~23 bit 24~25 bit 26~28 가로위치의기준 (HorzRelTo) HorzRelTo 에대한상대적인배열방식 VertRelTo 이 para 일때오브젝트의세로위치를본문영역으로제한할지여부다른오브젝트와겹치는것을허용할지여부 0 page 1 page 2 column 3 para 0 off 1 on bit 5~7 참조 오브젝트의위치가본문영역으로제한되면언제나 false 로간주한다. 0 paper 1 page 오브젝트폭의기준 2 coloum 3 para 4 absolute 0 paper 오브젝트높이의기준 1 page 2 absolute VertRelTo 이 para일 0 off 때크기보호여부 1 on 오브젝트주위를텍스트가어떻게흘러갈지지정하는옵션 Square 0 bound rect를따라 Tight 1 오브젝트의 outline을따라 Through 2 오브젝트내부의빈공간까지 TopAndBottom 3 좌, 우에는텍스트를배치하지않음 BehindText 4 글과겹치게하여글뒤로 InFrontOfText 5 글과겹치게하여글앞으로 오브젝트의좌 / 우어느쪽에글을배치할지지정하는옵션 이개체가속하는번호범주 0 BothSides 1 LeftOnly 2 RightOnly 3 LargestOnly 0 none 1 figure 2 table 3 equation 표 70 개체공통속성의속성 BYTE stream n 문단리스트헤더 ( 표 65 참조 ) BYTE stream 12 캡션 ( 표 67 참조 ) 전체길이 가변 12+n 바이트 표 71 캡션리스트 자료형 길이 ( 바이트 ) 설명 UNIT 4 속성 ( 표 73 참조 ) HWPUNIT 4 캡션폭 ( 세로방향일때만사용 ) HWPUNIT16 2 캡션과틀사이간격 HWPUNIT 4 텍스트의최대길이 (= 개체의폭 ) 전체길이 14 표 72 캡션 38
bit 0~1 범위구분값설명 방향 0 left 1 right 2 top 3 bottom bit 2 캡션폭에마진을포함할지여부가로방향일때만사용 표 73 캡션속성 4.3.9.1. 표개체 Tag ID : HWPTAG_TABLE BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 표개체속성 ( 표 75 참조 ) BYTE stream n3 셀리스트 ( 표 79 참조 ) 셀 size 셀개수. 전체길이가변 n + n2 + n3 표 74 표개체 UINT32 4 속성 UINT16 2 RowCount UINT16 2 ncols HWPUNIT16 2 CellSpacing BYTE stream 8 안쪽여백정보 ( 표 77 참조 ) BYTE stream 2 n Row Size UINT16 2 Border Fill ID UINT16 2 Valid Zone Info Size (5.0.1.0 이상 ) BYTE stream 10 n 영역속성 ( 표 73 참조 ) (5.0.1.0 이상 ) 전체길이가변 22 + (2 row) + (10 zone) 표 75 표개체속성 범위구분값설명 bit 0-1 bit 2 쪽경계에서나눔 제목줄자동반복여부 0 나누지않음 1 셀단위로나눔 2 나누지않음 표 76 표속성의속성 HWPUNIT16 2 왼쪽여백 HWPUNIT16 2 오른쪽여백 HWPUNIT16 2 위쪽여백 HWPUNIT16 2 아래쪽여백 전체길이 8 표 77 안쪽여백정보 39
UINT16 2 시작열주소 UINT16 2 시작행주소 UINT16 2 끝열주소 UINT16 2 끝행주소 UINT16 2 테두리채우기 ID 전체길이 10 표 78 영역속성 BYTE stream n 문단리스트헤더 ( 표 65 참조 ) BYTE stream 26 셀속성 ( 표 80 참조 ) 전체길이가변 26+n 바이트 표 79 셀리스트 UINT16 2 셀주소 (Column, 맨왼쪽셀이 0부터시작하여 1씩증가 ) UINT16 2 셀주소 (Row, 맨위쪽셀이 0부터시작하여 1씩증가 ) UINT16 2 열의병합개수 UINT16 2 행의병합개수 HWPUNIT 4 셀의폭 HWPUNIT 4 셀의높이 HWPUNIT16 array[4] 2 4 셀 4방향여백 UINT16 2 테두리 / 배경아이디 전체길이 26 표 80 셀속성 4.3.9.2. 그리기개체 ( 선, 사각형, 타원, 호, 다각형, 곡선 ) 모든그리기개체에대한 serialization 은우선 base 인그리기개체공통속성을 serialize 한다음 자신이가지고있는개체요소속성을 serialize 한다. BYTE stream n 개체요소속성 ( 표 82 참조 ) BYTE stream 11 테두리선정보 ( 표 86 참조 ) BYTE stream n2 채우기정보 ( 표 28 참조 ) BYTE stream 12 글상자속성이있으면글상자의리스트정보를얻는다. 전체길이가변 23 + n + n2 바이트 표 81 그리기개체공통속성 4.3.9.2.1. 개체요소 Tag ID : HWPTAG_SHAPE_COMPONENT(GenShapeObject 일경우 id 가두번기록됨 ) 40
UINT32 4 개체컨트롤 ID 전체길이 4 표 82 개체요소속성 INT32 4 개체가속한그룹내에서의 X offset INT32 4 개체가속한그룹내에서의 Y offset WORD 2 몇번이나그룹되었는지 WORD 2 개체요소의 local file version UINT32 4 개체생성시초기폭 UINT32 4 개체생성시초기높이 UINT32 4 개체의현재폭 UINT32 4 개체의현재높이 UINT32 4 속성값설명 0 horz flip 1 vert flip HWPUNIT16 2 회전각 INT32 4 회전중심의 x 좌표 ( 개체좌표계 ) INT32 4 회전중심의 y 좌표 ( 개체좌표계 ) n Rendering 정보 ( 표 79 참조 ) 전체길이가변 42+n 바이트 표 83 개체요소속성 WORD 2 scale matrix와 rotration matrix쌍의개수 (cnt) 초기엔 1, group할때마다하나씩증가하고, ungroup 할때마다하나씩감소한다. BYTE stream 48 ranslation matrix( 표 85 참조 ) BYTE stream cnt 48 2 scale matrix/rotration matrix sequence( 표 85 참조 ) 전체길이가변 50 + (cnt 48 2) 바이트 표 84 Rendering 정보 각 matrix 는원소가 double 로표현되는 3 X 3 matrix 로구현된다. 마지막줄 (row) 은항상 0, 0, 1이기때문에실제 serialization 에서는마지막줄은빠진다. 저장되는정보는다음과같다. 자료형 길이 ( 바이트 ) 설명 double array[6] 8 6 3 X 2 matrix의원소 전체길이 48 표 85 matrix 정보 COLORREF 4 선색상 INT16 2 선굵기 UINT32 4 속성 ( 표 87 참조 ) BYTE 1 Outline style( 표 88 참조 ) 전체길이 11 표 86 테두리선정보 41
bit 0~5 bit 6~9 범위구분값설명 bit 10~15 bit 16~21 bit 22~25 bit 26~29 bit 30 bit 31 선종류 선끝모양 화살표시작모양 화살표끝모양 화살표시작크기 화살표끝크기 시작부분화살표채움여부끝부분화살표채움여부 0 round 그림일때는 "Round", 그리기 1 flat 개체들일때는 "Flat" 이디폴트 0 모양없음 1 화살모양 2 오목한화살모양 3 속이빈다이아몬드모양 4 속이빈원모양 5 속이빈사각모양 6 속이채워진다이아몬드모양 7 속이채워진원모양 8 속이채워진사각모양 0 작은 - 작은 1 작은 - 중간 2 작은 - 큰 3 중간 - 작은 4 중간 - 중간 5 중간 - 큰 6 큰 - 작은 7 큰 - 중간 8 큰 - 중간 표 87 테두리선정보속성 값 0 normal 1 outer 2 inner 설명 표 88 Outline style BYTE stream 12 그리기개체글상자용텍스트속성 ( 표 90 참조 ) BYTE stream n 문단리스트헤더 ( 표 65 참조 ) 전체길이가변 12+n 바이트 표 89 그리기개체글상자용텍스트정보 HWPUNIT16 2 글상자텍스트왼쪽여백 HWPUNIT16 2 글상자텍스트오른쪽여백 HWPUNIT16 2 글상자텍스트위쪽여백 HWPUNIT16 2 글상자텍스트아래쪽여백 HWPUNIT 4 텍스트문자열의최대폭 ( 보통그리기개체의가로크기와동일 ) 전체길이 12 표 90 그리기개체글상자용텍스트속성 4.3.9.2.2. 선개체 42
BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream 18 선개체속성 ( 표 92 참조 ) 전체길이가변 18 + n + n2 바이트 표 91 선개체 Tag ID : HWPTAG_SHAPE_COMPONENT_LINE INT32 4 시작점 X 좌표 INT32 4 시작점 Y 좌표 INT32 4 끝점 X 좌표 INT32 4 끝점 Y 좌표 UINT16 2 속성. 처음생성시수직또는수평선일때, 선의방향이언제나오른쪽 ( 위쪽 ) 으로잡힘으로인한현상때문에, 방향을바로잡아주기위한플래그. 전체길이 18 표 92 선개체속성 4.3.9.2.3. 사각형개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream 33 사각형개체속성 ( 표 94 참조 ) 전체길이가변 33 + n + n2 바이트 표 93 사각형개체 Tag ID : HWPTAG_SHAPE_COMPONENT_RECTANGLE BYTE 1 사각형모서리곡률 (%) 직각은 0, 둥근모양은 20, 반원은 50, 그외는적당한값을 % 단위로사용한다. INT32 array[4] 4 4 사각형의좌표 (x) INT32 array[4] 4 4 사각형의좌표 (y) 전체길이 33 표 94 사각형개체속성 4.3.9.2.4. 타원개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream 60 타원개체속성 ( 표 96 참조 ) 전체길이가변 60 + n + n2 바이트 표 95 타원개체 Tag ID : HWPTAG_SHAPE_COMPONENT_ELLIPSE 43
UINT32 4 속성 ( 표 97 참조 ) INT32 4 중심좌표의 X 값 INT32 4 중심좌표의 Y 값 INT32 4 제1축 X 좌표값 INT32 4 제1축 Y 좌표값 INT32 4 제2축 X 좌표값 INT32 4 제2축 Y 좌표값 INT32 4 start pos x INT32 4 start pos y INT32 4 end pos x INT32 4 end pos y INT32 4 start pos x2 interval of curve(effective only when it is an arc) INT32 4 start pos y2 INT32 4 end pos x2 INT32 4 end pos y2 전체길이 60 표 96 타원개체속성 범위 bit 0 bit 1 bit 2~9 설명호 (ARC) 로바뀌었을때, interval 을다시계산해야할필요가있는지여부 (interval - 원위에존재하는두점사이의거리 ) 호 (ARC) 로바뀌었는지여부호 (ARC) 의종류 표 97 타원 / 호개체속성의속성 44
4.3.9.2.5. 다각형개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream n3 다각형개체속성 ( 표 99 참조 ) 전체길이가변 n + n2 + n3 바이트 표 98 다각형개체 Tag ID : HWPTAG_SHAPE_COMPONENT_POLYGON INT16 2 count of points(cnt) INT32 array[cnt] 4 cnt x 좌표 INT32 array[cnt] 4 cnt y 좌표 전체길이가변 2 + 2(4 cnt) 바이트 표 99 다각형개체속성 4.3.9.2.6. 호개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream 28 호개체속성 ( 표 96 참조 ) 전체길이가변 28 + n + n2 바이트 표 100 호개체 Tag ID : HWPTAG_SHAPE_COMPONENT_ARC UINT32 4 속성 ( 표 92 참조 ) INT32 4 타원의중심좌표 X 값 INT32 4 타원의중심좌표 Y 값 INT32 4 제1축 X 좌표값 INT32 4 제1축 Y 좌표값 INT32 4 제2축 X 좌표값 INT32 4 제2축 Y 좌표값 전체길이 28 표 101 호개체속성 4.3.9.2.7. 곡선개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 그리기개체공통속성 ( 표 81 참조 ) BYTE stream n3 곡선개체속성 ( 표 103 참조 ) 전체길이가변 n + n2 + n3 바이트 표 102 곡선개체 45
Tag ID : HWPTAG_SHAPE_COMPONENT_CURVE INT16 2 count of points(cnt) INT32 array[cnt] 4 cnt x 좌표 INT32 array[cnt] 4 cnt y 좌표 BYTE array[cnt-1] cnt-1 segment type(0 : line, 1 : curve) 전체길이가변 2 + 2(4 cnt) + cnt-1 바이트 표 103 곡선개체속성 4.3.9.3. 글수식개체 BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 수식개체속성 ( 표 105 참조 ) 전체길이가변 n + n2 바이트 표 104 수식개체 Tag ID : HWPTAG_EQEDIT UINT32 4 속성. 스크립트가차지하는범위. 첫비트가켜져있으면줄단위, 꺼져있으면글자단위. WORD 2 스크립트길이 (len) WCHAR array[len] 2 len 글수식스크립트 (*) HWPUNIT 4 수식글자크기 COLORREF 4 글자색상 INT16 2 base line WCHAR array[len] 2xlen 수식버전정보 WCHAR array[len] 2xlen 수식폰트이름 전체길이가변 16 + (6 len) 바이트 표 105 수식개체속성 * 글수식스크립트는 EQN 스크립트호환이며자세한스펙은뒤에추가 4.3.9.4. 그림개체 (HWPTAG_SHAPE_COMPONENT_PICTURE) BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 개체요소공통속성 ( 표 80 참조 ) BYTE stream n3 그림개체속성 ( 표 107 참조 ) 전체길이가변 n + n2 + n3 바이트 표 106 그림개체 46
COLORREF 4 테두리색 INT32 4 테두리두께 UINT32 4 테두리속성 ( 표 86 참조 ) INT32 array[4] 4 4 이미지의테두리사각형의 x 좌표 ( 최초그림삽입시크기 ) INT32 array[4] 4 4 이미지의테두리사각형의 y 좌표 ( 최초그림삽입시크기 ) INT32 4 자르기한후사각형의 left INT32 4 자르기한후사각형의 top INT32 4 자르기한후사각형의 right INT32 4 자르기한후사각형의 bottom BYTE stream 8 안쪽여백정보 ( 표 72 참조 ) 표 ( 기본값 : 141), 그림 ( 기본값 : 0) BYTE stream 5 그림정보 ( 표 27 참조 ) BYTE 1 테두리투명도 UINT32 4 문서내각개체에대한고유아이디 (instance ID) BYTE stream n 그림효과정보 전체길이가변 78 + n 바이트 표 107 그림개체속성 UINT32 4 그림효과정보 ( 그림자, 네온, 부드러운가장자리, 반사 ) BYTE stream n 각효과정보 ( 표 109 ~ 표 113 참조 ) 전체길이가변 4 + n 바이트 표 108 그림효과속성 INT32 4 그림자스타일 float 4 그림자투명도 float 4 그림자흐릿하게 float 4 방향 float 4 거리 INT32 4 정렬 float 4 기울기각도 (X) float 4 기울기각도 (Y) float 4 확대비율 (X) float 4 확대비율 (Y) INT32 4 도형과함께그림자회전 BYTE stream n 그림자색상 ( 표 113 참조 ) 전체길이가변 44 + n 바이트 표 109 그림자효과속성 float 4 네온투명도 float 4 네온반경 BYTE stream n 네온색상 (( 113 참조 ) 전체길이가변 8 + n 바이트 표 110 네온효과속성 47
자료형 길이 ( 바이트 ) 설명 float 4 부드러운가장자리반경 전체길이 4 표 111 부드러운가장자리효과속성 INT32 4 반사스타일 float 4 반경 float 4 방향 float 4 거리 float 4 기울기각도 (X) float 4 기울기각도 (Y) float 4 확대비율 (X) float 4 확대비율 (Y) INT32 4 회전스타일 float 4 시작투명도 float 4 시작위치 float 4 끝투명도 float 4 끝위치 float 4 오프셋방향 전체길이 53 표 112 반사효과속성 INT32 4 색상타입 UINT32 4 RGB (0x00rrggbb) UINT32 4 CMYK (0xccmmyykk) INT32 4 스키마타입 INT32 4 시스템타입 INT32 4 프리셋타입 float 4 ScR float 4 ScG float 4 ScB float 4 H float 4 S float 4 L UINT32 4 색상효과수 BYTE array[n] 8 n 색상효과 ( 표 111 참조 ) 전체길이가변 4 + m(4 ~ 12) + n 바이트 표 113 색상속성 자료형 길이 ( 바이트 ) 의미 INT32 4 색상효과종류 ( 표 115 참조 ) float 4 색상효과값 전체길이 8 표 114 색상효과속성 값 설명 48
0 alpha 1 alpha_mod 2 alpha_off 3 red 4 red_mod 5 red_off 6 green 7 green_mod 8 green_off 9 blue 10 blue_mod 11 blue_off 12 hue 13 hue_mod 14 hue_off 15 sat 16 sat_mod 17 sat_off 18 lum 19 lum_mod 20 lum_off 21 shade 22 tint 23 gray 24 comp 25 gamma 26 inv_gamma 27 inv 표 115 색상효과종류 HWPUNIT 4X2 그림최초생성시기준이미지크기 INT8 1 이미지투명도 전체길이 9 표 116 그림추가속성 4.3.9.5. OLE 개체 (HWPTAG_SHAPE_COMPONENT_OLE) BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream 24 OLE 개체속성 ( 표 118 참조 ) 전체길이가변 24 + n 바이트 표 117 OLE 개체 UINT16 2 속성 ( 표 119 참조 ) INT32 4 오브젝트자체의 extent x크기 INT32 4 오브젝트자체의 extent y크기 UINT16 2 오브젝트가사용하는스토리지의 BinData ID 49
COLORREF 4 테두리색 INT32 4 테두리두께 UINT32 4 테두리속성 ( 표 87 참조 ) 전체길이 24 표 118 OLE 개체속성 bit 0~7 bit 8 bit 9~15 범위구분값설명 bit 16~21 개체종류 DVASPECT_CONTENT = 1, DVASPECT_THUMBNAIL = 2, DVASPECT_ICON = 4, DVASPECT_DOCPRINT = 8 TRUE if moniker is assigned 베이스라인. 0은디폴트 (85%) 를뜻하고, 1~101이 0~100% 를나타낸다. 현재는수식만이베이스라인을별도로가진다. 0 Unknown 1 Embedded 2 Link 3 Static 4 Equation 표 119 OLE 개체속성의속성 bit 0-7 에대한자세한설명은 MSDN 을참고 MFC COleClientItem::m_nDrawAspect bit 8 에대한자세한설명은 MSDN 을참고 MFC COleClientItem::m_bMoniker 4.3.9.6. 차트개체 차트는본문에 Ole 개체로저장되며, 차트내용은 Ole Compound 파일로저장된다. 차트파일의최상위 storage 에 "Contents", "OOXMLChartContents" stream 이저장될수있다. 기존 hwp( 한글 Neo) 차트에서는 "Contents" stream 만존재한다. 한글 2018 한글에서는 OOXML 차트를저장할수있고, "OOXMLChartContents" 와 "Contents" stream 에차트를저장할수있다. 한글 2018에서차트에서 "Contents" stream 은 OOXML 차트를구버전 ( 한글 Neo) 의차트로변환한예비데이터이다. "Contents" stream 의내용은첨부파일 ( 한글문서파일형식 _ 차트 _revision1.2_ 원본.hwp ) 의내용을참조하면된다. "OOXMLChartContents" stream 은 MS OOXML 에서차트를저장하는방식으로, 최상위 element 는 "chartspace" element 이며, 내용은 ISO/IEC 29500 나 ECMA 376의 DrawingML 의 Chart 부분을참조하면된다. 50
4.3.9.7. 묶음개체 (HWPTAG_SHAPE_COMPONENT_CONTAINER) BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 묶음개체속성 ( 표 121 참조 ) BYTE stream n3 개체속성 x 묶음개체의갯수. ( 묶음가능개체 : 그리기개체, OLE, 그림, 묶음개체 ) 전체길이가변 n + n2 + n3 바이트 표 120 묶음개체 WORD 2 개체의개수 (n) UINT32 array[n] 4 n 개체의컨트롤 ID array 전체길이가변 2 + (4 n) 바이트 표 121 묶음개체속성 4.3.9.8. 동영상개체 (HWPTAG_VIDEO_TDATA) BYTE stream n 개체공통속성 ( 표 68 참조 ) BYTE stream n2 동영상개체속성 전체길이가변 n + n2 바이트 표 122 동영상개체 INT32 4 동영상타입 ( 표 124 참조 ) BYTE stream n 동영상타입에따라길이가다름 ( 표 125, 표 126 참조 ) 전체길이가변 n + n2 바이트 표 123 동영상개체속성 값 0 로컬동영상 1 웹동영상 설명 표 124 동영상타입 UINT16 2 비디오파일의사용하는스토리지의 BinData ID UINT16 2 썸내일파일이사용하는스토리지의 BinData ID 전체길이 4 표 125 로컬동영상속성 51
WCHAR array[len] 2xlen 웹태그 UINT16 2 썸내일파일이사용하는스토리지의 BinData ID 전체길이 (2xlen)+2 표 126 웹동영상속성 4.3.10. 개체이외의컨트롤 의미컨트롤 ID 문단리스트파일태그 1 구역정의 MAKE_4CHID('s', 'e', 'c', 'd') 2 단정의 MAKE_4CHID('c', 'o', 'l', 'd') 3 머리말 / 꼬리말 MAKE_4CHID('h', 'e', 'a', 'd') / MAKE_4CHID('f', 'o', 'o', 't') 4 각주 / 미주 MAKE_4CHID('f', 'n', ' ', ' ') / MAKE_4CHID('e', 'n', ' ', ' ') 5 자동번호 MAKE_4CHID('a', 't', 'n', 'o') 6 새번호지정 MAKE_4CHID('n', 'w', 'n', 'o') 7 감추기 MAKE_4CHID('p', 'g', 'h', 'd') 8 홀 / 짝수조정 MAKE_4CHID('p', 'g', 'c', 't') 9 쪽번호위치 MAKE_4CHID('p', 'g', 'n', 'p') 10 찾아보기표식 MAKE_4CHID('i', 'd', 'x', 'm') 11 책갈피 MAKE_4CHID('b', 'o', 'k', 'm') 12 글자겹침 MAKE_4CHID('t', 'c', 'p', 's') 13 덧말 MAKE_4CHID('t', 'd', 'u', 't') 14 숨은설명 MAKE_4CHID('t', 'c', 'm', 't') 15 필드시작 필드컨트롤 ID 표 127 개체이외의컨트롤과컨트롤 ID HWPTAG_CTRL_HEAD 로부터시작하며 ctrlid 로각개체를확인할수있다. 특정컨트롤은정보이외의문단리스트를가질수있다. FIELD_UNKNOWN FIELD_DATE FIELD_DOCDATE FIELD_PATH FIELD_BOOKMARK FIELD_MAILMERGE FIELD_CROSSREF FIELD_FORMULA FIELD_CLICKHERE FIELD_SUMMARY FIELD_USERINFO FIELD_HYPERLINK FIELD_REVISION_SIGN FIELD_REVISION_DELETE FIELD_REVISION_ATTACH FIELD_REVISION_CLIPPING FIELD_REVISION_SAWTOOTH FIELD_REVISION_THINKING FIELD_REVISION_PRAISE FIELD_REVISION_LINE FIELD_REVISION_SIMPLECHANGE FIELD_REVISION_HYPERLINK 컨트롤 ID MAKE_4CHID('%', 'u', 'n', 'k') MAKE_4CHID('%', 'd', 't', 'e') MAKE_4CHID('%', 'd', 'd', 't') MAKE_4CHID('%', 'p', 'a', 't') MAKE_4CHID('%', 'b', 'm', 'k') MAKE_4CHID('%', 'm', 'm', 'g') MAKE_4CHID('%', 'x', 'r', 'f') MAKE_4CHID('%', 'f', 'm', 'u') MAKE_4CHID('%', 'c', 'l', 'k') MAKE_4CHID('%', 's', 'm', 'r') MAKE_4CHID('%', 'u', 's', 'r') MAKE_4CHID('%', 'h', 'l', 'k') MAKE_4CHID('%', 's', 'i', 'g') MAKE_4CHID('%', '%', '*', 'd') MAKE_4CHID('%', '%', '*', 'a') MAKE_4CHID('%', '%', '*', 'C') MAKE_4CHID('%', '%', '*', 'S') MAKE_4CHID('%', '%', '*', 'T') MAKE_4CHID('%', '%', '*', 'P') MAKE_4CHID('%', '%', '*', 'L') MAKE_4CHID('%', '%', '*', 'c') MAKE_4CHID('%', '%', '*', 'h') 52
FIELD_REVISION_LINEATTACH FIELD_REVISION_LINELINK FIELD_REVISION_LINETRANSFER FIELD_REVISION_RIGHTMOVE FIELD_REVISION_LEFTMOVE FIELD_REVISION_TRANSFER FIELD_REVISION_SIMPLEINSERT FIELD_REVISION_SPLIT FIELD_REVISION_CHANGE FIELD_MEMO FIELD_PRIVATE_INFO_SECURITY FIELD_TABLEOFCONTENTS MAKE_4CHID('%', '%', '*', 'A') MAKE_4CHID('%', '%', '*', 'i') MAKE_4CHID('%', '%', '*', 't') MAKE_4CHID('%', '%', '*', 'r') MAKE_4CHID('%', '%', '*', 'l') MAKE_4CHID('%', '%', '*', 'n') MAKE_4CHID('%', '%', '*', 'e') MAKE_4CHID('%', 's', 'p', 'l') MAKE_4CHID('%', '%', 'm', 'r') MAKE_4CHID('%', '%', 'm', 'e') MAKE_4CHID('%', 'c', 'p', 'r') MAKE_4CHID('%', 't', 'o', 'c') 표 128 필드컨트롤 ID 4.3.10.1. 구역정의 UINT32 4 속성 ( 표 130 참조 ) HWPUNIT16 2 동일한페이지에서서로다른단사이의간격 HWPUNIT16 2 세로로줄맞춤을할지여부 0 = off, 1 - n = 간격을 HWPUNIT 단위로지정 HWPUNIT16 2 가로로줄맞춤을할지여부 0 = off, 1 - n = 간격을 HWPUNIT 단위로지정 HWPUNIT 4 기본탭간격 (hwpunit 또는 relative characters) UINT16 2 번호문단모양 ID UINT16 2 쪽번호 (0 = 앞구역에이어, n = 임의의번호로시작 ) UINT16 array[3] 2 3 그림, 표, 수식번호 (0 = 앞구역에이어, n = 임의의번호로시작 ) UINT16 2 대표Language(Language 값이없으면 (==0), Application 에지정된 Language) 5.0.1.5 이상 전체길이 26 하위레코드자료형 길이 ( 바이트 ) 설명 BYTE stream 40 용지설정정보 ( 표 131 참조 ) BYTE stream 26 각주모양정보 ( 표 133 참조 ) BYTE stream 26 미주모양정보 ( 표 133 참조 ) BYTE stream 12 쪽테두리 / 배경정보 ( 표 135 참조 ) BYTE stream 10 양쪽, 홀수쪽, 짝수쪽의바탕쪽내용이있으면바탕쪽정보를얻는다. 바탕쪽정보는문단리스트를포함한다 ( 표 137 참조 ) 전체길이 140 표 129 구역정의 범위 bit 0 머리말을감출지여부 bit 1 꼬리말을감출지여부 bit 2 바탕쪽을감출지여부 bit 3 테두리를감출지여부 bit 4 배경을감출지여부 bit 5 쪽번호위치를감출지여부 bit 8 구역의첫쪽에만테두리표시여부 bit 9 구역의첫쪽에만배경표시여부 bit 16~18 텍스트방향 (0 : 가로 1 : 세로 ) 설명 53
bit 19 bit 20~21 bit 22 빈줄감춤여부구역나눔으로새페이지가생길때의페이지번호적용할지여부원고지정서법적용여부 표 130 구역정의속성 4.3.10.1.1. 용지설정 Tag ID : HWPTAG_PAGE_DEF HWPUNIT 4 용지가로크기 HWPUNIT 4 용지세로크기 HWPUNIT 4 용지왼쪽여백 HWPUNIT 4 오른쪽여백 HWPUNIT 4 위여백 HWPUNIT 4 아래여백 HWPUNIT 4 머리말여백 HWPUNIT 4 꼬리말여백 HWPUNIT 4 제본여백 UINT32 4 속성 ( 표 132 참조 ) 전체길이 40 표 131 용지설정 bit 0 bit 1~2 범위구분값설명 용지방향 제책방법 0 좁게 1 넓게 0 한쪽편집 1 맞쪽편집 2 위로넘기기 표 132 용지설정속성 54
4.3.10.1.2. 각주 / 미주모양 Tag ID : HWPTAG_FOOTNOTE_SHAPE UINT32 4 속성 ( 표 134 참조 ) WCHAR 2 사용자기호 WCHAR 2 앞장식문자 WCHAR 2 뒤장식문자 UINT16 2 시작번호 HWPUNIT16 2 구분선길이 HWPUNIT16 2 구분선위여백 HWPUNIT16 2 구분선아래여백 HWPUNIT16 2 주석사이여백 UINT8 1 구분선종류 ( 테두리 / 배경의테두리선종류참조 ) UINT8 1 구분선굵기 ( 테두리 / 배경의테두리선굵기참조 ) CORORREF 4 구분선색상 ( 테두리 / 배경의테두리선색상참조 ) 전체길이 26 표 133 각주 / 미주모양 범위구분값설명 bit 0~7 bit 8~9 bit 10~11 bit 12 bit 13 번호모양. 0~16 은범용. 0x80, 0x81 은각주 / 미주전용 한페이지내에서각주를다단에위치시킬방법 numbering 0 1, 2, 3 1 동그라미쳐진 1, 2, 3 2 I, II, III 3 i, ii, iii 4 A, B, C 5 a, b, c 6 동그라미쳐진 A, B, C 7 동그라미쳐진 a, b, c 8 가, 나, 다 9 동그라미쳐진가, 나, 다 10 ㄱ, ㄴ, ㄷ 11 동그라미쳐진ㄱ, ㄴ, ㄷ 12 일, 이, 삼 13 一, 二, 三 14 동그라미쳐진一, 二, 三 15 갑, 을, 병, 정, 무, 기, 경, 신, 임, 계 16 甲, 乙, 丙, 丁, 戊, 己, 庚, 辛, 壬, 癸 0x80 4가지문자가차례로반복 0x81 사용자지정문자반복 0 ( 각주인경우 ) 각단마다따로배열 1 ( 각주인경우 ) 통단으로배열 2 ( 각주인경우 ) 가장오른쪽단에배열 0 ( 미주인경우 ) 문서의마지막 1 ( 미주인경우 ) 구역의마지막 0 앞구역에이어서 1 현재구역부터새로시작 2 쪽마다새로시작 ( 각주전용 ) 각주내용중번호코드의모양을위첨자형식으로할지여부텍스트에이어바로출력할지여부 표 134 각주 / 미주모양속성 55
4.3.10.1.3. 쪽테두리 / 배경 Tag ID : HWPTAG_PAGE_BORDER_FILL UINT 4 속성 ( 표 136 참조 ) HWPUNIT16 2 테두리 / 배경위치왼쪽간격 HWPUNIT16 2 테두리 / 배경위치오른쪽간격 HWPUNIT16 2 테두리 / 배경위치위쪽간격 HWPUNIT16 2 테두리 / 배경위치아래쪽간격 UINT16 2 테두리 / 배경 ID 전체길이 12 표 135 쪽테두리 / 배경 bit 0 bit 1 bit 2 bit 3 ~ 4 범위구분값설명 위치기준 머리말포함 꼬리말포함 채울영역 0 본문기준 1 종이기준 0 미포함 1 포함 0 미포함 1 포함 0 종이 1 쪽 2 테두리 표 136 쪽테두리 / 배경속성 HWPUNIT 4 텍스트영역의폭 HWPUNIT 4 텍스트영역의높이 BYTE 1 각비트가해당레벨의텍스트에대한참조를했는지여부 BYTE 1 각비트가해당레벨의번호에대한참조를했는지여부 전체길이 10 표 137 바탕쪽정보 4.3.10.2. 단정의 UINT16 2 속성의 bit 0-15( 표 138 참조 ) HWPUNIT16 2 단사이간격 WORD array[cnt] 2 cnt 단너비가동일하지않으면, 단의개수만큼단의폭 UINT16 2 속성의 bit 16-32( 표 139 참조 ) UINT8 1 단구분선종류 ( 테두리 / 배경의테두리선종류참조 ) UINT8 1 단구분선굵기 ( 테두리 / 배경의테두리선굵기참조 ) CORORREF 4 단구분선색상 ( 테두리 / 배경의테두리선색상참조 ) 전체길이가변 12 + (2 cnt) 바이트 표 138 단정의 56
4.3.10.3. 머리말 / 꼬리말 범위구분값설명 0 일반다단 bit 0~1 단종류 1 배분다단 2 평행다단 bit 2~9 단개수 (cnt) 1-255 0 왼쪽부터 bit 10~11 단방향지정 1 오른쪽부터 2 맞쪽 bit 12 단너비동일하게여부 표 139 단정의속성 문단리스트를포함한다. UINT32 4 속성 ( 표 141 참조 ) HWPUNIT 4 텍스트영역의폭 HWPUNIT 4 텍스트영역의높이 BYTE 1 각비트가해당레벨의텍스트에대한참조를했는지여부 BYTE 1 각비트가해당레벨의번호에대한참조를했는지여부 전체길이 14 표 140 머리말 / 꼬리말 범위구분값설명 bit 0~1 머리말이적용될범위 ( 페이지종류 ) 표 141 머리말 / 꼬리말속성 0 양쪽 1 짝수쪽만 2 홀수쪽만 4.3.10.4. 각주 / 미주 각주 / 미주는문단리스트외에속성을갖지않는다. 하지만쓰레기값이나불필요한업데이트를줄이기위해 8 byte 를 serialize 한다. 57
4.3.10.5. 자동번호 UINT32 4 속성 ( 표 143 참조 ) UINT16 2 번호 WCHAR 2 사용자기호 WCHAR 2 앞장식문자 WCHAR 2 뒤장식문자 전체길이 12 표 142 자동번호 범위구분값설명 0 쪽번호 1 각주번호 2 미주번호 bit 0~3 번호종류 3 그림번호 4 표번호 5 수식번호 bit 4~11 번호모양표 134 참조각주에서만사용된다. bit 12 superscript 각주내용중번호코드의모양을위첨자형식으로할지여부. 표 143 자동번호속성 4.3.10.6. 새번호지정 UINT32 4 속성범위 설명 bit 0~3 번호종류 ( 표 143 참조 ) UINT16 2 번호 전체길이 8 표 144 새번호지정 4.3.10.7. 감추기 자료형 길이 ( 바이트 ) 설명 속성구분 값 설명 0x00000001 머리말 0x00000002 꼬리말 UINT 2 0x00000004 바탕쪽감출대상 0x00000008 테두리 0x00000010 배경 0x00000020 쪽번호위치 전체길이 2 표 145 감추기 58
4.3.10.8. 홀 / 짝수조정 UINT32 4 전체길이 4 속성범위 구분 값 설명 bit 0~1 0 양쪽홀 / 짝수 1 짝수쪽구분 2 홀수쪽 표 146 홀 / 짝수조정 4.3.10.9. 쪽번호위치 UINT32 4 속성 ( 표 148 참조 ) WCHAR 2 사용자기호 WCHAR 2 앞장식문자 WCHAR 2 뒤장식문자 WCHAR 2 항상 "-" 전체길이 12 표 147 쪽번호위치 범위구분값설명 bit 0~7 번호모양 표 143 참조 0 쪽번호없음 1 왼쪽위 2 가운데위 3 오른쪽위 4 왼쪽아래 bit 8~11 번호의표시위치 5 가운데아래 6 오른쪽아래 7 바깥쪽위 8 바깥쪽아래 9 안쪽위 10 안쪽아래 표 148 쪽번호위치속성 4.3.10.10. 찾아보기표식 WORD 2 키워드길이 (len1) WCHAR array[len1] 2 len1 찾아보기에사용할첫번째키워드 WORD 2 키워드길이 (len2) WCHAR array[len2] 2 len2 찾아보기에사용할두번째키워드 UINT16 2 dummy 전체길이가변 6 + (2 len1) + (2 len2) 바이트 표 149 찾아보기표식 59
4.3.10.11. 책갈피 책갈피컨트롤은책갈피로서갖는정보로서 ' 책갈피이름 ' 밖에없으며, 컨트롤임의의데이터인 HWPTAG_CTRL_DATA 로레코드된다. (Tag: HWPTAG_CTRL_DATA 참조 ) 4.3.10.12. 글자겹침 UINT32 4 ctrl ID WORD 2 겹칠글자길이 (len) WCHAR array[len] 2 len 겹칠글자 UINT8 1 테두리타입 INT8 1 내부글자크기 UINT8 1 테두리내부글자펼침 UINT8 1 테두리내부글자속성아이디의수 (cnt) UINT array[cnt] 4 x cnt 테두리내부글자의 charshapeid 의배열 전체길이가변 10 + (2 len) + (4 cnt) 표 150 글자겹침 4.3.10.13. 덧말 WORD 2 main Text 길이 WCHAR 2 main Text WORD 2 sub Text 길이 WCHAR 2 sub Text 구분 값 설명 UINT 4 0 위덧말의위치 1 아래 2 가운데 UINT 4 Fsizeratio UINT 4 Option UINT 4 Style number 구분 값 설명 0 양쪽정렬 1 왼쪽정렬 UINT 4 2 오른쪽정렬정렬기준 3 가운데정렬 4 배분정렬 5 나눔정렬 ( 공백에만배분 ) 전체길이 18 표 151 덧말 4.3.10.14. 숨은설명 문단리스트만을포함한다.( 문서보안레벨에따라숨은설명데이터들은무효화될수있다.) 60