در کتابخانهی iTextSharp به جهت سازگاری با کتابخانهی اصلی، رنگها را بر اساس کلاسی به نام BaseColor تعریف کردهاند؛ که ایکاش به جای اینکار، همه را با کلاس Color فضای نام استاندارد System.Drawing جایگزین میکردند. همین مشکل با فونت هم هست. یک کلاس فونت در فضای نام iTextSharp.text وجود دارد به علاوه کلاس فونت تعریف شده در فضای نام استاندارد System.Drawing دات نت؛ که خیلی سریع میتواند به خطای کامپایل زیر ختم شود:
'Font' is an ambiguous reference between 'iTextSharp.text.Font' and 'System.Drawing.Font'
و در نهایت مجبور خواهیم شد که به صورت صریح علام کنیم، iTextSharp.text.Font منظور ما است و نه آن یکی.
در کل اگر با کلاس Color فضای نام استاندارد System.Drawing بیشتر راحت هستید به صورت زیر هم میتوان رنگهای متداول را مورد استفاده قرار داد:
تعریف رنگها بر اساس نام آنها:
var color = new BaseColor(Color.LightGray);
تعریف رنگها بر اساس مقادیر Hex متداول در المانهای HTML :
var color = new BaseColor(ColorTranslator.FromHtml("#1C5E55"));
این نکتهای است که شاید خیلیها از وجود آن بیاطلاع باشند. به صورت پیش فرض در کلاس استاندارد ColorTranslator، امکان دریافت رنگهای بکاررفته در المانهای HTML به کمک متد ColorTranslator.FromHtml مهیا است.
البته اگر زمانی خواستید خودتان این متد را پیاده سازی کنید، نکتهی آن به صورت زیر است:
string htmlColor = "#1C5E55";
int x = Convert.ToInt32(htmlColor.Replace("#", "0x"), 16);
byte red = (byte)((x & 0xff0000) >> 16);
byte green = (byte)((x & 0xff00) >> 8);
byte blue = (byte)(x & 0xff);
سپس کلاسهای Color و همچنین BaseColor امکان پذیرش این اجزای حاصل را دارند (به کمک متد Color.FromRgb و یا سازندهی BaseColor).
علت ذکر ColorTranslator.FromHtml به این بر میگردد که ترکیبات رنگ جالبی را میتوان از جداول HTML ایی موجود در سایتهای مختلف ایده گرفت و یا حتی از قالبهای پیش فرض GridView در ASP.NET مثلا.
اکنون برای ساخت جدولی مانند شکل فوق، به ازای هر سلولی که مشاهده میکنید باید یکبار BorderColor و BackgroundColor تنظیم شوند. رنگ متن هم از رنگ فونت دریافت میشود:
var pdfCell = new PdfPCell(new Phrase(Text, Font))
{
RunDirection = ...,
BorderColor = ...,
BackgroundColor = ...
};