Esempio n. 1
0
        protected void ReadPrivate(BinaryReaderFont reader)
        {
            long start = reader.Position;

            //Console.WriteLine("private dict: {0}", topDict.Private);
            privateDict = CFFPrivateDict.Read(reader, (int)topDict.Private.values[0]);
            //Console.WriteLine("private dict: {0}", privateDict);
            //reader.Position = position + (int)topDict.Private.values[1];
            //CFFIndex index = CFFIndex.Read(reader);
            //int[] offset = index.offset;
            //Console.WriteLine("local subr index: {0}", index);

            if (privateDict.Subrs > 0)
            {
                reader.Position = start + (int)privateDict.Subrs;
                CFFIndex index  = CFFIndex.Read(reader);
                int[]    offset = index.ReadAllOffsets(reader);
                //Console.WriteLine("local subr index: {0}", index);
                localSubr = new byte[index.count][];
                for (int i = 0; i < offset.Length - 1; i++)
                {
                    int length = offset[i + 1] - offset[i];
                    localSubr[i] = reader.ReadBytes(length);
                }
            }
            charString.localSubr = localSubr;
        }
Esempio n. 2
0
        protected void ReadTopDict(BinaryReaderFont reader)
        {
            CFFIndex index = CFFIndex.Read(reader);

            //Console.WriteLine("topDict: {0}", index);
            int[] offset = index.ReadAllOffsets(reader);
            int   length = offset[1] - offset[0];

            topDict = CFFTopDict.Read(reader, length);
        }
Esempio n. 3
0
        protected void ReadName(BinaryReaderFont reader)
        {
            CFFIndex index = CFFIndex.Read(reader);

            int[] offset = index.ReadAllOffsets(reader);
            names = new string[index.count];
            int length = offset.Length - 1;

            for (int i = 0; i < length; i++)
            {
                int byteSize = offset[i + 1] - offset[i];
                names[i] = reader.ReadString(byteSize);
            }
        }
Esempio n. 4
0
        protected void ReadGlobalSubr(BinaryReaderFont reader)
        {
            CFFIndex index = CFFIndex.Read(reader);

            int[] offset = index.ReadAllOffsets(reader);
            //Console.WriteLine("global subr index: {0}", index);
            globalSubr = new byte[index.count][];
            int length = offset.Length - 1;

            for (int i = 0; i < length; i++)
            {
                int byteSize = offset[i + 1] - offset[i];
                globalSubr[i] = reader.ReadBytes(byteSize);
            }
            charString.globalSubr = globalSubr;
        }
Esempio n. 5
0
        protected void ReadString(BinaryReaderFont reader)
        {
            CFFIndex index = CFFIndex.Read(reader);

            int[] offset = index.ReadAllOffsets(reader);
            //Console.WriteLine("string index: {0}", index);
            strings = new string[index.count];
            int length = offset.Length - 1;

            for (int i = 0; i < length; i++)
            {
                int byteSize = offset[i + 1] - offset[i];
                //value.strings[i] = value.ConvertString(reader.ReadBytes(length));
                strings[i] = reader.ReadString(byteSize);
            }
        }
Esempio n. 6
0
 public GraphicsPath GetGlyph(int glyphId, bool hasWidth)
 {
     if (glyphId < 0)
     {
         return(null);
     }
     if (File.Exists(filePath) == false)
     {
         return(null);
     }
     byte[] cs = null;
     using (Stream stream = File.OpenRead(filePath))
         using (BinaryReaderFont reader = new BinaryReaderFont(stream)) {
             reader.Position = position + topDict.CharStrings;
             CFFIndex index = CFFIndex.Read(reader);
             //Console.WriteLine("CharStrings index: {0}", index);
             long offsetStart = reader.Position;
             int  offset0     = 0;
             int  offset1     = 0;
             index.ReadOffset(reader, glyphId, out offset0, out offset1);
             int byteSize = offset1 - offset0;
             if (byteSize <= 0)
             {
                 return(null);
             }
             //Console.WriteLine("offset0: {0}, {1}", offset0, offset1);
             //Console.WriteLine("lastItem: {0}", offsetStart);
             offsetStart += (index.count + 1) * index.offSize;
             //Console.WriteLine("lastItem: {0}", offsetStart);
             reader.Position = offsetStart + offset0 - 1;
             cs = reader.ReadBytes(byteSize);
         }
     if (cs == null)
     {
         return(null);
     }
     //Console.WriteLine("Docode: {0}", CFFCharString.Decode(charString));
     return(charString.CreateGlyph(cs, hasWidth));
 }