wicked_pdf Ошибка: PDF не может быть сгенерирован

Gemfile

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'
}

person rmagnum2002    schedule 24.12.2011    source источник
comment
У вас действительно установлен бинарный файл wkhtmltopdf в /usr/bin? Можете ли вы перейти в оболочку и выполнить wkhtmltopdf google.com google.pdf?   -  person Unixmonkey    schedule 26.12.2011
comment
да. спасибо, мы решили эту проблему, просто запустив команду обновления пакета. У меня был драгоценный камень в gemfile с измененным путем, и мы думаем, что это была проблема.   -  person rmagnum2002    schedule 26.12.2011
comment
У меня все еще есть та же проблема в OSX, добавление «wkhtmltopdf-binary» в gemfile у меня не сработало. Генерация pdf-файлов работает, но не в Rails. Однако он работает на рабочем сервере.   -  person lafeber    schedule 16.01.2013


Ответы (5)


У меня такая же проблема. Решение состояло в том, чтобы добавить wkhtmltopdf-binary в файл gem и запустить bundle install.

gem "wicked_pdf"
gem "wkhtmltopdf-binary"
person Linus Oleander    schedule 18.01.2012

У меня уже был wkhtmltopdf-binary в gemfile, но поскольку это работало на моем локальном компьютере, а не на сервере, я оставил эту ошибку на усмотрение службы поддержки сервера.. они проверили путь к wkhtmltopdf, они попытались преобразовать простой html в pdf, и это сработало .. поэтому они попытались запустить команду bundle update, и после этого преобразование в pdf отлично заработало и на сервере. У меня был изменен путь к драгоценному камню, и я думаю, что это была проблема. Я разместил свое решение на случай, если у кого-то еще возникнет эта проблема.

person rmagnum2002    schedule 26.12.2011

Для Alpine 3.9+ доступен двоичный файл wkhtmltopdf, однако я получал либо пустой PDF-файл, либо ошибку «Не удалось загрузить документ», несмотря на то, что локально на MacOSX он работал нормально. Получается, что нужно включать шрифты явно для альпийских билдов (как минимум)

Действие контроллера

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, как показано ниже, не удалось загрузить документ.

Докерфайл

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

Решение

Докерфайл

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, однако до тех пор я находил это полезным источником информации и/или подходящим для добавления многоуровневого файла Docker.

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

ПРИМЕЧАНИЕ:

отсутствие явного пакета шрифтов в alpine также может привести к сбою преобразования PDF с использованием libreoffice. Мы обнаружили поврежденные PDF-файлы, в частности, при преобразовании из файлов docx.

person Joel Sugarman    schedule 25.09.2019
comment
Не могли бы вы рассказать немного больше о том, какая ошибка у вас возникла? Я только что опубликовал этот вопрос, stackoverflow.com/questions/60334567/, на которое можно ответить решением, которое вы разместили здесь. - person bo-oz; 21.02.2020

У меня такая же проблема. Я установил wkhtmltopdf-binary, и bundle 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"]
}
person mario199    schedule 10.07.2019

Я столкнулся с той же проблемой, он отлично работает на локальном компьютере, но при развертывании на сервере выдает ошибку:
Ошибка: не удалось сгенерировать PDF!.
В моем случае , на сервере отсутствуют некоторые зависимости. Используйте приведенную ниже команду на сервере для установки зависимостей.
sudo apt-get install libfontconfig1 libxrender1

person Akash Deep    schedule 20.03.2020