fillable-pdf 0.7 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +10 -4
- data/.travis.yml +5 -2
- data/{LICENSE.txt → LICENSE.md} +4 -0
- data/README.md +132 -89
- data/Rakefile +4 -1
- data/ext/font-asian-7.1.12.jar +0 -0
- data/ext/forms-7.1.12.jar +0 -0
- data/ext/io-7.1.12.jar +0 -0
- data/ext/kernel-7.1.12.jar +0 -0
- data/ext/layout-7.1.12.jar +0 -0
- data/ext/{slf4j-api-1.7.28.jar → slf4j-api-1.7.29.jar} +0 -0
- data/ext/{slf4j-simple-1.7.28.jar → slf4j-simple-1.7.29.jar} +0 -0
- data/fillable-pdf.gemspec +10 -4
- data/lib/field.rb +6 -1
- data/lib/fillable-pdf.rb +31 -12
- data/lib/fillable-pdf/version.rb +1 -1
- data/lib/kernel.rb +9 -0
- metadata +98 -26
- data/ext/forms-7.1.7.jar +0 -0
- data/ext/io-7.1.7.jar +0 -0
- data/ext/kernel-7.1.7.jar +0 -0
- data/ext/layout-7.1.7.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 998124f748072a08e1a2f98593b85ba4297952c414bb800c7f05df607d76d1a7
|
4
|
+
data.tar.gz: d9f16c8942b1c167b476bcc5c630724f631c40285fe05cae20894d542b2daeb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e864663a4319fc61ee01448839615ab6125960c5e7a4a39585baa0ce14a339701b748332ffe7dd35bcf7a69fbcc271435e883ee8be86438b818d00d8a034595
|
7
|
+
data.tar.gz: 485287c89ed9073a01b97afc72d1ab96eec27b2024891c90b69fb2243d25409b14b22b76046ec0fcd2b4b2ed27262b8752f9d0037baff3bcf7a7004617ac83a3
|
data/.rubocop.yml
CHANGED
@@ -1,21 +1,27 @@
|
|
1
1
|
require:
|
2
|
+
- rubocop-minitest
|
2
3
|
- rubocop-performance
|
4
|
+
- rubocop-rake
|
3
5
|
|
4
6
|
AllCops:
|
7
|
+
NewCops: enable
|
5
8
|
Exclude:
|
6
9
|
- .git/**/*
|
7
10
|
|
8
11
|
Layout/EmptyLineAfterGuardClause:
|
9
12
|
Enabled: false
|
10
13
|
|
11
|
-
Layout/
|
12
|
-
Enabled: false
|
13
|
-
|
14
|
-
Metrics/LineLength:
|
14
|
+
Layout/LineLength:
|
15
15
|
Exclude:
|
16
16
|
- fillable-pdf.gemspec
|
17
17
|
Max: 120
|
18
18
|
|
19
|
+
Layout/SpaceInsideHashLiteralBraces:
|
20
|
+
Enabled: false
|
21
|
+
|
22
|
+
Metrics/MethodLength:
|
23
|
+
Max: 12
|
24
|
+
|
19
25
|
Naming/AccessorMethodName:
|
20
26
|
Enabled: false
|
21
27
|
|
data/.travis.yml
CHANGED
data/{LICENSE.txt → LICENSE.md}
RENAMED
@@ -1,3 +1,7 @@
|
|
1
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
2
|
+
|
3
|
+
However, you must also adhere to the [iText License](https://github.com/itext/itext7) when using this gem in your project.
|
4
|
+
|
1
5
|
The MIT License (MIT)
|
2
6
|
|
3
7
|
Copyright (c) 2016 Vadim Kononov
|
data/README.md
CHANGED
@@ -1,13 +1,22 @@
|
|
1
|
+
|
1
2
|
# FillablePDF
|
2
3
|
|
3
4
|
[![Gem Version](https://badge.fury.io/rb/fillable-pdf.svg)](https://rubygems.org/gems/fillable-pdf)
|
4
|
-
[![Build Status](https://api.travis-ci.org/
|
5
|
+
[![Build Status](https://api.travis-ci.org/vkononov/fillable-pdf.svg?branch=master)](http://travis-ci.org/vkononov/fillable-pdf)
|
5
6
|
|
6
7
|
FillablePDF is an extremely simple and lightweight utility that bridges iText and Ruby in order to fill out fillable PDF forms or extract field values from previously filled out PDF forms.
|
7
8
|
|
8
|
-
## Known
|
9
|
+
## Known Issues
|
10
|
+
|
11
|
+
If the gem hangs in `development`, removing the following gems may fix the issue:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'spring'
|
15
|
+
gem 'spring-watcher-listen'
|
16
|
+
```
|
17
|
+
|
18
|
+
If the gem hangs in `production`, you could try to use `puma` with a reverse proxy to host the application.
|
9
19
|
|
10
|
-
if you are using Rails and hosting the app with Passenger Phusion (be it standalone or as a plugin for Apache or Nginx), the Java code within this gem simply hangs without any errors and warnings. If you need to deploy your Rails application, do not use Passenger Phusion. I have tested Puma, and it works fine. Not sure about other webservers.
|
11
20
|
|
12
21
|
## Installation
|
13
22
|
|
@@ -42,97 +51,126 @@ First of all, you should open a fillable PDF file:
|
|
42
51
|
pdf = FillablePDF.new 'input.pdf'
|
43
52
|
```
|
44
53
|
|
45
|
-
|
46
|
-
|
47
|
-
```ruby
|
48
|
-
fillable-pdf
|
49
|
-
# output example: true
|
50
|
-
pdf.any_fields?
|
51
|
-
```
|
52
|
-
|
53
|
-
```ruby
|
54
|
-
# get the total number of fillable form fields
|
55
|
-
# output example: 10
|
56
|
-
pdf.num_fields
|
57
|
-
```
|
58
|
-
|
59
|
-
```ruby
|
60
|
-
# retrieve a single field value by field name
|
61
|
-
# output example: 'Richard'
|
62
|
-
pdf.field(:full_name)
|
63
|
-
```
|
64
|
-
|
65
|
-
```ruby
|
66
|
-
# retrieve a field type by field name
|
67
|
-
# numeric types should
|
68
|
-
# output example: 4
|
69
|
-
pdf.field_type(:football)
|
70
|
-
|
71
|
-
# list of all field types
|
72
|
-
Field::BUTTON
|
73
|
-
Field::CHOICE
|
74
|
-
Field::SIGNATURE
|
75
|
-
Field::TEXT
|
76
|
-
```
|
77
|
-
|
78
|
-
```ruby
|
79
|
-
# retrieve a hash of field name and values
|
80
|
-
# output example: {:last_name=>"Rahl", :first_name=>"Richard"}
|
81
|
-
pdf.fields
|
82
|
-
```
|
83
|
-
|
84
|
-
```ruby
|
85
|
-
# set the value of a single field by field name
|
86
|
-
# result: changes the value of 'first_name' to 'Richard'
|
87
|
-
pdf.set_field(:first_name, 'Richard')
|
88
|
-
```
|
89
|
-
|
90
|
-
```ruby
|
91
|
-
# set the values of multiple fields by field names
|
92
|
-
# result: changes the values of 'first_name' and 'last_name'
|
93
|
-
pdf.set_fields(first_name: 'Richard', last_name: 'Rahl')
|
94
|
-
```
|
95
|
-
|
96
|
-
```ruby
|
97
|
-
# rename field (i.e. change the name of the field)
|
98
|
-
# result: renames field name 'last_name' to 'surname'
|
99
|
-
# NOTE: this action does not take effect until the document is saved
|
100
|
-
pdf.rename_field(:last_name, :surname)
|
101
|
-
```
|
102
|
-
|
103
|
-
```ruby
|
104
|
-
# remove field (i.e. delete field and its value)
|
105
|
-
# result: physically removes field 'last_name' from document
|
106
|
-
pdf.remove_field(:last_name)
|
107
|
-
```
|
108
|
-
|
109
|
-
```ruby
|
110
|
-
# get an array of all field names in the document
|
111
|
-
# output example: [:first_name, :last_name]
|
112
|
-
pdf.names
|
113
|
-
```
|
114
|
-
|
115
|
-
```ruby
|
116
|
-
# get an array of all field values in the document
|
117
|
-
# output example: ["Rahl", "Richard"]
|
118
|
-
pdf.values
|
119
|
-
```
|
120
|
-
|
121
|
-
Once the PDF is filled out you can either overwrite it or save it as another file:
|
54
|
+
> **Always remember to close your document once you're finished working with it in order to avoid memory leaks:**
|
122
55
|
|
123
56
|
```ruby
|
124
|
-
pdf.
|
125
|
-
pdf.save_as('output.pdf')
|
57
|
+
pdf.close
|
126
58
|
```
|
127
59
|
|
128
|
-
|
60
|
+
## Instance Methods
|
129
61
|
|
130
|
-
|
131
|
-
pdf.save(flatten: true)
|
132
|
-
pdf.save_as('output.pdf', flatten: true)
|
133
|
-
```
|
62
|
+
An instance of `FillablePDF` has the following methods at its disposal:
|
134
63
|
|
135
|
-
|
64
|
+
* `any_fields?`
|
65
|
+
*Determines whether the form has any fields.*
|
66
|
+
```ruby
|
67
|
+
pdf.any_fields?
|
68
|
+
# output example: true
|
69
|
+
```
|
70
|
+
|
71
|
+
* `num_fields`
|
72
|
+
*Returns the total number of fillable form fields.*
|
73
|
+
```ruby
|
74
|
+
# output example: 10
|
75
|
+
pdf.num_fields
|
76
|
+
```
|
77
|
+
|
78
|
+
* `field`
|
79
|
+
*Retrieves the value of a field given its unique field name.*
|
80
|
+
```ruby
|
81
|
+
pdf.field(:full_name)
|
82
|
+
# output example: 'Richard'
|
83
|
+
```
|
84
|
+
|
85
|
+
* `field_type`
|
86
|
+
*Retrieves the numeric type of a field given its unique field name.*
|
87
|
+
```ruby
|
88
|
+
pdf.field_type(:football)
|
89
|
+
# output example: 4
|
90
|
+
|
91
|
+
# list of all field types
|
92
|
+
Field::BUTTON
|
93
|
+
Field::CHOICE
|
94
|
+
Field::SIGNATURE
|
95
|
+
Field::TEXT
|
96
|
+
```
|
97
|
+
|
98
|
+
* `fields`
|
99
|
+
*Retrieves a hash of all fields and their values.*
|
100
|
+
```ruby
|
101
|
+
pdf.fields
|
102
|
+
# output example: {first_name: "Richard", last_name: "Rahl"}
|
103
|
+
```
|
104
|
+
|
105
|
+
* `set_field`
|
106
|
+
*Sets the value of a field given its unique field name and value.*
|
107
|
+
```ruby
|
108
|
+
pdf.set_field(:first_name, 'Richard')
|
109
|
+
# result: changes the value of 'first_name' to 'Richard'
|
110
|
+
```
|
111
|
+
|
112
|
+
* `set_fields`
|
113
|
+
*Sets the values of multiple fields given a set of unique field names and values.*
|
114
|
+
```ruby
|
115
|
+
pdf.set_fields(first_name: 'Richard', last_name: 'Rahl')
|
116
|
+
# result: changes the values of 'first_name' and 'last_name'
|
117
|
+
```
|
118
|
+
|
119
|
+
* `rename_field`
|
120
|
+
*Renames a field given its unique field name and the new field name.*
|
121
|
+
```ruby
|
122
|
+
pdf.rename_field(:last_name, :surname)
|
123
|
+
# result: renames field name 'last_name' to 'surname'
|
124
|
+
# NOTE: this action does not take effect until the document is saved
|
125
|
+
```
|
126
|
+
|
127
|
+
* `remove_field`
|
128
|
+
*Removes a field from the document given its unique field name.*
|
129
|
+
```ruby
|
130
|
+
pdf.remove_field(:last_name)
|
131
|
+
# result: physically removes field 'last_name' from document
|
132
|
+
```
|
133
|
+
|
134
|
+
* `names`
|
135
|
+
*Returns a list of all field keys used in the document.*
|
136
|
+
```ruby
|
137
|
+
pdf.names
|
138
|
+
# output example: [:first_name, :last_name]
|
139
|
+
```
|
140
|
+
|
141
|
+
* `values`
|
142
|
+
*Returns a list of all field values used in the document.*
|
143
|
+
```ruby
|
144
|
+
pdf.values
|
145
|
+
# output example: ["Rahl", "Richard"]
|
146
|
+
```
|
147
|
+
|
148
|
+
* `save`
|
149
|
+
*Overwrites the previously opened PDF document and flattens it if requested.*
|
150
|
+
```ruby
|
151
|
+
pdf.save
|
152
|
+
# result: document is saved without flatenning
|
153
|
+
pdf.save_as(flatten: true)
|
154
|
+
# result: document is saved with flatenning
|
155
|
+
```
|
156
|
+
|
157
|
+
* `save_as`
|
158
|
+
*Saves the filled out PDF document in a given path and flattens it if requested.*
|
159
|
+
```ruby
|
160
|
+
pdf.save_as('output.pdf')
|
161
|
+
# result: document is saved in a given path without flatenning
|
162
|
+
pdf.save_as('output.pdf', flatten: true)
|
163
|
+
# result: document is saved in a given path with flatenning
|
164
|
+
```
|
165
|
+
|
166
|
+
**NOTE:** Saving the file automatically closes the input file, so you would need to reinitialize the `FillabePDF` class before making any more changes or saving another copy.
|
167
|
+
|
168
|
+
* `close`
|
169
|
+
*Closes the PDF document discarding all unsaved changes.*
|
170
|
+
```ruby
|
171
|
+
pdf.close
|
172
|
+
# result: document is closed
|
173
|
+
```
|
136
174
|
|
137
175
|
## Example
|
138
176
|
|
@@ -203,6 +241,9 @@ pdf.save_as('output.pdf')
|
|
203
241
|
# saving another copy of the filled out PDF in another file and making it non-editable
|
204
242
|
pdf = FillablePDF.new('output.pdf')
|
205
243
|
pdf.save_as 'output.flat.pdf', flatten: true
|
244
|
+
|
245
|
+
# closing the document
|
246
|
+
pdf.close
|
206
247
|
```
|
207
248
|
|
208
249
|
The example above produces the following output and also generates the output file [output.pdf](example/output.pdf).
|
@@ -236,4 +277,6 @@ Signatory: Richard Rahl
|
|
236
277
|
|
237
278
|
## License
|
238
279
|
|
239
|
-
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
280
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
281
|
+
|
282
|
+
However, you must also adhere to the [iText License](https://github.com/itext/itext7) when using this gem in your project.
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'bundler/gem_tasks'
|
2
2
|
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
3
4
|
|
4
5
|
Rake::TestTask.new(:test) do |t|
|
5
6
|
t.libs << 'test'
|
@@ -7,4 +8,6 @@ Rake::TestTask.new(:test) do |t|
|
|
7
8
|
t.test_files = FileList['test/**/*_test.rb']
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
+
RuboCop::RakeTask.new
|
12
|
+
|
13
|
+
task default: %i[test rubocop]
|
Binary file
|
Binary file
|
data/ext/io-7.1.12.jar
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/fillable-pdf.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'fillable-pdf/version'
|
4
4
|
|
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'FillablePDF is an extremely simple and lightweight utility that bridges iText and Ruby in order to fill out fillable PDF forms or extract field values from previously filled out PDF forms.'
|
13
13
|
spec.homepage = 'https://github.com/vkononov/fillable-pdf'
|
14
14
|
spec.license = 'MIT'
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
|
15
16
|
|
16
17
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
17
18
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(example|test|spec|features)/}) }
|
@@ -20,9 +21,14 @@ Gem::Specification.new do |spec|
|
|
20
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
22
|
spec.require_paths = %w[ext lib]
|
22
23
|
|
23
|
-
spec.add_development_dependency 'bundler'
|
24
|
-
spec.add_development_dependency 'minitest'
|
25
|
-
spec.add_development_dependency 'rake'
|
24
|
+
spec.add_development_dependency 'bundler'
|
25
|
+
spec.add_development_dependency 'minitest'
|
26
|
+
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rubocop'
|
28
|
+
spec.add_development_dependency 'rubocop-md'
|
29
|
+
spec.add_development_dependency 'rubocop-minitest'
|
30
|
+
spec.add_development_dependency 'rubocop-performance'
|
31
|
+
spec.add_development_dependency 'rubocop-rake'
|
26
32
|
|
27
33
|
spec.add_runtime_dependency 'rjb', '~> 1.6'
|
28
34
|
end
|
data/lib/field.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require_relative 'fillable-pdf/itext'
|
2
|
+
require_relative 'kernel'
|
2
3
|
|
3
4
|
class Field
|
4
|
-
|
5
|
+
# PdfName has a constant "A" and a constant "a". Unfortunately, RJB does not differentiate
|
6
|
+
# between these constants and tries to create the same constant ("A") for both, which causes
|
7
|
+
# an annoying warning "already initialized constant Rjb::Com_itextpdf_kernel_pdf_PdfName::A".
|
8
|
+
# As long as RJB has not fixed this issue, this warning will remain suppressed.
|
9
|
+
suppress_warnings { PDF_NAME = Rjb.import('com.itextpdf.kernel.pdf.PdfName') } # rubocop:disable Lint/ConstantDefinitionInBlock
|
5
10
|
|
6
11
|
BUTTON = PDF_NAME.Btn.toString
|
7
12
|
CHOICE = PDF_NAME.Ch.toString
|
data/lib/fillable-pdf.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'fillable-pdf/itext'
|
2
2
|
require_relative 'field'
|
3
|
+
require 'fileutils'
|
3
4
|
require 'securerandom'
|
4
5
|
|
5
6
|
class FillablePDF
|
@@ -19,12 +20,16 @@ class FillablePDF
|
|
19
20
|
def initialize(file_path)
|
20
21
|
raise IOError, "File at `#{file_path}' is not found" unless File.exist?(file_path)
|
21
22
|
@file_path = file_path
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
begin
|
24
|
+
@byte_stream = BYTE_STREAM.new
|
25
|
+
@pdf_reader = PDF_READER.new @file_path
|
26
|
+
@pdf_writer = PDF_WRITER.new @byte_stream
|
27
|
+
@pdf_doc = PDF_DOCUMENT.new @pdf_reader, @pdf_writer
|
28
|
+
@pdf_form = PDF_ACRO_FORM.getAcroForm(@pdf_doc, true)
|
29
|
+
@form_fields = @pdf_form.getFormFields
|
30
|
+
rescue StandardError => e
|
31
|
+
raise "#{e.message} (input file may be corrupt, incompatible, or may not have any forms)"
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
##
|
@@ -37,7 +42,7 @@ class FillablePDF
|
|
37
42
|
end
|
38
43
|
|
39
44
|
##
|
40
|
-
# Returns the total number of form fields.
|
45
|
+
# Returns the total number of fillable form fields.
|
41
46
|
#
|
42
47
|
# @return the number of fields
|
43
48
|
#
|
@@ -147,24 +152,38 @@ class FillablePDF
|
|
147
152
|
end
|
148
153
|
|
149
154
|
##
|
150
|
-
# Overwrites the previously opened PDF
|
155
|
+
# Overwrites the previously opened PDF document and flattens it if requested.
|
151
156
|
#
|
152
157
|
# @param [bool] flatten true if PDF should be flattened, false otherwise
|
153
158
|
#
|
154
159
|
def save(flatten: false)
|
155
160
|
tmp_file = SecureRandom.uuid
|
156
161
|
save_as(tmp_file, flatten: flatten)
|
157
|
-
|
162
|
+
FileUtils.mv tmp_file, @file_path
|
158
163
|
end
|
159
164
|
|
160
165
|
##
|
161
|
-
# Saves the filled out PDF
|
166
|
+
# Saves the filled out PDF document in a given path and flattens it if requested.
|
162
167
|
#
|
163
168
|
# @param [String] file_path the name of the PDF file or file path
|
164
169
|
# @param [Hash] flatten: true if PDF should be flattened, false otherwise
|
165
170
|
#
|
166
171
|
def save_as(file_path, flatten: false)
|
167
|
-
|
172
|
+
if @file_path == file_path
|
173
|
+
save(flatten: flatten)
|
174
|
+
else
|
175
|
+
File.open(file_path, 'wb') { |f| f.write(finalize(flatten: flatten)) && f.close }
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
##
|
180
|
+
# Closes the PDF document discarding all unsaved changes.
|
181
|
+
#
|
182
|
+
# @return [Boolean] true if document is closed, false otherwise
|
183
|
+
#
|
184
|
+
def close
|
185
|
+
@pdf_doc.close
|
186
|
+
@pdf_doc.isClosed
|
168
187
|
end
|
169
188
|
|
170
189
|
private
|
@@ -176,7 +195,7 @@ class FillablePDF
|
|
176
195
|
#
|
177
196
|
def finalize(flatten: false)
|
178
197
|
@pdf_form.flattenFields if flatten
|
179
|
-
|
198
|
+
close
|
180
199
|
@byte_stream.toByteArray
|
181
200
|
end
|
182
201
|
|
data/lib/fillable-pdf/version.rb
CHANGED
data/lib/kernel.rb
ADDED
metadata
CHANGED
@@ -1,57 +1,127 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fillable-pdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vadim Kononov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-md
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-performance
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
53
109
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
55
125
|
- !ruby/object:Gem::Dependency
|
56
126
|
name: rjb
|
57
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -79,27 +149,29 @@ files:
|
|
79
149
|
- ".rubocop.yml"
|
80
150
|
- ".travis.yml"
|
81
151
|
- Gemfile
|
82
|
-
- LICENSE.
|
152
|
+
- LICENSE.md
|
83
153
|
- README.md
|
84
154
|
- Rakefile
|
85
155
|
- bin/console
|
86
156
|
- bin/setup
|
87
|
-
- ext/
|
88
|
-
- ext/
|
89
|
-
- ext/
|
90
|
-
- ext/
|
91
|
-
- ext/
|
92
|
-
- ext/slf4j-
|
157
|
+
- ext/font-asian-7.1.12.jar
|
158
|
+
- ext/forms-7.1.12.jar
|
159
|
+
- ext/io-7.1.12.jar
|
160
|
+
- ext/kernel-7.1.12.jar
|
161
|
+
- ext/layout-7.1.12.jar
|
162
|
+
- ext/slf4j-api-1.7.29.jar
|
163
|
+
- ext/slf4j-simple-1.7.29.jar
|
93
164
|
- fillable-pdf.gemspec
|
94
165
|
- lib/field.rb
|
95
166
|
- lib/fillable-pdf.rb
|
96
167
|
- lib/fillable-pdf/itext.rb
|
97
168
|
- lib/fillable-pdf/version.rb
|
169
|
+
- lib/kernel.rb
|
98
170
|
homepage: https://github.com/vkononov/fillable-pdf
|
99
171
|
licenses:
|
100
172
|
- MIT
|
101
173
|
metadata: {}
|
102
|
-
post_install_message:
|
174
|
+
post_install_message:
|
103
175
|
rdoc_options: []
|
104
176
|
require_paths:
|
105
177
|
- ext
|
@@ -108,15 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
180
|
requirements:
|
109
181
|
- - ">="
|
110
182
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
183
|
+
version: 2.4.0
|
112
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
185
|
requirements:
|
114
186
|
- - ">="
|
115
187
|
- !ruby/object:Gem::Version
|
116
188
|
version: '0'
|
117
189
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
119
|
-
signing_key:
|
190
|
+
rubygems_version: 3.2.3
|
191
|
+
signing_key:
|
120
192
|
specification_version: 4
|
121
193
|
summary: Fill out or extract field values from simple fillable PDF forms using iText.
|
122
194
|
test_files: []
|
data/ext/forms-7.1.7.jar
DELETED
Binary file
|
data/ext/io-7.1.7.jar
DELETED
Binary file
|
data/ext/kernel-7.1.7.jar
DELETED
Binary file
|
data/ext/layout-7.1.7.jar
DELETED
Binary file
|