Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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;
        }