iTextSharp Türkçe Karakter Sorunu Çözümü

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda iTextSharp Türkçe karakterlerin görünmemesi sorununun çözümünü anlatacağım. Hadi başlayalım !
iTextSharp’ın ön tanımlı olarak kullandığı fontta Türkçe karakterler görünmüyor. Türkçe karakterlerden kastım ç, ğ, ö, ş, ü ve bu harflerin büyük halleri. Kullanılan fontta karakterler UTF8 olarak kodlanmadığından bu karakterler PDF dosyasında görünmüyor fakat bu sorunun da çözümü var elbette.
Sorunun çözümü için öncelikle yazı fontunu değiştirmemiz gerekiyor. Fontu değiştirmek içinde yeni bir font oluşturmamız gerekiyor. Font işlemlerini BaseFont adındaki sınıf üzerinden yapacağız ve tabiki kullanabilmek için yeni bir nesnesini türetmemiz gerekiyor fakat constructor metodu ile bu sınıftan yeni bir nesne türetilemiyor. Bunun yerine static tipte bulunan CreateFont() fonksiyonu kullanılarak nesne türetme işlemi yapılmakta. CreateFont() fonksiyonu ise 3 tane parametre alıyor. Bu parametrelerin birincisi fontun adı, ikinci kodlama yöntemi ve üçüncüsü de fontun gömülü olup olmayacağını ifade eden bool tipinde değer. Birinci parametrede gönderdiğimiz font adı Helvetica, kodlama yöntemi ise CP1254 olmak zorunda. CP1254 kodlama yöntemi Türkçe karakterleri de desteklediği için ve sadece Helvetica ile kullanabildiği için bu şekilde bir zorunluluk var. Örneğin BaseFont nesnesi oluşturalım;
BaseFont baseFont = BaseFont.CreateFont("Helvetica", "CP1254", true);
BaseFont nesnesi oluşturduk fakat bunu birde fonta bağlamamız gerekiyor. Fonta bağlamak içinde Font sınıfını kullanacağız ve bu sınıfın constructor metodunu kullanarak yeni bir nesnesini türetmemiz gerekiyor. Constructor metodun tam 10 farklı kullanımı var ve her bir kullanım ile fontun farklı ayarları yapılabiliyor. Örneğin tek parametreli kullanımında BaseFont nesnesini parametre olarak göndererek sadece fontu değiştirebiliriz. Yada iki parametreli kullanımıyla birinci parametrede fontu değiştirip ikinci parametrede ise yazı boyutunu değiştirebiliriz. Ayrıca fontun kalınlığını, rengini de farklı kullanımlarıyla değiştirebiliyoruz. Yazı boyutunun float, yazı kalınlığının int ve yazı renginin BaseColor tipinde olması gerekiyor. Örneğin 12 punto, kalın ve kırmızı renkli bir font oluşturmak istersek şöyle bir nesne türetme işlemi yapmamız gerekiyor;
Font font = new Font(baseFont, 12, Font.BOLD, BaseColor.RED);
Fontumuzu da oluşturduğumuza göre artık işlemler, artık PDF dosyasına veri yazarken bu fontu kullanabiliriz.
Örneğin dosyaya paragraf eklemek istediğimizde yeni bir Paragraph sınıfı nesnesi türetiyoruz ve birinci parametrede paragrafın içeriğini gönderiyoruz ya, ikinci parametre olarakta Font sınıfı nesnesi gönderirsek artık iTextSharp’ın ön tanımlı fontu yerine bizim belirlediğimiz font kullanılacaktır. Yani örneğin Türkiye metnini PDF dosyasına ekleyelim;
document.Add(new Paragraph("Türkiye", font));
Burada yazdığım document, Document sınıfı nesnesi. Aynı şekilde table isimli PdfPTable nesnesine hücre eklemek istediğimizde ise şöyle olacaktır;
table.AddCell(new Phrase("Türkiye", font));
Evet iTextSharp Türkçe karakter sorunu çözümü bu şekilde. Tüm C# yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.