internal void findNames() { tables = new Hashmap(); try { String mainTag = readStandardstring(4); if (!mainTag.Equals("ttcf")) { throw new DocumentException(fileName + " is not a valid TTC file."); } rf.skipBytes(4); int dirCount = rf.readInt(); names = new String[dirCount]; int dirPos = rf.FilePointer; for (int dirIdx = 0; dirIdx < dirCount; ++dirIdx) { tables.Clear(); rf.seek(dirPos); rf.skipBytes(dirIdx * 4); directoryOffset = rf.readInt(); rf.seek(directoryOffset); if (rf.readInt() != 0x00010000) { throw new DocumentException(fileName + " is not a valid TTF file."); } int num_tables = rf.readUnsignedShort(); rf.skipBytes(6); for (int k = 0; k < num_tables; ++k) { String tag = readStandardstring(4); rf.skipBytes(4); int[] table_location = new int[2]; table_location[0] = rf.readInt(); table_location[1] = rf.readInt(); tables.Add(tag, table_location); } names[dirIdx] = this.BaseFont; } } finally { if (rf != null) { rf.close(); } } }