在使用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.

未找到图像时出现错误“不正确的图像 Headers ”(每个可靠的源) . 在这种情况下,我假设它没有在缓存(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

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

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

`/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 =“# / tmp / uploads”......当从缓存(tmp)中检索图像时,它没有被使用 . 而且,我不确定路径中的版本名称来自哪里......但是,我的tmp目录中没有为版本名称命名的子目录 .