/// <summary> /// Initializes a new instance of PDFTrueTypeFont from an XFont. /// </summary> public PDFTrueTypeFont(PDFDocument document, XFont font) : base(document) { Elements.SetName(Keys.Type, "/Font"); Elements.SetName(Keys.Subtype, "/TrueType"); // TrueType with WinAnsiEncoding only. OpenTypeDescriptor ttDescriptor = (OpenTypeDescriptor)FontDescriptorCache.GetOrCreateDescriptorFor(font); FontDescriptor = new PDFFontDescriptor(document, ttDescriptor); FontOptions = font.PDFOptions; Debug.Assert(FontOptions != null); //cmapInfo = new CMapInfo(null/*ttDescriptor*/); _cmapInfo = new CMapInfo(ttDescriptor); BaseFont = font.GlyphTypeface.GetBaseName(); if (FontOptions.FontEmbedding == PDFFontEmbedding.Always) { BaseFont = CreateEmbeddedFontSubsetName(BaseFont); } FontDescriptor.FontName = BaseFont; Debug.Assert(FontOptions.FontEncoding == PDFFontEncoding.WinAnsi); if (!IsSymbolFont) { Encoding = "/WinAnsiEncoding"; } Owner.IrefTable.Add(FontDescriptor); Elements[Keys.FontDescriptor] = FontDescriptor.Reference; FontEncoding = font.PDFOptions.FontEncoding; }
public PDFCIDFont(PDFDocument document, PDFFontDescriptor fontDescriptor, byte[] fontData) : base(document) { Elements.SetName(Keys.Type, "/Font"); Elements.SetName(Keys.Subtype, "/CIDFontType2"); PDFDictionary cid = new PDFDictionary(); cid.Elements.SetString("/Ordering", "Identity"); cid.Elements.SetString("/Registry", "Adobe"); cid.Elements.SetInteger("/Supplement", 0); Elements.SetValue(Keys.CIDSystemInfo, cid); FontDescriptor = fontDescriptor; // ReSharper disable once DoNotCallOverridableMethodsInConstructor Owner.IrefTable.Add(fontDescriptor); Elements[Keys.FontDescriptor] = fontDescriptor.Reference; FontEncoding = PDFFontEncoding.Unicode; }
public PDFType0Font(PDFDocument document, string idName, byte[] fontData, bool vertical) : base(document) { Elements.SetName(Keys.Type, "/Font"); Elements.SetName(Keys.Subtype, "/Type0"); Elements.SetName(Keys.Encoding, vertical ? "/Identity-V" : "/Identity-H"); OpenTypeDescriptor ttDescriptor = (OpenTypeDescriptor)FontDescriptorCache.GetOrCreateDescriptor(idName, fontData); FontDescriptor = new PDFFontDescriptor(document, ttDescriptor); FontOptions = new XPDFFontOptions(PDFFontEncoding.Unicode); Debug.Assert(FontOptions != null); _cmapInfo = new CMapInfo(ttDescriptor); DescendantFont = new PDFCIDFont(document, FontDescriptor, fontData) { CMapInfo = _cmapInfo }; // Create ToUnicode map _toUnicode = new PDFToUnicodeMap(document, _cmapInfo); document.Internals.AddObject(_toUnicode); Elements.Add(Keys.ToUnicode, _toUnicode); //BaseFont = ttDescriptor.FontName.Replace(" ", ""); BaseFont = ttDescriptor.FontName; // CID fonts are always embedded if (!BaseFont.Contains("+")) // HACK in PDFType0Font { BaseFont = CreateEmbeddedFontSubsetName(BaseFont); } FontDescriptor.FontName = BaseFont; DescendantFont.BaseFont = BaseFont; PDFArray descendantFonts = new PDFArray(document); Owner.IrefTable.Add(DescendantFont); descendantFonts.Elements.Add(DescendantFont.Reference); Elements[Keys.DescendantFonts] = descendantFonts; }
public PDFType0Font(PDFDocument document, XFont font, bool vertical) : base(document) { Elements.SetName(Keys.Type, "/Font"); Elements.SetName(Keys.Subtype, "/Type0"); Elements.SetName(Keys.Encoding, vertical ? "/Identity-V" : "/Identity-H"); OpenTypeDescriptor ttDescriptor = (OpenTypeDescriptor)FontDescriptorCache.GetOrCreateDescriptorFor(font); FontDescriptor = new PDFFontDescriptor(document, ttDescriptor); FontOptions = font.PDFOptions; Debug.Assert(FontOptions != null); _cmapInfo = new CMapInfo(ttDescriptor); DescendantFont = new PDFCIDFont(document, FontDescriptor, font) { CMapInfo = _cmapInfo }; // Create ToUnicode map _toUnicode = new PDFToUnicodeMap(document, _cmapInfo); document.Internals.AddObject(_toUnicode); Elements.Add(Keys.ToUnicode, _toUnicode); BaseFont = font.GlyphTypeface.GetBaseName(); // CID fonts are always embedded BaseFont = CreateEmbeddedFontSubsetName(BaseFont); FontDescriptor.FontName = BaseFont; DescendantFont.BaseFont = BaseFont; PDFArray descendantFonts = new PDFArray(document); Owner.IrefTable.Add(DescendantFont); descendantFonts.Elements.Add(DescendantFont.Reference); Elements[Keys.DescendantFonts] = descendantFonts; }