Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iTextSharp中HTMLWorker上的堆栈空异常_C#_Asp.net_Itext - Fatal编程技术网

C# iTextSharp中HTMLWorker上的堆栈空异常

C# iTextSharp中HTMLWorker上的堆栈空异常,c#,asp.net,itext,C#,Asp.net,Itext,我正在使用此代码以pdf格式发送数据表。但是在使用html解析器转换数据时,它将异常显示为堆栈空。不管我以前做过什么,而且成功了,我只是不能指出我现在错过了什么。请帮忙 using (StringWriter sw = new StringWriter()) { using (HtmlTextWriter hw = new HtmlTextWriter(sw)) { StringBuilder sb = new StringBuil

我正在使用此代码以pdf格式发送数据表。但是在使用html解析器转换数据时,它将异常显示为堆栈空。不管我以前做过什么,而且成功了,我只是不能指出我现在错过了什么。请帮忙

using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter hw = new HtmlTextWriter(sw))
        {
            StringBuilder sb = new StringBuilder();
            //sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");


            foreach (DataColumn column in dt.Columns)
            {
                //sb.Append("<th style = 'background-color: #D20B0C;color:#ffffff'>");
                sb.Append(column.ColumnName);
                sb.Append("</th>");
            }
            sb.Append("</tr>");
            foreach (DataRow row in dt.Rows)
            {
                sb.Append("<tr>");
                foreach (DataColumn column in dt.Columns)
                {
                    sb.Append("<td>");
                    sb.Append(row[column]);
                    sb.Append("</td>");
                }
                sb.Append("</tr>");
            }
            sb.Append("</table>");


        using (MemoryStream memoryStream = new MemoryStream())
            {
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
                pdfDoc.Open();                    
                htmlparser.Parse(sr);//here is the error
                pdfDoc.Close();
                byte[] bytes = memoryStream.ToArray();
                memoryStream.Close();

                MailMessage mm = new MailMessage(txtEmail.Text.Trim(), email.Trim());
                mm.Subject = txtSubject.Text.Trim();
                //mm.CC.Add = txtcc.Text.Trim();
                mm.Body = txtBody.Text.Trim();
                mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "iTextSharpPDF.pdf"));
                mm.IsBodyHtml = true;
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.gmail.com";
                smtp.EnableSsl = true;
                NetworkCredential NetworkCred = new NetworkCredential();
                NetworkCred.UserName = txtEmail.Text.Trim();
                NetworkCred.Password = txtPassword.Text.Trim();
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = NetworkCred;
                smtp.Port = 587;
                smtp.Send(mm);
            }
