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(@" {1}: {2} ", uniquesupplier.SupplierVirtualDirectory, uniquesupplier.MouserizationLabel, mfrPartNums[0]); for (int i = 1; i < mfrPartNums.Count(); i++) { html.AppendFormat( @" {0} ", mfrPartNums[i]); } } html.Append("
"); 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="https://www.abcd.com"></a>
在这里,我们将替换>
; 所以我变成了<a>
并成为</a>
。
以下是您需要做的步骤
1-从nuget安装来自Itextsharp的itext sharp和XMLWorker
2 – 然后将你的设计放在带有内联CSS的html(这里是Invoice.html)中
3 – 确保所有标记都像断点或td一样正确结束(这里我之前收到错误)
4-here图像不会在本地显示,所以不浪费时间我在服务器上传图像并给服务器Path访问Image.U可以研究更多在本地运行它。
上述就是C#学习教程:ItextSharp尝试解析html进行pdf转换时出错分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
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();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1034867.html