ListEmbedFonts.cs
//
// This code is part of GrapeCity Documents for Word samples.
// Copyright (c) GrapeCity, Inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using GrapeCity.Documents.Word;

namespace GcWordWeb.Samples
{
    // This sample shows how to list fonts embedded in a DOCX.
    public class ListEmbedFonts
    {
        public GcWordDocument CreateDocx()
        {
            var doc = new GcWordDocument();

            // Load a DOCX that contains embedded font:            
            doc.Load(Path.Combine("Resources", "WordDocs", "EmbedFonts.docx"));

            var embeddedFont = doc.Fonts.FirstOrDefault(fi_ => fi_.Embedded.Count > 1)?.Embedded[0];

            doc.Body.Paragraphs.Add("Embedded fonts found in this document:", doc.Styles[BuiltInStyleId.Heading1]);
            var myListTemplate = doc.ListTemplates.Add(BuiltInListTemplateId.BulletDefault, "myListTemplate");

            // Enumerate all embedded fonts:
            foreach (var fi in doc.Fonts)
            {
                foreach (var ef in fi.Embedded)
                {
                    var p = doc.Body.Paragraphs.Add(doc.Styles[BuiltInStyleId.ListParagraph]);
                    p.ListFormat.Template = myListTemplate;
                    var run = p.GetRange().Runs.Add($"Found embedded font of type {ef.Type} in font \"{fi.Name}\".");
                    run.Font.Name = fi.Name;
                    if (ef.Type == EmbeddedFontType.Bold)
                        run.Font.Bold = true;
                    else if (ef.Type == EmbeddedFontType.Italic)
                        run.Font.Italic = true;
                    else if (ef.Type == EmbeddedFontType.BoldItalic)
                        run.Font.Bold = run.Font.Italic = true;
                }
            }

            // Done:
            return doc;
        }
    }
}