2. PDF Data Type


2.1. PDF Chracter Set


PDF Reader는 파일을 읽어들일 때 특정 규칙에 의거하여 읽어들인다. 각각의 문자마다 의미가 있고, 그에 따른 처리 방식이 달라진다. 여기서는 그 구분 방법에 대해 설명하도록 한다.


PDF에서 특수한 문자는 White-space, Delimiter가 있다. White-space는 흔히 우리가 아는 공백문자이며, Delimiter는 이후 올 문자들을 구분짓기 위한 구분 문자이다. 해당 특수 문자의 의미는 아래 표와 같다.




2.2. Comments


CommentsPDF에서 주석을 의미하는 것으로, “%” 구분자로 시작하여 End-of-Line으로 끝난다. Comments는 지시어 사이, 파일의 처음 또는 끝 등에 존재할 수 있다.




2.3. Boolean


Boolean PDF의 오브젝트 내에서 참(“true”)과 거짓(“false”)을 나타낸다.




2.4. Numeric


Numeric PDF에서 숫자를 표현 할 때 사용된다. 크게 Integer objectsReal objects로 구분되며, 각각의 예는 아래 그림과 같다.





2.5. Literal String


Literal String PDF에서 문자열을 나타낼 때 사용된다. “(“로 문자열의 시작을, “)”로 문자열의 끝을 알린다.



 Literal String 내에서는 개별적인 “(“, “)” 또는 “\”를 허용하지 않는다. 위의 그림을 보면 알 수 있겠지만 Literal String 내의 “(“, “)”는 쌍으로 이루어져 있을 때에는 특별한 처리 없이 문자열로 인식된다. 개별적인 “(“ 또는 “)” 혹은 특수한 문자들은 “\”를 이용해 시퀀스 문자로 표현할 수 있다.




2.6. Hexadecimal Strings


Hexadecimal String“<”“>” 안의 0-9, A-F로 이루어진 2바이트의 데이터가 하나의 Hex data로 인식된다. 이 문자열 안의 White-space는 무시된다.


 


2.7. Name


PDF에서 Name“/” 이후의 문자열로, 0x21에서 0x7E까지의 문자로 구성된다. 이 자료형 내에서 “#”은 이후 2바이트의 문자가 하나의 Hex 값으로 취급하는데, 아래의 표를 보면 이해가 쉬울 것이다.




2.8. Array


Array PDF에서 “[“로 시작하여 “]”로 끝나는 배열을 의미한다. 배열 내 각 요소들은 Array를 포함한 Name, String, Number, Dictionary PDF의 모든 자료형을 가질 수 있다. 요소가 없는 빈 Array도 존재한다.




2.9. Dictionary


Dictionary“<<”“>>” 내에서 Key-Value의 쌍으로 구성된다. Key는 반드시 자료형이 Name이어야 하고, ValueDictionary를 포함 한 모든 자료형을 가질 수 있다. 요소가 없는 빈 Dictionary도 존재한다.




2.10. Indirect


Indirect“n1 n2 R”과 같이 표현되며 Referencing 하는 오브젝트를 표현한다.




2.11. Stream


Stream은 오브젝트 내에서 “stream” 키워드와 “endstream” 키워드 사이에 존재한다.



Stream은 해당 오브젝트의 Dictionary에서 몇 가지의 속성을 지시하는데, 기본적으로 /LengthStream의 길이를 나타내주어야 한다.





여기까지 PDF의 Data Type을 살펴보았다. 다음 장에는 PDF의 Spec과 맞지 않는 포맷에 대해 알아볼 것이다. 즉, PDF 포맷 공개 문서에는 나와있지 않은 실제 PDF Reader가 읽어들이는 방법에 대한 내용을 다루도록 하겠다.





참고 자료

PDF32000_2008.pdf ( Adobe Systems PDF 포맷 공개 문서 )


Posted by bong9
,