3. Broken Format


3.4. Body


Body는 오브젝트들로 구성되어 있다고 앞 장에서 설명하였다. 이 영역은 PDF 파일의 대부분을 차지할 만큼 방대하다. 모든 내용을 다루기는 어렵고, 극히 일부에 대해서만 다루고자 한다.

 

가장 먼저 다룰 필드는 스트림의 길이를 나타내는 /Length 키이다. PDF의 오브젝트는 아래 그림과 같이 오브젝트의 속성에서 스트림의 압축방식(/Filter/FlateDecode)과 길이(/Length 145)를 나타낸다

여기서 이 /Length 키는 PDF Reader가 참고하는 부분이 아니다. 이 키에 대한 값이 실제 stream의 길이와 다르더라도 문서는 정상적으로 읽히기 때문이다. , /Length 키와는 무관하게 PDF Reader stream 키워드와 endstream 키워드로만 스트림을 읽어들인다.


stream endstream 키워드 사이에 “endstream”이 존재하는 Fake Keyword가 삽입되는 케이스도 있다. 이 경우 어떻게 되는가에 대해서는 아래 URL을 참고하기 바란다.

http://cerbero-blog.com/?p=1612


각종 키워드가 아래 그림과 같이 오브젝트 사이에 마구잡이로 존재해도 아무 문제 없다.

 PDF는 위치 또는 길이를 나타내는 필드를 신뢰하지 않는다. , 키워드에 따라서 이후에 반드시 해당 값이 존재해야 한다는 제약이 없다. 이러한 것은 PDF Reader에서 이상한 포맷이라고 간주하고, 복구해 줄 수도 있다(포맷이 크게 변할 수 있다).

PDF 문서를 파싱할 때에는 Header - Trailer - Cross-Reference Table - Body 순으로 하기에는 부적합하다. 따라서 문서의 첫 부분부터 순차적으로 내용을 읽어나가야 한다.

 

귀찮아서 점점 대충 쓰고있다.



Posted by bong9
,