更新:
与此同时,我切换到了'rghost'宝石,它直接使用了ghostscript,并且似乎与pdf的多页很好地配合。
如果有人找到下面问题的答案,我会保留此问题。
这是我的问题:
我正在使用carrierwave和rmagick将pdfs转换为图像,它工作得很好。唯一的问题是,当我尝试解析2..n页面的pdf时,它总是为第一页生成一个图像而没有别的。
以下是我处理此问题的方法的两个例子:
通过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
直接使用image magick
file = Form::Pdf.first.pdf
file_name = file.path.sub('.pdf', '.jpg')
system("convert -quality 100 -density '400' #{file.path} #{file_name}")
在这两种情况下都会创建一个jpg但仅针对pdf的第一页,其余的都缺失了。
我确信的一件事是(至少通过rmagick)对Magick :: Image.read(pdf)的调用导致一个数组有一个元素,无论pdf有多少页面,所以这离开我挠挠头..
我一直在谷歌这个问题很多,我似乎找不到有类似问题的人,无处不在我看起来每个人都说它应该自动将pdf转换为多个图像,如果它有多个页面,除了它没有“T。
任何想法都会有很大的帮助,也许我错过了一些明显的想法。
答案 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 )是处理这些的服务的一个例子。