/// <summary> /// Creates the name of the by. /// </summary> /// <param name="name">The name.</param> /// <returns></returns> private static SimpleTrueTypeFont CreateByName(string name) { SimpleTrueTypeFont font; if (!_dict.TryGetValue(name, out font)) { using (Stream stream = FlateUtility.GetResource(name)) { font = new SimpleTrueTypeFont(stream); _dict[name] = font; } } return(font); }
/// <summary> /// Initializes a new instance of the <see cref="T:SimpleTrueTypeFont" /> class. /// </summary> /// <param name="fontStream">The font stream.</param> public SimpleTrueTypeFont(Stream fontStream) { this.widths = new Dictionary <int, float>(); if ((fontStream == null) || !fontStream.CanRead) { throw new PdfArgumentNullException("fontStream"); } byte[] buffer = new byte[(int)fontStream.Length]; fontStream.Read(buffer, 0, buffer.Length); // hdt 替换原有的XmlSerializer,Release版不支持 CT_SimpleFont font; using (MemoryStream stream = new MemoryStream(FlateUtility.FlateDecode(buffer, true))) using (XmlReader reader = XmlReader.Create(stream, _settings)) { font = new CT_SimpleFont(); reader.ReadToFollowing("SimpleFont"); font.Ascent = Convert.ToSingle(reader.GetAttribute("Ascent")); font.BBox0 = Convert.ToSingle(reader.GetAttribute("BBox0")); font.BBox1 = Convert.ToSingle(reader.GetAttribute("BBox1")); font.BBox2 = Convert.ToSingle(reader.GetAttribute("BBox2")); font.BBox3 = Convert.ToSingle(reader.GetAttribute("BBox3")); font.CapHeight = Convert.ToSingle(reader.GetAttribute("CapHeight")); font.Descent = Convert.ToSingle(reader.GetAttribute("Descent")); font.Flags = Convert.ToInt32(reader.GetAttribute("Flags")); font.ItalicAngle = Convert.ToSingle(reader.GetAttribute("ItalicAngle")); font.Name = reader.GetAttribute("Name"); font.StemV = Convert.ToSingle(reader.GetAttribute("StemV")); List <CT_Width> widths = new List <CT_Width>(); while (reader.Read() && reader.Name == "Widths" && reader.NodeType != XmlNodeType.EndElement) { CT_Width w = new CT_Width(); w.Index = Convert.ToInt32(reader.GetAttribute("Index")); w.Value = Convert.ToSingle(reader.GetAttribute("Value")); widths.Add(w); } font.Widths = widths.ToArray(); } this.simpleFont = font; this.InitWidths(); }
internal AdobeCmapBase(string name) { using (Stream stream = FlateUtility.GetResource(name)) { if (stream == null) { throw new PdfArgumentNullException("Embedded resource " + name + " cannot be found."); } byte[] buffer = new byte[(int)stream.Length]; stream.Read(buffer, 0, buffer.Length); buffer = FlateUtility.FlateDecode(buffer, true); StringBuilder builder = new StringBuilder(); for (int i = 0; i < buffer.Length; i += 2) { builder.Append((char)((buffer[i] << 8) + buffer[i + 1])); } this.InitAddress(builder.ToString()); } }