コード例 #1
0
        /** Converts the text into bytes to be placed in the document.
         * The conversion is done according to the font and the encoding and the characters
         * used are stored.
         * @param text the text to convert
         * @return the conversion
         */
        internal byte[] ConvertToBytes(string text)
        {
            byte[] b = null;
            switch (fontType)
            {
            case BaseFont.FONT_TYPE_T3:
                return(baseFont.ConvertToBytes(text));

            case BaseFont.FONT_TYPE_T1:
            case BaseFont.FONT_TYPE_TT: {
                b = baseFont.ConvertToBytes(text);
                int len = b.Length;
                for (int k = 0; k < len; ++k)
                {
                    shortTag[((int)b[k]) & 0xff] = 1;
                }
                break;
            }

            case BaseFont.FONT_TYPE_CJK: {
                int len = text.Length;
                for (int k = 0; k < len; ++k)
                {
                    cjkTag[cjkFont.GetCidCode(text[k])] = 0;
                }
                b = baseFont.ConvertToBytes(text);
                break;
            }

            case BaseFont.FONT_TYPE_DOCUMENT: {
                b = baseFont.ConvertToBytes(text);
                break;
            }

            case BaseFont.FONT_TYPE_TTUNI: {
                int    len     = text.Length;
                int[]  metrics = null;
                char[] glyph   = new char[len];
                int    i       = 0;
                if (symbolic)
                {
                    b   = PdfEncodings.ConvertToBytes(text, "symboltt");
                    len = b.Length;
                    for (int k = 0; k < len; ++k)
                    {
                        metrics = ttu.GetMetricsTT(b[k] & 0xff);
                        if (metrics == null)
                        {
                            continue;
                        }
                        longTag[metrics[0]] = new int[] { metrics[0], metrics[1], ttu.GetUnicodeDifferences(b[k] & 0xff) };
                        glyph[i++]          = (char)metrics[0];
                    }
                }
                else
                {
                    for (int k = 0; k < len; ++k)
                    {
                        int val;
                        if (Utilities.IsSurrogatePair(text, k))
                        {
                            val = Utilities.ConvertToUtf32(text, k);
                            k++;
                        }
                        else
                        {
                            val = (int)text[k];
                        }
                        metrics = ttu.GetMetricsTT(val);
                        if (metrics == null)
                        {
                            continue;
                        }
                        int m0 = metrics[0];
                        int gl = m0;
                        if (!longTag.ContainsKey(gl))
                        {
                            longTag[gl] = new int[] { m0, metrics[1], val }
                        }
                        ;
                        glyph[i++] = (char)m0;
                    }
                }
                string s = new String(glyph, 0, i);
                b = PdfEncodings.ConvertToBytes(s, CJKFont.CJK_ENCODING);
                break;
            }
            }
            return(b);
        }