7

我无法让 wicked_pdf 将图像从活动存储显示到 pdf 文件。我是否使用:wicked_pdf_image_tagwicked_pdf_asset_base64image_tag在 pdf 模板中使用。然后我给一个rails_blob_path(company.logo)或只是company.logo给任何其他方法?

4

4 回答 4

6

wicked_pdf此 GitHub 问题线程中正在进行一些工作以添加 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.to_s)
  File.open(save_path, 'wb') do |file|
    file << asset.blob.download
  end
  save_path.to_s
end

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

<img src="<%= @user.avatar.service_url %>">
<img src="<%= @user.avatar.variant(resize: "590").processed.service_url %>">
于 2018-07-03T18:45:18.147 回答
0

service_url这样用

image_tag(company.logo.service_url)

更多信息在这里:https ://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url

于 2018-07-28T01:01:37.457 回答
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
于 2020-01-26T19:22:03.687 回答
0

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

为我工作。

于 2020-07-15T00:41:47.343 回答