如何使用自定义的.tff字体文件我有我当前的windows.forms应用程序? 我读了一些我将它用作嵌入式资源的地方,但是如何将它设置为System.Drawing.Font类型?在C#窗口中使用的自定义.ttf字体。表单
回答
这篇文章:How to embed a true type font显示如何做你在.NET中问。
如何嵌入True Type字体
某些应用程序,用于美学或所需的视觉 风格的原因,将嵌入某些罕见的字体,这样他们总是在需要的时候有 无论该字体实际上安装在目标系统的 上。
这个秘密是双重的。首先,需要将字体添加到解决方案中,并将其标记为 嵌入式资源,以将资源置于 资源中。其次,在运行时,字体通过 流加载并存储在PrivateFontCollection对象中供以后使用。
本例中使用的字体是不可能被你 系统上安装。 Alpha Dance是一款免费的True Type字体,可从 免费字体收藏中获得。通过将该字体添加到解决方案中并在属性中选择“嵌入资源”构建操作,该字体被嵌入到应用程序 中。
一旦该文件已被成功列入资源需要 提供在其中存储它PrivateFontCollection对象,并通过它装入收集 方法。 这是可能的形式加载覆盖或事件处理程序的最佳位置。下面的清单 显示过程。请注意如何使用AddMemoryFont方法 。它需要一个指向保存为字节数组的字体为 的存储器。在C#中,我们可以使用不安全关键字 convienience,但VB必须使用非托管内存处理的元帅类 的功能。后一种选择当然是开放给C# 程序员谁不喜欢不安全的关键字。 PrivateFontCollection pfc = new PrivateFontCollection();
private void Form1_Load(object sender, System.EventArgs e)
{
Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("embedfont.Alphd___.ttf");
byte[] fontdata = new byte[fontStream.Length];
fontStream.Read(fontdata,0,(int)fontStream.Length);
fontStream.Close();
unsafe
{
fixed(byte * pFontData = fontdata)
{
pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length);
}
}
}
字体可能只有某些风格哪些可用和 不幸的是,选择不存在将抛出一个异常 的字体样式。为了克服这个问题,可以询问字体以查看哪些样式可用,并且只有那些由字体提供的样式才可以使用。 以下列表演示了如何使用Alpha Dance字体 检查可用字体样式并显示所有存在的字体样式。 请注意,下划线和删除线样式是由字体呈现引擎构造的伪样式 ,实际上并没有以字形形式提供 。
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
bool bold=false;
bool regular=false;
bool italic=false;
e.Graphics.PageUnit=GraphicsUnit.Point;
SolidBrush b = new SolidBrush(Color.Black);
float y=5;
System.Drawing.Font fn;
foreach(FontFamily ff in pfc.Families)
{
if(ff.IsStyleAvailable(FontStyle.Regular))
{
regular=true;
fn=new Font(ff,18,FontStyle.Regular);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Bold))
{
bold=true;
fn=new Font(ff,18,FontStyle.Bold);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Italic))
{
italic=true;
fn=new Font(ff,18,FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(bold && italic)
{
fn=new Font(ff,18,FontStyle.Bold | FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
fn=new Font(ff,18,FontStyle.Underline);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
fn=new Font(ff,18,FontStyle.Strikeout);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
}
b.Dispose();
}
图2示出运行中的应用程序。
见Form1_Paint事件处理程序,它专门介绍如何设置System.Drawing.Font类型。它基于使用System.Drawing.Text.PrivateFontCollection类。
希望这会有所帮助。
请编辑您的答案。链接已经死亡。 – Odys 2015-05-19 10:47:17
通过p使用AddFontResourceEx API函数/调用,传递FR_PRIVATE防止安装全局字体。然后,您应该可以照常将字体名称传递给Font构造函数。
编辑:如果您使用PrivateFontCollection和从外部文件加载的字体,你甚至都不需要这个。如果您从嵌入式资源加载字体,请使用Ash的解决方案。
有没有一个例子在哪里?我可以真正理解MSDN链接。谢谢你的帮助。 – kthakore 2009-02-13 03:43:57
您可能会发现有用的MSDN文章How to: Create a Private Font Collection。
- 1. 设置自定义TTF字体在MPDF
- 2. 在PostScript文件中使用自定义TTF字体
- 3. 在CSS中使用自定义(ttf)字体
- 4. CSS使用文件夹中的自定义字体(ttf)
- 5. 使用自定义TTF字体进行DrawString图像渲染
- 6. 自定义Windows窗体(表)
- 7. Symbian C++ - 在您的应用程序中使用TTF字体?
- 8. 在PDFsharp中使用私有TTF字体
- 9. 在Cocos2d中使用自定义字体
- 10. 如何加载大小超过60kb的自定义字体(ttf)
- 11. 404对于Azure上的自定义ttf字体(.NET MVC 5)
- 12. Qt设计师与Python的自定义ttf字体
- 13. 使用Windows(TTF)字体?
- 14. 使用自定义字体
- 15. 如何在自定义BaseAdapter中使用自定义字体
- 16. EasyAdminBundle实体表单字段自定义
- 17. xcode自定义ttf字体不能正常工作
- 18. 在iOS中的自定义窗体
- 19. 使用iframe创建自定义窗口
- 20. 自定义表单如何在django中向窗口小部件输出字段
- 21. 目标C,圆角自定义窗口?
- 22. Qt的自定义窗口
- 23. 的Cocos2D-JS:自定义TTF字库不会在Android中
- 24. C#窗体 - 自定义按钮
- 25. 自定义控件属性 - C#,窗体
- 26. 的SharePoint自定义窗体
- 27. 如何显示自定义窗体窗口工作流自定义活动
- 28. C#创建窗口 - 定义父窗口
- 29. 在Android中使用自定义TTF会产生非常难看的文字
- 30. 如何在Xamarin.Android中使用自定义字体?字体问题
非常感谢您的帮助Thomas and Ash – kthakore 2009-02-13 04:15:08