在将html表数据转换为PDF时,ITextsharp不显示ARABIC数据

时间:2014-07-25 20:32:33

标签: c# html asp.net itextsharp itext

我正在制作一份报告。以下是一个代码和示例。我正在使用html表格进行报告。当我运行代码时,pdf已成功生成但阿拉伯语未显示。您可以指导我如何在其中嵌入阿拉伯语。你可以修改下面显示阿拉伯数据的代码。

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
tblid1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 80f, 80f, -2f, 35f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();

<table id="tblid1" runat="server">

<tr>

   <td>سلطانالخارج</td>

<td>مسندم</td>

</tr>

</table>

2 个答案:

答案 0 :(得分:1)

您需要在支持阿拉伯字形的pdf中嵌入字体。

string fontpath = Environment.GetEnvironmentVariable( "SystemRoot" ) + "\\fonts\\arabtype.ttf";
BaseFont basefont = BaseFont.CreateFont( fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED );
Font arabicFont = new Font( basefont, 10f, Font.NORMAL );

在帖子中找到答案:Itextsharp and arabic character?

编辑:根据我可以找到的示例以及您尝试完成的内容,我会这样做:

using(WebClient client = new WebClient()) {
   string htmlString = client.DownloadString(url);
}

FontFactory.Register("c:/windows/fonts/arabtype.TTF"); 
StyleSheet style = new StyleSheet();
style.LoadTagStyle("body", "face", "%NAME OF ARABIC FONT%");
style.LoadTagStyle("body", "encoding", BaseFont.IDENTITY_H);
using (Document document = new Document(PageSize.A4, 80f, 80f, -2f, 35f)) {
  PdfWriter writer = PdfWriter.GetInstance(
    document, Response.OutputStream
  );
  document.Open();
  foreach(IElement element in HTMLWorker.ParseToList(
      new StringReader(htmlString), style))
  {
    document.Add(element);
  }
}

请注意,您需要确保注册包含阿拉伯字符编码的正确TTF文件,并且您需要将%NAME OF ARABIC FONT%替换为您正在使用的字体名称,并用实际的HTML替换包含RAW HTML%的%VARIABLE。

答案 1 :(得分:0)

var arialFontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
            FontFactory.Register(arialFontPath);
            BaseFont bf = BaseFont.CreateFont(arialFontPath, BaseFont.IDENTITY_H, true);
            iTextSharp.text.Font FontAr = new iTextSharp.text.Font(bf);
            iTextSharp.text.FontFactory.RegisterDirectory(arialFontPath);

StyleSheet styles = new StyleSheet();
            styles.LoadTagStyle(HtmlTags.DIV, HtmlTags.FONTSIZE, "16");
            styles.LoadTagStyle(HtmlTags.DIV, HtmlTags.COLOR, "navy");
            styles.LoadTagStyle(HtmlTags.DIV, HtmlTags.FONTWEIGHT, "bold");
            styles.LoadTagStyle(HtmlTags.P, HtmlTags.INDENT, "30px");
            styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
            styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);

 List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(htmlText), styles);
                for (int k = 0; k < htmlarraylist.Count; k++)
                {
                    pdfDocument.Add((IElement)htmlarraylist[k]);
                }

这段代码对我有用,阿拉伯语在这方面很完美, 只需将您的html文本传递给我的 htmltext 变量..

希望它能正常工作。