C# JackLib系列之字体使用

字体的使用一般我们都是使用系统字体,这样比较方便,直接 Font font=new Font("微软雅黑",16f,FontStyle.Bold);

但是当我们用到一个系统没有的字体库时,这个方法就不好用了,因此我们可以采用动态加载字体文件的方式或者直接把字体打包到我们的程序集里当作资源来使用;

下面我们来看一下怎么用:

我封装了一个类,大家可以直接使用,如果有不好的地方,欢迎大家指正。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing.Text;
using System.Drawing;
using System.IO;
using System.Reflection;

namespace jackLib.fonthelper {
    /// <summary>
    /// 字体库帮助类
    /// </summary>
    public class FontHelper {
        /// <summary>
        /// 通过字体文件获取字体
        /// </summary>
        /// <param name="fontPath"></param>
        /// <param name="fontSize"></param>
        /// <returns></returns>
        public static Font GetFontFromFile(string fontPath, float fontSize,FontStyle fontStyle) {
            try {
                //校验
                if (!File.Exists(fontPath) || fontSize <= 0) {
                    return null;
                }
                //获取字体对象
                PrivateFontCollection fontCollection = new PrivateFontCollection();
                fontCollection.AddFontFile(fontPath);
                var font = new Font(fontCollection.Families[0], fontSize, fontStyle);
                return font;
            }
            catch (Exception ex) {
                throw ex;
            }
        }

        /// <summary>
        /// 通过资源流获取字体
        /// </summary>
        /// <param name="fontName"></param>
        /// <param name="fontSize"></param>
        /// <returns></returns>
        public static Font GetFontFromStream(string fontName, float fontSize, FontStyle fontStyle) {
            try {
                //获取程序集
                Assembly assembly = Assembly.GetExecutingAssembly();
                //获取字体文件流
                Stream stream = assembly.GetManifestResourceStream(fontName);

                //读取字体到字节数组
                byte[] fontData = new byte[stream.Length];
                stream.Read(fontData, 0, (int)stream.Length);
                stream.Close();

                //获取字体对象
                PrivateFontCollection pfc = new PrivateFontCollection();
                unsafe {

                    fixed (byte* pFontData = fontData) {
                        pfc.AddMemoryFont((System.IntPtr)pFontData, fontData.Length);
                    }
                }

                return new Font(pfc.Families[0], fontSize, fontStyle);
            }
            catch (Exception ex) {
                throw ex;
            }

        }
    }
}

使用方法如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace jackLib.fonthelper {
    /// <summary>
    /// 字体使用测试
    /// </summary>
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e) {
            try {
                //第1种用法
                var font1 = FontHelper.GetFontFromStream("jackLib.fonthelper.Font.SourceCodePro-It.ttf", 20, FontStyle.Italic);
                this.textBox1.Font = font1 ?? this.textBox1.Font;

                //第2种用法
                var font2 = FontHelper.GetFontFromFile(@"Font\SourceCodePro-It.ttf", 20, FontStyle.Regular);
                this.textBox1.Font = font2 ?? this.textBox1.Font;

            }
            catch (Exception ex) {
                throw ex;
            }
            finally {
                base.OnLoad(e);
            }
        }
    }
}
时间: 2024-10-20 14:31:42

C# JackLib系列之字体使用的相关文章

第五章 字体

1.使用引号: 如果一些字体的名字之间有空格或者#或者$之类的符号的话,应该用引号把字体包括起来. 2.粗体的实现: 通过100--900的数字来实现. 注意:让字体更粗:border或者 lighter ,是从父元素中继承的样式中来设置数字更大或者更小. 3.字体大小的实现: 和粗体一样,也有larger或者smaller 注意:字体大小是可以继承的,不过继承的是计算值而不是百分数. 4.使用系统字体: 如果希望一个WEB页面结合用户操作系统的设置,font的系统字体值会很方便.这些值用于取得

windows程序设计学习笔记-文本和字体

BOOL TextOut( In HDC hdc, In int nXStart, In int nYStart, In LPCTSTR lpString, In int cchString ); 在指定位置写字符串.使用当前选择的字体,背景颜色,字体颜色. nXStart:系统用来对齐字符串的参考点X坐标.逻辑坐标. nYStart 对参考点的解释取决于当前的文本对齐模式.可以用GetTextAlign取得此模式. 可以用SetTextAlign改变此模式. TA_BASELINE:参考点在基

