public CharacterCodeToGlyphIdMapper(TrueTypeFontProgram font)
            {
                var microsoftUnicode = font.TableRegister.CMapTable.SubTables.FirstOrDefault(x => x.PlatformId == TrueTypeCMapPlatform.Windows && x.EncodingId == 1);

                cmapSubTable = microsoftUnicode ?? font.TableRegister.CMapTable.SubTables.FirstOrDefault(x => x.PlatformId == TrueTypeCMapPlatform.Macintosh && x.EncodingId == 0);
                this.font    = font ?? throw new ArgumentNullException(nameof(font));
            }
Exemple #2
0
 public TrueTypeStandard14FallbackSimpleFont(NameToken name, FontMetrics fontMetrics, Encoding encoding, TrueTypeFontProgram font)
 {
     this.fontMetrics = fontMetrics;
     this.encoding    = encoding ?? throw new ArgumentNullException(nameof(encoding));
     this.font        = font;
     Name             = name;
 }
Exemple #3
0
        private bool TryGetTrueTypeFont(string name, SystemFontRecord record, out TrueTypeFontProgram font)
        {
            font = null;
            if (record.Type == SystemFontType.TrueType)
            {
                if (readFiles.Contains(record.Path))
                {
                    return(false);
                }

                return(TryReadFile(record.Path, true, name, out font));
            }

            return(false);
        }
        public TrueTypeSimpleFont(NameToken name,
                                  FontDescriptor descriptor,
                                  [CanBeNull] CMap toUnicodeCMap,
                                  [CanBeNull] Encoding encoding,
                                  [CanBeNull] TrueTypeFontProgram fontProgram,
                                  int firstCharacter,
                                  decimal[] widths)
        {
            this.descriptor     = descriptor;
            this.encoding       = encoding;
            this.fontProgram    = fontProgram;
            this.firstCharacter = firstCharacter;
            this.widths         = widths;

            Name       = name;
            IsVertical = false;
            ToUnicode  = new ToUnicodeCMap(toUnicodeCMap);
        }
Exemple #5
0
        private static decimal CalculateGlyphSpaceTextWidth(string text, TrueTypeFontProgram font)
        {
            var width = 0m;

            for (var i = 0; i < text.Length; i++)
            {
                var c = text[i];

                if (!font.TryGetBoundingBox(c, out var rect))
                {
                    throw new InvalidOperationException($"The font does not contain a character: {c}.");
                }

                width += rect.Width;
            }

            return(width);
        }
Exemple #6
0
        private bool TryReadFile(string fileName, bool readNameFirst, string fontName, out TrueTypeFontProgram font)
        {
            font = null;
            readFiles.Add(fileName);

            var bytes = File.ReadAllBytes(fileName);

            var data = new TrueTypeDataBytes(new ByteArrayInputBytes(bytes));

            if (readNameFirst)
            {
                var name = trueTypeFontParser.GetNameTable(data);

                if (name == null)
                {
                    return(false);
                }

                var fontNameFromFile = name.GetPostscriptName() ?? name.FontName;

                nameToFileNameMap[fontNameFromFile] = fileName;

                if (!string.Equals(fontNameFromFile, fontName, StringComparison.OrdinalIgnoreCase))
                {
                    return(false);
                }
            }

            data.Seek(0);
            font = trueTypeFontParser.Parse(data);
            var psName = font.TableRegister.NameTable?.GetPostscriptName() ?? font.Name;

            lock (CacheLock)
            {
                if (!Cache.ContainsKey(psName))
                {
                    Cache[psName] = font;
                }
            }

            return(true);
        }
Exemple #7
0
        private bool TryReadFile(string fileName, bool readNameFirst, string fontName, out TrueTypeFontProgram font)
        {
            font = null;
            readFiles.Add(fileName);

            using (var fileStream = File.OpenRead(fileName))
            {
                var input = new StreamInputBytes(fileStream);
                var data  = new TrueTypeDataBytes(input);

                if (readNameFirst)
                {
                    var name = trueTypeFontParser.GetNameTable(data);

                    if (name == null)
                    {
                        return(false);
                    }

                    var fontNameFromFile = name.GetPostscriptName() ?? name.FontName;

                    nameToFileNameMap[fontNameFromFile] = fileName;

                    if (!string.Equals(fontNameFromFile, fontName, StringComparison.OrdinalIgnoreCase))
                    {
                        return(false);
                    }
                }

                font = trueTypeFontParser.Parse(data);
                var psName = font.TableRegister.NameTable?.GetPostscriptName() ?? font.Name;
                if (!cache.ContainsKey(psName))
                {
                    cache[psName] = font;
                }

                return(true);
            }
        }
Exemple #8
0
 public TrueTypeWritingFont(TrueTypeFontProgram font, IReadOnlyList <byte> fontFileBytes)
 {
     this.font          = font;
     this.fontFileBytes = fontFileBytes;
 }
Exemple #9
0
 public CharacterCodeToGlyphIdMapper(TrueTypeFontProgram font)
 {
     this.font = font ?? throw new ArgumentNullException(nameof(font));
 }
Exemple #10
0
 public FontStored(AddedFont fontKey, TrueTypeFontProgram fontProgram)
 {
     FontKey     = fontKey;
     FontProgram = fontProgram;
 }