【问题标题】:PDFKit (wkhtmltopdf) Broken Pipe, OS X and Rails 3PDFKit (wkhtmltopdf) 断管、OS X 和 Rails 3
【发布时间】: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


【解决方案1】:

关于将 quiet 参数更改为退出。

此更改仅在您使用 wkhtmltopdf gem 时有效,该 gem 使用的是 wkhtmltopdf 二进制文件的非常旧版本。

使用 wkhtmltopdf gem

10:32:15 wkhtml >     wkhtmltopdf --version
wkhtmltopdf 0.8.3 using wkhtmltopdf patched qt
Copyright (C) 2008,2009 Jakob Truelsen,
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jakob Truelsen
Patches by Mário Silva and Emmanuel Bouthenot

10:32:16 wkhtml >     wkhtmltopdf --help | grep quit
  -q, --quit                      Be less verbose.
10:32:16 wkhtml >     wkhtmltopdf --help | grep quite
10:32:19 wkhtml > 

使用我安装的最新二进制文件

10:33:40 tmp > wkhtmltopdf --version
Name:
  wkhtmltopdf 0.9.9

License:
  Copyright (C) 2008,2009 Wkhtmltopdf Authors.



  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it. There is NO
  WARRANTY, to the extent permitted by law.

Authors:
  Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
  Bouthenot.

10:33:50 tmp > wkhtmltopdf --help | grep quit
10:34:02 tmp > wkhtmltopdf --help | grep quiet
  -q, --quiet                         Be less verbose
10:34:07 tmp > 

wkhtmltopdf gem 附带的旧二进制文件中存在拼写错误。我建议您使用初始化或其他内容来猴子修补 pdfkit,具体取决于您是否包含 wkhtmltopdf gem。

我还会接受一个拉取请求,该请求使 pdfkit 知道它正在运行的 wkthtmltopdf 版本并有条件地切换该参数。

【讨论】:

  • 糟糕,打算将其发布为对@jvatic 发布的解决方案的评论
【解决方案2】:

/lib/pdfkit/pdfkit.rb:35 更改为以下内容,一切都按预期工作(也可以使用中间件)。

args << '--quit'

【讨论】:

  • 简写版本args &lt;&lt; "-q" 更好,因为它适用于所有版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2012-03-22
  • 2011-09-14
  • 2023-03-03
  • 2015-01-22
  • 1970-01-01
相关资源
最近更新 更多