これは、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 に追加して、ローカル ファイルから確実にロードできるオプションはありますか? 私はかなり困惑しています。ありがとう!