/// <summary>
    /// 
    /// </summary>
    internal class FontHelper
    {


        /// <summary>
        /// 自定义字体
        /// </summary>
        private PrivateFontCollection _pfc { get; set; }

        /// <summary>
        /// 返回字体帮助类的实例
        /// </summary>
        public FontHelper(byte[] fontResource)
        {
            if (fontResource == null)
            {
                throw new ArgumentNullException(nameof(fontResource));
            }
            _pfc = new PrivateFontCollection();
            uint c = 0;
            IntPtr intPtr = Marshal.AllocCoTaskMem(fontResource.Length);
            Marshal.Copy(fontResource, 0, intPtr, fontResource.Length);
            Win32naticemethod.AddFontMemResourceEx(intPtr, (uint)fontResource.Length, IntPtr.Zero, ref c);
            _pfc.AddMemoryFont(intPtr, fontResource.Length);
            Marshal.FreeCoTaskMem(intPtr);
            intPtr = IntPtr.Zero;
        }

        /// <summary>
        /// 获取字体
        /// </summary>
        /// <param name="fontIndex"></param>
        /// <param name="fontSize"></param>
        /// <param name="fontStyle"></param>
        /// <returns></returns>
        public Font GetFont(int fontIndex, float fontSize = 20, FontStyle fontStyle = FontStyle.Regular)
        {
            return new Font(_pfc.Families[fontIndex], fontSize, fontStyle);
        }

    }

    /// <summary>
    /// 非托管方法
    /// </summary>
    internal static class Win32naticemethod
    {
        /// <summary>
        /// 添加资源
        /// </summary>
        /// <param name="pbFont"></param>
        /// <param name="cbFont"></param>
        /// <param name="pdv"></param>
        /// <param name="pcFonts"></param>
        /// <returns></returns>
        [DllImport("gdi32.dll")]
        public static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts);
    }