Khi giao dịch với các ký tự Unicode và iTextSharp có một vài điều bạn cần phải chăm sóc. Việc đầu tiên bạn đã làm và đó là nhận được một phông chữ hỗ trợ nhân vật của bạn. Điều thứ hai là bạn muốn thực sự đăng ký phông chữ với iTextSharp để nhận thức được nó.
//Path to our font
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(arialuniTff);
Bây giờ chúng tôi có phông chữ, chúng tôi cần tạo đối tượng StyleSheet
cho iTextSharp khi nào và cách sử dụng.
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
Phần không phải HTML mà bạn cũng cần làm là đặt tham số encoding
đặc biệt. Mã hóa này dành riêng cho iTextSharp và trong trường hợp của bạn, bạn muốn nó là Identity-H
. Nếu bạn không đặt cài đặt này thì nó sẽ mặc định là Cp1252
(WINANSI
).
//Set the default encoding to support Unicode characters
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
Cuối cùng, chúng tôi cần phải vượt qua stylesheet của chúng tôi để các ParseToList
phương pháp:
//Parse our HTML using the stylesheet created above
List<IElement> list = HTMLWorker.ParseToList(new StringReader(stringBuilder.ToString()), ST);
Đưa rằng tất cả lại với nhau, từ mở để đóng bạn phải:
doc.Open();
//Sample HTML
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(@"<p>This is a test: <strong>α,β</strong></p>");
//Path to our font
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(arialuniTff);
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
//Set the default encoding to support Unicode characters
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
//Parse our HTML using the stylesheet created above
List<IElement> list = HTMLWorker.ParseToList(new StringReader(stringBuilder.ToString()), ST);
//Loop through each element, don't bother wrapping in P tags
foreach (var element in list) {
doc.Add(element);
}
doc.Close();
EDIT
Trong nhận xét của bạn, bạn hiển thị HTML chỉ định phông chữ ghi đè. iTextSharp không nhện hệ thống cho phông chữ và trình phân tích cú pháp HTML của nó không sử dụng các kỹ thuật dự phòng phông chữ. Mọi phông chữ được chỉ định trong HTML/CSS phải được đăng ký theo cách thủ công.
string lucidaTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "l_10646.ttf");
iTextSharp.text.FontFactory.Register(lucidaTff);
Nếu nội dung html giống như