无法从程序集’itextsharp,Version = 5.5.5.0,Culture = neutral,PublicKeyToken = 8354ae6d2174ddca’加载类型’iTextSharp.text.html.HtmlParser’

看到这个链接将html转换为pdf我在webconfig中得到了这个版本错误让一些天才找到并解决了qustion。

我的模特

public class Customer { public int CustomerID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 

我的控制器这是正常的代码

  public ActionResult Index() { List customers = new List(); for (int i = 1; i <= 10; i++) { Customer customer = new Customer { CustomerID = i, FirstName = string.Format("FirstName{0}", i.ToString()), LastName = string.Format("LastName{0}", i.ToString()) }; customers.Add(customer); } return View(customers); } 

这是为pdf转换控制器

 public ActionResult PDF() { List customers = new List(); for (int i = 1; i <= 10; i++) { Customer customer = new Customer { CustomerID = i, FirstName = string.Format("FirstName{0}", i.ToString()), LastName = string.Format("LastName{0}", i.ToString()) }; customers.Add(customer); } return new RazorPDF.PdfResult(customers, "PDF"); } 

我的webconfig

      

你有几个问题。

首先,您有一个版本绑定重定向:

  

这是一个巨大的一揽子声明,假设版本0.0.0.05.5.5.0之间没有发生API更改。 但是,当存在API更改时,一些/多个/大多数/所有库会增加其主要和次要版本号。

第二,但与第一个相关,在iTextSharp 4.1.6(4.x系列中最后发布的iTextSharp,从Java 2.x系列移植)和5之间实际上有一些API更改。 在您的特定情况下,类iTextSharp.text.html.HtmlParser被删除,这就是获得该exception的原因。

有几种方法可以解决这个问题。

选项#1 – 好方法

  1. 摆脱RazorPDF。 它在两年半的时间里没有更新,它需要一个过时版本的iTextSharp并使用一个过时的HTML解析器。

  2. 切换到使用iTextSharp的较新的HTML解析XmlWorker 。 看到这个(冗长的)答案如何使用它 。

选项#2 – 坏方法

  1. 阅读官方iText网站销售常见问题解答页面标题“我为什么不能使用iText 2.x(或iTextSharp 4.x)?”的第四个框?

  2. 下载iTextSharp 4.1.6 源代码 。 你需要自己寻找。 不要在哪里得到它,因为社区甚至软件制造商都不支持此版本。

  3. 让您的法律顾问逐行检查源代码,以确保其符合您所在司法管辖区的法律以及任何有关版权的国际条约。 认真。

  4. 如果您的法律顾问批准源代码,请编译它,删除绑定重定向并将DLL放入您的项目中。

  5. 接受这样一个事实,即版本4.1.6的解析器非常非常有限,并且有一些已知的问题会为您认为完全有效的HTML提供exception。 同时接受如果您要求对这些问题提供任何支持,您将被告知两件事,升级到最新版本并从HTMLWorker切换到XmlWorker

选项#3 – 丑陋的方式 (布鲁诺)

  1. 下载官方的iTextSharp源代码 。

  2. 使用4.1.6逻辑或您自己的方法重新实现iTextSharp.text.html.HtmlParser和所有其他缺少的类,方法和属性。

  3. 编译和链接