iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml 不工作

Posted

技术标签:

【中文标题】iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml 不工作【英文标题】:iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml not working 【发布时间】:2015-09-04 03:17:10 【问题描述】:

我正在使用 iTextSharp 版本:5.5.6; iTextSharp XML Worker 版本:5.5.6

我从Here 得到了一些代码,但是在我运行代码之后,PDF 文件将永远无法打开

:文件已损坏,无法修复。本地\EWHvxm9t5++

htmltext="\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 项目 \r\n 说明\r\n LotNo\r\n 修订版\r\n NamePlatSN\r\n 创建日期\r\n 创建者\r\n \r\n \r\n \r\n \r\n 100-817412-001\r\n X500-G02 - ENV DWG \r\n 15020008\r\n B \r\n testing123\r\n 2015 年 4 月 9 日 12:00:00 AM\r\n ULTRATCS\xma\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n"

HTML 字符串(格式更好)如下所示:

<!DOCTYPE html>
<html lang=\"en\" >
<body>




        <table> 

   <tr> 
   <th> Item </th>
   <th> Description</th>
   <th>   LotNo</th>
   <th>Revision</th>
   <th>NamePlatSN</th>
   <th>DateCreated</th>
   <th>CreatedBy</th>

   </tr>

    <tr>
    <td> 100-817412-001</td>
     <td> X500-G02 - ENV DWG            </td>
    <td>15020008</td>
    <td> B      </td>
    <td>testing123</td>
    <td> 4/9/2015 12:00:00 AM</td>
    <td> ULTRATCS\\xma</td>

    </tr>
    </table>



</body>
</html>

代码如下:

 protected ActionResult ViewPdf(object model)
        
            // Create the iTextSharp document.          
            Document doc = new Document();
            byte[] buf;
            // Set the document to write to memory.
            MemoryStream memStream = new MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(doc, memStream);
            writer.CloseStream = false;
            doc.Open();
            string htmltext = this.RenderActionResultToString(this.View(model));      

               using (var srHtml = new StringReader(htmltext))
                 
                            //Parse the HTML
                            XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, srHtml);
                            //buf  = new byte[memStream.Position];
                            //memStream.Position = 0;
                            //memStream.Read(buf, 0, buf.Length);

                            buf = memStream.ToArray(); 

                            doc.Close();
                               
           // System.IO.File.WriteAllBytes(@"c:\\temp\test.pdf", buf);
            // Send the binary data to the browser.
            return new BinaryContentResult(buf, "application/pdf");
               
    

怎么了?

【问题讨论】:

ParseXHtml 方法不用于解析 HTML 代码? 我需要做的是:我必须生成一个报告。为此,我创建了一个普通的 razor 视图,然后尝试使用 ParseXHtml 创建 PDF 报告。 尝试调用doc.Close() 之前调用buf = memStream.ToArray(); 天哪!你是天才!在我切换这两个语句后,它正在工作。非常感谢! 【参考方案1】:

(通过 cmets 发现)

您需要先致电doc.Close(),然后再致电buf = memStream.ToArray();。这让 iTextSharp 知道您实际上已经完成,它应该刷新所有缓冲区并写入 PDF 预告片。

【讨论】:

以上是关于iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml 不工作的主要内容,如果未能解决你的问题,请参考以下文章