Скрепка и RMagick - 3-страничный эскиз PDF и переименование - PullRequest
3 голосов
/ 03 августа 2011

Я хочу загрузить файл PDF и создать (в виде отдельного файла) миниатюру с первыми 3 страницами PDF, выровненными по горизонтали.Мне удалось создать Paperclip Processor с RMagick для генерации этого файла, но проблема в том, что я хочу, чтобы отдельный файл (со стилем для миниатюры) имел правильное расширение (например, jpg), а не оригинальный pdf.Было бы замечательно, если бы я все еще мог получить правильный путь, используя метод url со стилем, например:

>> attachment.url
=> "/some/path/id/original/test.pdf" # original file
>> attachment.url(:pdf_thumbnail)
=> "/some/path/id/pdf_thumbnail/test.jpg" # jpg file, not pdf

Некоторый код:

Процессор

module Paperclip
  class PdfThumbnail < Processor

    def initialize(file, options = {}, attachment = nil)
      super
      @file = file
      @instance = options[:instance]
      @current_format   = File.extname(@file.path)
      @basename         = File.basename(@file.path, @current_format)
    end

    def make
      dst = Tempfile.new([@basename, 'jpg'].compact.join("."))
      dst.binmode
      pdf = ::Magick::ImageList.new(File.expand_path(@file.path))
      image = pdf[0..2].append(false)
      image.format = 'JPG'
      image.write(File.expand_path(dst.path))
      dst.flush
      return dst
    end
  end
end

Модель (извлечение)

has_attached_file :file, :styles => {:pdf_thumbnail => ""}, :processors => [:pdf_thumbnail]

Это заканчивается тем, что:

$ tree .
.
`-- 46
    |-- original
    |   `-- test.pdf
    `-- pdf_thumbnail
        `-- test.pdf

и:

$ file 46/original/test.pdf
46/original/test.pdf: PDF document, version 1.4
$ file 46/pdf_thumbnail/test.pdf 
46/pdf_thumbnail/test.pdf: JPEG image data, JFIF standard 1.01

Так что файлы хороши, но я хочу другойрасширение для стиля pdf_thumbnail.

Любая помощь?Или, может быть, другой способ / чище код?

1 Ответ

7 голосов
/ 03 августа 2011

Я не проверял это, но как насчет:

has_attached_file :file, :styles => { :pdf_thumbnail => ["", :jpg] } ...

В соответствии с документами Paperclip второй элемент в массиве должен форсировать формат, хотя он не указывает, работает ли он также с пользовательскими процессорами. Но стоит попробовать.

...