如何使用iTextSharp以pdf格式显示中文字体?

时间:2011-12-23 09:30:19

标签: c# asp.net html pdf itextsharp

在以下代码中,中文字体(包含html文本)不会以pdf格式显示。  我也尝试这种方法中的样式和字体。请帮忙解决这个问题。  在此先感谢所有人。

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;
    }

1 个答案:

答案 0 :(得分:6)

您设置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”替换为您的字体的名称/值。或者您也可以使用上面的字体。