7

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

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

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

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

但是如果我在 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 - - ***************"

更新

<%= 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 格式显示?拜托了。帮助!!!

4

5 回答 5

33

版本 0.7.9 是

<%= wicked_pdf_image_tag 'myfile.jpg' %>

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

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

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

于 2012-11-08T01:05:58.493 回答
11

除了使用wicked_pdf_image_taghelper 之外,还可以使用image_tagimage_urlrails helper 一起获得图像的绝对路径(这是wicked_pdfgem 所需要的):

image_tag image_url('dir/image.png')

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

于 2015-07-06T15:51:42.783 回答
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

这样 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 %>

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

于 2011-10-17T19:28:17.647 回答
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/
于 2021-03-17T16:07:40.620 回答
0

唯一对我有用的是使用这个:

<%= image_tag wicked_pdf_asset_base64('logo') %>
于 2022-01-12T13:50:18.797 回答