我已经解决了 SO 中有关此事的所有问题,并尝试了所有技巧,但没有进一步深入。
环境是处于开发模式的 Rails 3.0.9,在 VMPlayer 虚拟机中运行在 Ubuntu 10.4 上。
我使用 apt-get 安装了 wkhtmltopdf,二进制文件是从 /usr/bin/ 中找到的。从终端使用时,二进制文件工作得很好。
确切的错误信息如下:
command failed: "/usr/bin/wkhtmltopdf" "--page-size" "letter" "--orientation" "landscape" "--quiet"
我在 application.rb 中设置了以下配置:
PDFKit.configure do |config|
config.wkhtmltopdf = "/usr/bin/wkhtmltopdf"
config.default_options = {
:page_size => 'letter',
:orientation => 'landscape'
}
在 Rails 控制台中,创建一个 PDFKit.new,使用相同的 url 产生该错误,并将其保存到文件中工作正常。动作中的代码如下所示:
@url = params[:url]
@kit = PDFKit.new(Base64.decode64(@url))
@filename = "#{Time.now.strftime("%Y%m%d-%H%M%S")}owner.pdf"
@filepath = "#{Rails.root}/public/pdfs/#{@filename}"
@file = File.open(@filepath, 'w')
@kit.to_file(@file.path)
@file = File.open(@filepath, 'r')
send_data(@file.read, :type => "pdf", :filename => @filename)
所以基本上,url 是用 Base64 编码编码的,并在控制器动作中解码。url 编码/解码部分工作正常,这不应该是问题的一部分。
pdf 被(/应该)保存到带时间戳的文件中,并发送给用户下载。
权限设置为这个问题的答案建议。我试过使用 wkhtmltopdf gem,没有帮助。
我对此感到非常沮丧,并且非常感谢任何对我正确方向的帮助。
编辑:命令本身似乎工作正常。我将错误消息中的命令复制粘贴到终端中,它可以工作。所以我想不出除了权限问题之外的任何其他原因。检查...