ASP.NET 4.0使用iTextSharp转换HTML到PDF的问题求助
ASP.NET 4.0中iTextSharp转HTML到PDF的问题解决
问题1:PDF中直接显示样式代码
原因
你使用的HTMLWorker是iTextSharp中已被弃用的旧组件,对<style>标签的解析支持不完善,会把样式代码直接作为文本输出到PDF中。
解决方法
替换为XMLWorker组件(iTextSharp官方推荐的HTML解析工具,对CSS支持更好),以下是修改后的代码:
string lstrhtml = "<html xmlns=\"http://www.w3.org/1999/xhtml\" >" + "<head><title>Custom Mail</title><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>" + "<style type=\"text/css\">DIV.main { width: 775px; }" + "BODY { font-size: 11px; margin: 0px; font-family: Arial, Helvetica, sans-serif; background-color: #ffffff }" + "td { font-size: 11px; font-family: Arial, Helvetica, sans-serif }" + "P { font-size: 11px; font-family: Arial, Helvetica, sans-serif }" + "A:link { font-size: 11px; color: #0000ff; font-family: Arial, Helvetica, sans-serif }" + "A:visited { font-size: 11px; color: #0000ff; font-family: Arial, Helvetica, sans-serif }" + "</style>" + "</head>" + "<body><h1>detail goes here</h1></body>" + "</html>"; string filePath = lstrpdfpath + pstrPNR + ".pdf"; using (FileStream pdfStream = new FileStream(filePath, FileMode.Create)) { Document document = new Document(PageSize.A4, 30, 30, 30, 30); PdfWriter writer = PdfWriter.GetInstance(document, pdfStream); document.Open(); // 使用XMLWorker替代HTMLWorker using (StringReader sr = new StringReader(lstrhtml)) { XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, sr); } document.Close(); }
问题2:解析完整HTML文件时出现“未将对象引用设置到对象实例”异常
原因
HTMLWorker不支持部分HTML5标签、复杂CSS选择器或特殊属性,解析时触发空引用;- 读取HTML文件时编码不匹配,导致内容读取不完整;
- HTML文件存在格式错误(如未闭合标签)。
解决方法
- 替换为XMLWorker:同问题1的方案,XMLWorker对HTML和CSS的兼容性更强,能避免大部分解析异常;
- 检查并修复HTML格式:确保HTML标签闭合、无语法错误,移除XMLWorker不支持的特殊标签或属性;
- 正确读取文件编码:读取HTML文件时指定对应编码,示例代码:
// 读取HTML文件,指定编码(根据实际文件编码调整) string htmlContent = File.ReadAllText("your-html-file-path.html", Encoding.GetEncoding("iso-8859-1")); // 后续使用XMLWorker解析htmlContent
- 添加异常捕获:在解析代码块中加入try-catch,定位具体出错的HTML节点:
try { XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, sr); } catch (Exception ex) { // 记录异常信息,便于定位问题 // 例如:Log.Error("解析HTML出错", ex); }
内容的提问来源于stack exchange,提问作者wiki
相关产品推荐
相关产品推荐

