pdf_form_filler 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ output.pdf
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,36 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pdf_form_filler (0.0.1)
5
+ prawn (~> 0.12.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ Ascii85 (1.0.1)
11
+ diff-lcs (1.1.3)
12
+ pdf-reader (1.1.1)
13
+ Ascii85 (~> 1.0.0)
14
+ ruby-rc4
15
+ prawn (0.12.0)
16
+ pdf-reader (>= 0.9.0)
17
+ ttfunk (~> 1.0.2)
18
+ rake (0.9.2.2)
19
+ rspec (2.11.0)
20
+ rspec-core (~> 2.11.0)
21
+ rspec-expectations (~> 2.11.0)
22
+ rspec-mocks (~> 2.11.0)
23
+ rspec-core (2.11.1)
24
+ rspec-expectations (2.11.2)
25
+ diff-lcs (~> 1.1.3)
26
+ rspec-mocks (2.11.2)
27
+ ruby-rc4 (0.1.5)
28
+ ttfunk (1.0.3)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ pdf_form_filler!
35
+ rake (~> 0.9.2)
36
+ rspec (~> 2.11.0)
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ PDF Form Filler
2
+ ===============
3
+
4
+ PDF Form Filler is a very simple library for drawing text on top of a PDF. It doesn't use any
5
+ native PDF form functionality; you just specify the co-ordinates where you want to draw
6
+ text.
7
+
8
+ License
9
+ -------
10
+
11
+ PDF Form Filler is licensed under the [GNU General Public License, Version 3](http://www.gnu.org/licenses/gpl-3.0.html).
12
+
13
+ Copyright &copy; 2012 Chris Mear <chris@feedmechocolate.com>.
14
+
15
+ This program is free software: you can redistribute it and/or modify
16
+ it under the terms of the GNU General Public License as published by
17
+ the Free Software Foundation, either version 3 of the License, or
18
+ (at your option) any later version.
19
+
20
+ This program is distributed in the hope that it will be useful,
21
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ GNU General Public License for more details.
24
+
25
+ You should have received a copy of the GNU General Public License
26
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
27
+
28
+ PDF Form Filler incorporates work covered by the following copyright and permission notice:
29
+
30
+ The Liberation Fonts
31
+
32
+ Digitized data copyright (c) 2010 Google Corporation
33
+ with Reserved Font Arimo, Tinos and Cousine.
34
+ Copyright (c) 2012 Red Hat, Inc.
35
+ with Reserved Font Name Liberation.
36
+
37
+ This Font Software is licensed under the SIL Open Font License,
38
+ Version 1.1.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ task :default => :spec
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pdf_form_filler'
4
+
5
+ require 'yaml'
6
+
7
+ template = ARGV[0]
8
+ definition = ARGV[1]
9
+ data_file = ARGV[2]
10
+ output = ARGV[3]
11
+
12
+ data = YAML.load_file(data_file)
13
+
14
+ document = PdfFormFiller::Form.new(:template => template, :definition => definition)
15
+ document.fill_form(data)
16
+ document.render_file(output)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pdf_form_filler'
4
+
5
+ template = ARGV[0]
6
+ definition = ARGV[1]
7
+ output = ARGV[2]
8
+
9
+ document = PdfFormFiller::Form.new(:template => template, :definition => definition)
10
+ document.highlight_fields
11
+ document.render_file(output)
Binary file
@@ -0,0 +1,214 @@
1
+ require 'prawn'
2
+ require 'yaml'
3
+
4
+ class PdfFormFiller::Form
5
+ def initialize(options={})
6
+ @template = options[:template]
7
+
8
+ @definition_file = options[:definition]
9
+ @definition = YAML.load_file(@definition_file)
10
+
11
+ @pdf = Prawn::Document.new(:template => @template)
12
+
13
+ @pdf.font(File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'fonts', 'LiberationSans-Regular.ttf')))
14
+
15
+ # x_offset, y_offset is the position of the Prawn origin, as expressed
16
+ # in the co-ordinate system used for the rest of the measurements.
17
+ #
18
+ # In Prawn, x runs left to right, and y runs bottom to top. If either
19
+ # of the axes in your co-ordinate system run opposite to this, set
20
+ # invert_x and/or invert_y to true.
21
+
22
+ if @definition['defaults']
23
+ @font_size = @definition['defaults']['font_size'] || 12
24
+ @horizontal_padding = @definition['defaults']['horizontal_padding'] || 5
25
+ @vertical_padding = @definition['defaults']['vertical_padding'] || 1
26
+ @text_align = (@definition['defaults']['text_align'] || :left).to_sym
27
+ @vertical_align = (@definition['defaults']['vertical_align'] || :center).to_sym
28
+ else
29
+ @font_size = 12
30
+ @horizontal_padding = 5
31
+ @vertical_padding = 1
32
+ @text_align = :left
33
+ @vertical_align = :center
34
+ end
35
+
36
+ end
37
+
38
+ def fill_form(data)
39
+ 1.upto(@pdf.page_count) do |page_number|
40
+ @pdf.go_to_page(page_number)
41
+
42
+ if @definition[page_number] && @definition[page_number].respond_to?(:each)
43
+ @definition[page_number].each do |name, box_definition|
44
+ if box_definition.is_a?(Hash)
45
+ box_coords = box_definition['box']
46
+ font_size = box_definition['font_size'] || @font_size
47
+ check_box = box_definition['check_box']
48
+
49
+ if check_box
50
+ text_align = :center
51
+ vertical_align = :center
52
+ font_size = box_coords[3] + 0.5
53
+ horizontal_padding = 0
54
+ vertical_padding = 0
55
+ end
56
+
57
+ if box_definition['text_align']
58
+ text_align = box_definition['text_align'].to_sym
59
+ end
60
+ text_align ||= @text_align
61
+
62
+ if box_definition['vertical_align']
63
+ vertical_align = box_definition['vertical_align'].to_sym
64
+ end
65
+ vertical_align ||= @vertical_align
66
+
67
+ if box_definition['font_size']
68
+ font_size = box_definition['font_size']
69
+ end
70
+ font_size ||= @font_size
71
+
72
+ if box_definition['horizontal_padding']
73
+ horizontal_padding = box_definition['horizontal_padding']
74
+ end
75
+ horizontal_padding ||= @horizontal_padding
76
+
77
+ if box_definition['vertical_padding']
78
+ vertical_padding = box_definition['vertical_padding']
79
+ end
80
+ vertical_padding ||= @vertical_padding
81
+ else
82
+ box_coords = box_definition
83
+ font_size = @font_size
84
+ text_align = @text_align
85
+ vertical_align = @vertical_align
86
+ horizontal_padding = @horizontal_padding
87
+ vertical_padding = @vertical_padding
88
+ end
89
+ local_box_coords = convert_to_local(box_coords)
90
+
91
+ if check_box
92
+ value = (data[name.to_s] || data[name.to_sym]) ? 'x' : ''
93
+ else
94
+ value = (data[name.to_s] || data[name.to_sym] || '').to_s
95
+ end
96
+
97
+ @pdf.font_size(font_size)
98
+ @pdf.fill_color = "000000"
99
+ @pdf.text_box(value,
100
+ :at => [local_box_coords[0] + (horizontal_padding / 2.0), local_box_coords[1] - (vertical_padding / 2.0)],
101
+ :width => local_box_coords[2] - horizontal_padding,
102
+ :height => local_box_coords[3] - vertical_padding,
103
+ :align => text_align,
104
+ :valign => vertical_align
105
+ )
106
+ end
107
+ end
108
+
109
+ end
110
+ end
111
+
112
+ def highlight_fields
113
+ 1.upto(@pdf.page_count) do |page_number|
114
+ @pdf.go_to_page(page_number)
115
+
116
+ if @definition[page_number] && @definition[page_number].respond_to?(:each)
117
+ @definition[page_number].each do |name, box_definition|
118
+ if box_definition.is_a?(Hash)
119
+ box_coords = box_definition['box']
120
+ font_size = box_definition['font_size'] || @font_size
121
+ check_box = box_definition['check_box']
122
+
123
+ if check_box
124
+ text_align = :center
125
+ vertical_align = :center
126
+ font_size = box_coords[3] + 0.5
127
+ horizontal_padding = 0
128
+ vertical_padding = 0
129
+ end
130
+
131
+ if box_definition['text_align']
132
+ text_align = box_definition['text_align'].to_sym
133
+ end
134
+ text_align ||= @text_align
135
+
136
+ if box_definition['vertical_align']
137
+ vertical_align = box_definition['vertical_align'].to_sym
138
+ end
139
+ vertical_align ||= @vertical_align
140
+
141
+ if box_definition['font_size']
142
+ font_size = box_definition['font_size']
143
+ end
144
+ font_size ||= @font_size
145
+
146
+ if box_definition['horizontal_padding']
147
+ horizontal_padding = box_definition['horizontal_padding']
148
+ end
149
+ horizontal_padding ||= @horizontal_padding
150
+
151
+ if box_definition['vertical_padding']
152
+ vertical_padding = box_definition['vertical_padding']
153
+ end
154
+ vertical_padding ||= @vertical_padding
155
+ else
156
+ box_coords = box_definition
157
+ font_size = @font_size
158
+ text_align = @text_align
159
+ vertical_align = @vertical_align
160
+ horizontal_padding = @horizontal_padding
161
+ vertical_padding = @vertical_padding
162
+ end
163
+ local_box_coords = convert_to_local(box_coords)
164
+
165
+ @pdf.fill_color = "ff0000"
166
+ @pdf.transparent(0.5) do
167
+ @pdf.fill_rectangle([local_box_coords[0], local_box_coords[1]], local_box_coords[2], local_box_coords[3])
168
+ end
169
+
170
+ @pdf.font_size(font_size)
171
+ @pdf.fill_color = "000000"
172
+ @pdf.text_box(name,
173
+ :at => [local_box_coords[0] + (horizontal_padding / 2.0), local_box_coords[1] - (vertical_padding / 2.0)],
174
+ :width => local_box_coords[2] - horizontal_padding,
175
+ :height => local_box_coords[3] - vertical_padding,
176
+ :align => text_align,
177
+ :valign => vertical_align,
178
+ :overflow => :shrink_to_fit
179
+ )
180
+ end
181
+ end
182
+
183
+ end
184
+ end
185
+
186
+ def render_file(output)
187
+ @pdf.render_file(output)
188
+ end
189
+
190
+ def render
191
+ @pdf.render
192
+ end
193
+
194
+ protected
195
+
196
+ def convert_to_local(box_coords)
197
+ x_offset = @definition['defaults']['x_offset'] || 0
198
+ y_offset = @definition['defaults']['y_offset'] || 0
199
+
200
+ x = if @definition['defaults']['invert_x']
201
+ x_offset - box_coords[0]
202
+ else
203
+ box_coords[0] - x_offset
204
+ end
205
+
206
+ y = if @definition['defaults']['invert_y']
207
+ y_offset - box_coords[1]
208
+ else
209
+ box_coords[1] - y_offset
210
+ end
211
+
212
+ [x, y, box_coords[2], box_coords[3]]
213
+ end
214
+ end
@@ -0,0 +1,3 @@
1
+ module PdfFormFiller
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,72 @@
1
+ require 'pdf_form_filler/version'
2
+ require 'pdf_form_filler/form'
3
+
4
+ module PdfFormFiller
5
+ def stroke_axis(pdf, options={})
6
+ options = { :height => (pdf.cursor - 20).to_i,
7
+ :width => pdf.bounds.width.to_i
8
+ }.merge(options)
9
+
10
+ pdf.dash(1, :space => 4)
11
+ pdf.stroke_horizontal_line(-21, options[:width], :at => 0)
12
+ pdf.stroke_vertical_line(-21, options[:height], :at => 0)
13
+ pdf.undash
14
+
15
+ pdf.fill_circle [0, 0], 1
16
+
17
+ (100..options[:width]).step(100) do |point|
18
+ pdf.fill_circle [point, 0], 1
19
+ pdf.draw_text point, :at => [point-5, -10], :size => 7
20
+ end
21
+
22
+ (100..options[:height]).step(100) do |point|
23
+ pdf.fill_circle [0, point], 1
24
+ pdf.draw_text point, :at => [-17, point-2], :size => 7
25
+ end
26
+ end
27
+ end
28
+
29
+ # axes = false
30
+
31
+
32
+ # input_file = "ms_application_form.pdf"
33
+
34
+ # pdf = Prawn::Document.new(:template => input_file)
35
+
36
+ # pdf.go_to_page(1)
37
+ # stroke_axis(pdf) if axes
38
+
39
+ # pdf.text_box("OCO Digital IPS", :at => [45, 603])
40
+
41
+ # pdf.go_to_page(2)
42
+ # stroke_axis(pdf) if axes
43
+
44
+ # pdf.go_to_page(3)
45
+ # stroke_axis(pdf) if axes
46
+
47
+ # pdf.text_box("x", :at => [136.5, 613])
48
+ # pdf.text_box("x", :at => [403.5, 613])
49
+
50
+ # pdf.font_size(9)
51
+ # pdf.text_box("Christopher Mear", :at => [230, 365])
52
+ # pdf.text_box("Director", :at => [230, 343])
53
+
54
+ # pdf.go_to_page(4)
55
+ # stroke_axis(pdf) if axes
56
+
57
+ # pdf.go_to_page(5)
58
+ # stroke_axis(pdf) if axes
59
+
60
+ # pdf.go_to_page(6)
61
+ # stroke_axis(pdf) if axes
62
+
63
+ # pdf.go_to_page(7)
64
+ # stroke_axis(pdf) if axes
65
+
66
+ # pdf.go_to_page(8)
67
+ # stroke_axis(pdf) if axes
68
+
69
+ # pdf.go_to_page(9)
70
+ # stroke_axis(pdf) if axes
71
+
72
+ # pdf.render_file "output.pdf"
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/pdf_form_filler/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Chris Mear"]
6
+ gem.email = 'chris@feedmechocolate.com'
7
+ gem.description = "pdf_form_filler is a very simple tool for filling in PDF forms"
8
+ gem.summary = "pdf_form_filler fills in a PDF form using fields defined by co-ordinates in a YAML file."
9
+ gem.homepage = 'https://github.com/chrismear/pdf_form_filler'
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = 'pdf_form_filler'
14
+ gem.require_paths = ["lib"]
15
+ gem.version = PdfFormFiller::VERSION
16
+
17
+ gem.add_dependency 'prawn', '~>0.12.0'
18
+
19
+ gem.add_development_dependency 'rake', '~>0.9.2'
20
+ gem.add_development_dependency 'rspec', '~>2.11.0'
21
+ end
@@ -0,0 +1,131 @@
1
+ ---
2
+ defaults:
3
+ x_offset: 35
4
+ y_offset: 806
5
+ invert_y: true
6
+ font_size: 9
7
+ 1:
8
+ organisation_name:
9
+ box: [76, 189, 377, 36]
10
+ font_size: 10
11
+ 3:
12
+ register_new:
13
+ box: [170.75, 195.15, 7, 7]
14
+ check_box: true
15
+ register_new_completed:
16
+ box: [438.8, 194.9, 7, 7]
17
+ check_box: true
18
+ contact_name: [263.5, 432.9, 260.9, 21.6]
19
+ contact_position: [263.5, 455.6, 260.9, 21.6]
20
+ contact_address:
21
+ box: [263.5, 481.5, 260.9, 38.8]
22
+ vertical_align: top
23
+ contact_phone: [263.5, 520.4, 260.9, 21.6]
24
+ contact_email: [263.5, 541.3, 260.9, 21.6]
25
+ timing_factors:
26
+ box: [170.9, 611.3, 353.3, 69.5]
27
+ vertical_align: top
28
+ rules_attached:
29
+ box: [423.7, 728.2, 7, 7]
30
+ check_box: true
31
+
32
+ 4:
33
+ name_rule_number:
34
+ box: [432, 151, 92, 14]
35
+ text_align: center
36
+ objects_rule_number:
37
+ box: [432, 165.8, 92, 14]
38
+ text_align: center
39
+ registered_office_rule_number:
40
+ box: [432, 180.5, 92, 37]
41
+ text_align: center
42
+ member_admission_rule_number:
43
+ box: [432, 219, 92, 37]
44
+ text_align: center
45
+ meetings_rule_number:
46
+ box: [432, 257.6, 92, 25.1]
47
+ text_align: center
48
+ board_rule_number:
49
+ box: [432, 284.1, 92, 48.8]
50
+ text_align: center
51
+ maximum_shareholding_rule_number:
52
+ box: [432, 334.4, 92, 37.1]
53
+ text_align: center
54
+ loans_rule_number:
55
+ box: [432, 373.4, 92, 48.5]
56
+ text_align: center
57
+ share_transactions:
58
+ box: [432, 423.6, 92, 72.8]
59
+ text_align: center
60
+ audit_rule_number:
61
+ box: [432, 498.1, 92, 37]
62
+ text_align: center
63
+ withdrawals_rule_number:
64
+ box: [432, 537.2, 92, 60]
65
+ text_align: center
66
+ profits_rule_number:
67
+ box: [432, 599, 92, 13.3]
68
+ text_align: center
69
+ seal_rule_number:
70
+ box: [432, 613.4, 92, 25.3]
71
+ text_align: center
72
+ investing_rule_number:
73
+ box: [432, 640, 92, 25.3]
74
+ text_align: center
75
+ 5:
76
+ year_end_day_1: [206.4, 151.3, 17.5, 19.3]
77
+ year_end_day_2: [224.5, 151.3, 17.5, 19.3]
78
+ year_end_month_1: [260.4, 151.3, 17.5, 19.3]
79
+ year_end_month_2: [278.5, 151.3, 17.5, 19.3]
80
+ year_end_year_1: [314.5, 151.3, 17.5, 19.3]
81
+ year_end_year_2: [332.5, 151.3, 17.5, 19.3]
82
+ year_end_year_3: [350.4, 151.3, 17.5, 19.3]
83
+ year_end_year_4: [368.5, 151.3, 17.5, 19.3]
84
+ membership_required_yes:
85
+ box: [171.65, 235.09, 7.15, 7.15]
86
+ check_box: true
87
+ membership_required_no:
88
+ box: [171.65, 248.26, 7.15, 7.15]
89
+ check_box: true
90
+ bona_fide_cooperative:
91
+ box: [171.65, 282.99, 7.15, 7.15]
92
+ check_box: true
93
+ benefit_of_community:
94
+ box: [171.65, 296.18, 7.15, 7.15]
95
+ check_box: true
96
+ ips_type_explanation:
97
+ box: [171.16, 321.24, 353.56, 96.44]
98
+ vertical_align: top
99
+ 7:
100
+ close_links:
101
+ box: [170.6, 168.02, 353.56, 112.24]
102
+ vertical_align: top
103
+ close_links_extra_pages:
104
+ box: [170.6, 309.87, 83.01, 19.35]
105
+ model_rules_yes:
106
+ box: [171.5, 367.83, 7.15, 7.15]
107
+ check_box: true
108
+ model_name: [270.59, 468.22, 253.72, 28.34]
109
+ sponsoring_body_name: [270.3, 500.39, 253.72, 21.37]
110
+ no_changes:
111
+ box: [171.67, 670.18, 7.15, 7.15]
112
+ check_box: true
113
+ 8:
114
+ member_1_name: [291.01, 204.39, 233.32, 13.9]
115
+ member_1_address:
116
+ box: [291.01, 219.23, 233.32, 41.67]
117
+ member_1_phone: [291.01, 261.46, 233.32, 13.9]
118
+ member_2_name: [291.01, 319.53, 233.32, 13.9]
119
+ member_2_address:
120
+ box: [291.01, 334.37, 233.32, 41.67]
121
+ member_2_phone: [291.01, 376.6, 233.32, 13.9]
122
+ member_3_name: [291.01, 434.67, 233.32, 13.9]
123
+ member_3_address:
124
+ box: [291.01, 449.51, 233.32, 41.67]
125
+ member_3_phone: [291.01, 491.74, 233.32, 13.9]
126
+ secretary_name: [291.01, 577.44, 233.32, 13.9]
127
+ secretary_address:
128
+ box: [291.01, 592.28, 233.32, 41.67]
129
+ secretary_phone: [291.01, 634.51, 233.32, 13.9]
130
+
131
+
@@ -0,0 +1,72 @@
1
+ ---
2
+ organisation_name: The Digital IPS
3
+ register_new: true
4
+ name_rule_number: 1
5
+ register_new_completed: true
6
+ contact_name: Christopher Mear
7
+ contact_position: Director
8
+ contact_address: |
9
+ 1 High Street
10
+ London
11
+ N1 1AA
12
+ contact_phone: 020 1234 5678
13
+ contact_email: chris@example.com
14
+ timing_factors:
15
+ rules_attached: true
16
+ name_rule_number: 1
17
+ objects_rule_number: 5
18
+ registered_office_rule_number: 2
19
+ member_admission_rule_number: 14–29
20
+ meetings_rule_number: 44–90
21
+ board_rule_number: 91–111
22
+ maximum_shareholding_rule_number: 35
23
+ loans_rule_number: 10
24
+ share_transactions: 32, 36–41
25
+ audit_rule_number: 147–151
26
+ withdrawals_rule_number: 27–31
27
+ profits_rule_number: 129
28
+ seal_rule_number: 137
29
+ investing_rule_number: 13
30
+ year_end_day_1: 3
31
+ year_end_day_2: 1
32
+ year_end_month_1: 0
33
+ year_end_month_2: 8
34
+ year_end_year_1: 2
35
+ year_end_year_2: 0
36
+ year_end_year_3: 1
37
+ year_end_year_4: 3
38
+ membership_required_yes: true
39
+ membership_required_no: false
40
+ bona_fide_cooperative: true
41
+ benefit_of_community: false
42
+ ips_type_explanation: (IPS type explanation)
43
+ close_links: (Close links)
44
+ close_links_extra_pages: 0
45
+ model_rules_yes: true
46
+ model_name: Co-operatives UK Multi-stakeholder Co-operative Model Rules
47
+ sponsoring_body_name: Co-operatives UK
48
+ no_changes: true
49
+ member_1_name: Christopher Mear
50
+ member_1_address: |
51
+ 1 High Street
52
+ London
53
+ N1 1AA
54
+ member_1_phone: 020 1234 5678
55
+ member_2_name: Jenny Carpenter
56
+ member_2_address: |
57
+ 56 Main Road
58
+ London
59
+ E1 1AA
60
+ member_2_phone: 020 8765 4321
61
+ member_3_name: Bob Baker
62
+ member_3_address: |
63
+ 23 Boulevard Avenue
64
+ Manchester
65
+ M60 1AA
66
+ member_3_phone: 0161 123 4567
67
+ secretary_name: Sally Smith
68
+ secretary_address: |
69
+ 78 Forest Close
70
+ London
71
+ S1 1AA
72
+ secretary_phone: 020 1324 3546
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdf_form_filler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Mear
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: prawn
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.12.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.12.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.9.2
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.11.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.11.0
62
+ description: pdf_form_filler is a very simple tool for filling in PDF forms
63
+ email: chris@feedmechocolate.com
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - .gitignore
69
+ - Gemfile
70
+ - Gemfile.lock
71
+ - README.md
72
+ - Rakefile
73
+ - bin/pdf_form_filler
74
+ - bin/pdf_form_filler_highlight
75
+ - fonts/LiberationSans-Regular.ttf
76
+ - lib/pdf_form_filler.rb
77
+ - lib/pdf_form_filler/form.rb
78
+ - lib/pdf_form_filler/version.rb
79
+ - pdf_form_filler.gemspec
80
+ - spec/fixtures/ms_application_form.pdf
81
+ - spec/fixtures/ms_application_form.yml
82
+ - spec/fixtures/ms_application_form_data.yml
83
+ homepage: https://github.com/chrismear/pdf_form_filler
84
+ licenses: []
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 1.8.24
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: pdf_form_filler fills in a PDF form using fields defined by co-ordinates
107
+ in a YAML file.
108
+ test_files:
109
+ - spec/fixtures/ms_application_form.pdf
110
+ - spec/fixtures/ms_application_form.yml
111
+ - spec/fixtures/ms_application_form_data.yml