The file starts with the
header.
This is followed by a number of objects describing the contents of the pages.
Finally is the
xref table,
followed by the
trailer object.
The contents consists of a
Catalog dictionary, an optional
info dictionary, one or more pages, and one or more fonts. There is a
Page Tree Node that lists all the page objects. Each page has a page object, a stream object, and a length object.
The catalog dictionary contains a reference to the pages object.
7 0 obj
<<
/Type/Catalog
/Pages 9 0 R
>>
endobj
The Page Tree Node object contains an array of references to the page object for each page.
9 0 obj
<<
/Type/Pages
/Kids [10 0 R
]
/Count 1
>>
endobj
The page object contains references to it's parent, the stream containing actual contents, and a list of font(s) used on that page.
10 0 obj
<<
/Type /Page
/MediaBox [0 0 612 792]/Contents 11 0 R
/Parent 9 0 R
/Resources
<<
/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]/Font
<<
/F0 6 0 R
/F4 1 0 R
/F11 2 0 R
>>
>>
>>
endobj
The stream contains the actual page contents, and a reference to the length of the stream.
11 0 obj
<<
/Length 12 0 R
>>
stream
/F4 24 Tf
BT 24 TL 10 772 Td
(this is a test) Tj
T*
endstream
endobj