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)); }
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; }
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); }
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); }
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); }
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); } }
public TrueTypeWritingFont(TrueTypeFontProgram font, IReadOnlyList <byte> fontFileBytes) { this.font = font; this.fontFileBytes = fontFileBytes; }
public CharacterCodeToGlyphIdMapper(TrueTypeFontProgram font) { this.font = font ?? throw new ArgumentNullException(nameof(font)); }
public FontStored(AddedFont fontKey, TrueTypeFontProgram fontProgram) { FontKey = fontKey; FontProgram = fontProgram; }