본문 바로가기

C#

운영체제에 등록되지 않은 폰트 사용하기

응용 프로그램을 작성하다 보면 운영체제의 기본폰트로 등록되지 않은 폰트를 사용해야 할 경우가 있습니다. 이 경우 보통은 설치프로그램에서 폰트를 운영체제에 등록하여 사용하죠.
하지만, 시스템상에 폰트를 많이 설치하면 그만큼 시스템이 평소에 로드하고 있어야 하는 폰트가 많아 지므로 시스템이 느려지게 될 것이고, 자주 사용하지 않는 폰트파일이라면 굿이 등록시켜 사용할 필요가 없습니다.

그렇다면, 폰트파일을 운영체제에 등록하지 않고, 필요 할때만 잠시 로드하여 사용하면 좋겠죠?
이 부분을 지원을 지원하기 위해서 .NET Framework 에서는  System.Drawing.Text.PrivateFontCollection 클래스를 제공하고 있습니다.

PrivateFontCollection 클래스는 운영체제에 등록된 폰트가 아닌 같은 이름의 개인 버전 폰트를 사용할 수 있도록 해주고, 운영체제에 등록되지 않은 글꼴을 임시로 설치해서 사용할 수 있도록 해줍니다.

다음은 운영체제에 등록되지 않은 3of9_new.ttf 라는 바코드 폰트를 이용해서 Label에 바코드를 출력하는 예제입니다.

 

솔루션내에 3of9_new.ttf 가 포함되어 있으며 출력 디렉토리로 복사 속성이 항상 복사로 설정되어 있습니다.
코드를 보면

   1: using System.Data;
   2: using System.Drawing;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Windows.Forms;
   6:  
   7: namespace UsePrivateFont
   8: {
   9:     public partial class Form1 : Form
  10:     {
  11:         public Form1()
  12:         {
  13:             InitializeComponent();
  14:         }
  15:  
  16:         private void Form1_Load(object sender, EventArgs e)
  17:         {
  18:             System.Drawing.Text.PrivateFontCollection privateFonts = 
new System.Drawing.Text.PrivateFontCollection();
  19:             privateFonts.AddFontFile("3of9_new.ttf");
  20:             Font font = new Font(privateFonts.Families[0], 24f);
  21:             label1.Text = "*12315161321*";
  22:             label1.Font = font;
  23:         }
  24:     }
  25: }

코드는 간단합니다.
PrivateFontCollection 클래스의 객체를 생성하고 사용하고자 하는 폰트파일의 경로를 추가하는 것 만으로 사용준비가 완료됩니다.
그리고, 사용할때는  PrivateFontCollection 클래스의 Families 속성을 이용하여 추가한 폰트를 가져옵니다.

실행결과 입니다. 운영체제에 설치되지 않은 바코드 폰트를 이용하여 Label로의 출력이 완료되었습니다.

마지막으로 MSDN에 보면 운영체제에 설치된 컬렉션을 보려면 System.Drawing.Text.InstalledFontCollection클래스를 사용한다고 되어 있습니다.
이 두가지 클래스를 이용하면 설치된 폰트를 확인하고, 내가 원하는 폰트파일을 임시로 등록하여, 각 폰트별로 내가 원하는 텍스트에 대한 출력을 미리보기가 가능할 뿐만 아니라 포토샵과 다른 프로그램에서 프로그램이 실행 중일 동안만 사용이 가능하도록 할 수 도 있는 아래와 같은 프로그램을 만들 수 있을 듯합니다. ^^;



폰트다운로드: