Class: Acrobat::App

Inherits:
Object
  • Object
show all
Defined in:
lib/acrobat/app.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApp

Initialize the



37
38
39
40
41
# File 'lib/acrobat/app.rb', line 37

def initialize
  @ole_obj = WIN32OLE.new("AcroExch.App")
  load_constants(@ole_obj)
  @docs = []
end

Instance Attribute Details

#docsObject (readonly)

Returns the value of attribute docs.



141
142
143
# File 'lib/acrobat/app.rb', line 141

def docs
  @docs
end

#ole_objObject (readonly)

WIN32_OLE

ole_obj



30
31
32
# File 'lib/acrobat/app.rb', line 30

def ole_obj
  @ole_obj
end

#pdocObject (readonly)

the wrapped [PDoc] PDoc object



33
34
35
# File 'lib/acrobat/app.rb', line 33

def pdoc
  @pdoc
end

Class Method Details

.fill_form(form, output_name:, update_hash:) ⇒ Object

Fills the form with updates in a hash

Examples:

Acrobat::App.fill_form(myform.pdf, output_name: 'filled.pdf
                             , update_hash: { name: 'dom', filled_date: 1/20/2013

Parameters:

  • doc (String)

    the String path of a fillable pdf file

  • output_name (String)

    the name of the saved filled pdf file

  • update_hash (Hash)

    the hash with updates



79
80
81
82
83
84
85
# File 'lib/acrobat/app.rb', line 79

def self.fill_form(form, output_name:, update_hash:)
  run do |app|
    doc = app.open(form)
    doc.fill_form(update_hash)
    doc.save_as(output_name)
  end
end

.replace_pages(src, replacement, output_name:, **opts) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/acrobat/app.rb', line 63

def self.replace_pages(src, replacement, output_name:, **opts)
  run do |app|
    app.open(src) do |doc|
      doc.replace_pages(replacement, **opts)
      doc.save_as(output_name)
    end
  end
end

.runObject

Runs the adobe app and quits at the end

Examples:

Acrobat::App.run do |app|
  doc = app.open('doc.pdf')
  doc.fill_form( city: 'City', state: 'ST')
  doc.save_as('filled.pdf')
end

Returns:

  • nil



54
55
56
57
58
59
60
61
# File 'lib/acrobat/app.rb', line 54

def self.run
  the_app = new
  yield the_app
ensure
  the_app&.quit
  GC.start
  nil
end

Instance Method Details

#find_pdfs_in_dir(dir) ⇒ Array

Finds the pdfs in a dir

Parameters:

  • dir (String)

    the directory to find pdfs in

Returns:

  • (Array)

    of pdf files



100
101
102
# File 'lib/acrobat/app.rb', line 100

def find_pdfs_in_dir(dir)
  Pathname.glob(dir + "/*.pdf")
end

#formObject



162
163
164
# File 'lib/acrobat/app.rb', line 162

def form
  Form.new(self, WIN32OLE.new("AFormAut.App"))
end

#hideObject

hide the Adobe Acrobat application



93
94
95
# File 'lib/acrobat/app.rb', line 93

def hide
  ole_obj.Hide
end

#merge_pdfs(*pdfs) ⇒ Object



104
105
106
107
108
109
110
111
112
113
# File 'lib/acrobat/app.rb', line 104

def merge_pdfs(*pdfs)
  pdf_array = Array(pdfs).flatten
  raise "Not enough pdfs to merge" if pdf_array.size < 2
  first, *rest = pdf_array
  doc = self.open(first)
  rest.each do |path|
    doc.merge(path)
  end
  doc
end

#merge_pdfs_in_dir(dir, name: nil, output_dir: nil) ⇒ Object

merges the pdfs in directory return [Boolean] if the merge was successful or not

Parameters:

  • dir (String)

    the path of the directory

  • name (String, Nil) (defaults to: nil)

    the name of the returned pdf file if the name is nil, the name is “merged.pdf”

  • output_dir (String, Nil) (defaults to: nil)

    the name of the output dir if the output_dir is nil, the output dir is the dir param



122
123
124
125
126
# File 'lib/acrobat/app.rb', line 122

def merge_pdfs_in_dir(dir, name: nil, output_dir: nil)
  name || "merged.pdf"
  dir = output_dir || dir
  merge_pdfs(find_pdfs_in_dir(dir))
end

#open(file) ⇒ PDoc

open the file.

Parameters:

  • file (String #to_path)

Returns:

  • (PDoc)

    the open file as a Pdoc instance

Raises:



146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/acrobat/app.rb', line 146

def open(file)
  filepath = Pathname(file).expand_path
  raise FileNotFound.new(filepath) unless filepath.file?
  pdoc = WIN32OLE.new("AcroExch.PDDoc")
  is_opened = pdoc.open FileSystemObject.windows_path(filepath)
  doc = PDoc.new(self, pdoc, filepath) if is_opened
  docs << doc if is_opened
  return doc unless block_given?
  begin
    yield doc
  ensure
    doc.close
    nil
  end
end

#quitObject

quit the Adobe App.

closes the open adobe documents and quits the program

Returns:

  • nil



131
132
133
134
135
136
137
138
139
# File 'lib/acrobat/app.rb', line 131

def quit
  begin
    docs.each { |d| d.close }
    ole_obj.Exit
  rescue
    return nil
  end
  nil
end

#showObject

show the Adobe Acrobat application



88
89
90
# File 'lib/acrobat/app.rb', line 88

def show
  ole_obj.Show
end