14

TuesPechkin をしばらく使用してきましたが、今日、ナゲット パッケージを新しいバージョン 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' を読み込めません: 指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E)

そのdllはどこにあり、ライブラリに含まれていないように見えるので入手できます.TuesPechkin.Wkhtmltox.Win32パッケージをインストールしようとしましたが、dllはまだどこにも見つかりません. また、これをasp.net Webサイトプロジェクトで使用しているので、パスを取得するために次を使用するとうまくいくと思いますよね?

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

詳細情報: https://github.com/tuespetre/TuesPechkin/issues/57

4

9 に答える 9

9

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」のコピーは含まれていません。他の埋め込み展開モジュールのいずれかを使用するか、インターネットからダウンロードした後、Web アプリに 'wkhtmltox.dll' のコピーをインストールする必要があります。それが私がしていることであり、うまく機能しているようです。

私は Team Foundation Server を使用しています。Tuespechkin ルーチンを使用した後にコードをコンパイルしようとすると、'wkhtmltox.dll' ファイルがロックされるため、最初は失敗しますが、ビルドを再試行するだけで成功します。

32 ビット ルーチンが 64 ビット環境で動作せず、64 ビット環境が localhost でテストできないという問題がありました。Tuespechkin と Win32 および Win64 組み込み展開パッケージのソース コードを調べた後、思いついた回避策を実行しました。

生のhtmlではなく、入力にURLを指定する限り、うまく機能します。

古いパッケージでは css がうまくレンダリングされませんでした。

print.aspx ルーチンを使用している場合は、メイン URL からのオフセットとしてその URL を作成できます。

この時点で、Web アプリケーションのベース URL にオフセットするために使用しているソース コードはありませんが、これは単に HttpRequest から派生したものです。

.dll を見つけるには物理パスを使用する必要がありますが、印刷ルーチンには Web パスを使用できます。

これがあなたの質問に少し答えることを願っています。

于 2015-01-11T19:53:03.040 に答える
1

dll を取得するためだけに wkhtmltox のインストーラーを実行したくない場合は、次の手順を実行できます。

@Timothy が示唆するように、TuesPechkin の wkhtmltox.dll の埋め込みバージョンを使用すると、解凍されて一時ディレクトリに配置されます。この dll をコピーし、StaticDeployment問題なくオプションで参照しました。

正確な場所を見つけるために、プロセス モニター (procmon.exe) を使用しました。私にとってはそうでしたC:\Windows\Temp\-169958574\8\0.12.2.1\wkhtmltox.dll

于 2015-09-09T15:28:54.573 に答える
1

私の場合、64 ビットの VPS にデプロイすると、このエラーが発生しました。http://wkhtmltopdf.org/downloads.htmlからダウンロードした wkhtmltopdf をインストールすることで問題を解決しました。32 ビットのインストーラーを選択しました。

于 2015-02-03T06:03:22.613 に答える
1

このエラー: DLL 'wkhtmltox.dll' を読み込めません: 指定されたモジュールが見つかりませんでした。(HRESULT からの例外: 0x8007007E)は、次の 2 つの状況で返されます。

1-インストールされていない依存関係を展開します:

これを解決するには、nuget パッケージ「TuesPechkin.Wkhtmltox.Win64」をインストールし、次のコードを使用します (IIS で実行されている Web アプリケーションの場合)。

IConverter converter =
    new ThreadSafeConverter(
        new RemotingToolset<PdfToolset>(
            new Win64EmbeddedDeployment(
                new TempFolderDeployment())));

// Keep the converter somewhere static, or as a singleton instance!
// Do NOT run the above code more than once in the application lifecycle!

byte[] result = converter.Convert(document);

実行時に、このコードは依存関係 "wkhtmltox.dll" を "C:\Windows\Temp\1402166677\8\0.12.2.1" のような一時ディレクトリにコピーします。次を使用してファイルの宛先を取得することができます。

var deployment = new Win64EmbeddedDeployment(new TempFolderDeployment());
Console.WriteLine(deployment.Path);

2- Microsoft Visual C++ 2013 再頒布可能パッケージがインストールされていません:

https://github.com/tuespetre/TuesPechkin/issues/65#issuecomment-71266114で説明されているよう に、Visual C++ 2013 ランタイムが必要です。

README からの解決策は次のとおりです。

これらのパッケージを使用するには、Visual C++ 2013 ランタイムがインストールされている必要があります。それ以外の場合は、wkhtmltopdf の MingW ビルドとその依存関係を Web サイトからダウンロードし、それをライブラリで使用する必要があります。https://github.com/tuespetre/TuesPechkin#wkhtmltoxdll

または、Microsoft Visual C++ 2013 Redistributable をインストールできます。

choco install msvisualcplusplus2013-redist
于 2020-05-19T18:38:02.703 に答える
0

これは AnyCpu バージョンで、iis-base または winform アプリケーションもサポートしています

using TuesPechkin.Wkhtmltox.AnyCPU;
...
var converter = PDFHelper.Factory.GetConverter();
var result = converter.Convert(This.Document);

参考:https ://github.com/tloy1966/TuesPechkin

于 2019-11-11T03:14:57.177 に答える
0

Visual Studio 2013 用の Visual C++ 再頒布可能パッケージをインストールすると、エラーが解決しました。

https://www.microsoft.com/en-us/download/details.aspx?id=40784

于 2020-12-20T09:02:59.033 に答える