如何在carrierwave中创建多页pdf的预览版本?

时间:2017-12-25 22:31:04

标签: ruby-on-rails carrierwave minimagick

在使用MiniMagick的carrierwave(1.2.1)中,一个简单的“process convert:png”会将电子表格,word doc或单页pdf转换为png文件。但是,在处理多页pdf时,整个事情会窒息。我希望MiniMagick做出一些假设并自动转换第1页。这似乎是一种相当常见的用法......然而,似乎有很多关于如何做到这一点的想法......而且,它们似乎都没有用。 ImageMagick似乎对此有了更好的支持。但是,唉...我正在使用MiniMagick。回到carrierwave 0.11.2(不确定MiniMagick的版本),多页PDF会假设第1页......并使用相同的版本代码创建预览png。不再了。

version :large do
  process convert: 'png'
  process :set_png_content_type
  process resize_to_limit: [1024, 1024]
  def full_filename(for_file = model.receipt.file)
    super.chomp(File.extname(super)) + '_large' + '.png'
  end
end

上面的代码会成功将名为“my_pdf_file.pdf”的单页PDF转换为名为“my_pdf_file_large.png”的png版本

但是,如果提供的pdf为多页,则该版本将失败 部分堆栈跟踪:

Validation failed: Asset Failed to manipulate with MiniMagick, maybe it is not an image? 
Original Error: `identify /Users/secret/Sites/secret/tmp/1514239240-67574-0020-1237/large/agency_card.png` 
failed with error: identify: improper image header `/Users/secret/Sites/secret/tmp/1514239240-67574-0020-1237/large/agency_card.png' @ error/png.c/ReadPNGImage/4227.

未找到图像时出现错误“不正确的图像标题”(每个可靠的来源)。在这种情况下,我假设它没有在缓存(tmp目录)中找到?

- - - - - - - - - - - -

如果我将版本更改为:

version :large do
  process convert: 'jpg'
  process :set_jpg_content_type
  process resize_to_limit: [1024, 1024]
  def full_filename(for_file = model.receipt.file)
    super.chomp(File.extname(super)) + '_large' + '.jpg'
  end
end

我得到了一个不同的错误:

 Validation failed: Asset Failed to manipulate with MiniMagick, maybe it is not an image? 
 Original Error: `identify /Users/secret/Sites/secret/tmp/1514240098-67574-0022-1346/large/agency_card.jpg` 
 failed with error: identify: insufficient image data in file `/Users/secret/Sites/secret/tmp/1514240098-67574-0022-1346/large/agency_card.jpg' @ error/jpeg.c/ReadJPEGImage/1069.

所以,我的问题是:为什么没有一种统一的方式(最好是迷你MiniMagick)来处理转换多页PDF文档。有些人希望转换PDF的每个页面,而其他人只想要第一页。这感觉就像魔术......而且应该很容易。

使用MiniMagick有没有一种聪明,简单的方法来实现这一目标?

Rails 5.1.4 Carrierwave 1.2.1 Ghostscript的 Heroku的 Ruby 2.4.3 MiniMagick

- - - - - 更新 - - - - -

错误“不正确的图像标题”表示无法找到图像。错误消息中的路径:

 `/Users/secret/Sites/secret/tmp/1514240098-67574-0022-1346/large/agency_card.jpg'

但是,实际应该是(并且,图像确实存在于此处):

 `/Users/secret/Sites/secret/tmp/uploads/1514240098-67574-0022-1346/agency_card.jpg'

我的carrierwave配置设置了config.cache_dir =“#{Rails.root} / tmp / uploads”...当从缓存(tmp)中检索图像时,没有使用它。而且,我不确定路径中的版本名称来自哪里......但是,我的tmp目录中没有为版本名称命名的子目录。

0 个答案:

没有答案