【发布时间】:2011-08-02 16:27:08
【问题描述】:
我正在使用 PDFKit(它使用 wkhtmltopdf)试图在 Rails 3 应用程序中将视图呈现为 pdf。
PDFKit 在我的控制器显示操作中使用指向send_data(kit.to_pdf, :filename => "generated.pdf", :type => 'application/pdf') 的Errno::EPIPE (Broken pipe) 呈现:
# Controller
def show
respond_to do |format|
format.html { render }
format.pdf do
html = render_to_string(:layout => false , :action => "show.html.haml")
kit = PDFKit.new(html)
send_data(kit.to_pdf, :filename => "invoice.pdf", :type => 'application/pdf')
return # to avoid double render call
end
end
end
# Gemfile
...
gem 'pdfkit'
gem 'wkhtmltopdf'
...
我知道 wkhtmltopdf 不是此错误的根源,因为 wkhtmltopdf public/404.html tmp/404.pdf 中的 Rails.root 可以按预期工作。
在使用中间件以同样的方式失败后,我正在使用example from jonathanspies.com。
# config/application.rb
require 'pdfkit'
config.middleware.use PDFKit::Middleware
在新的 Rails 3 应用程序中尝试后,我收到以下错误:
command failed: "~/.rvm/gems/ree-1.8.7-2011.01@blog/bin/wkhtmltopdf" "--page-size" "Letter" "--margin-right" "0.75in" "--margin-top" "0.75in" "--margin-bottom" "0.75in" "--encoding" "UTF-8" "--margin-left" "0.75in" "--quiet" "-" "-"
手动运行命令并显示使用屏幕,查看 --quiet 选项很容易看出它应该是 --quit
将/lib/pdfkit/pdfkit.rb:35 更改为以下内容,一切都按预期工作(也可以使用中间件)。
args << '--quit'
因此,我再次通过编写问题寻求帮助的方式解决了我的问题(包含细节总是要付出代价的)。我提交了一个pull request,它纠正了拼写错误(总是一个被忽视的愚蠢错误)。希望没人介意我发帖。
【问题讨论】:
-
感谢您发布此消息!
-
您可能希望发布您的解决方案作为答案并接受它。只是为了让 SO 引擎开心。 :)
标签: ruby-on-rails-3