윈도우즈 시스템에서 C# 프로그램에 글꼴 자동 설치
1.1 코드로 글꼴 설치
주의: 글꼴을 설치할 때 윈도우즈 관리자 권한이 필요합니다.
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int WriteProfileString(string lpszSection, string lpszKeyName, string lpszString);
[DllImport("gdi32")]
public static extern int AddFontResource(string lpFileName);
///
///
///
///
///
///
///
public static bool InstallFont(string fontFilePath)
{
try
{
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
//
if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator) == false)
{
throw new UnauthorizedAccessException(" , 。");
}
// Windows
string fontPath=Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR") , "fonts",Path.GetFileName(fontFilePath));
//
if (!File.Exists(fontPath))
{
// File.Copy(System.Windows.Forms.Application.StartupPath + "\\font\\" + FontFileName, FontPath); //font
//
File.Copy(fontFilePath, fontPath); //font
AddFontResource(fontPath);
//Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
//WIN7 , 。 。
//
WriteProfileString("fonts", Path.GetFileNameWithoutExtension(fontFilePath) + "(TrueType)", Path.GetFileName(fontFilePath));
}
}
catch (Exception ex)
{
throw new Exception(string.Format($"[{Path.GetFileNameWithoutExtension(fontFilePath)}] ! :{ex.Message}" ));
}
return true;
}
1.2 프로젝트 자원 파일에서 글꼴 로드
이 방법은 개발자가 프로젝트 자원 파일에 글꼴 파일을 자원 형식으로 넣어야 한다.글꼴 라이브러리에 설치할 필요가 없습니다. 다른 프로그램이 필요하면 직접 설치하거나 불러와야 합니다.다음 코드를 사용하여 프로그램에 필요한 글꼴을 만들 수 있습니다.
///
/// ,
///
///
///
public Font GetResoruceFont(byte[] bytes)
{
System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection();
IntPtr MeAdd = Marshal.AllocHGlobal(bytes.Length);
Marshal.Copy(bytes, 0, MeAdd, bytes.Length);
pfc.AddMemoryFont(MeAdd, bytes.Length);
return new Font(pfc.Families[0], 15, FontStyle.Regular);
}
1.3 글꼴 파일 로드, 글꼴 로드
글꼴의 경로를 설정한 다음 글꼴 파일을 불러와서 글꼴을 만듭니다.글꼴 라이브러리에 설치할 필요가 없습니다. 다른 프로그램이 필요하면 직접 설치하거나 불러와야 합니다.
///
///
///
///
///
public Font GetFontByFile(string filePath)
{
// , 。
System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection();
pfc.AddFontFile(filePath);//
Font font = new Font(pfc.Families[0], 24, FontStyle.Regular, GraphicsUnit.Point, 0);//font
return font;
}
2. 시스템에 어떤 글꼴이 포함되어 있는지 검사
어떤 글꼴이 설치되었는지 확인하는 방법은 여러 가지가 있습니다. 이 파일만 검사하는 방법에 대해 설명합니다.
///
///
///
///
///
public static bool CheckFont(string familyName)
{
string FontPath = Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR"), "fonts", Path.GetFileName(familyName));
//
return File.Exists(FontPath);
}
글꼴 스타일을 사용할 수 있는지 확인하려면 다음과 같이 하십시오.
///
///
///
///
///
///
public bool CheckFont(string familyName, FontStyle fontStyle= FontStyle.Regular )
{
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
FontFamily[] fontFamilies = installedFontCollection.Families;
foreach(var item in fontFamilies)
{
if (item.Name.Equals(familyName))
{
return item.IsStyleAvailable(fontStyle);
}
}
return false;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.