C# iTextSharp.HTMLWorker错误转换html加密UTF-8
我想道歉,我的英语不是很好。我希望你能帮助我。我从xslt trans中得到了这个字符串:C# iTextSharp.HTMLWorker错误转换html加密UTF-8,c#,asp.net,encryption,itextsharp,C#,Asp.net,Encryption,Itextsharp,我想道歉,我的英语不是很好。我希望你能帮助我。我从xslt trans中得到了这个字符串: "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<html>\r\n <head />\r\n <body style=\"font-family: Verdana, sans-serif;\">\r\n ĚŠČŘŽŘÝŽÝÁÁÍÉŮ ěščřžýáíéůú\r\n </body>\
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<html>\r\n <head />\r\n <body style=\"font-family: Verdana, sans-serif;\">\r\n ĚŠČŘŽŘÝŽÝÁÁÍÉŮ ěščřžýáíéůú\r\n </body>\r\n</html>"
我得到的是这样的:这是错误的。。。我的结果没有像Ě,Ě,Ř,Ů,…
这样的字符,这些是捷克语字符
我尝试像这样使用XMLParser:
private static byte[] CreatePdfUsingXslt(string htmlText, string serverPath)
{
var msInput = new MemoryStream(Encoding.UTF8.GetBytes(htmlText));
var msOutput = new MemoryStream();
msInput.Position = 0;
msOutput.Position = 0;
var doc = new Document(PageSize.A4, 30, 30, 30, 30);
PdfWriter pdfWriter = PdfWriter.GetInstance(doc, msOutput);
var htmlPipelineContext = new HtmlPipelineContext();
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
var cssPath = String.Format("{0}XsltTemplates\\print.css", serverPath);
cssResolver.AddCssFile(cssPath,true);
var pipeline = new CssResolverPipeline(cssResolver,
new HtmlPipeline(htmlPipelineContext, new PdfWriterPipeline(doc, pdfWriter)));
var xmlWorker = new XMLWorker(pipeline, true);
var xmlParser = new XMLParser(true, xmlWorker);
xmlParser.Parse(new StreamReader(msInput, Encoding.UTF8));
xmlParser.Flush();
doc.Close();
return msOutput.ToArray();
}
但是函数xmlParser.Parse(新的StreamReader(msInput,Encoding.UTF8))代码>抛出NullReferenceException
这对我来说更重要。有人知道我该如何修复它吗?它似乎在解释cp1252编码中的输入。我对iText不太了解,不知道如何覆盖它(或者即使这是错误的)。iText邮件列表可能是问这个问题的更好地方。虽然您不想调用msOutput.GetBuffer()
,但您需要.ToArray()
。HTMLWorker被弃用,取而代之的是XML Worker。我们不久前已经放弃了对HTMLWorker的支持。如果您切换到XML工作人员,并且遇到类似的问题,我们将修复它,但请将HTMLWork视为“死亡”。
private static byte[] CreatePdfUsingXslt(string htmlText, string serverPath)
{
var msInput = new MemoryStream(Encoding.UTF8.GetBytes(htmlText));
var msOutput = new MemoryStream();
msInput.Position = 0;
msOutput.Position = 0;
var doc = new Document(PageSize.A4, 30, 30, 30, 30);
PdfWriter pdfWriter = PdfWriter.GetInstance(doc, msOutput);
var htmlPipelineContext = new HtmlPipelineContext();
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);
var cssPath = String.Format("{0}XsltTemplates\\print.css", serverPath);
cssResolver.AddCssFile(cssPath,true);
var pipeline = new CssResolverPipeline(cssResolver,
new HtmlPipeline(htmlPipelineContext, new PdfWriterPipeline(doc, pdfWriter)));
var xmlWorker = new XMLWorker(pipeline, true);
var xmlParser = new XMLParser(true, xmlWorker);
xmlParser.Parse(new StreamReader(msInput, Encoding.UTF8));
xmlParser.Flush();
doc.Close();
return msOutput.ToArray();
}