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 순으로 하기에는 부적합하다. 따라서 문서의 첫 부분부터 순차적으로 내용을 읽어나가야 한다.
귀찮아서 점점 대충 쓰고있다.
'File Format > PDF' 카테고리의 다른 글
[PDF File Format] 3. Broken Format - (3) Cross-Reference Table (0) | 2016.06.13 |
---|---|
[PDF File Format] 3. Broken Format - (2) Trailer (0) | 2016.06.04 |
[PDF File Format] 3. Broken Format - (1) File Header (0) | 2016.06.04 |
[PDF File Format] 2. PDF Data Type (0) | 2016.06.03 |
[PDF File Format] 1. Basic Format (0) | 2016.06.03 |