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