11

これは、SOに最初の質問を投稿するきっかけとなった奇妙な小さな問題です。Rails アプリの一部として wkhtmltopdf を使用して、HTML ドキュメントを PDF に変換しています。そのために、Rails Web ページを一時ディレクトリの静的 HTML ファイルにレンダリングし、静的ヘッダー、フッター、および画像を同じ一時ディレクトリにコピーしてから、「system」を使用して wkhtmltopdf を実行しています。

これは、開発およびテスト環境で完全に機能します。私のステージング環境では、そうではありません。最初はアクセス許可を疑っていましたが、そのプロセスの最初のいくつかの部分 (HTML 静的ファイルの作成とディレクトリへのコピー) は機能しています。その一時ディレクトリのコマンド ラインから wkhtmltopdf を実行すると、期待どおりの結果が得られます。最後に、ステージング環境で Rails コンソールを介して「システム」とバックティックの両方を介して wkhtmltopdf を実行しました。出力として得られるものは次のとおりです。

> `wkhtmltopdf --footer-html tmp/invoices/footer.html --header-html tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in tmp/invoices/test.html tmp/invoices/this.pdf`
Loading pages (1/6)
QPainter::begin(): Returned false                            ] 10% 
Error: Unable to write to destination                             
Error: Failed loading page http://tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore) => "" 

最後のビットに注意してください。ローカル ファイルを指定していますが、http 経由で探しています。わかりました、多分私は明示的で file:// プロトコルをフィードする必要があるので、http を探しません。だから私はこれを試します:

> system("wkhtmltopdf --footer-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/footer.html --header-html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html file://Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/this.pdf")
Loading pages (1/6)
Error: Failed loading page file://library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html (sometimes it will work just to ignore this error with --load-error-handling ignore)
=> false 

これは、Library で小文字の "l" を使用すると失敗することに注意してください。一体何?(いいえ、そのスイッチでエラーを無視することをお勧めしても、それ以上は良くなりません。)

何か案は?システム コマンドを書き換える Rails または Ruby の設定はありますか? wkhtmltopdf に追加して、ローカル ファイルから確実にロードできるオプションはありますか? 私はかなり困惑しています。ありがとう!

4

3 に答える 3

3

絶対ファイルパスを使用すると成功しました( の後の余分なスラッシュに注意してくださいfile://

wkhtmltopdf --footer-html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/footer.html --header-html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/header.html -s Letter -L 0in -R 0in -T 0.5in -B 1in file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/test.html file:///Library/Server/Web/Data/Sites/intranet-staging/current/tmp/invoices/this.pdf

これはWindowsでも同じです

Unix パス

file:///absolute/path/to/file

Windows パス

file:///C:/absolute/path/to/file
于 2014-07-17T13:07:39.037 に答える
0

wicked_pdf gem を見てください。PDF MIME タイプを追加してから、PDF にしたいページを URL に .pdf を追加するだけです。

私はこれを本番環境で使用していますが、非常にうまく機能します。wkhtmltopdf を直接呼び出す必要はありません。

于 2013-01-21T02:25:38.157 に答える