gbdev-pdf_filler 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,79 @@
1
+ module Gbdev
2
+
3
+ module PdfOperations
4
+
5
+ class FillCollection
6
+
7
+ # Fill a PDF form based on the options specified.
8
+ #
9
+ # Hash pdf_options : A hash of parameters for filling the PDF form.
10
+ # [data] An array of hashes of fields to fill the pdf template with. Example: [{:field => 'value'}, {:field => 'value'}].
11
+ # [template] The full path to the PDF form to fill.
12
+ # [dir] The directory to write filled form to.
13
+ # [file_name] (optional) The name of the output file to create. If not specified a random
14
+ # file name will be used.
15
+ #
16
+ # Exceptons :
17
+ # 1) If any of the required hash options from pdf_options is missing.
18
+ def initialize(pdf_options = {})
19
+ if !pdf_options.has_key?(:data) or !pdf_options.has_key?(:template) or !pdf_options.has_key?(:dir)
20
+ raise 'All options parameters (data, template, dir) are required'
21
+ end
22
+
23
+ unless File.exist?(pdf_options[:template])
24
+ raise 'Template file does not exist or path is wrong'
25
+ end
26
+
27
+ if pdf_options[:data].class.to_s != 'Array' or
28
+ (pdf_options[:data].class.to_s == 'Array' and pdf_options[:data][0].class.to_s != 'Hash')
29
+ raise 'Data must array of hashes'
30
+ end
31
+
32
+ unless File.directory?(pdf_options[:dir])
33
+ raise 'Output directory does not exist or path is wrong'
34
+ end
35
+
36
+ @data = pdf_options[:data]
37
+ @template = pdf_options[:template]
38
+ @dir = pdf_options[:dir]
39
+ @file_name = pdf_options.has_key?(:file_name) ? pdf_options[:file_name] : build_random_file_name
40
+ end
41
+
42
+ def compile_pdf
43
+ temp_dir = [@dir, 'collection_temp'].join('/')
44
+ Dir.mkdir(temp_dir)
45
+ @data.each do |hash_data|
46
+ opts = {:data => hash_data,
47
+ :template => @template,
48
+ :dir => temp_dir}
49
+ p = Gbdev::PdfOperations::FillTemplate.new(opts)
50
+ p.compile_pdf
51
+ end
52
+
53
+ temp_files = Dir[[temp_dir,'*'].join('/')]
54
+
55
+ document = Document.new
56
+ copier = PdfCopy.new(document, FileOutputStream.new([@dir,@file_name].join('/')))
57
+
58
+ document.open
59
+ temp_files.each do |read_target|
60
+ reader = PdfReader.new(read_target)
61
+ n_pages = reader.getNumberOfPages
62
+ n_pages.times do |i|
63
+ copier.addPage( copier.getImportedPage(reader, i+1)) if copier
64
+ end
65
+ end
66
+ document.close
67
+
68
+ FileUtils.rm_rf(temp_dir, {:secure => true})
69
+ end
70
+
71
+ private
72
+
73
+ include Gbdev::Utils::PrivateMethods
74
+
75
+ end # End FillCollection
76
+
77
+ end # End PdfOperations
78
+
79
+ end # End Gbdev
@@ -0,0 +1,65 @@
1
+ module Gbdev
2
+
3
+ module PdfOperations
4
+
5
+ class FillTemplate
6
+
7
+ # Fills a PDF form based on the options specified.
8
+ #
9
+ # Hash pdf_options : A hash of parameters for filling the PDF form.
10
+ # [data] Hash of fields to fill and what to fill them with. Example: {:field => 'value'}.
11
+ # [template] The full path to the PDF form to fill.
12
+ # [dir] The directory to write filled form to.
13
+ # [file_name] (optional) The name of the output file to create. If not specified a random
14
+ # file name will be used.
15
+ #
16
+ # Exceptons :
17
+ # 1) If any of the required hash options from pdf_options is missing.
18
+ def initialize(pdf_options = {})
19
+ if !pdf_options.has_key?(:data) or !pdf_options.has_key?(:template) or !pdf_options.has_key?(:dir)
20
+ raise 'Option parameters data, template, dir are required'
21
+ end
22
+
23
+ unless File.exist?(pdf_options[:template])
24
+ raise 'Template file does not exist or path is wrong'
25
+ end
26
+
27
+ if ['Hash'].index(pdf_options[:data].class.to_s).nil?
28
+ raise 'Data must be a hash'
29
+ end
30
+
31
+ unless File.directory?(pdf_options[:dir])
32
+ raise 'Output directory does not exist or path is wrong'
33
+ end
34
+
35
+ @data = pdf_options[:data]
36
+ @template = pdf_options[:template]
37
+ @dir = pdf_options[:dir]
38
+ @file_name = pdf_options.has_key?(:file_name) ? pdf_options[:file_name] : build_random_file_name
39
+ end
40
+
41
+ # Compiles the new PDF from the template and data given
42
+ def compile_pdf
43
+ field_cache = HashMap.new
44
+ reader = PdfReader.new(@template)
45
+ stamper = PdfStamper.new( reader, FileOutputStream.new([@dir, @file_name].join('/')) )
46
+ form = stamper.getAcroFields()
47
+ form.setFieldCache(field_cache)
48
+
49
+ @data.each do |field,value|
50
+ form.setField(field.to_s, value.to_s)
51
+ end
52
+
53
+ stamper.setFormFlattening(true)
54
+ stamper.close
55
+ end
56
+
57
+ private
58
+
59
+ include Gbdev::Utils::PrivateMethods
60
+
61
+ end # End FillTemplate
62
+
63
+ end # End PdfOperations
64
+
65
+ end # End Gbdev
@@ -0,0 +1,12 @@
1
+ module Gbdev
2
+ module Utils
3
+ module PrivateMethods
4
+
5
+ def build_random_file_name # :nodoc:
6
+ letters_array = [('a'..'z'),('A'..'Z')].collect{|i| i.to_a}.flatten
7
+ (1..10).collect{ letters_array[ rand(letters_array.length) ] }.join << '.pdf'
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = 'pdf_filler'
8
+ gem.version = '0.0.2'
9
+ gem.date = '2009-07-24'
10
+
11
+ gem.summary = "A Rails plugin to fill a PDF form using RJB and iText."
12
+ gem.description = "PDF Filler makes it easy to file your PDFs."
13
+
14
+ gem.authors = ['Wes Hays', 'Darrne Johnson']
15
+ gem.email = ['weshays@gbdev.com', 'djohnson@gbdev.com']
16
+ gem.homepage = 'http://wiki.github.com/gbdev/pdf-filler'
17
+
18
+ gem.has_rdoc = true
19
+ gem.rdoc_options << '--title' << gem.name << '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
20
+ gem.extra_rdoc_files = ['README.rdoc']
21
+
22
+ gem.files = ['LICENSE',
23
+ 'README.rdoc',
24
+ 'Rakefile',
25
+ 'init.rb',
26
+ 'lib/iText-2.1.7.jar',
27
+ 'lib/pdf_filler.rb',
28
+ 'lib/pdf_filler/fill_pdf_collection.rb',
29
+ 'lib/pdf_filler/fill_pdf_template.rb',
30
+ 'lib/pdf_filler/util_methods.rb',
31
+ 'tasks/documentation.rake',
32
+ 'tasks/build_gem.rake',
33
+ 'spec/spec_helper.rb',
34
+ 'spec/lib/pdf_builder_spec.rb',
35
+ 'spec/lib/pdf_collection_builder_spec.rb',
36
+ 'spec/output',
37
+ 'spec/templates/certificate_template.pdf']
38
+
39
+ gem.test_files = ['spec/lib/pdf_builder_spec.rb',
40
+ 'spec/lib/pdf_collection_builder_spec.rb']
41
+
42
+ gem.add_dependency 'rjb', '>= 1.1.7'
43
+ end
44
+ rescue LoadError
45
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
46
+ end
47
+
48
+ require 'spec/rake/spectask'
49
+ Spec::Rake::SpecTask.new(:spec) do |spec|
50
+ spec.libs << 'lib' << 'spec'
51
+ spec.spec_files = FileList['spec/**/*_spec.rb']
52
+ end
53
+
54
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
55
+ spec.libs << 'lib' << 'spec'
56
+ spec.pattern = 'spec/**/*_spec.rb'
57
+ spec.rcov = true
58
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gbdev-pdf_filler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wes Hays
@@ -40,10 +40,14 @@ files:
40
40
  - init.rb
41
41
  - lib/iText-2.1.7.jar
42
42
  - lib/pdf_filler.rb
43
+ - lib/pdf_filler/fill_pdf_collection.rb
44
+ - lib/pdf_filler/fill_pdf_template.rb
45
+ - lib/pdf_filler/util_methods.rb
43
46
  - spec/lib/pdf_builder_spec.rb
44
47
  - spec/lib/pdf_collection_builder_spec.rb
45
48
  - spec/spec_helper.rb
46
49
  - spec/templates/certificate_template.pdf
50
+ - tasks/build_gem.rake
47
51
  - tasks/documentation.rake
48
52
  has_rdoc: false
49
53
  homepage: http://wiki.github.com/gbdev/pdf-filler