ItextSharp尝试解析html进行pdf转换时出错

我使用ItextSharp模块将下面列出的html转换为pdf页面。

mma
mmar


Click to View Pricing

C#代码生成上面的html:

  var html = new StringBuilder(@"
Authorized Distributor


Click to View Pricing, Inventory, Delivery & Lifecycle Information:

"); List mfrBrands = MfrBrandView.Load(fileId); var uniquesuppliers = mfrBrands.GroupBy(t => new {t.Manufacturer,t.SupplierVirtualDirectory}).Select(g => g.First()); html.Append("
"); foreach (var uniquesupplier in uniquesuppliers) { var mfrPartNums = mfrBrands.Where(t => t.ManufacturerId == uniquesupplier.ManufacturerId).Select( t => t.ManufacturerPartNumber).ToList(); html.AppendFormat(@"", uniquesupplier.SupplierVirtualDirectory, uniquesupplier.MouserizationLabel, mfrPartNums[0]); for (int i = 1; i < mfrPartNums.Count(); i++) { html.AppendFormat( @"", mfrPartNums[i]); } } html.Append("
{1}: {2}
{0}
"); return html.ToString();

形成html后生成页面的代码:

 PdfWriter writer = null; PdfDocument doc = null; //PdfReader reader = new PdfReader(content); // reader.Info["Title"] try { doc = new PdfDocument(); doc.SetPageSize(PageSize.LETTER); writer = PdfWriter.GetInstance(doc, content); writer.CloseStream = false; doc.Open(); doc.NewPage(); foreach (IElement element in iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null)) { doc.Add(element); } } 

下面是我得到一个例外,说“无法将 ‘iTextSharp.text.html.simpleparser.CellWrapper’类型的 对象转换为 ‘iTextSharp.text.Paragraph’ 。” iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(html), null)

我试图解析的HTML有什么问题吗? 有更好的方法吗? 非常感谢您的帮助。 非常感谢。

“HTMLWorker” 已被弃用 ,转而使用XMLWorker 。 这是一个使用上面使用的HTML片段测试的工作示例:

 StringReader html = new StringReader(@" 
Mouser Electronics
Authorized Distributor


Click to View Pricing, Inventory, Delivery & Lifecycle Information:

"); using (Document document = new Document()) { PdfWriter writer = PdfWriter.GetInstance(document, STREAM); document.Open(); XMLWorkerHelper.GetInstance().ParseXHtml( writer, document, html ); }

使用XMLWorker您需要使用格式良好的HTML – 毕竟它是一个XML解析器。 上述问题中的示例HTML没有关闭
标签。 像HtmlAgilityPack这样的HTML解析器将解决这些问题,并将其转为:

 


进入这个:

 


只需几行代码:

 var hDocument = new HtmlDocument() { OptionWriteEmptyNodes = true, OptionAutoCloseOnEnd = true }; hDocument.LoadHtml("


"); var closedTags = hDocument.DocumentNode.WriteTo();

XMLWorker 可作为nuget包提供 ,也可以在sourceforge单独下载 。

有关XMLWorker 更高级用法 ,请参见此处

请尝试以下代码

  <a href="http://www.abcd.com"></a> 

在这里,我们将替换&lt ; 和>与&gt ; 所以我变成了<a> 并成为</a>

以下是您需要做的步骤

1-从nuget安装来自Itextsharp的itext sharp和XMLWorker

2 – 然后将你的设计放在带有内联CSS的html(这里是Invoice.html)中

3 – 确保所有标记都像断点或td一样正确结束(这里我之前收到错误)

4-here图像不会在本地显示,所以不浪费时间我在服务器上传图像并给服务器Path访问Image.U可以研究更多在本地运行它。

 Document doc = new Document(); PdfPTable tableLayout = new PdfPTable(4); PdfWriter writer= PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/Admin/T13.pdf"), FileMode.Create)); doc.Open(); string contents = File.ReadAllText(Server.MapPath("~/Admin/invoice.html")); StringReader sr = new StringReader(contents); XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr); doc.Close();