визуализация изображения wicked_pdf

как получить изображения продукта для отображения в формате pdf?

У меня есть этот код в файле просмотра

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

и он показывает все изображения для этого автомобиля.

но если я использую тот же код в show.pdf.erb, то вместо изображений я получаю только вопросительные знаки ... например, изображение отсутствует. Итак, есть ли способ получить их на бумаге? Спасибо.

p.s. вот что показывает консоль

***************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 — это идентификатор активов, назначенных автомобилю, здесь я храню одно изображение большего размера (большой палец, средний, большой...) и у меня есть 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? Пожалуйстаееее. помощь!!!


person rmagnum2002    schedule 15.10.2011    source источник
comment
может быть, этот ответ поможет нам stackoverflow.com/a/47628899/3959987   -  person Balachandran    schedule 04.12.2017
comment
Этот ответ полезен для вас stackoverflow.com/a/47628899/3959987   -  person Balachandran    schedule 04.12.2017


Ответы (4)


Версия 0.7.9 есть

<%= wicked_pdf_image_tag 'myfile.jpg' %>

В основном он возвращает абсолютный путь в файловой системе:

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

См. также: https://github.com/mileszs/wicked_pdf

person Rimian    schedule 08.11.2012

Вместо использования wicked_pdf_image_tag хелпера можно использовать вместе image_tag и image_url хелперы rails, чтобы получить абсолютный путь к изображению (это то, что требуется для wicked_pdf gem):

image_tag image_url('dir/image.png')

здесь dir/image.png — путь к изображению относительно стандартного местоположения в приложении rails (app/assets/images для изображений).

person tap349    schedule 06.07.2015

хорошо, так что я нашел ответ

код <%= image_tag(asset.asset.url(:medium)) %> генерирует URL-адрес изображения, которое в html будет выглядеть как <img alt="2012_bmw_7_series_gearshift" src="/system/assets/174/original/2012_bmw_7_series_gearshift.jpg?1318267462">, поэтому мои изображения начинаются с системной карты, и все, что мне нужно было сделать, это написать метод в 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 %>

было легко, но все же мне потребовалось несколько дней, чтобы понять это. Приятный день.

person rmagnum2002    schedule 17.10.2011
comment
Чистое и простое решение. Спасибо. Но для Rails 4.2 вы должны изменить RAILS_ROOT на Rails.root, вот и все. - person Juanin; 23.05.2016

Хотя ответ @tap349 немного сработал для меня, мне пришлось сделать что-то совершенно другое для изображений, уже сохраненных в проекте.

  • Итак, для изображений, загруженных пользователями, я использую гем mini_magick и в своих представлениях у меня есть (я использую синтаксис слизи):
= 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/
person helenatxu    schedule 17.03.2021