C# iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml不工作
我使用的是iTextSharp版本:5.5.6;iTextSharp XML Worker版本:5.5.6 我从中获得了一些代码,但在运行代码后,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\nC# iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml不工作,c#,itextsharp,C#,Itextsharp,我使用的是iTextSharp版本:5.5.6;iTextSharp XML Worker版本:5.5.6 我从中获得了一些代码,但在运行代码后,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说明\r\n LotNo\r\n修订版\r\n名称平台n\r\n DateCreated\r\n CreatedBy\r\n\r\n
\r\n项目\r\n说明\r\n
LotNo\r\n修订版\r\n名称平台n\r\n
DateCreated\r\n CreatedBy\r\n\r\n\r\n
\r\n\r\n 100-817412-001\r\n X500-G02- 环境图纸\r\n 15020008\r\n B
\r\n测试123\r\n 2015年9月4日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\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>
怎么了?(通过评论发现)
在调用
buf=memStream.ToArray()之前,需要调用doc.Close()
代码>。这让iTextSharp知道您实际上已经完成了,它应该刷新所有缓冲区并编写PDF尾部。ParseXHtml方法不用于解析HTML代码?我需要做的是:我必须生成一个报告。为此,我创建了一个普通的razor视图,然后尝试使用ParseXHtml创建一个PDF报告代码>天哪!你真是天才!在我切换这两个语句之后,它就开始工作了。非常感谢你!
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");
}
}
}