wicked_pdf图像渲染

时间:2011-10-15 12:54:18

标签: ruby-on-rails wicked-pdf

如何获取以pdf格式显示的产品图片?

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

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

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

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

P.S。控制台正在显示

***************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 - - ***************"

更新

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

此代码显示链接在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

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

4 个答案:

答案 0 :(得分:27)

版本0.7.9

<%= wicked_pdf_image_tag 'myfile.jpg' %>

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

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

另见:https://github.com/mileszs/wicked_pdf

答案 1 :(得分:7)

好的,所以我找到了答案

<%= image_tag(asset.asset.url(:medium)) %>代码会生成图片的网址,而html中的网址会显示为<img alt="2012_bmw_7_series_gearshift" src="/system/assets/174/original/2012_bmw_7_series_gearshift.jpg?1318267462">,因此我的图片会在系统地图中启动,而我所要做的就是在{{1}中编写方法像这样:

application_helper.rb

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

module ApplicationHelper

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

很容易,但还是花了几天时间弄清楚了。美好的一天。

答案 2 :(得分:6)

除了使用wicked_pdf_image_tag帮助程序之外,还可以使用image_tagimage_url rails帮助程序来获取映像的绝对路径(这是{{1}所需的内容宝石):

wicked_pdf

此处image_tag image_url('dir/image.png') 是相对于rails应用中标准位置的图片路径(图片为dir/image.png)。

答案 3 :(得分:0)

虽然@tap349 的回答对我有用,但我必须对已经存储在项目中的图像做一些完全不同的事情。

  • 因此,对于用户上传的图像,我使用 mini_magick gem 并在我的视图中使用(我使用 slime 语法):
= image_tag image_url(picture.url(:medium))
  • 对于已经存储在项目中的图像,我必须手动创建绝对路径,方法是返回图像位置并将其与请求协议和主机连接起来(我使用 Webpacker,我的图像在 app/javascript/images 中) :
= wicked_pdf_image_tag URI.join(request.base_url, asset_pack_path('media/images/logo.png'))

在另一篇文章中,我看到这个命令可以帮助我查看路径是否存在,您可以在 ruby​​ 控制台中尝试:

Webpacker.manifest.send(:data).keys.grep /logo/