Установите изображение по умолчанию для предварительного просмотра миниатюр PDF в Ruby on Rails - PullRequest
0 голосов
/ 05 декабря 2018

Я работал над этим некоторое время и сделал много Googles, но не могу понять, где я иду не так.(На этой неделе я перешел на двухлетний сайт, поэтому я все еще пытаюсь найти способ, который не помогает).

При загрузке файла создается миниатюра предварительного просмотра.,Для файлов изображений этот предварительный просмотр не создает проблем, но для файлов PDF я хочу установить изображение по умолчанию в качестве эскиза вместо предварительного просмотра PDF.

В моем классе DocumentUploader у меня есть следующее, которое устанавливаетминиатюра изображения (я не включил некоторые биты, которые не имеют отношения):

def convert_to_image(height, width)
  image = MiniMagick::Image.open(current_path)
  image.resize "#{height}x#{width}"
  image.write(current_path)
end

version :preview, if: :not_svg? do
  process convert_to_image: [210, 297]
  process convert: :jpg

  def full_filename(for_file = model.file)
    super.chomp(File.extname(super)) + ".jpg"
  end
end

def not_svg?(new_file)
  !new_file.content_type.start_with? "image/svg+xml"
  !new_file.content_type.start_with? "application/pdf"
end

Используя это в качестве основы, я написал следующее для PDF (опять же, не относящиеся к делу части исключены):

def set_default_pdf(height, width)
  image = MiniMagick::Image.open("app/assets/images/pdf_placeholder.svg")
  image.resize "#{height}x#{width}"
  image.write("app/assets/images/pdf_placeholder.svg")
end

version :preview, if: :pdf? do
  process set_default_pdf: [210, 297]
  process convert: :jpg

  def full_filename(for_file = model.file)
    super.chomp(File.extname(super)) + ".jpg"
  end
end

def pdf?(new_file)
  new_file.content_type.start_with? "application/pdf"
end

В моем представлении есть следующее:

<%= link_to document.file.url, target: "_blank" do %>
  <%= image_tag document_preview_url(document.file) if document.file? %>
<% end %>

Итак, я проследил это до моего модуля DocumentPreviewHelper, который имеет следующее:

def document_preview_url(file)
  return file.preview.url(response_content_type: %( "image/jpeg" )) if file.preview.present?

  file.url(response_content_type: %( "image/svg+xml"))
end

С помощьюкомментарии:

  # Retrieve a preview thumbnail for a PDF with the correct content type set.
  #
  # Without overriding the content_type, the headers would return 'application/pdf'
  # for the preview image, and all browsers except for Safari will show the image
  # (regardless of the content type header). This fixes the preview thumbs for Safari.

Я чувствую, что именно здесь я должен внести свои изменения, но из моих (ограниченных) знаний мне кажется, что предварительный просмотр PDF должен показываться, поскольку они были преобразованы вJPG в DocumentUploader.

Я пробовал различные изменения и изменения, но предварительный просмотр PDF просто остаются неработающими ссылками.Что мне не хватает / где я иду не так?Я чувствую, что это должно быть легко исправить, но я просто не вижу этого, и приходит разочарование.

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, что самый простой способ - создать метод 'thumbnail_image' в вашем ApplicationHelper, который принимает документ в качестве аргумента:

def thumbnail_image(document)
  if document.pdf?
    path_to_default_thumbnail (i.e. app/assets/images/thumbnail.jpg)
  else
    document_preview_url(document.file)
  end
end

Затем, по вашему мнению:

<%= link_to document.file.url, target: "_blank" do %>
  <%= image_tag thumbnail_image(document.file) if document.file? %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...