wicked_pdf image rendering

20,120

Solution 1

ok, so I found the answer

the <%= image_tag(asset.asset.url(:medium)) %> code generates the url to the image that in html will look like <img alt="2012_bmw_7_series_gearshift" src="/system/assets/174/original/2012_bmw_7_series_gearshift.jpg?1318267462"> so my images starts in system map and all I had to do is to write a method in application_helper.rb like this:

module ApplicationHelper

 def pdf_image_tag(image, options = {})
  options[:src] = File.expand_path(RAILS_ROOT) + '/public' + image
  tag(:img, options)
 end
end

this way wiked_pdf will know that image tag called pdf_image_tag will start from system folder in public and the final code for the pdf.html.erb will be:

<% for asset in @car.assets %>
  <%= pdf_image_tag(asset.asset.url(:medium), :style=>"margin:0px;padding:0px", :width=>"250", :height=>"200")%>
<% end %>

was easy, but still took me a few days to figure it out. Nice day.

Solution 2

Version 0.7.9 is

<%= wicked_pdf_image_tag 'myfile.jpg' %>

It basically returns the absolute path on the file system:

file:///path/to/image/myfile.jpg

Also see: https://github.com/mileszs/wicked_pdf

Solution 3

Instead of using wicked_pdf_image_tag helper it's possible to use image_tag and image_url rails helpers together to get absolute path to image (this is what required for wicked_pdf gem):

image_tag image_url('dir/image.png')

here dir/image.png is image path relative to standard location in rails app (app/assets/images for images).

Share:
20,120
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 August 05, 2022

Comments

  • rmagnum2002
    rmagnum2002 almost 2 years

    how do I get images of a product to show in pdf?

    I have this code in view file

    <div id="img-slide">
        <% for asset in @car.assets %>
        <%= image_tag(asset.asset.url(:medium)) %>
        <% end %>
    </div>
    

    and it shows all images for this car.

    but if I use the same code in show.pdf.erb then instead of images I got only question marks.. like the image missing thing. So, is there a way to get them on paper? Thanks.

    p.s. there is what console is showing

    ***************WICKED***************
      Asset Load (0.2ms)  SELECT `assets`.* FROM `assets` WHERE (`assets`.car_id = 29)
      Carmodel Load (0.2ms)  SELECT `carmodels`.* FROM `carmodels` WHERE `carmodels`.`id` = 28 LIMIT 1
    Rendered cars/show.pdf.erb (255.2ms)
    "***************/usr/bin/wkhtmltopdf       -q - - ***************"
    

    update

    <%= pdf_image_tag('/public/system/assets/163/medium/2011_lincoln_navigator_l_angularfront.jpg', :style=>"margin:0px;padding:0px", :width=>"300", :height=>"240")%>
    

    this code shows how the link should look like in html, with this code I can render one photo of the car, but it will be the same for all cars, so I didn't do much.

    the 163 number is the id of assets that is assigned to car, here I keep one image with more sizes(thumb, medium, large..) and I got 5 maps with different numbers for one car. So I have lots of maps with numberes like this as I have at least 5 photos for each car. each car have 5 assets. In show.html I can see them, but not in pdf. I did put this in application helper:

    def pdf_image_tag(image, options = {})
      options[:src] = File.expand_path(RAILS_ROOT) + '' + image
      tag(:img, options)
    end
    

    but this is only for images that you have on your server and will be the same for all cars, how can I get at least one image of each car to show in pdf? Pleaseeeee. help!!!

  • Juanin
    Juanin about 8 years
    Clean and easy solution. Thanks. But for Rails 4.2 you should change RAILS_ROOT for Rails.root, that's all.
  • Anthony To
    Anthony To about 2 years
    This is the most up to date solution