【问题标题】:wicked_pdf Error: PDF could not be generatedwicked_pdf 错误:无法生成 PDF
【发布时间】:2012-01-27 10:27:17
【问题描述】:

宝石文件

gem "wicked_pdf"
gem "wkhtmltopdf-binary"

错误:

RuntimeError in CarsController#show

Failed to execute:
/usr/bin/wkhtmltopdf     --print-media-type    -q - - 
Error: PDF could not be generated!
Rails.root: /u/apps/zeepauto/autozeep_update

cars_controller

def show
    @class_showcar = true
    @class_admin = true
    @car = Car.find(params[:id])
    @search = Car.search(params[:search])
    @cars_see_special = Car.where(:special => "1").order('rand()').limit(3)

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @car }
      format.pdf do
        render :pdf => "#{@car.carname.name}",
               :print_media_type => true
      end
    end
  end

show.html.erb

<p class="show_links"><%= link_to  url_for(request.params.merge(:format => :pdf)) do %>
  <%= image_tag('/images/printversion.png', :alt => 'Download') %>
</p>

wicked_pdf.erb

# config/initializers/wicked_pdf.rb
WickedPdf.config = {
#  :exe_path => '/var/lib/gems/1.8/bin/wkhtmltopdf'
  :exe_path => '/usr/bin/wkhtmltopdf'
}

【问题讨论】:

  • 您是否真的在 /usr/bin 中安装了 wkhtmltopdf 二进制文件?你能跳到shell并执行“wkhtmltopdfgoogle.comgoogle.pdf”吗?
  • 是的。谢谢,我们通过运行包更新命令解决了这个问题。我在 gemfile 中有一个 gem,路径已更改,我们认为这是问题所在。
  • 我在 OSX 中仍然遇到同样的问题,将 'wkhtmltopdf-binary' 添加到 gemfile 对我不起作用。 pdfs 的生成工作,只是不在 Rails 中。不过它确实可以在生产服务器上运行。

标签: ruby-on-rails wicked-pdf


【解决方案1】:

我在使用 Ubuntu 20.04 时遇到了同样的问题。

我通过使用 wkhtmltopdf-binary 版本0.12.6.1解决了这个问题。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,它在本地机器上运行良好,但在服务器上部署时会引发错误:
    错误:无法生成 PDF!
    就我而言,服务器上缺少一些依赖项。在服务器上使用以下命令安装依赖项。
    sudo apt-get install libfontconfig1 libxrender1

    【讨论】:

      【解决方案3】:

      对于 Alpine 3.9+,wkhtmltopdf 二进制文件可用,但是我收到空白 PDF 或“无法加载文档”错误 - 尽管在 MacOSX 上本地工作正常。事实证明,您需要为 alpine 构建明确包含字体(至少)

      控制器动作

      def show
          respond_to do |format|
            format.html do
              render 'pdfs/templates/my_template.html.erb'
            end
      
            format.pdf do
              render(
                pdf: "file_name",
                template: 'pdfs/templates/my_template.html.erb',
                disposition: 'inline'
              )
            end
          end
      end
      

      以上内容在 MacOSX 机器上本地工作,但在基于 ruby​​ alpine 映像的服务器上,如下所示,失败并加载文档失败

      Dockerfile

      FROM ruby:2.6.3-alpine3.10
      ....
      # add wkhtmltopdf for use with wicked_pdf gem
      RUN apk --no-cache add wkhtmltopdf
      ...
      

      即使是更基本的示例也因空白 pdf 而失败

      respond_to do |format|
        format.pdf do
          pdf = WickedPdf.new.pdf_from_string('TESTING 123')
          send_data(
            pdf,
            filename: "file_name.pdf",
            type: 'application/pdf',
            disposition: 'inline'
          )
        end
      end
      

      解决方案

      Dockerfile

      FROM ruby:2.6.3-alpine3.10
      ....
      # add wkhtmltopdf for use with wicked_pdf gem
      RUN apk --no-cache add \
                        ttf-ubuntu-font-family \
                        wkhtmltopdf
      ...
      

      理想情况下,Alpine 会在 wkhtmltopdf 包中包含一个基本字体,但是直到那时我发现这是一个有用的信息来源和/或有利于添加一个 mutistage Docker 文件。

      https://github.com/madnight/docker-alpine-wkhtmltopdf/blob/master/Dockerfile

      注意:

      alpine 中缺少明确的字体包也可能导致使用libreoffice 的PDF 转换也失败。特别是从 docx 文件转换时,我们发现了损坏的 PDF。

      【讨论】:

      【解决方案4】:

      我遇到了同样的问题。我安装了wkhtmltopdf-binarybundle update 也没有帮助。这对我有帮助:

      重要的是我在 Alpine Linux 上运行它,gem wkhtmltopdf_binary_gem https://github.com/zakird/wkhtmltopdf_binary_gem/issues/53 似乎不支持它

      我在系统中单独安装了wkhtmltopdf:apk add wkhtmltopdf

      然后编辑初始化器以包含二进制路径:

      # config/initializers/wicked_pdf.rb
      require "wicked_pdf"
      
      WickedPdf.config = {
        exe_path: ENV["WKHTMLTOPDF_BIN"]
      }
      

      【讨论】:

        【解决方案5】:

        我的wkhtmltopdf-binary 已经在gemfile 中,但由于这是在我的本地计算机上而不是在服务器上运行,所以我将此错误留给服务器支持团队来处理.. 他们检查了 wkhtmltopdf 的路径,他们试图将一个简单的 html 转换为 pdf 并且它有效.. 所以他们尝试运行 bundle update 命令,之后 pdf 转换在服务器上也可以正常工作。我更改了 gem 路径,我想这就是问题所在。我发布了我的解决方案,以防其他人也遇到此问题。

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题。解决方案是将wkhtmltopdf-binary 添加到gem 文件并运行bundle install

          gem "wicked_pdf"
          gem "wkhtmltopdf-binary"
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-27
            相关资源
            最近更新 更多