Wicked-PDF not showing images, 'wicked_pdf_image_tag' undefined

13,105

Solution 1

First thing create a pdf template to render and use your wicked_pdf tags in that template.. for example-

app/views/layout/application.pdf.erb-

<!doctype html>
<html>
  <head>
    <meta charset='utf-8' />
  </head>
  <body onload='number_pages'>
    <div id="content">
      <%= yield %>
    </div>
  </body>
</html>

app/views/pdf/pdf_view.pdf.erb-

<div>
  <%= wicked_pdf_image_tag 'logo.jpg' %>
</div>

use this template instead

def save
  pdf = WickedPdf.new.pdf_from_string(
                        render_to_string(
                          template: 'example/pdf_view.pdf.erb',
                          layout: 'layouts/application.pdf.erb'))
  send_data(pdf,
            filename: 'file_name.pdf',
            type: 'application/pdf',
            disposition: 'attachment') 
end

This might help you..

Solution 2

Use the wicked_pdf_image_tag helper in your view and reference the image with asset_url if your image is in public/images or use asset_pack_url if the image is in public/packs/media/images

<%= wicked_pdf_image_tag asset_url('/images/footer_logo.png') %>

or

<%= wicked_pdf_image_tag asset_pack_url('media/images/footer_logo.png') %>
Share:
13,105

Related videos on Youtube

NewbieOnRails
Author by

NewbieOnRails

Updated on June 15, 2022

Comments

  • NewbieOnRails
    NewbieOnRails 12 months

    I want to generate a PDF with our department logo in it. When I try to use the WickedPdf class in my controller (using the method described at https://github.com/mileszs/wicked_pdf):

    def some_action
      image_tag_string = image_tag('logo.jpg')
      pdf = WickedPdf.new.pdf_from_string(image_tag_string)
      save_path = Rails.root.join('testpdfs','logotest.pdf')
      File.open(save_path, 'wb') do |file|
        file << pdf
      end
    end
    

    ...the application saves the PDF to the target directory, but it has a blue-and-white '?' mark where the image should be.

    If I do this instead:

      image_tag_string = wicked_pdf_image_tag('logo.jpg')
      pdf = WickedPdf.new.pdf_from_string(image_tag_string)
    

    I get the following error:

    NoMethodError:
       undefined method `wicked_pdf_image_tag' for #<...
    

    It would appear that my Rails app is also missing / not linking to a helper file belonging to the wicked-pdf gem.

    Answers to similar questions on StackOverflow recommend writing a custom "image-tag" helper to locate the image or installing wkhtmltopdf. For me, image-tag shows the logo just fine when placed in a View (whatever.html.erb). "logo.jpg" is already located in both the asset pipeline and #{RailsRoot}/public/images. Finally, I am using wkhtmltopdf 0.9.9, wicked-pdf 0.11.0, and rails 4 on Ubuntu 14.04.

    In a nutshell - what am I doing wrong that causes WickedPDF to fail to render the image?

    • Krzysztof Rygielski
      Krzysztof Rygielski about 8 years
      As I have said, the wicked_pdf_image_tag is a helper method, so it can't be used (at least it shouldn't be) in controller action. You should make a view, where you'd put in your image, and use that view to generate pdf. But to make long story short - for wicked_pdf the image paths need to be a full, absolute paths, with full file system path or full url (with domain and protocol). I'll try to come up with some simple example and post it here (unless someone beats me to it).
  • Joshua Pinter
    Joshua Pinter about 4 years
    Install to 0.12.5 of wkhtmltopdf and see if that resolves the issue. There was a known issue with https image URLs prior to that version: github.com/wkhtmltopdf/wkhtmltopdf/issues/3001
  • PhilT
    PhilT over 1 year
    This helped me. However, as the image in my case was in assets/images/, asset_url('image.png') was all I needed. Thanks.

Related