首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TuesPechkin无法加载DLL 'wkhtmltox.dll‘

TuesPechkin无法加载DLL 'wkhtmltox.dll‘
EN

Stack Overflow用户
提问于 2015-01-11 00:13:48
回答 9查看 19.7K关注 0票数 14

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

代码语言:javascript
复制
IConverter converter =
    new ThreadSafeConverter(
        new PdfToolset(
            new StaticDeployment(DLL_FOLDER_PATH)));

在过去的几个小时里,我尝试了几乎所有我能想到的路径,"\bin“、"\app_data”、"\app_start“等等,而我似乎无法找到或找出它想要的路径和什么dll?

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

其他信息:无法加载DLL‘wkhtmlox.dll’:找不到指定的模块。(HRESULT例外: 0x8007007E)

这个dll在哪里,现在我可以得到它,因为库似乎不包含它,我试着安装TuesPechkin.Wkhtmltox.Win32包,但是dll仍然找不到。另外,我在一个asp.net网站项目中使用了这一点,所以我假设使用下面的方法可以获得路径,对吗?

代码语言:javascript
复制
var path = HttpContext.Current.Server.MapPath(@"~\bin\TuesPechkin.dll");

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-01-11 19:53:03

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

当您使用Win32或Win64嵌入式包时,它所做的是解压缩文件并将其放在指定的目录中。

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

作者认为,为了取得最佳效果,必须在静态字段中设置转换器。

我这样做,但是当我使用完它时,将转换器设置为null,这似乎是可行的。

Tuespechkin是wmkhtmlox文件的包装器。

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

Tuespechkin.dll文件不包含“wkhtmlox.dll”的副本。你要么使用其他的嵌入式部署模块,要么在你的网络应用程序中安装一个'wkhtmltox.dll‘的副本,然后从互联网下载它。这就是我所做的,而且似乎运作得很好。

我正在使用,在使用Tuespechkin例程后尝试编译代码将第一次失败,因为'wkhtmltox.dll‘文件会被锁定,但是您所要做的就是重新尝试构建,然后它就会通过。

我对32位例程不能在64位环境中工作和64位环境在本地主机上无法测试有问题。在研究了Tuespechkin以及Win32和Win64嵌入式部署包的源代码之后,我提出了解决办法。

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

较旧的软件包并不能很好地呈现css。

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

我没有我现在使用的源代码来抵消您的web应用程序的基本url,但它只是HttpRequest的一个分支。

您必须使用物理路径来找到.dll,但是您可以使用web路径作为打印例程。

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

票数 9
EN

Stack Overflow用户

发布于 2015-07-07 07:19:28

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

在中转到-

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

票数 7
EN

Stack Overflow用户

发布于 2015-02-19 09:11:44

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

代码语言:javascript
复制
public class PechkinPDFConvertor : IPDFConvertor
{
    IConverter converter =
               new ThreadSafeConverter(
                  new RemotingToolset<PdfToolset>(
                       new Win64EmbeddedDeployment(
                           new TempFolderDeployment())));

    public byte[] Convert(string html)
    {
        //            return PechkinSync.Convert(new GlobalConfig(), html);
        return converter.Convert(new HtmlToPdfDocument(html));
    }
}

然后,web应用程序必须在x64中运行,否则在尝试在x86环境中加载x64程序集时会出现错误。假设您必须在设计时选择x64或x86,并使用相应的nuget包,在web.config中选择这个会更好。

编辑:上述代码在一台服务器上失败,其消息与您的完全相同--这是因为没有安装VC++ 2013。因此,新代码正在运行x86,如下所示

代码语言:javascript
复制
try
{
    string path = Path.Combine(Path.GetTempPath(), "MyApp_PDF_32");
    Converter = new ThreadSafeConverter(
                  new RemotingToolset<PdfToolset>(
                       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;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27882601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档