pdf-forms 0.5.5 → 0.5.6
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.
- checksums.yaml +7 -0
- data/README.rdoc +15 -10
- data/lib/pdf_forms.rb +2 -0
- data/lib/pdf_forms/data_format.rb +46 -0
- data/lib/pdf_forms/fdf.rb +5 -32
- data/lib/pdf_forms/pdftk_wrapper.rb +6 -4
- data/lib/pdf_forms/version.rb +1 -1
- data/lib/pdf_forms/xfdf.rb +36 -0
- metadata +14 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b38b51cb4c9b3164c52041260accc25b36cb1bdb
|
4
|
+
data.tar.gz: 590aeedcdc7d0481d6102b5d82468a46c80912c5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ca665b990d61e8a9f7510d6b6580620ececf6b4d4ad2994a095be3dc719a92a2356a9314501dcab392ee0c0aab951239d2585048a94257a669cd5a9db4f51d07
|
7
|
+
data.tar.gz: 5bcb0c643f3f8d20acea518730ba7a69977284a14910fc40006c9d026f0d7f99be500ed89dd91bfb279184b39e6cebc4cd1f9a1280ea1c16faefda03212c5f79
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= pdf-forms
|
1
|
+
= pdf-forms
|
2
2
|
http://github.com/jkraemer/pdf-forms/
|
3
3
|
by Jens Kraemer, jk@jkraemer.net
|
4
4
|
|
@@ -8,31 +8,36 @@ Fill out PDF forms with pdftk (http://www.accesspdf.com/pdftk/).
|
|
8
8
|
|
9
9
|
== EXAMPLE:
|
10
10
|
|
11
|
-
=== FDF creation
|
11
|
+
=== FDF/XFdf creation
|
12
12
|
|
13
13
|
require 'pdf_forms'
|
14
14
|
fdf = PdfForms::Fdf.new :key => 'value', :other_key => 'other value'
|
15
|
-
# use
|
16
|
-
puts fdf.
|
15
|
+
# use to_pdf_data if you just want the fdf data, without writing it to a file
|
16
|
+
puts fdf.to_pdf_data
|
17
17
|
# write fdf file
|
18
18
|
fdf.save_to 'path/to/file.fdf'
|
19
19
|
|
20
|
+
# To generate XFDF instead of FDF instantiate PdfForms::XFdf instead of PdfForms::Fdf
|
21
|
+
|
20
22
|
=== Query form fields and fill out PDF forms with pdftk
|
21
23
|
|
22
24
|
First get pdftk from http://www.accesspdf.com/pdftk/ and install it.
|
23
25
|
|
24
26
|
require 'pdf_forms'
|
25
|
-
|
27
|
+
|
26
28
|
# adjust the pdftk path to suit your pdftk installation
|
29
|
+
# add :data_format => 'XFdf' option to generate XFDF instead of FDF when filling a form
|
27
30
|
pdftk = PdfForms.new('/usr/local/bin/pdftk')
|
28
|
-
|
31
|
+
|
32
|
+
add :data_format => 'XFdf' option to generate XFDF instead of FDF when filling a form
|
33
|
+
|
29
34
|
# find out the field names that are present in form.pdf
|
30
35
|
pdftk.get_field_names 'path/to/form.pdf'
|
31
|
-
|
36
|
+
|
32
37
|
# take form.pdf, set the 'foo' field to 'bar' and save the document to myform.pdf
|
33
38
|
pdftk.fill_form '/path/to/form.pdf', 'myform.pdf', :foo => 'bar'
|
34
|
-
|
35
|
-
|
39
|
+
|
40
|
+
|
36
41
|
|
37
42
|
== INSTALL:
|
38
43
|
|
@@ -48,4 +53,4 @@ The FDF generation part is a straight port of Steffen Schwigon's PDF::FDF::Simpl
|
|
48
53
|
|
49
54
|
== LICENSE:
|
50
55
|
|
51
|
-
see LICENSE
|
56
|
+
see LICENSE
|
data/lib/pdf_forms.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding UTF-8
|
2
|
+
|
3
|
+
module PdfForms
|
4
|
+
class DataFormat
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(data = {}, options = {})
|
8
|
+
@data = data
|
9
|
+
@options = {
|
10
|
+
:file => nil,
|
11
|
+
:ufile => nil,
|
12
|
+
:id => nil
|
13
|
+
}.merge(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
# generate PDF content in this data format
|
17
|
+
def to_pdf_data
|
18
|
+
pdf_data = header
|
19
|
+
|
20
|
+
@data.each do |key, value|
|
21
|
+
if Hash === value
|
22
|
+
value.each do |sub_key, sub_value|
|
23
|
+
pdf_data << field("#{key}_#{sub_key}", sub_value)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
pdf_data << field(key, value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
pdf_data << footer
|
31
|
+
return encode_data(pdf_data)
|
32
|
+
end
|
33
|
+
|
34
|
+
alias_method :to_fdf, :to_pdf_data
|
35
|
+
|
36
|
+
# write fdf content to path
|
37
|
+
def save_to(path)
|
38
|
+
(File.open(path, 'wb') << to_fdf).close
|
39
|
+
end
|
40
|
+
|
41
|
+
protected
|
42
|
+
def encode_data(data)
|
43
|
+
data
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/pdf_forms/fdf.rb
CHANGED
@@ -6,34 +6,15 @@ module PdfForms
|
|
6
6
|
#
|
7
7
|
# Straight port of Perl's PDF::FDF::Simple by Steffen Schwigon.
|
8
8
|
# Parsing FDF files is not supported (yet).
|
9
|
-
class Fdf
|
10
|
-
|
11
|
-
attr_reader :options
|
9
|
+
class Fdf < DataFormat
|
12
10
|
|
13
11
|
def initialize(data = {}, options = {})
|
14
|
-
|
15
|
-
@options = {
|
16
|
-
:file => nil,
|
17
|
-
:ufile => nil,
|
18
|
-
:id => nil
|
19
|
-
}.merge(options)
|
12
|
+
super
|
20
13
|
end
|
21
14
|
|
22
|
-
|
23
|
-
def to_fdf
|
24
|
-
fdf = header
|
25
|
-
|
26
|
-
@data.each do |key, value|
|
27
|
-
if Hash === value
|
28
|
-
value.each do |sub_key, sub_value|
|
29
|
-
fdf << field("#{key}_#{sub_key}", sub_value)
|
30
|
-
end
|
31
|
-
else
|
32
|
-
fdf << field(key, value)
|
33
|
-
end
|
34
|
-
end
|
15
|
+
protected
|
35
16
|
|
36
|
-
|
17
|
+
def encode_data(fdf)
|
37
18
|
# I have yet to see a version of pdftk which can handle UTF8 input,
|
38
19
|
# so we convert to ISO-8859-15 here, replacing unknown / invalid chars
|
39
20
|
# with the default replacement which is '?'.
|
@@ -43,18 +24,10 @@ module PdfForms
|
|
43
24
|
else
|
44
25
|
# pre 1.9
|
45
26
|
require 'iconv'
|
46
|
-
|
27
|
+
Iconv.conv('ISO-8859-15//IGNORE', 'utf-8', fdf)
|
47
28
|
end
|
48
|
-
return fdf
|
49
29
|
end
|
50
30
|
|
51
|
-
# write fdf content to path
|
52
|
-
def save_to(path)
|
53
|
-
(File.open(path, 'wb') << to_fdf).close
|
54
|
-
end
|
55
|
-
|
56
|
-
protected
|
57
|
-
|
58
31
|
def header
|
59
32
|
header = "%FDF-1.2\n\n1 0 obj\n<<\n/FDF << /Fields 2 0 R"
|
60
33
|
|
@@ -23,7 +23,7 @@ module PdfForms
|
|
23
23
|
def fill_form(template, destination, data = {})
|
24
24
|
q_template = safe_path(template)
|
25
25
|
q_destination = safe_path(destination)
|
26
|
-
fdf =
|
26
|
+
fdf = data_format(data)
|
27
27
|
tmp = Tempfile.new('pdf_forms-fdf')
|
28
28
|
tmp.close
|
29
29
|
fdf.save_to tmp.path
|
@@ -72,6 +72,11 @@ module PdfForms
|
|
72
72
|
|
73
73
|
protected
|
74
74
|
|
75
|
+
def data_format(data)
|
76
|
+
data_format = options[:data_format] || 'Fdf'
|
77
|
+
PdfForms.const_get(data_format).new(data)
|
78
|
+
end
|
79
|
+
|
75
80
|
def pdftk_command(*args)
|
76
81
|
quote_path(pdftk) + " #{args.flatten.compact.join ' '} 2>&1"
|
77
82
|
end
|
@@ -87,8 +92,5 @@ module PdfForms
|
|
87
92
|
end
|
88
93
|
opt_args
|
89
94
|
end
|
90
|
-
|
91
|
-
|
92
|
-
|
93
95
|
end
|
94
96
|
end
|
data/lib/pdf_forms/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: UTF-8
|
2
|
+
|
3
|
+
module PdfForms
|
4
|
+
# Map keys and values to Adobe's XFDF format.
|
5
|
+
class XFdf < DataFormat
|
6
|
+
def initialize(data = {}, options = {})
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def encode_data(pdf_data)
|
13
|
+
pdf_data
|
14
|
+
end
|
15
|
+
|
16
|
+
def quote(value)
|
17
|
+
require 'rexml/document'
|
18
|
+
REXML::Text.new(value.to_s).to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def header
|
22
|
+
'<?xml version="1.0" encoding="UTF-8"?>
|
23
|
+
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
|
24
|
+
<fields>
|
25
|
+
'
|
26
|
+
end
|
27
|
+
|
28
|
+
def field(key, value)
|
29
|
+
"<field name=\"#{key}\"><value>#{Array(value).map{ |v| quote(v) }.join(" ")}</value></field>"
|
30
|
+
end
|
31
|
+
|
32
|
+
def footer
|
33
|
+
"</fields></xfdf>"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdf-forms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jens Krämer
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-28 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: Fill out PDF forms with pdftk (http://www.accesspdf.com/pdftk/).
|
15
14
|
email:
|
@@ -19,37 +18,39 @@ extensions: []
|
|
19
18
|
extra_rdoc_files: []
|
20
19
|
files:
|
21
20
|
- lib/pdf-forms.rb
|
22
|
-
- lib/pdf_forms
|
21
|
+
- lib/pdf_forms.rb
|
22
|
+
- lib/pdf_forms/safe_path.rb
|
23
23
|
- lib/pdf_forms/field.rb
|
24
|
+
- lib/pdf_forms/xfdf.rb
|
24
25
|
- lib/pdf_forms/pdf.rb
|
25
|
-
- lib/pdf_forms/
|
26
|
-
- lib/pdf_forms/safe_path.rb
|
26
|
+
- lib/pdf_forms/data_format.rb
|
27
27
|
- lib/pdf_forms/version.rb
|
28
|
-
- lib/pdf_forms.rb
|
28
|
+
- lib/pdf_forms/fdf.rb
|
29
|
+
- lib/pdf_forms/pdftk_wrapper.rb
|
29
30
|
- LICENSE
|
30
31
|
- README.rdoc
|
31
32
|
homepage: http://github.com/jkraemer/pdf-forms
|
32
33
|
licenses: []
|
34
|
+
metadata: {}
|
33
35
|
post_install_message:
|
34
36
|
rdoc_options: []
|
35
37
|
require_paths:
|
36
38
|
- lib
|
37
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
-
none: false
|
39
40
|
requirements:
|
40
|
-
- -
|
41
|
+
- - '>='
|
41
42
|
- !ruby/object:Gem::Version
|
42
43
|
version: '0'
|
43
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
-
none: false
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 1.3.6
|
49
49
|
requirements: []
|
50
50
|
rubyforge_project: pdf-forms
|
51
|
-
rubygems_version:
|
51
|
+
rubygems_version: 2.0.3
|
52
52
|
signing_key:
|
53
|
-
specification_version:
|
53
|
+
specification_version: 4
|
54
54
|
summary: Fill out PDF forms with pdftk (http://www.accesspdf.com/pdftk/).
|
55
55
|
test_files: []
|
56
|
+
has_rdoc:
|