在使用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目录中没有为版本名称命名的子目录 .