【问题标题】:XMLWorker Exception : Object reference not set to an instance of an objectXMLWorker 异常:对象引用未设置为对象的实例
【发布时间】:2025-12-16 18:20:03
【问题描述】:

我想将 html 导出为 pdf

 var document = new Document();
 PdfWriter pdfWriter = PdfWriter.GetInstance(document, 
                                   new FileStream("/my.pdf", FileMode.Create)); 
  pdfWriter.SetFullCompression();
  pdfWriter.StrictImageSequence = true;
  pdfWriter.SetLinearPageMode();

 var sr = new StringReader(htmlcode);
document.Open();

var k = XMLWorkerHelper.GetInstance();
k.ParseXHtml(pdfWriter, document, sr);
//here it gave me an exception: Object reference not set to an instance of 
                                                                  an object


  sr.Close();
   document.Close();

Response.ContentType = "Application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename="my.pdf");
Response.TransmitFile(@"c:\test\my.pdf");
Response.Flush();
Response.End();
Response.Close();

所有例外:

 System.NullReferenceException: Object reference not set to an 
instance of an object.
       at iTextSharp.tool.xml.pipeline.html.HtmlPipeline.Close
                          (IWorkerContext context, Tag t, ProcessObject po)
       at iTextSharp.tool.xml.XMLWorker.EndElement(String tag, String ns)
       at iTextSharp.tool.xml.parser.XMLParser.EndElement()
    at iTextSharp.tool.xml.parser.state.ClosingTagState.Process(Char character)
       at iTextSharp.tool.xml.parser.XMLParser.ParseWithReader(TextReader reader)
       at iTextSharp.tool.xml.XMLWorkerHelper.ParseXHtml(PdfWriter writer,
                                                    Document doc, TextReader inp)

【问题讨论】:

    标签: c# asp.net exception html-parsing export-to-pdf


    【解决方案1】:

    这一行出错

    var k = XMLWorkerHelper.GetInstance();
    k.ParseXHtml(pdfWriter, document, sr);
    

    //这里它给了我一个例外:对象引用未设置为一个实例 一个对象

    由于任何一个输入参数的值都指向 NULL 我们可以在通过之前检查它(即将通过的变量)是 null 还是值。

    以下代码足以获取 HTML 内容并将其写入 PDF 文件

    Document pdfDoc = new Document(PageSize.A4, 10, 10, 10, 10);  
    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(@"D:\Syed\New PDF\PDF.pdf", FileMode.Create));// Output PDF File Path
    Response.Write("File Created Successfully");
    pdfDoc.Open();
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, new StreamReader(@"D:\Syed\test.html"));//This is input HTML file path
    pdfDoc.Close();
    

    它会从 HTML 文件中读取并将它们写入创建的 PDF 文件中

    【讨论】:

      最近更新 更多