Class: PdfParadise::MergePdf

Inherits:
Base
  • Object
show all
Defined in:
lib/pdf_paradise/merge_pdf/menu.rb,
lib/pdf_paradise/merge_pdf/merge_pdf.rb

Overview

PdfParadise::MergePdf

Constant Summary collapse

THIS_FILE_HERE =
#

THIS_FILE_HERE

#
'/home/x/programming/ruby/src/pdf_paradise/lib/pdf_paradise/merge_pdf/merge_pdf.rb'
STORE_WHERE_WE_MERGED_FILES =
#

STORE_WHERE_WE_MERGED_FILES

#
'/home/Temp/merged_these_pdf_files.md'

Constants inherited from Base

Base::NAMESPACE

Instance Method Summary collapse

Methods inherited from Base

#basename, #be_verbose?, #change_directory, #commandline_arguments?, #copy_file, #delete_file, #e, #ecomment, #esystem, #first_argument?, #gold, #infer_the_namespace, #input_without_leading_hyphens?, #internal_hash?, #is_an_image_file?, #is_on_roebe?, #lightsteelblue, #log_dir?, #mkdir, #mv, #n_pages?, #namespace?, #no_file_at, #opne, #orange, #reset_the_internal_hash, #return_commandline_arguments_starting_with_hyphens, #return_files_from_the_commandline_arguments, #return_pwd, #rev, #set_be_quiet, #set_commandline_arguments, #steelblue, #try_to_ensure_that_this_directory_exists, #write_what_into

Constructor Details

#initialize(i = nil, run_already = true) ⇒ MergePdf

#

initialize

#


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 39

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_commandline_arguments(
    return_hyphen_arguments(i)
  )
  case i
  # ======================================================================= #
  # === :dont_run_yet
  # ======================================================================= #
  when :dont_run_yet
    run_already = false
  else
    set_array_pdf_files(i)
  end
  run if run_already
end

Instance Method Details

#build_new_output_name_based_on_inputObject

#

build_new_output_name_based_on_input

#


285
286
287
288
289
290
291
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 285

