You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件时出现“未将对象引用设置到对象实例”异常

原因

  1. HTMLWorker不支持部分HTML5标签、复杂CSS选择器或特殊属性,解析时触发空引用;
  2. 读取HTML文件时编码不匹配,导致内容读取不完整;
  3. HTML文件存在格式错误(如未闭合标签)。

解决方法

  1. 替换为XMLWorker:同问题1的方案,XMLWorker对HTML和CSS的兼容性更强,能避免大部分解析异常;
  2. 检查并修复HTML格式:确保HTML标签闭合、无语法错误,移除XMLWorker不支持的特殊标签或属性;
  3. 正确读取文件编码:读取HTML文件时指定对应编码,示例代码:
// 读取HTML文件,指定编码(根据实际文件编码调整)
string htmlContent = File.ReadAllText("your-html-file-path.html", Encoding.GetEncoding("iso-8859-1"));
// 后续使用XMLWorker解析htmlContent
  1. 添加异常捕获:在解析代码块中加入try-catch,定位具体出错的HTML节点:
try
{
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, sr);
}
catch (Exception ex)
{
    // 记录异常信息,便于定位问题
    // 例如:Log.Error("解析HTML出错", ex);
}

内容的提问来源于stack exchange,提问作者wiki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:20:31