Ключом для правильного отображения альтернативных наборов символов (русский, китайский, японский и т. Д.) Является использование кодировки IDENTITY_H при создании BaseFont.
Dim bfR As iTextSharp.text.pdf.BaseFont
bfR = iTextSharp.text.pdf.BaseFont.CreateFont("MyFavoriteFont.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED)
IDENTITY_H обеспечивает поддержку юникода для выбранного шрифта, поэтому вы должны иметь возможность отображать практически любой символ. Я использовал его для русского, греческого и всех европейских букв.
РЕДАКТИРОВАТЬ - 2013-May-28
Это также работает для v5.0.2 iTextSharp.
РЕДАКТИРОВАТЬ - 2015-июнь-23
Ниже приведен полный пример кода (на C #):
private void CreatePdf()
{
string testText = "đĔĐěÇøç";
string tmpFile = @"C:\test.pdf";
string myFont = @"C:\<<valid path to the font you want>>\verdana.ttf";
iTextSharp.text.Rectangle pgeSize = new iTextSharp.text.Rectangle(595, 792);
iTextSharp.text.Document doc = new iTextSharp.text.Document(pgeSize, 10, 10, 10, 10);
iTextSharp.text.pdf.PdfWriter wrtr;
wrtr = iTextSharp.text.pdf.PdfWriter.GetInstance(doc,
new System.IO.FileStream(tmpFile, System.IO.FileMode.Create));
doc.Open();
doc.NewPage();
iTextSharp.text.pdf.BaseFont bfR;
bfR = iTextSharp.text.pdf.BaseFont.CreateFont(myFont,
iTextSharp.text.pdf.BaseFont.IDENTITY_H,
iTextSharp.text.pdf.BaseFont.EMBEDDED);
iTextSharp.text.BaseColor clrBlack =
new iTextSharp.text.BaseColor(0, 0, 0);
iTextSharp.text.Font fntHead =
new iTextSharp.text.Font(bfR, 12, iTextSharp.text.Font.NORMAL, clrBlack);
iTextSharp.text.Paragraph pgr =
new iTextSharp.text.Paragraph(testText, fntHead);
doc.Add(pgr);
doc.Close();
}
Это скриншот созданного файла PDF:
Важно помнить, что если выбранный вами шрифт не поддерживает символы, которые вы пытаетесь отправить в файл PDF, все, что вы делаете в iTextSharp, не изменит этого. Вердана прекрасно отображает символы всех европейских шрифтов, о которых я знаю.
Другие шрифты могут не отображать столько символов.