jpgraph中文使用手册之文本和字体控制教程

摘要:在之前的php jpgraph安装配置教程中已介绍过jpgraph字体的安装与配置方法,jpgraph类库中字体和文本的使用是非常重要的,jpgraph既可以控 制文本的旋转.对齐方式.字体大小,也可以引入用户需要的自定义字体.通过jpgraph工具类SymChar可以查找相关的特殊字符(比如数学运算符) 以方便图表... 在之前的php jpgraph安装配置教程中已介绍过jpgraph字体的安装与配置方法,jpgraph类库中字体和文本的使用是非常重要的,jpgraph既可以控 制文本

《CSS权威指南》笔记0.5:字体

字体系列 特定字体:Times.Verdana.Helvetica.Arial 通用字体:Serif(字体成比例,有上下短线).Sans-serif(字体成比例,没有上下短线).Monospace(不成比例).Cursive(模仿手写体).Fantasy(无明显特征) 注意:一般使用font-family,会指定多种字体,建议将通用字体作为候选字体存在,如:h1{font-family: Arial, sans-serif}:当字体中包含空格.#.$之类的符号时,需要使用单引号声明字体. 字体加

iOS中如何添加自定义的字体

苹果对于开发,确实在细节方面下了很大的功夫,不过无论一个平台下多大的功夫,仍然会有些需求是无法涵盖的,比如字体吧.我们的应用为了能更加个性化,会需要不同的字体,有时候有些字体是非常特殊的,甚至是购买的,那么这些字体如何加到项目中去呢? 字体有相应的字体文件,一般是以ttf或者otf为后缀,我们可以去一些第三方网站去下载(也有人专门做了字体出售),Google Fonts是个比较好的网站,可以去找找看.我们就用Open Sans这个字体来做例子吧.首先当然是去下载字体文件,下载后发现是10个ttf

cmd命令行窗口使用其它字体

Cmd命令行模式修改字体: 1>在dos窗口右键[属性]字体.颜色可以设置字体大小与颜色: 2>默认字体只支持点阵字体和新宋体,点阵字体最大只能10*20:新宋体可以设置字号: 使用其他字体:(注意:通过修改注册表实现,请谨慎使用,运行regedit打开注册表) 1>打开项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont 可以发现里面有ab(字符串值),默认是有一个0

CSS字体属性

CSS字体: 属性 描述 font 简写属性,把所有针对字体的属性设置在一个声明中. font-family 设置字体系列. font-size 设置字体的尺寸. font-size-adjust 当首选字体不可用时,对替换字体进行智能缩放. (CSS2.1 已删除该属性.) font-stretch 对字体进行水平拉伸.(CSS2.1 已删除该属性.) font-style 设置字体风格. font-variant 以小型大写字体或者正常字体显示文本. font-weight 设置字体的粗细.

html5中设置字体

@font-face指令在CSS2中引入,但是在HTMl5中实现的. Web开放字体(WOFF)也是被所有浏览器支持的字体 大多数的字体是TrueType(TTF)和OpenType(PTF)而IE实现的是Embedded OpenType(EOT),还有一种可伸缩矢量图形(SVG)这种类型只被IOS系统支持   改变字体 FontSquirrel网站提供了我们所用字体的各种格式,已经能很好的满足我们的需求 1.定义字体 @font-face{ /*定义你要用的字体家族*/ font-famil

界面设计过程中的常用字体规范

好长时间没发帖,净想过年了,过年哈,倒腾工作总结和年货是大事. 这几天有人问我说:“最近看了好多教程,都老高大上了,但是老弟我做不到呀,想学点直接能拿来用的,这个要求过分吗……” 这个,好吧,那就直接说说能用的知识:字体字号. 也许你会说:字体字号?也太Low了吧,这个谁不知道重要呀. 对于这个问题,我想说:会和熟练,是两回事.一个App,不同部分的字体字号你能准确地说出来吗? 很多刚做APP界面的设计师,经常会因为字号,字体颜色,间距而困扰. 拿到设计需求后,开始进行设计,不知道从何去调整界面