使用Rails Active Storage渲染Wicked-PDF图像

时间:2018-06-06 13:14:54

标签: wicked-pdf rails-activestorage ruby-on-rails-5.2

我无法让wicked_pdf将图像从活动存储显示到pdf文件。 我是否在pdf模板中使用:wicked_pdf_image_tagwicked_pdf_asset_base64image_tag。那么我可以将rails_blob_path(company.logo)company.logo提供给任何其他方法吗?

4 个答案:

答案 0 :(得分:1)

正在进行一些工作,以向this GitHub issue thread中的wicked_pdf添加Active Storage支持

在添加之前(您可以提供帮助!),您可以创建类似于以下内容的帮助程序方法(这是上面线程中示例的稍微修改后的版本):

# Use like `image_tag(wicked_active_storage_asset(user.avatar))`
def wicked_active_storage_asset(asset)
  return unless asset.respond_to?(:blob)
  save_path = Rails.root.join('tmp', asset.id)
  File.open(save_path, 'wb') do |file|
    file << asset.blob.download
  end
  save_path.to_s
end

或者,如果您可以直接在PDF创建过程中使用网络资源:

<img src="<%= @user.avatar.service_url %>">
<img src="<%= @user.avatar.variant(resize: "590").processed.service_url %>">

答案 1 :(得分:0)

我这样使用service_url

image_tag(company.logo.service_url)

此处有更多信息:https://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url

答案 2 :(得分:0)

Unixmonkey建议的解决方案有效,但是我不喜欢每次都下载资产,即使该资产已经存在于tmp目录中也是如此。

这是最适合我的修改版本。我将路径基于Blob键,这应确保呈现资产的最新版本。需要Pathname以确保为路径创建目录:

# Use like `image_tag(wicked_active_storage_asset(facility.logo))`
def wicked_active_storage_asset(asset)
  return unless asset.respond_to?(:blob)
  save_path = Rails.root.join('tmp', asset.blob.key)
  begin
    require 'pathname'
    some_path = Pathname(save_path)
    some_path.dirname.mkpath
    File.open(save_path, 'wb') do |file|
      file << asset.blob.download
    end
  end unless File.exist?(save_path)
  save_path
end

答案 3 :(得分:0)

而不是 <%= image_tag url_for(@ student_course.try(:avatar))%> 我用了 <%= image_tag polymorphic_url(@ student_course.try(:avatar))%>

为我工作。