TuesPechkin无法加载DLL’wkhtmltox.dll’

我一直在使用TuesPechkin已经有一段时间了今天我将nuget包更新到新版本2.0.0+并注意到Factory.Create()不再解决了,所以我去了GitHub阅读所做的更改并注意到它现在期望到dll的路径?

IConverter converter = new ThreadSafeConverter( new PdfToolset( new StaticDeployment(DLL_FOLDER_PATH))); 

在过去的几个小时里,我已经尝试了几乎所有我能想到的路径,“\ bin”,“\ app_data”,“\ app_start”等,我似乎无法找到或弄清楚它想要什么路径和什么DLL?

我可以在我的bin文件夹中看到TuesPechkin dll,这是我尝试的第一条路径,但是我收到以下错误:

其他信息:无法加载DLL’wkhtmltox.dll’:找不到指定的模块。 (HRESULTexception:0x8007007E)

那个dll在哪里,现在我可以得到它,因为库似乎不包含它,我尝试安装TuesPechkin.Wkhtmltox.Win32包,但dll仍然无处可寻。 另外我在asp.net网站项目中使用它,所以我假设使用以下内容应该可以用于获取路径,对吧?

 var path = HttpContext.Current.Server.MapPath(@"~\bin\TuesPechkin.dll"); 

更多信息: https : //github.com/tuespetre/TuesPechkin/issues/57

Tuespechkin在“wkhtmltox.dll”文件的Win32和Win64嵌入式软件包中有一个zip文件作为资源。

使用Win32或Win64 Embedded程序包时的作用是解压缩文件并将其放在指定的目录中。

我一直在我的web应用程序目录的根部分放一个wkhtmltox dll的副本,并使用我的web应用程序的服务器物理路径将DLL_FOLDER_PATH指向它。

根据作者的说法,您必须将转换器设置在静态字段中以获得最佳结果。

我这样做,但在我使用它时将转换器设置为null,这似乎有效。

Tuespechkin是wmkhtmlox dll文件的包装器。

原始文件是用C ++编写的,因此不能自动在C#或VB.NET或任何其他托管代码域中使用。

Tuespechkin.dll文件不包含’wkhtmltox.dll’的副本。 您必须使用其他嵌入式部署模块之一,或者在从Internet下载之后在Web应用程序中安装“wkhtmltox.dll”的副本。 这就是我所做的,它似乎工作得很好。

我正在使用Team Foundation Server,并且在使用Tuespechkin例程后尝试编译代码将首次失败,因为’wkhtmltox.dll’文件被锁定,但您只需重试您的构建即可完成。

我遇到的问题是32位例程不能在64位环境中工作,而64位环境在localhost上无法测试。 在研究了Tuespechkin和Win32和Win64嵌入式部署包的源代码之后,我选择了我提出的解决方法。

只要您为输入而不是原始html指定URL,它就能正常工作。

较旧的软件包没有很好地呈现css。

如果您使用的是print.aspx例程,则可以将其作为主URL的偏移量创建。

我目前没有与我一起使用的源代码偏移到您的Web应用程序的基本URL,但它只是HttpRequest的一个分支。

您必须使用物理路径来查找.dll,但您可以使用Web路径来执行打印例程。

我希望这会回答你的问题。

我安装了TuesPechkin.Wkhtmltox.Win64 Nuget包并在单例中使用了以下代码:

 public class PechkinPDFConvertor : IPDFConvertor { IConverter converter = new ThreadSafeConverter( new RemotingToolset( new Win64EmbeddedDeployment( new TempFolderDeployment()))); public byte[] Convert(string html) { // return PechkinSync.Convert(new GlobalConfig(), html); return converter.Convert(new HtmlToPdfDocument(html)); } } 

然后,必须在x64中运行Web应用程序,否则您将在尝试在x86环境中加载x64程序集时收到错误消息。 大概你必须在设计时选择x64或x86并使用相应的nuget包,在web.config中选择它会更好。

编辑:上面的代码在一台服务器上失败,与您的消息完全相同 – 这是由于没有安装VC ++ 2013.所以新代码运行x86如下

 try { string path = Path.Combine(Path.GetTempPath(), "MyApp_PDF_32"); Converter = new ThreadSafeConverter( new RemotingToolset( new Win32EmbeddedDeployment( new StaticDeployment(path)))); } catch (Exception e) { if (e.Message.StartsWith("Unable to load DLL 'wkhtmltox.dll'")) { throw new InvalidOperationException( "Ensure the prerequisite C++ 2013 Redistributable is installed", e); } else throw; } 

如果您收到此错误 – >无法加载文件或程序集’TuesPechkin.Wkhtmltox.Win64’或其依赖项之一。 尝试加载格式不正确的程序。

在Visual Studio中转到 –

工具 – >选项 – >项目和解决方案 – > Web项目 – >将64位版本的IIS Express用于网站和项目。

在我的情况下,我在64位VPS上部署然后我收到了这个错误。 我通过安装从http://wkhtmltopdf.org/downloads.html下载的wkhtmltopdf解决了这个问题。 我选择了32位安装程序。

在我的情况下,我已经通过在https://www.nuget.org/packages/TuesPechkin.Wkhtmltox.Win32/安装Win32的Wkhtmltox解决了这个问题。

如果您不想运行wkhtmltox的安装程序只是为了获取dll,您可以执行以下操作:

正如@Timothy建议的那样,如果您使用TuesPechkin的嵌入式wkhtmltox.dll版本,它将解压缩并将其放在临时目录中。 我复制了这个DLL,并使用StaticDeployment选项引用它,没有任何问题。

为了找到确切的位置,我只使用了Process Monitor(procmon.exe)。 对我来说它是C:\Windows\Temp\-169958574\8\0.12.2.1\wkhtmltox.dll