Я не могу заставить wicked_pdf отображать изображение из активного хранилища в файл pdf. Я использую: wicked_pdf_image_tag
или wicked_pdf_asset_base64
или просто image_tag
в шаблоне pdf. Тогда поставить rails_blob_path(company.logo)
или просто company.logo
какому-либо другому методу?
Визуализация изображений Wicked-PDF с помощью Rails Active Storage
Ответы (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 %>">
Я использую service_url
вот так
image_tag(company.logo.service_url)
Дополнительная информация здесь: https://api.rubyonrails.org/v5.2.0/classes/ActiveStorage/Variant.html#method-i-service_url
Предлагаемое 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
вместо ‹% = image_tag url_for (@ student_course.try (: avatar))%› я использовал ‹% = image_tag polymorphic_url (@ student_course.try (: avatar))%›
работал у меня.