gbdev-pdf_filler 0.1.0

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.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Great Basin Solutions, LLC dba Great Basin Development
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,84 @@
1
+ = pdf_filler
2
+
3
+ The <b>pdf_filler</b> Rails plugin makes it easy to update existing PDFs that have form fields defined.
4
+ Rather then building PDFs in Ruby using something like PDF-Writer, it is much easier to create a PDF in Acrobat,
5
+ define fields, and update those fields using pdf_filler. An example would be a First/Last name field on a PDF that is possible to update.
6
+
7
+
8
+ == Requirements
9
+
10
+ This plugin requires RJB (Ruby Java Bridge), so you will need to set your JAVA_HOME environment variable to point your installation of Java.
11
+
12
+ If your JAVA_HOME environment variable is not setup correctly you will get something like:
13
+
14
+
15
+ Building native extensions. This could take a while...
16
+ ERROR: Error installing pdf_filler-0.1.0.gem:
17
+ ERROR: Failed to build gem native extension.
18
+
19
+ /opt/local/bin/ruby extconf.rb
20
+ *** extconf.rb failed ***
21
+ Could not create Makefile due to some reason, probably lack of
22
+ necessary libraries and/or headers. Check the mkmf.log file for more
23
+ details. You may need configuration options.
24
+
25
+ Provided configuration options:
26
+ --with-opt-dir
27
+ --without-opt-dir
28
+ --with-opt-include
29
+ --without-opt-include=${opt-dir}/include
30
+ --with-opt-lib
31
+ --without-opt-lib=${opt-dir}/lib
32
+ --with-make-prog
33
+ --without-make-prog
34
+ --srcdir=.
35
+ --curdir
36
+ --ruby=/opt/local/bin/ruby
37
+ extconf.rb:45: JAVA_HOME is not set. (RuntimeError)
38
+
39
+ Gem files will remain installed in /opt/local/lib/ruby/gems/1.8/gems/rjb-1.1.7 for inspection.
40
+ Results logged to /opt/local/lib/ruby/gems/1.8/gems/rjb-1.1.7/ext/gem_make.out
41
+
42
+
43
+
44
+ <b>On my Mac I set JAVA_HOME to be "/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home".</b>
45
+
46
+
47
+ == Installing
48
+
49
+ The recommended method to enable pdf_filler in your project is adding the pdf_filler gem to your environment. Add the following code to your Rails configuration in <tt>config/environment.rb</tt>:
50
+
51
+ Rails::Initializer.run do |config|
52
+ ...
53
+ config.gem 'gbdev-pdf_filler', :lib => 'pdf_filler', source => 'http://gems.github.com/'
54
+ end
55
+
56
+ Run <tt>sudo rake gems:install</tt> to install the gem.
57
+
58
+ Another alternative is to install pdf_filler as a Rails plugin:
59
+
60
+ script/plugin install git://github.com/gbdev/pdf_filler.git
61
+
62
+
63
+ == Usage
64
+
65
+ 1. You will need a PDF that has form fields to fill.
66
+
67
+ 2. A hash of parameters for filling the PDF form. The hash must contain all of the required options:
68
+ * :data (required) - A hash or array of hashes of fields to fill the pdf template with. Example: [{:field => 'value'}, {:field => 'value'}].
69
+ * :template (required) - The full path to the PDF form to fill.
70
+ * :dir (required) - The directory to write filled form to.
71
+ * :file_name (optional) The name of the output file to create. If not specified a random file name will be used.
72
+
73
+ 3. Example
74
+ opts = {:data => {:full_name => 'Wes Hays'},
75
+ :template => '/path/to/templates/certificate_template.pdf'),
76
+ :dir => '/path/to/templates/output/'),
77
+ :file_name => 'wes_hays.pdf'}
78
+ PdfFiller(opts)
79
+
80
+
81
+ == License
82
+
83
+ This plugin is released under the MIT license. Please contact weshays (http://github.com/weshays)
84
+ or djohnson (http://github.com/djohnson) for any questions.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ Dir['tasks/*.rake'].each { |file| load(file) }
2
+
3
+ desc 'Default: run spec tests.'
4
+ task :default => [:spec]
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'form_filler'
Binary file
data/lib/pdf_filler.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'fileutils'
2
+ require 'rjb'
3
+
4
+ load_path = File.expand_path(File.dirname(__FILE__) + '/iText-2.1.7.jar')
5
+ options = ['-Djava.awt.headless=true']
6
+ Rjb::load load_path, options
7
+
8
+ FileOutputStream = Rjb::import('java.io.FileOutputStream')
9
+ PdfWriter = Rjb::import('com.lowagie.text.pdf.PdfWriter')
10
+ PdfReader = Rjb::import('com.lowagie.text.pdf.PdfReader')
11
+ PdfCopy = Rjb::import('com.lowagie.text.pdf.PdfCopy')
12
+ PdfImportedPage = Rjb::import('com.lowagie.text.pdf.PdfImportedPage')
13
+ Document = Rjb::import('com.lowagie.text.Document')
14
+ Paragraph = Rjb::import('com.lowagie.text.Paragraph')
15
+ AcroFields = Rjb::import('com.lowagie.text.pdf.AcroFields')
16
+ PdfStamper = Rjb::import('com.lowagie.text.pdf.PdfStamper')
17
+ HashMap = Rjb::import('java.util.HashMap')
18
+
19
+ require 'pdf_filler/util_methods'
20
+ require 'pdf_filler/fill_pdf_template'
21
+ require 'pdf_filler/fill_pdf_collection'
22
+
23
+
24
+ module Kernel
25
+
26
+ def PdfFiller(pdf_options = {})
27
+ if(pdf_options.has_key?(:data) and pdf_options[:data].class.to_s == 'Array')
28
+ p = Gbdev::PdfOperations::FillCollection.new(pdf_options)
29
+ else
30
+ p = Gbdev::PdfOperations::FillTemplate.new(pdf_options)
31
+ end
32
+ p.compile_pdf
33
+ end
34
+
35
+ end
@@ -0,0 +1,60 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe 'PdfFiller' do
4
+ it 'should be initialized without errors' do
5
+ opts = {:data => {:full_name => 'Wes Hays'},
6
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
7
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/')}
8
+ ff = PdfFiller(opts)
9
+ end
10
+
11
+ it 'should be use the output filename specified' do
12
+ opts = {:data => {:full_name => 'Wes Hays'},
13
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
14
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/'),
15
+ :file_name => 'wes_hays.pdf'}
16
+ ff = PdfFiller(opts)
17
+ File.exist?([opts[:dir], opts[:file_name]].join('/')).should be_true
18
+ end
19
+
20
+ it 'should raise exception if options[:data] not set' do
21
+ opts = {:template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
22
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/')}
23
+ doing {PdfFiller(opts)}.should raise_error('Option parameters data, template, dir are required')
24
+ end
25
+
26
+ it 'should raise exception if options[:template] not set' do
27
+ opts = {:data => {:full_name => 'Wes Hays'},
28
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/')}
29
+ doing {PdfFiller(opts)}.should raise_error('Option parameters data, template, dir are required')
30
+ end
31
+
32
+ it 'should raise exception if options[:dir] not set' do
33
+ opts = {:data => {:full_name => 'Wes Hays'},
34
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf')}
35
+ doing {PdfFiller(opts)}.should raise_error('Option parameters data, template, dir are required')
36
+ end
37
+
38
+
39
+ it 'should raise exception if options[:data] is not a hash or an array of hashes' do
40
+ opts = {:data => 'dog',
41
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
42
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/')}
43
+ doing {PdfFiller(opts)}.should raise_error('Data must be a hash')
44
+ end
45
+
46
+ it 'should raise exception if certificate template does not exist' do
47
+ opts = {:data => {:full_name => 'Wes Hays'},
48
+ :template => 'dog/templates/certificate_template.pdf',
49
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/')}
50
+ doing {PdfFiller(opts)}.should raise_error('Template file does not exist or path is wrong')
51
+ end
52
+
53
+ it 'should raise exception if options[:dir] is not a directory' do
54
+ opts = {:data => {:full_name => 'Wes Hays'},
55
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
56
+ :dir => '/../output/'}
57
+ doing {PdfFiller(opts)}.should raise_error('Output directory does not exist or path is wrong')
58
+ end
59
+
60
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe 'FormCollection' do
4
+ it 'should be initialized without errors' do
5
+ opts = {:data => [{:full_name => 'Wes Hays'}, {:full_name => 'Darren Johnson'}],
6
+ :template => File.expand_path(File.dirname(__FILE__) + '/../templates/certificate_template.pdf'),
7
+ :dir => File.expand_path(File.dirname(__FILE__) + '/../output/'),
8
+ :file_name => 'people.pdf'}
9
+ ff = PdfFiller(opts)
10
+ File.exist?([opts[:dir], opts[:file_name]].join('/')).should be_true
11
+ end
12
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec'
2
+ require 'rubygems'
3
+ require 'ruby-debug'
4
+ require 'activerecord'
5
+
6
+ ##################
7
+ #### <CUSTOM> ####
8
+ ##################
9
+ # Aliased "lambda" with "doing" so that when checking
10
+ # whether or not something raises an exception it will
11
+ # read like other rspec operations. For example:
12
+ # instead of
13
+ # lambda { ... }.should_not raise_error
14
+ # you can have
15
+ # doing { ... }.should_not raise_error
16
+ alias :doing :lambda
17
+ ###################
18
+ #### </CUSTOM> ####
19
+ ###################
20
+
21
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
22
+ ActiveRecord::Base.configurations = true
23
+
24
+ ActiveRecord::Schema.verbose = false
25
+ ActiveRecord::Schema.define(:version => 1) do
26
+ create_table :clients do |t|
27
+ t.string :first_name
28
+ t.string :last_name
29
+ end
30
+
31
+ create_table :addresses do |t|
32
+ t.string :address1
33
+ t.string :address2
34
+ t.string :city
35
+ t.string :state
36
+ t.string :postal_code
37
+ end
38
+ end
39
+
40
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
41
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
42
+ require 'pdf_filler'
43
+
44
+ Spec::Runner.configure do |config|
45
+ config.before(:each) do
46
+ class Client < ActiveRecord::Base
47
+ has_many :addresses, :dependent => :destroy
48
+ end
49
+
50
+ class Address < ActiveRecord::Base
51
+ belongs_to :client
52
+ end
53
+
54
+ Client.destroy_all
55
+ Address.destroy_all
56
+ end
57
+
58
+ config.after(:each) do
59
+ Object.send(:remove_const, :Client)
60
+ Object.send(:remove_const, :Address)
61
+ end
62
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'rake/rdoctask'
3
+
4
+ desc 'Generate documentation for PDF-Filler.'
5
+ Rake::RDocTask.new do |rdoc|
6
+ rdoc.rdoc_dir = 'doc/html'
7
+ rdoc.title = 'scoped_search'
8
+ rdoc.options << '--line-numbers' << '--inline-source'
9
+ rdoc.main = 'README.rdoc'
10
+ rdoc.rdoc_files.include('LICENSE', 'lib/')
11
+ end
12
+
13
+
14
+ begin
15
+ require 'rcov/rcovtask'
16
+ Rcov::RcovTask.new do |t|
17
+ t.test_files = Dir[ "spec/**/*_spec.rb" ]
18
+ end
19
+ rescue LoadError
20
+ nil
21
+ end
22
+
23
+ begin
24
+ require 'rcov/rcovtask'
25
+ desc 'Runs spec:rcov and then displays the coverage/index.html file in the browser.'
26
+ task :rcov_display => [:clobber_rcov, :rcov] do
27
+ system("open coverage/index.html")
28
+ end
29
+ rescue LoadError
30
+ nil
31
+ end
32
+
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gbdev-pdf_filler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wes Hays
8
+ - Darrne Johnson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-07-24 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rjb
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.1.7
25
+ version:
26
+ description: PDF Filler makes it easy to file your PDFs.
27
+ email:
28
+ - weshays@gbdev.com
29
+ - djohnson@gbdev.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files:
35
+ - README.rdoc
36
+ files:
37
+ - LICENSE
38
+ - README.rdoc
39
+ - Rakefile
40
+ - init.rb
41
+ - lib/iText-2.1.7.jar
42
+ - lib/pdf_filler.rb
43
+ - spec/lib/pdf_builder_spec.rb
44
+ - spec/lib/pdf_collection_builder_spec.rb
45
+ - spec/spec_helper.rb
46
+ - spec/templates/certificate_template.pdf
47
+ - tasks/documentation.rake
48
+ has_rdoc: false
49
+ homepage: http://wiki.github.com/gbdev/pdf-filler
50
+ post_install_message:
51
+ rdoc_options:
52
+ - --charset=UTF-8
53
+ - --title
54
+ - pdf_filler
55
+ - --main
56
+ - README.rdoc
57
+ - --line-numbers
58
+ - --inline-source
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ requirements: []
74
+
75
+ rubyforge_project:
76
+ rubygems_version: 1.2.0
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: A Rails plugin to fill a PDF form using RJB and iText.
80
+ test_files:
81
+ - spec/lib/pdf_builder_spec.rb
82
+ - spec/lib/pdf_collection_builder_spec.rb