wicked_pdf Error: PDF could not be generated

13,616

Solution 1

I had wkhtmltopdf-binary already in gemfile, but as this was working on my local computer and not on server, I left this error for the server support team to care off.. they have checked the path to wkhtmltopdf, they tried to convert a simple html to pdf and it worked.. so they tried to run a bundle update command and after this the pdf converting worked fine on server too. I had a gem path changed and I guess this was the problem. I posted my solution in case someone else will have this problem too.

Solution 2

I had the same problem. The solution was to add wkhtmltopdf-binary to the gem file and run bundle install.

gem "wicked_pdf"
gem "wkhtmltopdf-binary"

Solution 3

For Alpine 3.9+ the wkhtmltopdf binary is available, however I was getting either a blank PDF or "Failed to load document" error - despite working fine locally on MacOSX. It turns out that you need to include fonts explicitly for alpine builds (at least)

Controller action

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

The above worked locally on MacOSX machine but on a server based on ruby alpine image, as below, it failed with failed to load document

Dockerfile

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

even a more basic example failed with a blank 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

Solution

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
...

Ideally Alpine would include a basic font with the wkhtmltopdf package, however until such time I found this to be a useful source of info and/or good for adding a mutistage Docker file.

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

NOTE:

lack of an explicit font package in alpine may also cause PDF conversion using libreoffice to fail too. We found corrupt PDFs when converted from docx files in particular.

Solution 4

I had the same problem. I had wkhtmltopdf-binary installed and bundle update didn't help neither. Here is what helped me:

The important thing is that I run this on Alpine Linux and it does not seem to be supported by gem wkhtmltopdf_binary_gem https://github.com/zakird/wkhtmltopdf_binary_gem/issues/53

I installed separately wkhtmltopdf into the system: apk add wkhtmltopdf

And then edited the initializer to include the binary path:

# config/initializers/wicked_pdf.rb
require "wicked_pdf"

WickedPdf.config = {
  exe_path: ENV["WKHTMLTOPDF_BIN"]
}

Solution 5

I'm facing the same issue, it works fine on local machine but when deployed on the server it raises an error:
Error: PDF could not be generated!.
In my case, there are some dependencies missing on the server. Use the below command on the server to install the dependencies.
sudo apt-get install libfontconfig1 libxrender1

Share:
13,616
rmagnum2002
Author by

rmagnum2002

LinkedIn profile: http://www.linkedin.com/pub/sergiu-rosca/35/587/898/ github: https://github.com/rmagnum2002/ ruby on rails, vuejs, ... 6-8 may 2012 - particpant at DataHarvest conference in Brussel, Belgium http://www.wobbing.eu/news/data-harvest-conference-2012 14-20 may 2012 Hackathon sponsored by WorldBank, OpenMedia, E-Gov Moldova - building apps based on Open Data. http://opendata.md/

Updated on June 27, 2022

Comments

  • rmagnum2002
    rmagnum2002 about 2 years

    Gemfile

    gem "wicked_pdf"
    gem "wkhtmltopdf-binary"
    

    the error:

    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'
    }
    
  • bo-oz
    bo-oz over 4 years
    Could you share a bit more on what kind of error you are having? I just posted this question, stackoverflow.com/questions/60334567/…, which might be answered with the solution you posted here.