解决方法
正确显示替代字符集(俄语,中文,日语等)的关键是在创建BaseFont时使用IDENTITY_H编码.
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为您选择的字体提供unicode支持,所以您应该能够显示几乎任何字符.我使用了俄语,希腊语和所有不同的欧洲语言信件.
编辑 – 2013年5月28日
这也适用于iTextSharp的v5.0.2.
编辑 – 2015年6月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); 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.EMBEDDED); iTextSharp.text.BaseColor clrBlack = new iTextSharp.text.BaseColor(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中所做的任何事情都将会改变. Verdana很好地显示了我所知道的所有欧洲字体的字符.其他字体可能无法显示尽可能多的字符.