Rails Pdf到jpg转换渲染一个图像用于多页pdf

时间:2013-06-08 22:49:23

标签: ruby-on-rails pdf imagemagick jpeg rmagick

更新:

与此同时,我切换到了'rghost'宝石,它直接使用了ghostscript,并且似乎与pdf的多页很好地配合。

如果有人找到下面问题的答案,我会保留此问题。

这是我的问题:

我正在使用carrierwave和rmagick将pdfs转换为图像,它工作得很好。唯一的问题是,当我尝试解析2..n页面的pdf时,它总是为第一页生成一个图像而没有别的。

以下是我处理此问题的方法的两个例子:

  1. 通过rmagick:

    def do_parsing
      pdf_path = "#{Rails.root}/public#{@pdf.pdf.url}"
    
      raw_pages_arr = Magick::Image.read(pdf_path) { self.density = 400 }
    
      save_pdf_images(raw_pages_arr)
    end
    
    def save_pdf_images(raw_pages_arr)
      raw_pages_arr.each do |raw_page|
        page_number = raw_pages_arr.index(raw_page) + 1
        image_name = "#{@pdf.form.name}_page_#{page_number}.jpg"
        raw_page.write(image_name)
    
        image = File.new("#{Rails.root}/#{image_name}")
        build_pdf_image(image, page_number)
      end
    end
    
  2. 直接使用image magick

    file = Form::Pdf.first.pdf
    file_name = file.path.sub('.pdf', '.jpg')
    system("convert -quality 100 -density '400' #{file.path} #{file_name}")
    
  3. 在这两种情况下都会创建一个jpg但仅针对pdf的第一页,其余的都缺失了。

    我确信的一件事是(至少通过rmagick)对Magick :: Image.read(pdf)的调用导致一个数组有一个元素,无论pdf有多少页面,所以这离开我挠挠头..

    我一直在谷歌这个问题很多,我似乎找不到有类似问题的人,无处不在我看起来每个人都说它应该自动将pdf转换为多个图像,如果它有多个页面,除了它没有“T。

    任何想法都会有很大的帮助,也许我错过了一些明显的想法。

1 个答案:

答案 0 :(得分:0)

我总是使用ImageList来处理这样的多页文档:

def do_parsing
  pdf_path = "#{Rails.root}/public#{@pdf.pdf.url}"

  image_list =  Magick::ImageList.new(pdf_path) {
    self.density = 400
  }

  save_pdf_images(raw_pages_arr)
end

def save_pdf_images(raw_pages_arr)
  raw_pages_arr.each_with_index do |raw_page, index|
    page_number = index + 1
    image_name = "#{@pdf.form.name}_page_#{page_number}.jpg"
    raw_page.write(image_name)

    image = File.new("#{Rails.root}/#{image_name}")
    build_pdf_image(image, page_number)
  end
end

总的来说,我建议使用服务。 PDF到图像转换有许多复杂的(比如颜色配置文件,处理CropBox / BleedBox / ArtBox / TrimBox,alpha通道等),这是最好留给已经做了一段时间的服务的任务。 Blitline(http://www.blitline.com/docs/pdf )是处理这些的服务的一个例子。