我以前使用 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
但是,我很好奇这是否是最好的方法,或者是否有更好的方法?例如,我希望将一个数组传递给 attach 方法,但遇到了错误。上述过程似乎也需要相当长的时间来执行(尽管 PDF 文件很大)。
而且,控制台挂在“Performed ActiveStorage::AnalyzeJob”上,但我认为这只是因为它是一个异步作业。
提前感谢您的帮助!