1

アイデアは、PDFをページごとに画像に変換したいということです。Stackoverflow にある他の方法を試しましたが、役に立ちませんでした。以下は私のアップローダーファイルです。

アップローダー

class PdfUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  #//TODO - Remove converted images when deleting an entry, maybe? if needed?

  storage :file

  #//TODO - Add images into the same folder. model.id can't be accessed in a custom process.

  def store_dir
    "#{Rails.root}/public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  def cache_dir
    "#{Rails.root}/public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/tmp"
  end

  def extension_white_list
    %w(pdf)
  end

  def filename
    super.chomp(File.extname(super)) + '.png'
  end

  version :pages do
    process :create_pages
    process convert: 'png'
  end

  process convert: 'png'

  version :thumb do
    process :cover
    process :resize_to_fill => [200, 200, Magick::CenterGravity]
    process convert: 'png'
  end

  def cover
    manipulate! do |frame, index|
      frame if index.zero?
    end
  end

  def create_pages
    manipulate! do |frame, index|
      frame.write("#{store_dir}/#{index}.png")
    end
  end

end

PDF は各ページの画像に変換されます。ただし、model.id は認識されず、そのフォルダーに保存されません。代わりに、その上のディレクトリに保存されます。強制的にフォルダを作成するために以下を追加してみましたが、少しテストしてもmodel.idがわからないようですか?

ディレクトリを作成しようとしました

def create_pages
    Dir.mkdir(store_dir) unless File.exists?(store_dir)
    manipulate! do |frame, index|
      frame.write("#{store_dir}/#{index}.png")
    end
  end 

助けていただければ幸いです。私はしばらくこれに固執しており、欲求不満から数日間放置しなければなりませんでした。前もって感謝します。

4

1 に答える 1

0

これはframe.write、モデル自体が保存される前に で画像を保存しているため、ID が割り当てられる前でもある可能性があります。

潜在的な解決策については、この回答をご覧ください: Carrierwave : store_path の model.id のエラー

于 2013-03-15T16:31:23.527 に答える