3

HTML + CSS ページを PDF ファイルに変換したいと考えています。wkhtmltopdfを試してみましたが、アクセスしたいページが Web サイトで認証される必要があるため、問題が発生しました。

PDF に変換したいページの URL は次のとおりです: http://[WEBSITE]/PDFReport/33

認証なしでアクセスしようとすると、ログイン ページにリダイレクトされます。

したがって、wkhtmltopdfを使用すると、ログインページがPDFに変換されます...

ASP.NET MVC アプリケーションで使用する認証方法は SimpleMembership です。

[Authorize]
public ActionResult PDFReport(string id)
{
}

System.Diagnostics.Process で wkhtmltopdf.exe を実行しています:

FileInfo tempFile = new FileInfo(Request.PhysicalApplicationPath + "\\bin\\test.pdf");

StringBuilder argument = new StringBuilder();
argument.Append(" --disable-smart-shrinking");
argument.Append(" --no-pdf-compression");
argument.Append(" " + "http://[WEBSITE]/PDFReport/33");
argument.Append(" " + tempFile.FullName);

// to call the exe to convert
using (Process p = new System.Diagnostics.Process())
{
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.FileName = Request.PhysicalApplicationPath + "\\bin\\wkhtmltopdf.exe";
    p.StartInfo.Arguments = argument.ToString();
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardError = true;

    p.Start();
    p.WaitForExit();
}

このページでセキュリティを無効にせずに PDF を生成する方法を知っていますか?

4

1 に答える 1

1

私は最近、これにかなり悩まされました。一言で言えば、WKHTMLTOPDF は Webkit のバージョン (QT、彼らはそれを呼んでいると思います) であるため、パスワードで保護されたページを要求すると、そのブラウザーはログインして、通常と同じように Cookie を保存/参照する必要があります。

生の呼び出しは次のようになります。

`/path/wkhtmltopdf --cookie-jar my.jar --username myusername --password mypassword URL

どこ:

  • my.jar作成され、Cookie の値を保持する jar ファイルです
  • usernamenameユーザー名フォーム フィールドの でmyusernameあり、投稿値です
  • passwordnameパスワードフォームフィールドの でmypasswordあり、投稿値です
  • URLログインページのURLです

正常にログインするために必要なその他の投稿フィールドを必ず含めてください。おそらく、フォームを見るだけでなく、HTTP ヘッダーを監視することをお勧めします。セッションを維持するための --cookie-jar my.jar を含む通常のパラメーターを使用して、キャプチャしようとしているページで WKHTMLTOPDF を再度呼び出します。それはそれを行う必要があります!

ただし、まだ問題はありましたが、かなり堅牢なログインでした (複数の Cookie、安全な、多くのパラメーターなど)。私はPHPで作業していて、CURLを使用して運が良かった-それがASP.NETにどのように引き継がれるかはわかりません(おそらくこれ? http://support.microsoft.com/kb/303436 )が、それが役立つ場合の私のロジックは次のとおりです:

  • CURL経由でログイン
  • HTML ページを取得してローカルの一時ファイルに保存する
  • 画像とファイルへのすべての相対参照を絶対参照に置き換えます (またはbaseタグを挿入します) 。
  • 一時ファイルに対してプレーンな 'ol WKHTMLTOPDF を実行します。
  • 一時ファイルを削除

全体として、この方法で行うのは非常に簡単でした。WKHTMLTOPDF のバージョン 0.10 のパラメーターではなく、試行錯誤された真のコードに頼っていることを知って、気分が良くなりました。

于 2012-05-02T13:49:17.647 に答える