我正在一个需要有简报的简报页面的网站上工作。 PDF存储在不同的站点上,但该站点没有缩略图,因此我必须自己生成它们并将缩略图链接到该站点。
我无法存储原始PDF - 链接版本是规范的,并且具有过时的缓存版本是不可接受的。额外的存储使用量也可能导致该网站所针对的非营利组织每月额外支出,因此我不想在不需要时将这些费用留在周围。
我有以下代码:
class DocumentUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def content_type_whitelist
'application/pdf'
end
def full_filename(for_file)
parent_name = super(for_file)
return unless parent_name
extension = '.pdf'
base_name = parent_name.chomp(extension)
if version_name
base_name = base_name[version_name.size.succ..-1]
end
[base_name, version_name].compact.join("_") + '.png'
end
# Process files as they are uploaded:
process convert_pdf_front: [500, 500]
version :medium do
process convert_pdf_front: [160, 160]
end
version :small do
process convert_pdf_front: [80, 80]
end
private
def convert_pdf_front(width, height)
manipulate! do |img|
img.format('png') do |c|
c.resize "#{width}x#{height}"
end
img
end
end
end
这可以按预期工作,但是中小版本是从原始PDF转换而来的,这是一个相当缓慢的过程。
如果我用以下代码替换处理代码:
version :full do
process convert_pdf_front: [500, 500]
end
version :medium, from_version: :full do
process convert: 'png'
process resize_to_fit: [160, 160]
end
version :small, from_version: :full do
process convert: 'png'
process resize_to_fit: [80, 80]
end
然后从完整版本转换中小版本,但原始PDF仍然存在。
有没有办法使用from_version
从转换后的原始文档进行转换 - 也就是说,从500x500 PNG而不是PDF - 这不会让原始PDF混乱到位?在通过任何process
命令后,是否有特殊版本名称指向原始文档,而不是之前?
(我宁愿不再简单地使用收割机来处理PDF文件,因为Carrierwave认为这些是原件。我希望Carrierwave在所有情况下都将500x500 PNG视为原件,并且一旦完成就不会存储PDF转换过程。)