Header Name INDEX Top DICT INDEX String INDEX Global Subr INDEX -- Encodings Charsets FDSelect CharStrings INDEX per-font Font DICT INDEX per-font Private DICT per-font Local Subr INDEX per-font Copyright etc --- Card8 Card16 Offset OffSize 1-4, byte SID 2-byte string ID --- Operand encoding: size 1: b0: 32-246, val=b0-139 size 2: b0:247-250, val=(b0-247)mal 256 plus b1 plus 108 size 3: b0:251-254, val=-(b0-251)mal 256 - b1-108 size 5: b0:29, val=b1<<24 or b2 << 16 or b3 << 8 or b4 real number: b0:30, var-length seq. 4-bit nibbles per byte MSN: nibble=0-9 digit a decimal point b E c E- d reserved e minus f end of number (padded to a full byte) INDEX: Card16 count if 0, stops here. offsize offsize Offset offset[count plus 1]; last element is for skipping the index. Card8 data <--- offsets relative to here ----- HEADER: Card8 major = 1 Card8 minor = 0 Card8 header_size OffSize offset size -------- Top DICT: version 0, SID Notice 1, SID Copyright 12 0, SID FullName 2, SID FamilyName 3, SID Weight 4, SID isFixedPitch 12 1, boolean ItalicAngle 12 2, number UnderlinePosition 12 3, number UnderlineThickness 12 4, number PaintType 12 5, number CharstringType 12 6, number FontMatrix 12 7, array UniqueID 13, number FontBBox 5, array StrokeWidth 12 8, number XUID 14, array charset 15, number, charset offset(0) Encoding 16, number, encoding offset(0) CharStrings 17, number, charstrings offset(0) Private 18, number, number Private DICT size and offset(0) SyntheticBase 12 20, number synthetic base font index PostScript 12 21, SID code BaseFontName 12 22, SID BaseFontBlend 12 23, delta -- for CIDFonts: ROS 12 30, SID CIDFontVersion 12 31, number CIDFontRevision 12 32, number CIDFontType 12 33, number CIDCount 12 34, number UIDBase 12 35, number FontDictArray 12 36, number, Font DICT INDEX offset(0) FontDictSelect 12 37, number, Font DICT select offset(0) FontName 12 38, SID