Показать преобразованный PDF на страницу рельсов - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я проверял, как отображать миниатюры PDF в Rails, так как по какой-то причине создание версии моего файла в моем загрузчике не работает, и это привело меня к следующему: Преобразование .do c или .pdf к изображению и отображение миниатюры в Ruby?

Итак, я дошел до этого:

def show_thumbnail
    require 'rmagick'
    pdf = Magick::ImageList.new(self.pdf_file.file.path)
    first_page = pdf.first
    scaled_page = first_page.scale(300, 450)
end 

Но как мне отобразить scaled_page для веб-страницу?

Я добавил эту функцию в декоратор, чтобы я мог сделать что-то вроде этого:

= image_tag(pdf.pdf_file.show_thumbnail)

Но это приводит к этой ошибке:

Can't resolve image into URL: undefined method `to_model' for #<Magick::Image:0x0000000122c4b300>

1 Ответ

1 голос
/ 27 апреля 2020

Для отображения изображения браузеру нужен только URL-адрес изображения. Если вы не хотите сохранять изображение на жестком диске, вы можете закодировать его в URL-адрес данных.

...
scaled_page = first_page.scale(300, 450)

# Set the image format to png so that we can quantize it to reduce its size
scaled_page.format('png')

# Quantize the image
scaled_page = scaled_page.quantize

# A blob is just a binary string
blob = scaled_page.to_blob

# Base64 encode the blob and remove all line feeds
base64 = Base64.encode64(blob).tr("\n", "")

data_url = "data:image/png;base64,#{base64}"

# You need to find a way to send the data URL to the browser,
# e.g. `<%= image_tag data_url %>`

Но я настоятельно рекомендую сохранить миниатюры на жестком диске или лучше на CDN. потому что такие изображения трудно генерировать, но к ним часто обращаются браузеры. Если вы решили это сделать, вам нужна стратегия для генерации уникальных URL-адресов для этих миниатюр и способ связывания URL-адресов с вашими файлами PDF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...