如何使用iTextSharp在pdf中显示中文字体

本文关键字:显示 中文字体 pdf 何使用 iTextSharp | 更新日期: 2023-09-27 18:18:44

在以下代码中,生成的pdf中不显示中文字体(包含html文本)。我也用这种方法尝试样式和字体。请帮忙解决这个问题。提前感谢大家。

public static bool GeneratedPDF(string strHTMLText, string filename, string action, string rpttype)
    {
        bool blnReturn = false;
        string fontpath = HttpContext.Current.Server.MapPath("~/files/fonts/");
        string filepath = HttpContext.Current.Server.MapPath("~/files/pdf/");
        BaseFont customfont = BaseFont.CreateFont(fontpath + "simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
        Font font = new Font(customfont, 12);

        //List<iTextSharp.text.IElement> htmlarraylist = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new System.IO.StringReader(strHTMLText), null);

        iTextSharp.text.Document document = new iTextSharp.text.Document();
        if (rpttype.Trim().ToUpper() == "REPORT")
            document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A2.Rotate());
        else if (rpttype.Trim().ToUpper() == "GRID")
            document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate());
        else
            document = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER);
        iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(filepath + "''" + filename, FileMode.Create));
        document.Open();
        iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
        styles.LoadTagStyle("body", "font-family", "verdana");
        styles.LoadStyle("body", "font-size", "5px");

        List<iTextSharp.text.IElement> htmlarraylist = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new System.IO.StringReader(strHTMLText), styles);
        for (int k = 0; k < htmlarraylist.Count; k++)
        {
            document.Add((IElement)htmlarraylist[k]);
        }
        iTextSharp.text.Paragraph p = new iTextSharp.text.Paragraph();
        p.InsertRange(0, htmlarraylist);
        p.Font = font; // font does not work 
        document.Add(p);
        document.Close();
        blnReturn = true;
        return blnReturn;
    }

如何使用iTextSharp在pdf中显示中文字体

StyleSheet设置错误。应该是这样的:

string html = @"
<html><body>    
<p>使用iText做PDF文件輸出</p>    
<p>使用iText做PDF文件輸出</p>    
<p>使用iText做PDF文件輸出</p>    
<p>使用iText做PDF文件輸出</p>    
<p>使用iText做PDF文件輸出</p> 
</body></html>   
";
FontFactory.Register("c:/windows/fonts/ARIALUNI.TTF"); 
StyleSheet style = new StyleSheet();
style.LoadTagStyle("body", "face", "Arial Unicode MS");
style.LoadTagStyle("body", "encoding", BaseFont.IDENTITY_H);
using (Document document = new Document()) {
  PdfWriter writer = PdfWriter.GetInstance(
    document, Response.OutputStream
  );
  document.Open();
  foreach(IElement element in HTMLWorker.ParseToList(
      new StringReader(html.ToString()), style))
  {
    document.Add(element);
  }
}

您需要将上面LoadTagStyle()第三个参数更改为您正在使用的特定字体的正确名称。换句话说,将上面的"Arial Unicode MS"替换为您的字体的名称/值。或者你也可以使用上面的字体