iTextSharp.text.pdf.CFFFont.CFFFont C# (CSharp) Метод

CFFFont() публичный Метод

public CFFFont ( RandomAccessFileOrArray inputbuffer ) : System
inputbuffer RandomAccessFileOrArray
Результат System
        public CFFFont(RandomAccessFileOrArray inputbuffer) {
            
            //System.err.Println("CFF: nStdString = "+standardStrings.length);
            buf = inputbuffer;
            Seek(0);
            
            int major, minor;
            major = GetCard8();
            minor = GetCard8();
            
            //System.err.Println("CFF Major-Minor = "+major+"-"+minor);
            
            int hdrSize = GetCard8();
            
            offSize = GetCard8();
            
            //System.err.Println("offSize = "+offSize);
            
            //int count, indexOffSize, indexOffset, nextOffset;
            
            nameIndexOffset    = hdrSize;
            nameOffsets        = GetIndex(nameIndexOffset);
            topdictIndexOffset = nameOffsets[nameOffsets.Length-1];
            topdictOffsets     = GetIndex(topdictIndexOffset);
            stringIndexOffset  = topdictOffsets[topdictOffsets.Length-1];
            stringOffsets      = GetIndex(stringIndexOffset);
            gsubrIndexOffset   = stringOffsets[stringOffsets.Length-1];
            gsubrOffsets       = GetIndex(gsubrIndexOffset);
            
            fonts = new Font[nameOffsets.Length-1];
            
            // now get the name index
            
            /*
            names             = new String[nfonts];
            privateOffset     = new int[nfonts];
            charsetOffset     = new int[nfonts];
            encodingOffset    = new int[nfonts];
            charstringsOffset = new int[nfonts];
            fdarrayOffset     = new int[nfonts];
            fdselectOffset    = new int[nfonts];
            */
            
            for (int j=0; j<nameOffsets.Length-1; j++) {
                fonts[j] = new Font();
                Seek(nameOffsets[j]);
                fonts[j].name = "";
                for (int k=nameOffsets[j]; k<nameOffsets[j+1]; k++) {
                    fonts[j].name += (char)GetCard8();
                }
                //System.err.Println("name["+j+"]=<"+fonts[j].name+">");
            }
            
            // string index
            
            //strings = new String[stringOffsets.length-1];
            /*
            System.err.Println("std strings = "+standardStrings.length);
            System.err.Println("fnt strings = "+(stringOffsets.length-1));
            for (char j=0; j<standardStrings.length+(stringOffsets.length-1); j++) {
                //Seek(stringOffsets[j]);
                //strings[j] = "";
                //for (int k=stringOffsets[j]; k<stringOffsets[j+1]; k++) {
                //    strings[j] += (char)getCard8();
                //}
                System.err.Println("j="+(int)j+" <? "+(standardStrings.length+(stringOffsets.length-1)));
                System.err.Println("strings["+(int)j+"]=<"+getString(j)+">");
            }
            */
            
            // top dict
            
            for (int j=0; j<topdictOffsets.Length-1; j++) {
                Seek(topdictOffsets[j]);
                while (GetPosition() < topdictOffsets[j+1]) {                
                    GetDictItem();
                    if (key=="FullName") {
                        //System.err.Println("getting fullname sid = "+((Integer)args[0]).IntValue);
                        fonts[j].fullName = GetString((char)((int)args[0]));
                        //System.err.Println("got it");
                    } else if (key=="ROS")
                        fonts[j].isCID = true;
                    else if (key=="Private") {
                        fonts[j].privateLength  = (int)args[0];
                        fonts[j].privateOffset  = (int)args[1];
                    }
                    else if (key=="charset"){
                        fonts[j].charsetOffset = (int)args[0];
                        
                    }
                    else if (key=="Encoding"){
                        fonts[j].encodingOffset = (int)args[0];
                        ReadEncoding(fonts[j].encodingOffset);
                    }
                    else if (key=="CharStrings") {
                        fonts[j].charstringsOffset = (int)args[0];
                        //System.err.Println("charstrings "+fonts[j].charstringsOffset);
                        // Added by Oren & Ygal
                        int p = GetPosition();
                        fonts[j].charstringsOffsets = GetIndex(fonts[j].charstringsOffset);
                        Seek(p);
                    } else if (key=="FDArray")
                        fonts[j].fdarrayOffset = (int)args[0];
                    else if (key=="FDSelect")
                        fonts[j].fdselectOffset = (int)args[0];
                    else if (key=="CharstringType")
                        fonts[j].CharstringType = (int)args[0];
                }
                
                // private dict
                if (fonts[j].privateOffset >= 0) {
                    //System.err.Println("PRIVATE::");
                    Seek(fonts[j].privateOffset);
                    while (GetPosition() < fonts[j].privateOffset+fonts[j].privateLength) {
                        GetDictItem();
                        if (key=="Subrs")
                            //Add the private offset to the lsubrs since the offset is 
                            // relative to the begining of the PrivateDict
                            fonts[j].privateSubrs = (int)args[0]+fonts[j].privateOffset;
                    }
                }
                
                // fdarray index
                if (fonts[j].fdarrayOffset >= 0) {
                    int[] fdarrayOffsets = GetIndex(fonts[j].fdarrayOffset);
                    
                    fonts[j].fdprivateOffsets = new int[fdarrayOffsets.Length-1];
                    fonts[j].fdprivateLengths = new int[fdarrayOffsets.Length-1];
                    
                    //System.err.Println("FD Font::");
                    
                    for (int k=0; k<fdarrayOffsets.Length-1; k++) {
                        Seek(fdarrayOffsets[k]);
                        while (GetPosition() < fdarrayOffsets[k+1]) {
                            GetDictItem();
                            if (key=="Private") {
                                fonts[j].fdprivateLengths[k]  = (int)args[0];
                                fonts[j].fdprivateOffsets[k]  = (int)args[1];
                            }
                        }                        
                    }
                }
            }
            //System.err.Println("CFF: done");
        }