2

以前は、CarrierWave と ImageMagick を使用して、次のような方法で PDF を画像に分割していました。

def pdf_to_imgs
  manipulate! do |img, index|
    image.format = 'png'
    image.write("path/to/images/image-#{index}.png")
  end
end

Rails 5.2 では、ActiveStorage がアップロードに適しているようです。そのため、すべてを移行しようとしています。

私は以下を持っており、技術的に動作します:

def pdf_to_imgs
  path = Rails.application.routes.url_helpers.rails_blob_url(self.pdf)
  page_count = MiniMagick::Image.open(path).pages.count
  pipeline = ImageProcessing::MiniMagick.source(path).convert("jpg")
  images = page_count.times.map do |page_number|
    pipeline.loader(page: page_number).call
  end
  images.each_with_index do |slide, i|
    self.images.attach(io: File.open(pdf), filename: "pdf-#{i}.jpg", content_type: "image/jpg")
  end
end

しかし、これが最善の方法なのか、それとももっと良い方法があるのか​​ 興味がありましたか?たとえば、アタッチ メソッドに配列を渡すことを望んでいましたが、エラーが発生しました。上記のプロセスも、実行にかなり長い時間がかかるようです (大きな PDF ファイルではありますが)。

そして、コンソールは「Performed ActiveStorage::AnalyzeJob」でハングしますが、それは非同期ジョブだからだと思います。

助けてくれてありがとう!

4

0 に答える 0