2

请参阅此链接将 html 转换为 pdf 我在 webconfig 中遇到此版本错误,让一些天才找到并解决问题。

我的模特

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

我的控制器这是正常代码

 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);
    }

这是用于 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");
    }

我的网络配置

 <dependentAssembly>
    <assemblyIdentity name="itextsharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />
  </dependentAssembly>
4

1 回答 1

8

你有几个问题。

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

<bindingRedirect oldVersion="0.0.0.0-5.5.5.0" newVersion="5.5.5.0" />

这是一个巨大的笼统声明,假设版本0.0.0.05.5.5.0. 但是,当 API 发生更改时,一些/许多/大多数/所有库会增加它们的主要和次要版本号。

第二,但与第一个相关,在 iTextSharp 4.1.6(4.x 系列中最后一个发布的 iTextSharp,从 Java 2.x 系列移植)和 5 之间实际上有一些 API 更改。在您非常具体的情况下,该类iTextSharp.text.html.HtmlParser已被删除,这就是为什么会出现该异常。

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

选项 #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 的异常。还要接受,如果您要求对这些问题的任何支持,您将被告知两件事,升级到最新版本和切换HTMLWorkerXmlWorker.

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

  1. 下载官方 iTextSharp 源代码

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

  3. 编译和链接

于 2015-02-20T14:52:11.873 回答