Class: Libis::Format::Converter::PdfConverter

Inherits:
Base
  • Object
show all
Defined in:
lib/libis/format/converter/pdf_converter.rb

Overview

noinspection DuplicatedCode

Constant Summary collapse

OPTIONS_TABLE =
{
    title: 'md_title',
    author: 'md_author',
    creator: 'md_creator',
    keywords: 'md_keywords',
    subject: 'md_subject'
}

Instance Attribute Summary

Attributes inherited from Base

#flags, #options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

category, #check_file_exist, inherited, #initialize, #using_temp, using_temp

Constructor Details

This class inherits a constructor from Libis::Format::Converter::Base

Class Method Details

.input_typesObject



17
18
19
# File 'lib/libis/format/converter/pdf_converter.rb', line 17

def self.input_types
  [:PDF]
end

.output_types(format = nil) ⇒ Object



21
22
23
24
# File 'lib/libis/format/converter/pdf_converter.rb', line 21

def self.output_types(format = nil)
  return [] unless input_types.include?(format) if format
  [:PDF, :PDFA]
end

Instance Method Details

#author(v) ⇒ Object



30
31
32
# File 'lib/libis/format/converter/pdf_converter.rb', line 30

def author(v)
  @options[:author] = v.blank? ? nil : v
end

#convert(source, target, format, opts = {}) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/libis/format/converter/pdf_converter.rb', line 52

def convert(source, target, format, opts = {})
  super

  result = nil

  unless @options.empty?
    result = convert_pdf(source, target)
    return nil unless result
    source = result
  end

  if format == :PDFA and source
    result = pdf_to_pdfa(source, target)
  end

  result

end

#convert_pdf(source, target) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/libis/format/converter/pdf_converter.rb', line 79

def convert_pdf(source, target)

  using_temp(target) do |tmpname|
    result = Libis::Format::Tool::PdfCopy.run(
        source, tmpname,
        @options.map {|k, v|
          if v.nil?
            nil
          else
            k = OPTIONS_TABLE[k] || k
            ["--#{k}", (v.is_a?(Array) ? v : v.to_s)]
          end}.compact.flatten
    )
    unless result[:err].empty?
      error("Pdf conversion encountered errors:\n%s", result[:err].join(join("\n")))
      next nil
    end
    tmpname
  end

end

#creator(v) ⇒ Object



34
35
36
# File 'lib/libis/format/converter/pdf_converter.rb', line 34

def creator(v)
  @options[:creator] = v.blank? ? nil : v
end

#keywords(v) ⇒ Object



38
39
40
# File 'lib/libis/format/converter/pdf_converter.rb', line 38

def keywords(v)
  @options[:keywords] = v.blank? ? nil : v
end

#pdf_to_pdfa(source, target) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/libis/format/converter/pdf_converter.rb', line 101

def pdf_to_pdfa(source, target)

  using_temp(target) do |tmpname|
    result = Libis::Format::Tool::PdfToPdfa.run source, tmpname
    if result[:status] != 0
      error("Pdf/A conversion encountered errors:\n%s", result[:err].join("\n"))
      next nil
    else
      warn("Pdf/A conversion warnings:\n%s", result[:err].join("\n")) unless result[:err].empty?
    end
    tmpname
  end

end

#range(selection) ⇒ Object

Select a partial list of pages

Parameters:

  • selection (String)

    as described in com.itextpdf.text.pdf.SequenceList: [!][o][e]start-end



48
49
50
# File 'lib/libis/format/converter/pdf_converter.rb', line 48

def range(selection)
  @options[:ranges] = selection.blank? ? nil : selection
end

#subject(v) ⇒ Object



42
43
44
# File 'lib/libis/format/converter/pdf_converter.rb', line 42

def subject(v)
  @options[:subject] = v.blank? ? nil : v
end

#title(v) ⇒ Object



26
27
28
# File 'lib/libis/format/converter/pdf_converter.rb', line 26

def title(v)
  @options[:title] = v.blank? ? nil : v
end