如何将使用 Active Storage 上传的 pdf 转换为 rails 中的图像

How to convert the pdf uploaded using Active Storage to image in rails

我已经使用 Active Storage 上传了 pdf 文件,我需要将其转换为图像并将其作为附件保存到 active storage。 我使用了此处建议的代码 How to convert PDF files to images using RMagick and Ruby 当我使用这段代码时


project_file.rb
class ProjectFile < ApplicationRecord
  has_many_attached: files
end

some_controller.rb
def show
  pdf = url_for(ProjectFile.last.files.first)
  PdfToImage.new(pdf).perform
end

pdf_to_image.rb
class PdfToImage
  require 'rmagick'

  attr_reader :pdf

  def initialize(pdf)
    @pdf = pdf
  end

  def perform
    Magick::ImageList.new(pdf)
  end
end

当我尝试执行它时它给了我这个错误。

no data returned `http://localhost:3001/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBDQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--d3dc048a53b43337dc372b3845901a7912391f9e/MA42.pdf' @ error/url.c/ReadURLImage/247

可能是我的代码有问题,所以有人建议我我做错了什么或者有更好的解决方案来解决我的问题。

ruby '2.6.5'

rails '6.0.1'

gem 'rmagick'

根据 rmagick 文档,imagelist 不支持用于转换图像的 url。您需要使用 open-uri gem 和 URI.open 方法打开 PDF 并将其传递到图像列表。



pdf_to_image.rb
class PdfToImage
require 'rmagick'
require 'open-uri'

attr_reader :pdf

def initialize(pdf)
  @pdf = pdf
end

def perform
  Magick::ImageList.new(URI.open(@pdf).path)
end
end