Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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();
        }
Exemple #3
0
 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());
     }
 }