在Rails中使用Minimagick和Carrierwave时预览PDF

时间:2018-04-10 10:03:13

标签: ruby-on-rails pdf carrierwave minimagick

我一直在努力开发一个网站,允许上传各种类型的文件,包括pdf。以下是我的上传者:

class PictureUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick

def store_dir
 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

version :jpg do
 process :convert_to_images
 process :set_content_type_jpg

def convert_to_images(*args)
 image = MiniMagick::Image.open(current_path)
 image.pages.each_with_index do |page, index|
  MiniMagick::Tool::Convert.new do |convert|
   convert.background 'white'
   convert.flatten
   convert.density 300
   convert.quality 95
   convert << page.path
   convert << "#{CarrierWave.root}/#{store_dir}/image-#{index}.jpg"
  end
 end
end
end        

def set_content_type_jpg(*args)
self.file.instance_variable_set(:@content_type, "image/jpg")
end

def extension_whitelist
  %w(jpg jpeg gif png pdf)
end

end

到目前为止,该网站将允许上传到所有白名单文件类型的服务器,除了pdfs之外的所有内容都会实际显示。然而,Pdfs只会显示破碎的图像而不是该pdf的图像。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

您应首先将pdf转换为jpg或其他图像,如here所述,然后尝试通过上面的代码运行转换后的文件