C# Html到PDf转换unicode字符呈现为空
我正在使用itext sharp将一些html转换为pdf。首先,我在string Writer中填写了一些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
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();
请帮我看看有什么问题
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();
问题可能是与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。