繁体   English   中英

wicked_pdf 图像渲染

[英]wicked_pdf image rendering

如何获取以 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 格式显示? 拜托了。 帮助!!!

0.7.9 版本是

<%= wicked_pdf_image_tag 'myfile.jpg' %>

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

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

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

除了使用wicked_pdf_image_tag helper,还可以一起使用image_tagimage_url rails helper 来获取图像的绝对路径(这是wicked_pdf gem 所需的):

image_tag image_url('dir/image.png')

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

好的,所以我找到了答案

<%= 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 %>

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

虽然@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/

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

<%= image_tag wicked_pdf_asset_base64('logo') %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM