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

WriteFont() приватный Метод

private WriteFont ( PdfWriter writer, PdfIndirectReference piref, Object parms ) : void
writer PdfWriter
piref PdfIndirectReference
parms Object
Результат void
        internal override void WriteFont(PdfWriter writer, PdfIndirectReference piref, Object[] parms)
        {
            int firstChar = (int)parms[0];
            int lastChar = (int)parms[1];
            byte[] shortTag = (byte[])parms[2];
            bool subsetp = (bool)parms[3] && subset;
            if (!subsetp) {
                firstChar = 0;
                lastChar = shortTag.Length - 1;
                for (int k = 0; k < shortTag.Length; ++k)
                    shortTag[k] = 1;
            }
            PdfIndirectReference ind_font = null;
            PdfObject pobj = null;
            PdfIndirectObject obj = null;
            string subsetPrefix = "";
            if (embedded) {
                if (cff) {
                    pobj = new StreamFont(ReadCffFont(), "Type1C", compressionLevel);
                    obj = writer.AddToBody(pobj);
                    ind_font = obj.IndirectReference;
                }
                else {
                    if (subsetp)
                        subsetPrefix = CreateSubsetPrefix();
                    Dictionary<int, int[]> glyphs = new Dictionary<int, int[]>();
                    for (int k = firstChar; k <= lastChar; ++k) {
                        if (shortTag[k] != 0) {
                            int[] metrics = null;
                            if (specialMap != null) {
                                int[] cd = GlyphList.NameToUnicode(differences[k]);
                                if (cd != null)
                                    metrics = GetMetricsTT(cd[0]);
                            }
                            else {
                                if (fontSpecific)
                                    metrics = GetMetricsTT(k);
                                else
                                    metrics = GetMetricsTT(unicodeDifferences[k]);
                            }
                            if (metrics != null)
                                glyphs[metrics[0]] = null;
                        }
                    }
                    AddRangeUni(glyphs, false, subsetp);
                    byte[] b = null;
                    if (subsetp || directoryOffset != 0 || subsetRanges != null) {
                        TrueTypeFontSubSet sb = new TrueTypeFontSubSet(fileName, new RandomAccessFileOrArray(rf), glyphs, directoryOffset, true, !subsetp);
                        b = sb.Process();
                    }
                    else {
                        b = GetFullFont();
                    }
                    int[] lengths = new int[]{b.Length};
                    pobj = new StreamFont(b, lengths, compressionLevel);
                    obj = writer.AddToBody(pobj);
                    ind_font = obj.IndirectReference;
                }
            }
            pobj = GetFontDescriptor(ind_font, subsetPrefix, null);
            if (pobj != null){
                obj = writer.AddToBody(pobj);
                ind_font = obj.IndirectReference;
            }
            pobj = GetFontBaseType(ind_font, subsetPrefix, firstChar, lastChar, shortTag);
            writer.AddToBody(pobj, piref);
        }