def build_new_output_name_based_on_input
  _ = @array_pdf_files.map {|entry|
        File.basename(entry).gsub(File.extname(entry), '')
      }
  _ = _.join(' ').gsub(/ /,'_').gsub(/\"/,'')+'.pdf'
  set_output_filename(_)
end

#delete(i) ⇒ Object

#

delete

#


177
178
179
180
181
182
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 177

def delete(i)
  unless i == '/'
    efancy(" - #{i}") # Add a slight padding to the output.
    File.delete(i) if File.exist? i # Safeguard.
  end
end

#do_conversionObject

#

do_conversion

This method will do the actual conversion.

#


127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 127

def do_conversion
  these_files = @array_pdf_files.join(N)
  # ======================================================================= #
  # Next, we store this in the save-file.
  # ======================================================================= #
  write_what_into(these_files, where_are_the_merged_files?)
  case @use_this_program_for_merging_the_pdf_files
  # ======================================================================= #
  # === :hexapdf
  # ======================================================================= #
  when :hexapdf
    _ = 'hexapdf merge --force '.dup
    _ << these_files.tr(N,' ')
    _ << " #{@output_filename}"
  # ======================================================================= #
  # === :ghostscript
  #
  # To use this via the commandline, try:
  #
  #   mergepdf one.pdf two.pdf --use-ghostscript
  #
  # ======================================================================= #
  when :ghostscript,
       :default
    _ = 'gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE="'+
        @output_filename+
        '" -dBATCH '
    _ << these_files.tr(N,' ')
  end
  e
  cliner
  e "#{::Colours.rev}We will run this command next for "\
    "#{@array_pdf_files.size.to_s} .pdf files:"
  e
  efancy "  #{_}" # This is the command we will run.
  e
  system _
  cliner
end

#feedback_where_it_is_storedObject Also known as: report

#

feedback_where_it_is_stored

#


263
264
265
266
267
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 263

def feedback_where_it_is_stored
  if File.exist? result?
    opnn; e "The result is stored at `#{sfile(self.result)}`."
  end
end
#

menu (menu tag)

This is check_against_menu(). We respond to some given input.

#


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/pdf_paradise/merge_pdf/menu.rb', line 18

def menu(
    i = commandline_arguments?
  )
  if i.is_a? Array
    i.each {|entry| menu(entry) }
  else
    case i # (case tag)
    # ===================================================================== #
    # === --use-hexapdf
    # ===================================================================== #
    when /^-?-?use(-|_| )?hexapdf$/i,
         /^-?-?hexapdf$/i
      @use_this_program_for_merging_the_pdf_files = :hexapdf
    # ===================================================================== #
    # === --use-ghostscript
    # ===================================================================== #
    when /^-?-?use(-|_| )?ghostscript$/i,
         /^-?-?ghostscript$/i
      @use_this_program_for_merging_the_pdf_files = :ghostscript
    # ===================================================================== #
    # === --remove
    # ===================================================================== #
    when '1',
         /^-?-?last$/i,
         /^-?-?kill$/i,
         /^-?-?remove$/i
      remove_merged_files
      exit
    # ===================================================================== #
    # === --openself
    # ===================================================================== #
    when '2',
         /^-?-?openself$/i
      open_this_file_here
      exit
    # ===================================================================== #
    # === mergepdf --help
    # ===================================================================== #
    when /help/
      show_help
      exit
    end
  end
end

#open_this_file_hereObject

#

open_this_file_here

#


117
118
119
120
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 117

def open_this_file_here
  _ = 'bluefish '+THIS_FILE_HERE
  esystem _
end

#opnnObject

#

opnn

#


256
257
258
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 256

def opnn
  super(NAMESPACE)
end

#output_filenameObject Also known as: result, result?, output_filename?, output_file?, where_it_is_stored?

#

output_filename

#


272
273
274
275
276
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 272

def output_filename
  _ = @output_filename
  _ = _.join(', ') if _.is_a? Array
  return _
end

#pad_this(i) ⇒ Object

#

pad_this

#


187
188
189
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 187

def pad_this(i)
  return '"'+i+'"'
end

#remove_merged_filesObject

#

remove_merged_files (remove tag)

#


100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 100

def remove_merged_files
  _ = where_are_the_merged_files?
  opnn; e 'We will now remove the merged files, by reading '\
          'in from `'+sfile(_)+'`.'
  # ======================================================================= #
  # Read in that save-file next. As of Feb 2015, the format is
  # one-file-per-line. We also get rid of '"' characters.
  # ======================================================================= #
  _ = File.readlines(_).map {|entry|
    entry.chomp.delete('"')
  } # .split(' ')
  _.each {|file| delete(file) }
end

#resetObject

#

reset (reset tag)

#


62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 62

def reset
  infer_the_namespace
  # ======================================================================= #
  # === @array_pdf_files
  # ======================================================================= #
  @array_pdf_files = []
  # ======================================================================= #
  # === @use_this_program_for_merging_the_pdf_files
  #
  # Currently we can either use :ghostscript (gs) or :hexapdf. The
  # latter is a pure ruby-gem.
  # ======================================================================= #
  @use_this_program_for_merging_the_pdf_files = :hexapdf # :ghostscript
  set_output_filename
end

#runObject

#

run (run tag)

#


296
297
298
299
300
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 296

def run
  menu
  build_new_output_name_based_on_input
  do_conversion
end

#set_array_pdf_files(i = '') ⇒ Object Also known as: <<

#

set_array_pdf_files

#


194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 194

def set_array_pdf_files(i = '')
  if i and i.is_a?(String) and i.include?(' ')
    # ===================================================================== #
    # Do automatic splitting in this case.
    # ===================================================================== #
    i = i.split(' ')
  end
  i = [i].flatten.compact.reject {|entry| entry.start_with?('--') }
  if i.is_a?(Array) and i.empty?
    all_pdf_files = Dir['*.pdf']
    # ===================================================================== #
    # Try to use all .pdf files.
    # ===================================================================== #
    unless all_pdf_files.empty?
      opnn; e 'No specific input was given, thus using all '+
               sfancy(all_pdf_files.size.to_s)+' .pdf files '\
              'in this directory'
      i = all_pdf_files
    end
  end
  if i.is_a? Array # Keep only files that exist.
    i.select! {|entry| File.exist? entry }
  end
  if i.is_a? Array
    i.map! {|entry| pad_this(entry) }
  end
  if i.empty?
    opnn; ewarn 'Unable to find any existing files '\
                'to match to, thus exiting now.'
    exit
  end
  @array_pdf_files << i
  @array_pdf_files = @array_pdf_files.flatten # Always keep it flattened.
end

#set_output_filename(i = 'Merged_PDF_Files.pdf') ⇒ Object Also known as: store_at

#

set_output_filename

Store the filename of the pdf through this method, the name of the output file.

#


235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 235

def set_output_filename(
    i = 'Merged_PDF_Files.pdf'
  )
  if i.size > 40
    opnn; ewarn 'The name for the new filename is larger than 255.'
    opnn; ewarn 'We will thus truncate the name to the first 255 '\
                'characters instead.'
    i = i[0, 41]
    # ===================================================================== #
    # Since as of Jun 2016, we will get rid of the last 4 characters
    # and append '.pdf'
    # ===================================================================== #
    i[-4,4] = ''
    i << '.pdf'
  end
  @output_filename = i
end

#show_helpObject

#

show_help (help tag)

#


81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 81

def show_help
  e
  e 'To remove the merged files, do this:'
  e
  e '  mergepdf --remove'
  e
  e 'To use hexapdf:'
  e
  e '  mergepdf --use-hexapdf'
  e
  e 'To use ghostscript:'
  e
  e '  mergepdf --use-ghostscript'
  e
end

#where_are_the_merged_files?Boolean

#

where_are_the_merged_files?

#

Returns:

  • (Boolean)


170
171
172
# File 'lib/pdf_paradise/merge_pdf/merge_pdf.rb', line 170

def where_are_the_merged_files?
  STORE_WHERE_WE_MERGED_FILES
end