【问题标题】:wicked_pdf image renderingwicked_pdf 图像渲染
【发布时间】:2011-12-08 08:10:20
【问题描述】:

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

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

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

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

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

附言控制台正在显示什么

***************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 格式显示?拜托了。救命!!!

【问题讨论】:

标签: ruby-on-rails wicked-pdf


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      好的,所以我找到了答案

      &lt;%= image_tag(asset.asset.url(:medium)) %&gt; 代码生成图像的 url,在 html 中看起来像 &lt;img alt="2012_bmw_7_series_gearshift" src="/system/assets/174/original/2012_bmw_7_series_gearshift.jpg?1318267462"&gt; 所以我的图像从系统映射开始,我所要做的就是在 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 %>
      

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

      【讨论】:

      • 干净简单的解决方案。谢谢。但是对于 Rails 4.2,您应该将 RAILS_ROOT 更改为 Rails.root,仅此而已。
      【解决方案4】:

      除了使用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 用于图像)。

      【讨论】:

        【解决方案5】:

        0.7.9 版本是

        <%= wicked_pdf_image_tag 'myfile.jpg' %>
        

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-21
          • 2017-09-17
          • 2016-04-23
          • 1970-01-01
          相关资源
          最近更新 更多