CarrierWave私はバージョンのためにのみ指定したときにオリジナルの名前を変更する

最終的な目標は、PDFをアップロードし、サムネイルを作成し、PNGとして保存することです。私が言及しなければならないことの1つは、PDFの多くが複数ページであることです。私はCarrierWaveが現在好きではないので、一時的な回避策があります。私が自分で定義した操作機能に含まれています。 現在私が持っているものは、元のPDFファイルが拡張子が.pngに変更されていることを除いて、働いています。内容はPDFのままですが、これは私が望むものですが、拡張機能を変更するとすべてが破損します。ここに私の全体のアップローダがあります:

class PdfUploader < CarrierWave::Uploader::Base
  def cache_dir
    "#{Rails.root}/tmp/uploads"
  end 
  include CarrierWave::RMagick
  storage :fog

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

  # Create different versions of your uploaded files:

  version :for_crop  do 
    convert('png')
    process :resize_to_limit_png => [700, 700]
  end

  version :thumb do
    convert('png')
    process :crop
    process :resize_to_limit_png => [100, 100]
  end

  version :medium do
    convert('png')
    process :crop
    process :resize_to_limit_png => [300, 300]
  end

  version :large do
    convert('png')
    process :crop
    process :resize_to_limit_png => [700, 700]
  end

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

  # Crop Method, grabs the crop ratio and applies the crop
  # Called when creating versions

  def crop
    if model.crop_x.present?
      manipulate!(:format => 'png') do |img|
        x = model.crop_x.to_i
        y = model.crop_y.to_i
        w = model.crop_w.to_i
        h = model.crop_h.to_i
        img.crop!(x, y, w, h)
      end
    end
  end


    def manipulate!(options={})
      cache_stored_file! if !cached?
      image = ::Magick::Image.read(current_path)

      frames = if image.size > 1
        list = ::Magick::ImageList.new
        #image.each do |frame|
         # list << yield( frame )
        #end
        list = image.first 
        list
      else
        frame = image.first
        frame = yield( frame ) if block_given?
        frame
      end

      if options[:format]
        frames.write("#{options[:format]}:#{current_path}")
      else
        frames.write(current_path)
      end
      destroy_image(frames)
    rescue ::Magick::ImageMagickError => e
      raise CarrierWave::ProcessingError, I18n.translate(:"errors.messages.rmagick_processing_error", :e => e)
    end

    def resize_to_limit_png(width, height)
      manipulate!(:format => 'png') do |img|
        geometry = Magick::Geometry.new(width, height, 0, 0, Magick::GreaterGeometry)
        new_img = img.change_geometry(geometry) do |new_width, new_height|
          img.resize(new_width, new_height)
        end
        destroy_image(img)
        new_img = yield(new_img) if block_given?
        new_img
      end
     def filename
      (super.chomp(File.extname(super))).to_s + '.png'
     end
    end  
end

だから、CarrierWaveが複数ページのPDFを扱うまで、この作業を行うために一時的なjankyカスタマイズを行っただけです。しかし、私はそこにどこかにぶち壊されたときにそれを含めたかったのです。どんな助けでも大歓迎です!ありがとうございました!

1

答えはありません

0