Dha*_*n T 2 c# itextsharp asp.net-mvc-4 razorpdf
看到这个链接将html转换为pdf我在webconfig中得到了这个版本错误让一些天才找到并解决了qustion.
我的模特
public class Customer
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器这是正常的代码
public ActionResult Index()
{
List<Customer> customers = new List<Customer>();
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);
}
Run Code Online (Sandbox Code Playgroud)
这是为pdf转换控制器
public ActionResult PDF()
{
List<Customer> customers = new List<Customer>();
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");
}
Run Code Online (Sandbox Code Playgroud)
我的webconfig
<dependentAssembly>
<assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
你有几个问题.
首先,您有一个版本绑定重定向:
<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
Run Code Online (Sandbox Code Playgroud)
这是一个巨大的一揽子声明,假设版本0.0.0.0和版本之间没有发生API更改5.5.5.0.但是,当存在API更改时,一些/多个/大多数/所有库会增加其主要和次要版本号.
第二,但与第一个相关,在iTextSharp 4.1.6(4.x系列中最后发布的iTextSharp,从Java 2.x系列移植)和5之间实际上有一些API更改.在您的特定情况下,该类iTextSharp.text.html.HtmlParser被删除,这就是为什么得到该异常.
有几种方法可以解决这个问题.
选项#1 - 好方法
摆脱RazorPDF.它在两年半内没有更新,它需要一个过时版本的iTextSharp并使用一个过时的HTML解析器.
切换到使用iTextSharp更新的HTML解析XmlWorker.看到这个(冗长的)答案如何使用它.
选项#2 - 糟糕的方式
阅读官方iText网站销售常见问题解答页面标题的第四个方框"为什么我不应该使用iText 2.x(或iTextSharp 4.x)?"
下载iTextSharp 4.1.6 源代码.你需要自己寻找.不要因为社区甚至软件制造商都不支持这个版本而烦恼.
让您的法律顾问逐行检查源代码,以确保其符合您所在司法管辖区的法律以及任何有关版权的国际条约.认真.
如果您的法律顾问批准源代码,请编译它,删除绑定重定向并将DLL放入您的项目中.
接受4.1.6版本的解析器非常非常有限并且存在一些已知问题的事实,这些问题将为您认为完全有效的HTML提供异常.同时接受如果您要求对这些问题提供任何支持,您将被告知两件事,升级到最新版本并切换HTMLWorker到XmlWorker.
选项#3 - 丑陋的方式(布鲁诺)
iTextSharp.text.html.HtmlParser使用4.1.6逻辑或您自己的方法重新实现所有其他缺少的类,方法和属性.
编译和链接