37

バックグラウンド

読んだ後、Prawnが出て、wkhtmltopdfが入っているように見えました。また、Rails用のPDFKitwicked_pdfの宝石が新しいクールなようです。そこで、PDFKitの使用方法に関するRyanのスクリーンキャストを見つけました。私はすべてをインストールし、問題なくCLIでwkhtmltopdfをテストし、Rails設定をいじって複数のプロセスを実行し、アセットパイプラインが機能するようにしました。プロセスの最後で立ち往生している(実際にはPDFを取得している)ことを除けば、すべて問題ないようです。サーバーからの応答)。

質問

ビューのバージョンを要求すると.pdf(PDFKitミドルウェアオプションを使用しています)、ブラウザーは応答を待つだけですが、Railsプロセスを強制終了するとすぐに、取得する予定のPDFがブラウザーにポップアップ表示されます。窓。何が得られますか?

私が使用しているもの

  • OS:OSX 10.8.1
  • レール:3.2.8
  • Ruby:1.9.3
  • wkhtmltopdf:0.11.0_rc1(実行wkhtmltopdf -Vすると0.10.0_rc2と表示されますが)
  • qt:4.8.2

私がしたこと

  • config.middleware.use "PDFKit::Middleware"私のapplication.rbファイルにロードしてPDFKitミドルウェアを使用しました。
  • gem 'pdfkit'私のGemfileに含まれていて、Bundlerでインストールしました
  • 初期化子で.pdfmime-typeを次のように設定しますmime_types.rbMime::Type.register_alias "application/pdf", :pdf
  • アセットパイプラインがPDFエンジンと競合しないように、複数のスレッドに追加されましconfig.threadsafe!config/environments/development.rb
  • テストwkhtmltopdf http://www.google.com google.pdfし、期待どおりにGoogleホームページのPDFを生成しました
  • PDFKitをwicked_pdfに交換しようとしましたが、同じ問題が発生しました(ハングしますが、Railsプロセスが強制終了されると、PDFは期待どおりにレンダリングされます)

それはどのようなものか

これは、Railsによってレンダリングされた通常のhtmlページです(クライアントの詳細をぼかしました): ここに画像の説明を入力してください

これは、に移動しようとしたときにRailsによって出力されるCLIlocalhost:3000/some/path.pdfです。(応答を待っている間、アプリがハングします): ここに画像の説明を入力してください

最終的にRailsプロセスを強制終了するとctrl-c、PDFが期待どおりにブラウザに表示されます(CSSとHTMLが適切にレンダリングされているため、アセットは正常に読み込まれるようです)。 ここに画像の説明を入力してください

これまでの結論

PDFKitをwicked_pdfと交換して同じ結果を得ると、問題はそれらのライブラリにあるのではなく、開発環境に関係していると思われるようです。しかし、wkhtmltopdfはコマンドラインから正常に実行されるため、wkhtmltopdfとQTがそれぞれの仕事をしていると思います。問題はRailsにあるはずです。たぶん私は何かを正しく構成していませんか?

助けを求める

問題が正確に何であるかをどのように判断し、どのように修正しますか?

あなたが私を助けることができれば私はあなたを愛します<3

アップデート

また、次のようにミドルウェアオプションなしでPDFを(を使用して)レンダリングする別の方法を使用してみました(これを行うと、ファイルから.to_pdfコメントアウトしました):config.middleware.use "PDFKit::Middleware"application.rb

respond_to do |format|
    format.html
    format.pdf do
        html = '<html><body>This is a test.</body></html>'
        @pdf = PDFKit.new(html)

        send_data @pdf.to_pdf, 
            :filename => 'whatever.pdf', 
            :type => 'application/pdf', 
            :disposition => 'attachment'
    end
end
4

7 に答える 7

70

問題は、wkhtmltopdf自体、特​​に0.9.9以降のバージョンにあります。wkhtmltopdfは、コマンドラインから直接実行するとハングします。

修正する手順:

brew uninstall wkhtmltopdf
cd /usr/local/Library/Formula/
git checkout 6e2d550 /usr/local/Library/Formula/wkhtmltopdf.rb
brew install wkhtmltopdf

