Я хочу загрузить файл 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
.
Любая помощь?Или, может быть, другой способ / чище код?