1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activestorage/lib/active_storage/previewer/mupdf_previewer.rb
Terence Lee 0b717c2045 Provide an alternative PDF previewer based on Poppler
mutool is licensed under the Affero GPL, which has strict distribution requirements.

Poppler is licensed under the more liberal GPL, making it a good alternative for those who can't use mutool.
2018-03-06 13:33:33 -05:00

36 lines
905 B
Ruby

# frozen_string_literal: true
module ActiveStorage
class Previewer::MuPDFPreviewer < Previewer
class << self
def accept?(blob)
blob.content_type == "application/pdf" && mutool_exists?
end
def mutool_path
ActiveStorage.paths[:mutool] || "mutool"
end
def mutool_exists?
return @mutool_exists unless @mutool_exists.nil?
system mutool_path, out: File::NULL, err: File::NULL
@mutool_exists = $?.exitstatus == 1
end
end
def preview
download_blob_to_tempfile do |input|
draw_first_page_from input do |output|
yield io: output, filename: "#{blob.filename.base}.png", content_type: "image/png"
end
end
end
private
def draw_first_page_from(file, &block)
draw self.class.mutool_path, "draw", "-F", "png", "-o", "-", file.path, "1", &block
end
end
end