wicked_pdf图像渲染

rma*_*002 4 ruby-on-rails wicked-pdf

如何获得以pdf格式显示的产品图像?

我在视图文件中有这个代码

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

它显示了这辆车的所有图像.

但是如果我在show.pdf.erb中使用相同的代码,那么我只会得到问号而不是图像...就像图像丢失的东西一样.那么,有没有办法让它们在纸上?谢谢.

ps有什么控制台显示

***************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 - - ***************"
Run Code Online (Sandbox Code Playgroud)

更新

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

这段代码显示了链接在html中应该是什么样子,这段代码我可以渲染一张汽车的照片,但对于所有汽车来说都是一样的,所以我做的并不多.

163号码是分配给汽车的资产的ID,这里我保留一个图像的尺寸更大(拇指,中等,大......),我有一张汽车有5个不同数字的地图.所以我有很多像这样的数字地图,因为我每辆车至少有5张照片.每辆车有5个资产.在show.html中我可以看到它们,但不是pdf.我把它放在应用程序助手中:

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

但这仅适用于您服务器上的图像,并且对于所有车辆都是相同的,我如何才能获得每张车的至少一张图像以pdf显示?Pleaseeeee.救命!!!

Rim*_*ian 30

版本0.7.9是

<%= wicked_pdf_image_tag 'myfile.jpg' %>
Run Code Online (Sandbox Code Playgroud)

它基本上返回文件系统上的绝对路径:

file:///path/to/image/myfile.jpg
Run Code Online (Sandbox Code Playgroud)

另请参阅:https://github.com/mileszs/wicked_pdf


rma*_*002 7

好的,所以我找到了答案

<%= image_tag(asset.asset.url(:medium)) %>代码生成的URL的图像,在HTML的样子<img alt="2012_bmw_7_series_gearshift" src="/system/assets/174/original/2012_bmw_7_series_gearshift.jpg?1318267462">,所以我的图片开始在系统地图和所有我需要做的是写一个方法application_helper.rb是这样的:

module ApplicationHelper

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

这样wiked_pdf就会知道名为pdf_image_tag的图像标签将从公共系统文件夹开始,pdf.html.erb的最终代码将是:

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

这很容易,但我还是花了几天才弄明白.美好的一天.

  • 清洁和简单的解决方案。谢谢。但是对于 Rails 4.2,您应该为 Rails.root 更改 RAILS_ROOT,仅此而已。 (2认同)

小智 6

而不是使用wicked_pdf_image_tag帮助器,可以使用image_tagimage_urlrails帮助器一起获取图像的绝对路径(这是wicked_pdfgem 所需的):

image_tag image_url('dir/image.png')
Run Code Online (Sandbox Code Playgroud)

dir/image.png是相对于rails app中标准位置的图像路径(app/assets/images用于图像).