۱۳۹۰/۰۵/۳۱

روش صحيح تعريف قلم در iTextSharp


روش متداول تعريف فونت در iTextSharp به صورت زير است:

public static iTextSharp.text.Font Tahoma()
{
     var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf";
     var baseFont = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
     return new Font(baseFont);
}

از آنجائيكه خصوصا براي متون فارسي نياز است تا به ازاي هر المان كوچكي اين فونت تنظيم شود و‌ در غير اينصورت متني نمايش داده نخواهد شد، با سربار بالايي مواجه خواهيم شد. بنابراين به نظر مي‌رسد كه بهتر باشد اين توليد اشياء فونت را كش كنيم. خوشبختانه iTextSharp سيستم كش كردن تعريف قلم‌هاي متفاوت را هم به صورت توكار دارا است:

public static iTextSharp.text.Font GetTahoma()
{
    var fontName = "Tahoma";
    if (!FontFactory.IsRegistered(fontName))
    {
         var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf";
         FontFactory.Register(fontPath);
    }
    return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}

كلاس FontFactory كار ثبت و بازيابي قلم‌هاي متفاوت را به عهده دارد. تنها كافي است يكبار قلمي در آن ثبت شود (FontFactory.Register)، بار ديگر اطلاعات قلم به سادگي از كش FontFactory خوانده خواهد شد (FontFactory.GetFont).