次に、正しいバージョンがインストールされていることを確認しますwkhtmltopdf --versionwkhtmltopdf 0.9.9

引用:

  1. https://github.com/mileszs/wicked_pdf/issues/110
  2. http://wearepandr.com/blog/article/homebrew-and-installing-old-package-versions#blog_nav
于 2012-12-26T16:09:04.140 に答える
9

最後のバージョンを試してください。MacOSにインストールする簡単な方法:

brew install Caskroom/cask/wkhtmltopdf
于 2016-08-19T21:33:36.793 に答える
2

scarver2による修正は、宣伝どおりに機能しました。しかし、私はより新しいバージョンのを必要としていましたwkhtmltopdf。自作バージョンはまだ古くなっているように見え(コマンドラインでハングします)、最近のコンパイル済みバイナリが利用できないため、osxビルドスクリプトを使用して自分でコンパイルしました。

$ git clone git@github.com:wkhtmltopdf/wkhtmltopdf.git
$ cd wkhtmltopdf
$ ./build_osx.sh     # i'm running 10.9.2
$ bin/wkhtmltopdf --version                                                                                  
Name:
  wkhtmltopdf 0.12.1-72a9f2066fe9ffd162dec007a4d9b6a5cd63b670
$ curl www.example.com | bin/wkhtmltopdf - test.pdf  # render pdf of example.com
$ open test.pdf   # to confirm pdf 

で使用pdfkit 0.6.2していRails 3.2.17ます。バイナリを入れ、/vendorイニシャライザpdfkitで、。でポイントしましたconfig.wkhtmltopdf。ここまでは順調ですね。

于 2014-04-09T10:03:41.213 に答える
1

同じ問題が発生しました。追加したときに機能します:'config.threadsafe!' スタック内の答えとしてapplication.rbにあります。この助けを願っています。

于 2012-09-23T06:38:07.187 に答える
0

まったく同じ症状ですが、WickedPdf現在使用しています。この時点で、問題もあると思いますwkhtmltopdf

残念ながら、Stack/Googleで見つけた推奨事項はどちらもうまくいきませんでした。代わりに、この投稿で見つかったものを含め、いくつかの提案を組み合わせる必要がありました。

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

  1. brew uninstall wkhtmltopdf
  2. のコピーを見つけて削除wkhtmltopdfします/usr/bin
  3. のコメントWickedPdf.configconfig/initializers
  4. config.threadsafe!に追加development.rb
  5. ミドルウェアを削除し、メインコントローラーの「show」アクションでPDFリクエストを処理できるようにします(必要ない場合があります)
  6. wkhtmltopdf-binarygemfileに追加
  7. バンドル
  8. サーバーを再起動します
  9. Mime::Type.register_alias "application/pdf", :pdfまた、追加する必要がある場合がありますconfig/initializers/mime_types.rb(私にとって、これにより'警告:既に初期化された定数PDF 'が発生します)

私のセットアップは、Mac OSX Mountain Lion with Rails 3.2.1、Webrick、Postgres、およびwkhtmltopdf-binary(0.9.9.1)でした。

于 2013-04-03T23:08:48.500 に答える
0

鉱山もぶら下がっていて、ドックのwkhtmltopdfアイコンを開いていました。

実際に問題が発生したのは、ユニコーンワーカープロセスが1つしか実行されていなかったことです。1つ以上追加すると、正常に機能しました。

pdfkit0.6.2を搭載したOSXでwkhtmltopdf0.9.9を実行しています

于 2014-07-10T22:59:37.453 に答える
-2

config/initializer/pdfkit.rb次の方法で編集してみてください。

PDFKit.configure do |config|

config.wkhtmltopdf = Rails.root.join('bin', 'wkhtmltopdf-i386').to_s

config.default_options = {

  :encoding=>"UTF-8",
  :page_size=>"A4",
  :margin_top=>"0.25in",
  :margin_right=>"0.1in",
  :margin_bottom=>"0.25in",
  :margin_left=>"0.1in",
  :disable_smart_shrinking=> false
}
end
于 2014-05-29T12:15:34.520 に答える