Class: Media::LibreMagickTransmogrifier

Inherits:
Transmogrifier show all
Defined in:
lib/media/transmogrifiers/libremagick.rb

Overview

uses libreoffice and graphicsmagick transmogrifiers to convert from office documents to image documents, by way of PDF.

Instance Attribute Summary

Attributes inherited from Transmogrifier

#command_output, #input, #input_file, #input_type, #options, #output, #output_file, #output_type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Transmogrifier

add, command_available?, converts_from?, converts_to?, find_class, inherited, #initialize, input_map, list, output_map, #run_command, run_command

Constructor Details

This class inherits a constructor from Media::Transmogrifier

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
32
# File 'lib/media/transmogrifiers/libremagick.rb', line 26

def self.available?
  libre &&
    magick &&
    libre.available? &&
    magick.available? &&
    ghostscript_available?
end

.ghostscript_available?Boolean

Returns:

  • (Boolean)


34
35
36
37
# File 'lib/media/transmogrifiers/libremagick.rb', line 34

def self.ghostscript_available?
  cmd = `which ghostscript`.chomp
  !cmd.empty? && command_available?(cmd)
end

.input_typesObject



17
18
19
# File 'lib/media/transmogrifiers/libremagick.rb', line 17

def self.input_types
  libre.input_types
end

.libreObject



9
10
11
# File 'lib/media/transmogrifiers/libremagick.rb', line 9

def self.libre
  Media::Transmogrifier.list["Media::LibreOfficeTransmogrifier"]
end

.magickObject



13
14
15
# File 'lib/media/transmogrifiers/libremagick.rb', line 13

def self.magick
  Media::Transmogrifier.list["Media::GraphicsMagickTransmogrifier"]
end

.output_typesObject



21
22
23
24
# File 'lib/media/transmogrifiers/libremagick.rb', line 21

def self.output_types
  # we don't want to use this for pdf, since libreoffice by itself can generate pdf
  magick.output_types - ['application/pdf']
end

Instance Method Details

#run(&block) ⇒ Object

run libreoffice and then graphicsmagick in succession.

all the options are passed to graphicsmagic, and none to libreoffice, because they are probably not for libreoffice (like crop or resize).



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/media/transmogrifiers/libremagick.rb', line 45

def run(&block)
  pdf_output_file = Media::TempFile.new(nil, "application/pdf")
  libre_transmog = self.class.libre.new(
    input_file: input_file,       input_type: input_type,
    output_file: pdf_output_file, output_type: "application/pdf")
  status = libre_transmog.run(&block)
  return status if status != :success
  magick_transmog = self.class.magick.new(
    options.merge({
      input_file: pdf_output_file,  input_type: "application/pdf",
      output_file: output_file,     output_type: output_type
    })
  )
  magick_transmog.run(&block)
end