pdf_ravager 0.0.4-java → 0.0.5-java
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/README.md +33 -10
- data/lib/pdf_ravager/pdf.rb +2 -14
- data/lib/pdf_ravager/ravager.rb +4 -13
- data/lib/pdf_ravager/version.rb +2 -2
- data/spec/pdf_spec.rb +13 -115
- metadata +1 -1
data/README.md
CHANGED
@@ -17,17 +17,13 @@ data = {:name => 'Bob', :gender => 'm', :relation => 'Uncle' }
|
|
17
17
|
|
18
18
|
info = pdf do
|
19
19
|
text 'name', data[:name]
|
20
|
-
|
20
|
+
rich_text 'name_stylized', "<b>#{data[:name]}</b>" # warning: text is not HTML-escaped!
|
21
21
|
radio_group 'sex' do
|
22
|
-
fill 'male'
|
23
|
-
fill 'female'
|
22
|
+
fill 'male' if data[:gender] == 'm'
|
23
|
+
fill 'female' if data[:gender] == 'f'
|
24
24
|
end
|
25
25
|
check 'related' if data[:relation]
|
26
26
|
checkbox_group 'relation' do
|
27
|
-
check 'parent', :if => ['Mom', 'Dad'].include?(data[:relation])
|
28
|
-
check 'sibling', :if => ['Brother', 'Sister'].include?(data[:relation])
|
29
|
-
check 'other', :unless => ['Brother', 'Sister', 'Mom', 'Dad'].include?(data[:relation])
|
30
|
-
# OR
|
31
27
|
case data[:relation]
|
32
28
|
when 'Mom', 'Dad'
|
33
29
|
check 'parent'
|
@@ -44,9 +40,36 @@ info.ravage '/tmp/info.pdf', :out_file => '/tmp/info_filled.pdf'
|
|
44
40
|
|
45
41
|
## Usage
|
46
42
|
|
47
|
-
|
48
|
-
|
49
|
-
|
43
|
+
### Field Names
|
44
|
+
To query and modify a form's field names, use a tool such as Adobe
|
45
|
+
LiveCycle.
|
46
|
+
|
47
|
+
### Rich Text
|
48
|
+
The `rich_text` type is specific to XFA forms. To understand how it
|
49
|
+
should be used, see the "Rich Text Reference" section of
|
50
|
+
[Adobe's XFA standard][1]. Rich Text is defined there as a subset of
|
51
|
+
XHTML and CSS which uses some custom restrictions and extensions by
|
52
|
+
Adobe. The minimum XHTML and CSS elements that a standards-compliant
|
53
|
+
XFA processor (e.g. Adobe Reader) must support are also listed there
|
54
|
+
and can be used as a guide.
|
55
|
+
|
56
|
+
### Checkbox Groups
|
57
|
+
Because there is no such thing as a "checkbox group," the
|
58
|
+
`checkbox_group` syntax is simply syntactic sugar for calling
|
59
|
+
`check` with the group name and a `.` prepended to the name. For
|
60
|
+
example,
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
checkbox_group 'relation' do
|
64
|
+
check 'parent'
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
is equivalent to
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
check 'relation.parent'
|
72
|
+
```
|
50
73
|
|
51
74
|
## Copyright
|
52
75
|
|
data/lib/pdf_ravager/pdf.rb
CHANGED
@@ -11,23 +11,14 @@ module PDFRavager
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def text(name, value, opts={})
|
14
|
-
return if opts.has_key?(:when) && !opts[:when]
|
15
|
-
return if opts.has_key?(:if) && !opts[:if]
|
16
|
-
return if opts.has_key?(:unless) && opts[:unless]
|
17
14
|
@fields << {:name => name, :value => value, :type => :text}
|
18
15
|
end
|
19
16
|
|
20
|
-
def
|
21
|
-
|
22
|
-
return if opts.has_key?(:if) && !opts[:if]
|
23
|
-
return if opts.has_key?(:unless) && opts[:unless]
|
24
|
-
@fields << {:name => name, :value => value, :type => :html}
|
17
|
+
def rich_text(name, value, opts={})
|
18
|
+
@fields << {:name => name, :value => value, :type => :rich_text}
|
25
19
|
end
|
26
20
|
|
27
21
|
def check(name, opts={})
|
28
|
-
return if opts.has_key?(:when) && !opts[:when]
|
29
|
-
return if opts.has_key?(:if) && !opts[:if]
|
30
|
-
return if opts.has_key?(:unless) && opts[:unless]
|
31
22
|
@fields << {:name => name, :value => true, :type => :checkbox}
|
32
23
|
end
|
33
24
|
|
@@ -36,9 +27,6 @@ module PDFRavager
|
|
36
27
|
# TODO: replace w/ singleton method?
|
37
28
|
PDF.instance_eval do
|
38
29
|
send(:define_method, :fill) do |name, opts={}|
|
39
|
-
return if opts.has_key?(:when) && !opts[:when]
|
40
|
-
return if opts.has_key?(:if) && !opts[:if]
|
41
|
-
return if opts.has_key?(:unless) && opts[:unless]
|
42
30
|
fields << {:name => gname, :value => name, :type => :radio}
|
43
31
|
end
|
44
32
|
blk.call
|
data/lib/pdf_ravager/ravager.rb
CHANGED
@@ -32,9 +32,9 @@ module PDFRavager
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def set_field_value(name, value, type=nil)
|
35
|
-
return
|
36
|
-
# First use AcroForms method
|
35
|
+
return set_rich_text_field(name, value) if type == :rich_text
|
37
36
|
begin
|
37
|
+
# First try AcroForms method of setting value
|
38
38
|
@afields.setField(XfaForm::Xml2Som::getShortName(SOM.escape(name)), value)
|
39
39
|
rescue java.lang.NullPointerException
|
40
40
|
# If the AcroForms method doesn't work, we'll set the XDP
|
@@ -42,7 +42,7 @@ module PDFRavager
|
|
42
42
|
# https://github.com/sparklemotion/nokogiri/issues/781
|
43
43
|
doc = Nokogiri::XML(Nokogiri::XML::Document.wrap(@xfa.getDomDocument).to_xml)
|
44
44
|
doc.xpath("//*[local-name()='field'][@name='#{name}']").each do |node|
|
45
|
-
# Create an XML node in the XDP
|
45
|
+
# Create an XML node in the XDP like this: "<value><text>#{value}</text></value>"
|
46
46
|
Nokogiri::XML::Builder.with(node) do |xml|
|
47
47
|
xml.value_ {
|
48
48
|
xml.text_ {
|
@@ -56,15 +56,6 @@ module PDFRavager
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
def get_field_type(name)
|
60
|
-
short_name = XfaForm::Xml2Som::getShortName(SOM.escape(name))
|
61
|
-
begin
|
62
|
-
@afields.getFieldType(short_name)
|
63
|
-
rescue java.lang.NullPointerException
|
64
|
-
nil
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
59
|
def destroy
|
69
60
|
@stamper.close
|
70
61
|
end
|
@@ -81,7 +72,7 @@ module PDFRavager
|
|
81
72
|
@som_template = @xfa.getTemplateSom
|
82
73
|
end
|
83
74
|
|
84
|
-
def
|
75
|
+
def set_rich_text_field(name, value)
|
85
76
|
doc = Nokogiri::XML(Nokogiri::XML::Document.wrap(@xfa.getDomDocument).to_xml)
|
86
77
|
doc.xpath("//*[local-name()='field'][@name='#{name}']").each do |node|
|
87
78
|
Nokogiri::XML::Builder.with(node) do |xml|
|
data/lib/pdf_ravager/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module PDFRavager
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.5"
|
3
|
+
end
|
data/spec/pdf_spec.rb
CHANGED
@@ -4,44 +4,14 @@ require 'pdf_ravager/pdf'
|
|
4
4
|
class TestPDF < MiniTest::Unit::TestCase
|
5
5
|
def setup
|
6
6
|
@pdf = pdf 'foo.pdf' do
|
7
|
-
text
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
text 'text_if_false', 'foo', :if => false
|
12
|
-
text 'text_unless_true', 'foo', :unless => true
|
13
|
-
text 'text_unless_false', 'foo', :unless => false
|
14
|
-
html 'html', '<b>foo</b>'
|
15
|
-
check 'checkbox'
|
16
|
-
radio_group 'radio_group_always_filled' do
|
17
|
-
fill 'foo'
|
18
|
-
end
|
19
|
-
radio_group 'radio_group_if' do
|
20
|
-
fill 'true', :if => true
|
21
|
-
fill 'false', :if => false
|
22
|
-
end
|
23
|
-
radio_group 'radio_group_when' do
|
24
|
-
fill 'true', :when => true
|
25
|
-
fill 'false', :when => false
|
26
|
-
end
|
27
|
-
radio_group 'radio_group_unless' do
|
28
|
-
fill 'true', :unless => true
|
29
|
-
fill 'false', :unless => false
|
30
|
-
end
|
31
|
-
checkbox_group 'checkbox_group_always_checked' do
|
7
|
+
text 'text', 'foo'
|
8
|
+
rich_text 'rich_text', '<b>foo</b>'
|
9
|
+
check 'checkbox'
|
10
|
+
checkbox_group 'checkbox_group' do
|
32
11
|
check 'foo'
|
33
12
|
end
|
34
|
-
|
35
|
-
|
36
|
-
check 'false', :if => false
|
37
|
-
end
|
38
|
-
checkbox_group 'checkbox_group_when' do
|
39
|
-
check 'true', :when => true
|
40
|
-
check 'false', :when => false
|
41
|
-
end
|
42
|
-
checkbox_group 'checkbox_group_unless' do
|
43
|
-
check 'true', :unless => true
|
44
|
-
check 'false', :unless => false
|
13
|
+
radio_group 'radio_group' do
|
14
|
+
fill 'foo'
|
45
15
|
end
|
46
16
|
end
|
47
17
|
|
@@ -53,95 +23,23 @@ class TestPDF < MiniTest::Unit::TestCase
|
|
53
23
|
end
|
54
24
|
|
55
25
|
def test_that_text_is_set
|
56
|
-
assert_includes @pdf.fields, {:name => '
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_that_text_when_true_is_set
|
60
|
-
assert_includes @pdf.fields, {:name => 'text_when_true', :value => 'foo', :type => :text}
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_that_text_when_false_is_not_set
|
64
|
-
refute_includes @pdf.fields, {:name => 'text_when_false', :value => 'foo', :type => :text}
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_that_text_if_true_is_set
|
68
|
-
assert_includes @pdf.fields, {:name => 'text_if_true', :value => 'foo', :type => :text}
|
26
|
+
assert_includes @pdf.fields, {:name => 'text', :value => 'foo', :type => :text}
|
69
27
|
end
|
70
28
|
|
71
|
-
def
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_that_text_unless_true_is_not_set
|
76
|
-
refute_includes @pdf.fields, {:name => 'text_unless_true', :value => 'foo', :type => :text}
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_that_text_unless_false_is_set
|
80
|
-
assert_includes @pdf.fields, {:name => 'text_unless_false', :value => 'foo', :type => :text}
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_that_html_is_set
|
84
|
-
assert_includes @pdf.fields, {:name => 'html', :value => '<b>foo</b>', :type => :html}
|
29
|
+
def test_that_rich_text_is_set
|
30
|
+
assert_includes @pdf.fields, {:name => 'rich_text', :value => '<b>foo</b>', :type => :rich_text}
|
85
31
|
end
|
86
32
|
|
87
33
|
def test_that_checkbox_is_set
|
88
34
|
assert_includes @pdf.fields, {:name => 'checkbox', :value => true, :type => :checkbox}
|
89
35
|
end
|
90
36
|
|
91
|
-
def
|
92
|
-
assert_includes @pdf.fields, {:name => '
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_that_radio_group_when_true_is_set
|
96
|
-
assert_includes @pdf.fields, {:name => 'radio_group_when', :value => 'true', :type => :radio}
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_that_radio_group_when_false_is_not_set
|
100
|
-
refute_includes @pdf.fields, {:name => 'radio_group_when', :value => 'false', :type => :radio}
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_that_radio_group_if_true_is_set
|
104
|
-
assert_includes @pdf.fields, {:name => 'radio_group_if', :value => 'true', :type => :radio}
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_that_radio_group_if_false_is_not_set
|
108
|
-
refute_includes @pdf.fields, {:name => 'radio_group_if', :value => 'false', :type => :radio}
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_that_radio_group_unless_true_is_not_set
|
112
|
-
refute_includes @pdf.fields, {:name => 'radio_group_unless', :value => 'true', :type => :radio}
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_that_radio_group_unless_false_is_set
|
116
|
-
assert_includes @pdf.fields, {:name => 'radio_group_unless', :value => 'false', :type => :radio}
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_that_checkbox_group_always_checked_is_checked
|
120
|
-
assert_includes @pdf.fields, {:name => 'checkbox_group_always_checked.foo', :value => true, :type => :checkbox}
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_that_checkbox_group_when_true_is_set
|
124
|
-
assert_includes @pdf.fields, {:name => 'checkbox_group_when.true', :value => true, :type => :checkbox}
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_that_checkbox_group_when_false_is_not_set
|
128
|
-
refute_includes @pdf.fields, {:name => 'checkbox_group_when.false', :value => true, :type => :checkbox}
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_that_checkbox_group_if_true_is_set
|
132
|
-
assert_includes @pdf.fields, {:name => 'checkbox_group_if.true', :value => true, :type => :checkbox}
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_that_checkbox_group_if_false_is_not_set
|
136
|
-
refute_includes @pdf.fields, {:name => 'checkbox_group_if.false', :value => true, :type => :checkbox}
|
137
|
-
end
|
138
|
-
|
139
|
-
def test_that_checkbox_group_unless_true_is_not_set
|
140
|
-
refute_includes @pdf.fields, {:name => 'checkbox_group_unless.true', :value => true, :type => :checkbox}
|
37
|
+
def test_that_checkbox_group_is_set
|
38
|
+
assert_includes @pdf.fields, {:name => 'checkbox_group.foo', :value => true, :type => :checkbox}
|
141
39
|
end
|
142
40
|
|
143
|
-
def
|
144
|
-
assert_includes @pdf.fields, {:name => '
|
41
|
+
def test_that_radio_group_is_set
|
42
|
+
assert_includes @pdf.fields, {:name => 'radio_group', :value => 'foo', :type => :radio}
|
145
43
|
end
|
146
44
|
|
147
45
|
def test_json_serialization
|