private void DoType1TT()
{
CMapToUnicode toUnicode = null;
PdfObject enc = PdfReader.GetPdfObject(font.Get(PdfName.ENCODING));
if (enc == null)
{
PdfName baseFont = font.GetAsName(PdfName.BASEFONT);
if (BuiltinFonts14.ContainsKey(fontName) &&
(PdfName.SYMBOL.Equals(baseFont) || PdfName.ZAPFDINGBATS.Equals(baseFont)))
{
FillEncoding(baseFont);
}
else
{
FillEncoding(null);
}
toUnicode = ProcessToUnicode();
if (toUnicode != null)
{
IDictionary <int, int> rm = toUnicode.CreateReverseMapping();
foreach (KeyValuePair <int, int> kv in rm)
{
uni2byte[kv.Key] = kv.Value;
byte2uni[kv.Value] = kv.Key;
}
}
}
else
{
if (enc.IsName())
{
FillEncoding((PdfName)enc);
}
else if (enc.IsDictionary())
{
PdfDictionary encDic = (PdfDictionary)enc;
enc = PdfReader.GetPdfObject(encDic.Get(PdfName.BASEENCODING));
if (enc == null)
{
FillEncoding(null);
}
else
{
FillEncoding((PdfName)enc);
}
FillDiffMap(encDic, toUnicode);
}
}
if (BuiltinFonts14.ContainsKey(fontName))
{
BaseFont bf = BaseFont.CreateFont(fontName, WINANSI, false);
int[] e = uni2byte.ToOrderedKeys();
for (int k = 0; k < e.Length; ++k)
{
int n = uni2byte[e[k]];
widths[n] = bf.GetRawWidth(n, GlyphList.UnicodeToName(e[k]));
}
if (diffmap != null)
{
//widths for differences must override existing ones
e = diffmap.ToOrderedKeys();
for (int k = 0; k < e.Length; ++k)
{
int n = diffmap[e[k]];
widths[n] = bf.GetRawWidth(n, GlyphList.UnicodeToName(e[k]));
}
diffmap = null;
}
Ascender = bf.GetFontDescriptor(ASCENT, 1000);
CapHeight = bf.GetFontDescriptor(CAPHEIGHT, 1000);
Descender = bf.GetFontDescriptor(DESCENT, 1000);
ItalicAngle = bf.GetFontDescriptor(ITALICANGLE, 1000);
fontWeight = bf.GetFontDescriptor(FONT_WEIGHT, 1000);
llx = bf.GetFontDescriptor(BBOXLLX, 1000);
lly = bf.GetFontDescriptor(BBOXLLY, 1000);
urx = bf.GetFontDescriptor(BBOXURX, 1000);
ury = bf.GetFontDescriptor(BBOXURY, 1000);
}
FillWidths();
FillFontDesc(font.GetAsDict(PdfName.FONTDESCRIPTOR));
}