0

アップデート:

その間、ghostscript を直接利用する 'rghost' gem に切り替えましたが、複数のページを持つ pdf で非常にうまく機能しているようです。

誰かが以下の問題に対する答えを見つけた場合に備えて、この質問を開いたままにします。

これが私の問題です:

Carrierwave と rmagick を使用して PDF を画像に変換していますが、問題なく動作します。唯一の問題は、2..n ページの pdf を解析しようとすると、常に最初のページの画像が生成され、他には何も生成されないことです。

私がこれを処理している方法の2つの例を次に示します。

  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. 画像マジックを直接使用する

    file = Form::Pdf.first.pdf
    file_name = file.path.sub('.pdf', '.jpg')
    system("convert -quality 100 -density '400' #{file.path} #{file_name}")
    

どちらの状況でも jpg が作成されますが、pdf の最初のページのみが作成され、残りは欠落しています。

私が確信していることの 1 つは、(少なくとも rmagick を使用して) Magick::Image.read(pdf) を呼び出すと、pdf のページ数に関係なく 1 つの要素を持つ配列になることです。頭..

私はこの問題を何度もグーグルで検索してきましたが、同様の問題を抱えている人を見つけることができないようです.

任意のアイデアは非常に役立ちます。おそらく、明らかな何かが欠けている可能性があります。

4

1 に答える 1

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 の処理、アルファ チャネルなど) があり、それはしばらくの間それを行ってきたサービスに任せるのが最善の作業です。Blitline( http://www.blitline.com/docs/pdf ) は、これらを処理するサービスの例です。

于 2013-07-10T00:06:41.717 に答える