使用(StringWriter sw=new StringWriter())
{
使用(HtmlTextWriter hw=新的HtmlTextWriter(sw))
{
StringBuilder sb=新的StringBuilder();
//某人加上(“”);
foreach(dt.Columns中的DataColumn列)
{
//某人加上(“”);
sb.Append(column.ColumnName);
某人加上(“”);
}
某人加上(“”);
foreach(数据行中的数据行)
{
某人加上(“”);
foreach(dt.Columns中的DataColumn列)
{
某人加上(“”);
sb.追加(行[列]);
某人加上(“”);
}
某人加上(“”);
}
某人加上(“”);
使用(MemoryStream MemoryStream=new MemoryStream())
{
PdfWriter writer=PdfWriter.GetInstance(pdfDoc,memoryStream);
pdfDoc.Open();
htmlparser.Parse(sr);//下面是错误
pdfDoc.Close();
byte[]bytes=memoryStream.ToArray();
memoryStream.Close();
MailMessage mm=新邮件消息(txtmail.Text.Trim(),email.Trim());
mm.Subject=txtSubject.Text.Trim();
//mm.CC.Add=txtcc.Text.Trim();
mm.Body=txtBody.Text.Trim();
添加(新附件(新内存流(字节),“iTextSharpPDF.pdf”);
mm.IsBodyHtml=true;
SmtpClient smtp=新SmtpClient();
smtp.Host=“smtp.gmail.com”;
smtp.EnableSsl=true;
NetworkCredential NetworkCred=新的NetworkCredential();
NetworkCred.UserName=txtEmail.Text.Trim();
NetworkCred.Password=txtPassword.Text.Trim();
smtp.UseDefaultCredentials=true;
smtp.Credentials=NetworkCred;
smtp.Port=587;
smtp.Send(mm);
}
}
}

您缺少打开标记,这就是组件抛出异常的原因,因为它读取未打开的关闭标记,堆栈为空(可能它使用堆栈跟踪打开/关闭标记):

使用(StringWriter sw=new StringWriter())
{
使用(HtmlTextWriter hw=新的HtmlTextWriter(sw))
{
StringBuilder sb=新的StringBuilder();
某人加上(“”);
某人加上(“”);
foreach(dt.Columns中的DataColumn列)
{
某人加上(“”);
sb.Append(column.ColumnName);
某人加上(“”);
}
某人加上(“”);
foreach(数据行中的数据行)
{
某人加上(“”);
foreach(dt.Columns中的DataColumn列)
{
某人加上(“”);
sb.追加(行[列]);
某人加上(“”);
}
某人加上(“”);
}
某人加上(“”);
1)在通过
StringBuilder
等工具构建
html
的同时,进行如下更改

StringBuilder sb = new StringBuilder();

//Open table
sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");

//Open first tr for all of th
sb.Append("<tr>");
foreach (DataColumn column in dt.Columns)
{
     sb.Append("<th style = 'background-color: #D20B0C;color:#ffffff'>");
     sb.Append(column.ColumnName);
     sb.Append("</th>");
}

//Close first tr for all of th
sb.Append("</tr>");


foreach (DataRow row in dt.Rows)
{   
    //Open tr for all of rows
    sb.Append("<tr>");
    foreach (DataColumn column in dt.Columns)
    {
        sb.Append("<td>");
        sb.Append(row[column]);
        sb.Append("</td>");
    }

    //Close tr for all of rows
    sb.Append("</tr>");
}


//Close table
sb.Append("</table>");     
看到这个了吗


请再试一次,可能会对您有所帮助。

什么是sr变量。如果是HTML字符串,请在该行上设置断点。复制HTML字符串并运行一些联机HTML解析器工具,检查错误的位置。看起来HTML字符串中有问题。StringReader sr=new StringReader(sb.ToString());Document pdfDoc=new Document(PageSize.A4、10f、10f、10f、0f);HTMLWorker htmlparser=新HTMLWorker(pdfDoc);sr是字符串读取器,sb是字符串生成器您是否在字符串生成器中获取html意味着
sb.ToString()
从html文件或您在程序中以硬编码方式构建html?在字符串生成器中获取html是否可以在post中添加字符串生成器代码?@Tanvi Dutta,查看答案可能对您有帮助:)@Tanvi Dutta,如果答案对您有帮助,请接受它,或者如果您有任何问题,请告诉我:)
StringBuilder sb = new StringBuilder();

//Open table
sb.Append("<table width='100%' cellspacing='0' cellpadding='2'>");

//Open first tr for all of th
sb.Append("<tr>");
foreach (DataColumn column in dt.Columns)
{
     sb.Append("<th style = 'background-color: #D20B0C;color:#ffffff'>");
     sb.Append(column.ColumnName);
     sb.Append("</th>");
}

//Close first tr for all of th
sb.Append("</tr>");


foreach (DataRow row in dt.Rows)
{   
    //Open tr for all of rows
    sb.Append("<tr>");
    foreach (DataColumn column in dt.Columns)
    {
        sb.Append("<td>");
        sb.Append(row[column]);
        sb.Append("</td>");
    }

    //Close tr for all of rows
    sb.Append("</tr>");
}


//Close table
sb.Append("</table>");     
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
pdfDoc.Open();
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
pdfDoc.Close();
byte[] bytes = memoryStream.ToArray();
memoryStream.Close();