C# Html到PDf转换unicode字符呈现为空

C# Html到PDf转换unicode字符呈现为空,c#,asp.net,itextsharp,C#,Asp.net,Itextsharp,我正在使用itext sharp将一些html转换为pdf。首先,我在string Writer中填写了一些html字符串,然后使用下面提到的代码将字节数组转换为pdf 问题是unicode字符[特定阿拉伯语]呈现为空 我的代码是 var sw = new StringWriter(); sw = GetHtmlContent();// here i fetch html byte[] data; u

我正在使用itext sharp将一些html转换为pdf。首先,我在string Writer中填写了一些html字符串,然后使用下面提到的代码将字节数组转换为pdf

问题是unicode字符[特定阿拉伯语]呈现为空

我的代码是

var sw = new StringWriter();
                sw = GetHtmlContent();// here i fetch html
                byte[] data;
                using (var sr = new StringReader(sw.ToString()))
                {                   
                    using (var ms = new MemoryStream())
                    {
                        using (var pdfDoc = new Document())
                        {
                            //Bind a parser to our PDF document
                            using (var htmlparser = new HTMLWorker(pdfDoc))
                            {
                                //Bind the writer to our document and our final stream
                                using (var w = PdfWriter.GetInstance(pdfDoc, ms))
                                {
                                    pdfDoc.Open();
                                    //Parse the HTML directly into the document
                                    htmlparser.Parse(sr);
                                    pdfDoc.Close();
                                    //Grab the bytes from the stream before closing it
                                    data = ms.ToArray();
                                }
                            }
                        }
                    }
                }
                Response.Buffer = false;
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.ContentType = "application/pdf";
                Response.AddHeader("Content-Disposition", "attachment; filename=Test.pdf");
                Response.BinaryWrite(data);
                Response.End(); 
请帮我看看有什么问题

  • 创建一个HTMLWorker
  • 注册unicode字体并分配它
  • 创建样式表并将编码设置为Identity-H
  • 将样式表分配给html解析器
  • 检查下面的代码

        TextReader reader = new StringReader(html);
        Document document = new Document(PageSize.A4, 30, 30, 30, 30);
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(FileName, FileMode.Create));
        HTMLWorker worker = new HTMLWorker(document);
        document.Open();
        FontFactory.Register("C:\\Windows\\Fonts\\ARIALUNI.TTF", "arial unicode ms");
        iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
        ST.LoadTagStyle("body", "encoding", "Identity-H");
        worker.Style = ST;
        worker.StartDocument();
    
  • 查看下面的链接以了解更多信息……

    使用此方法从HTML转换为PDF时,也会显示印地语、土耳其语和特殊字符。检查下面的演示图像


    问题可能是与sw=GetHtmlContent()相关的编码要测试@Inferre On的评论,请暂时跳过您的
    GetHtmlContent()
    ,然后尝试使用内联HTML作为。如果这样做有效,那么您的问题在于
    GetHtmlContent()
    。如果这不起作用,那可能是字体问题。您是否指定了能够处理这些字符的字体?默认情况下,iText将使用Helvetica,它没有任何阿拉伯字形。如果某些文本有效,但其他文本无效,则可能存在字体问题。iTextSharp不使用系统字体,除非您告诉它。首选方法是通过
    iTextSharp.text.FontFactory.register()
    注册单个字体。如果您有多种字体,可以使用
    iTextSharp.text.FontFactory.RegisterDirectory()
    。如果您只想扫描整个系统字体文件夹(这可能非常慢),可以使用
    iTextSharp.text.FontFactory.RegisterDirectories()
    。然后看看这个,了解注册后如何使用字体。正如我之前所评论的,我知道这个字体注册的事情,但是他们提到的用于注册以解决这个问题的字体[ARIALUNI.TTF]不能保证在系统上存在。这就是为什么我需要一个替代品。我已经实现了上述解决方案,为了避免字体问题,我已将字体复制到本地目录中。但这似乎不是一个好的解决方案,这就是为什么我在寻找替代方案。可能有语言障碍的问题,但你的评论是相互矛盾的。“我们保证字体可用”,然后“不保证存在”。请更新上面的代码,说明如何注册字体。另外,请发布一个非常小的HTML示例(一个小段落就可以了),展示你是如何使用这些字体的。请记住,除非您的HTML实际上另有说明,或者除非您有更改内容的C代码,否则iTextSharp将始终使用Helvetica。您不能更改iTextSharp的“默认字体”。除非HTMLWorker已过时,您应该改用XMLWorker。