我处理缩略图的PDF文件以这种方式:
version :thumb do
process :resize_to_limit => [260, 192]
process :convert => :jpg
process :set_content_type
end
def set_content_type(*args)
self.file.instance_variable_set(:@content_type, "image/jpeg")
end
但是,当PDF文件是多页的,它会产生一个JPG文件中的所有页面的缩略图。有没有办法只为首页制作缩略图?
4条答案
按热度按时间4jb9z9bj1#
今年早些时候,我提交了一个patch来做这件事。使用自定义处理器:
cotxawn72#
伟大的解决方案由坦齐布!谢谢
所以我可以这样做:
并将其用于拇指一代
好极了!
qlvxas9a3#
我在寻找解决这个问题的方法时遇到了这篇文章。当你把一个pdf转换成jpeg时,它会创建一个所有页面首尾相连的长pdf,所以你需要把图像裁剪成你想要的长宽比,然后丢弃剩下的。下面是我最终使用的:
在控制器/视图中,我使用了useragent gem并这样做:
documents_controller.rb
index.html.rb
毫无疑问,有一个更好的方法来做到这一点,但这是目前的工作。
3ks5zfa04#
结论
@tanzeeb提出的当前解决方案对于大多数图像/PDF文件都很有效,并且manipulate函数是一种有用的动态方式来操作整个PDF,但是它太广泛了,在生成缩略图时被认为是一种可行的方法,其主要目标是只操作PDF的第一页。
为什么?
这段
manipulate!
代码强制在继续之前读取整个文件,稍后还会遍历整个文件。这与生成缩略图是违反直觉的,可能是一个资源问题。其他解决方案
在
manipulate
内部,有一个&read_block
被传递到::Magic::Image.read/1
,它可能被用来改变传递到read本身的图像数据,其中一个read_options
指定来自current_path
的特定数据位。不过,CarrierWave文档在描述它的可能用途方面过于肤浅,实际上在描述它的代码使用方面是错误的。所以这对我来说是个死胡同
代码
我最终从
manipulate!
函数中获取了一堆代码,以便在我自己的上传程序中使用,在那里我删除了一些在生成缩略图时不使用的功能。