Визуализация изображений Wicked-PDF с помощью Rails Active Storage

Я не могу заставить wicked_pdf отображать изображение из активного хранилища в файл pdf. Я использую: wicked_pdf_image_tag или wicked_pdf_asset_base64 или просто image_tag в шаблоне pdf. Тогда поставить rails_blob_path(company.logo) или просто company.logo какому-либо другому методу?


person Kazmin    schedule 06.06.2018    source источник


Ответы (4)


В этой ветке проблемы GitHub продолжается работа по добавлению поддержки Active Storage в wicked_pdf

Пока это не будет добавлено (вы можете помочь!), Вы можете создать вспомогательный метод примерно так (это немного измененная версия примера из потока выше):

# 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:

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

Я использую service_url вот так

image_tag(company.logo.service_url)

Дополнительная информация здесь: https://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url

person cseelus    schedule 28.07.2018

Предлагаемое Unixmonkey решение сработало, но мне не нравится, что актив загружается каждый раз, даже если он уже существует в каталоге tmp.

Это модифицированная версия, которая лучше всего мне подошла. Я основал путь на ключе большого двоичного объекта, который должен гарантировать отображение последней версии нашего ресурса. 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
person webaholik    schedule 26.01.2020

вместо ‹% = image_tag url_for (@ student_course.try (: avatar))%› я использовал ‹% = image_tag polymorphic_url (@ student_course.try (: avatar))%›

работал у меня.

person Abhijith    schedule 15.07.2020