origami 1.2.7 → 2.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -0
- data/README.md +112 -0
- data/bin/config/pdfcop.conf.yml +232 -233
- data/bin/gui/about.rb +27 -37
- data/bin/gui/config.rb +108 -117
- data/bin/gui/file.rb +416 -365
- data/bin/gui/gtkhex.rb +1138 -1153
- data/bin/gui/hexview.rb +55 -57
- data/bin/gui/imgview.rb +48 -51
- data/bin/gui/menu.rb +388 -386
- data/bin/gui/properties.rb +114 -130
- data/bin/gui/signing.rb +571 -617
- data/bin/gui/textview.rb +77 -95
- data/bin/gui/treeview.rb +382 -387
- data/bin/gui/walker.rb +227 -232
- data/bin/gui/xrefs.rb +56 -60
- data/bin/pdf2pdfa +53 -57
- data/bin/pdf2ruby +212 -228
- data/bin/pdfcop +338 -348
- data/bin/pdfdecompress +58 -65
- data/bin/pdfdecrypt +56 -60
- data/bin/pdfencrypt +75 -80
- data/bin/pdfexplode +185 -182
- data/bin/pdfextract +201 -218
- data/bin/pdfmetadata +83 -82
- data/bin/pdfsh +4 -5
- data/bin/pdfwalker +1 -2
- data/bin/shell/.irbrc +45 -82
- data/bin/shell/console.rb +105 -130
- data/bin/shell/hexdump.rb +40 -64
- data/examples/README.md +34 -0
- data/examples/attachments/attachment.rb +38 -0
- data/examples/attachments/nested_document.rb +51 -0
- data/examples/encryption/encryption.rb +28 -0
- data/{samples/actions/triggerevents/trigger.rb → examples/events/events.rb} +13 -16
- data/examples/flash/flash.rb +37 -0
- data/{samples → examples}/flash/helloworld.swf +0 -0
- data/examples/forms/javascript.rb +54 -0
- data/examples/forms/xfa.rb +115 -0
- data/examples/javascript/hello_world.rb +22 -0
- data/examples/javascript/js_emulation.rb +54 -0
- data/examples/loop/goto.rb +32 -0
- data/examples/loop/named.rb +33 -0
- data/examples/signature/signature.rb +65 -0
- data/examples/uri/javascript.rb +56 -0
- data/examples/uri/open-uri.rb +21 -0
- data/examples/uri/submitform.rb +47 -0
- data/lib/origami.rb +29 -42
- data/lib/origami/3d.rb +350 -225
- data/lib/origami/acroform.rb +262 -288
- data/lib/origami/actions.rb +268 -288
- data/lib/origami/annotations.rb +697 -722
- data/lib/origami/array.rb +258 -184
- data/lib/origami/boolean.rb +74 -84
- data/lib/origami/catalog.rb +397 -434
- data/lib/origami/collections.rb +144 -0
- data/lib/origami/destinations.rb +233 -194
- data/lib/origami/dictionary.rb +253 -232
- data/lib/origami/encryption.rb +1274 -1243
- data/lib/origami/export.rb +232 -268
- data/lib/origami/extensions/fdf.rb +307 -220
- data/lib/origami/extensions/ppklite.rb +368 -435
- data/lib/origami/filespec.rb +197 -0
- data/lib/origami/filters.rb +301 -295
- data/lib/origami/filters/ascii.rb +177 -180
- data/lib/origami/filters/ccitt.rb +528 -535
- data/lib/origami/filters/crypt.rb +26 -35
- data/lib/origami/filters/dct.rb +46 -52
- data/lib/origami/filters/flate.rb +95 -94
- data/lib/origami/filters/jbig2.rb +49 -55
- data/lib/origami/filters/jpx.rb +38 -44
- data/lib/origami/filters/lzw.rb +189 -183
- data/lib/origami/filters/predictors.rb +221 -235
- data/lib/origami/filters/runlength.rb +103 -104
- data/lib/origami/font.rb +173 -186
- data/lib/origami/functions.rb +67 -81
- data/lib/origami/graphics.rb +25 -21
- data/lib/origami/graphics/colors.rb +178 -187
- data/lib/origami/graphics/instruction.rb +79 -85
- data/lib/origami/graphics/path.rb +142 -148
- data/lib/origami/graphics/patterns.rb +160 -167
- data/lib/origami/graphics/render.rb +43 -50
- data/lib/origami/graphics/state.rb +138 -153
- data/lib/origami/graphics/text.rb +188 -205
- data/lib/origami/graphics/xobject.rb +819 -815
- data/lib/origami/header.rb +63 -78
- data/lib/origami/javascript.rb +596 -597
- data/lib/origami/linearization.rb +285 -290
- data/lib/origami/metadata.rb +139 -148
- data/lib/origami/name.rb +112 -148
- data/lib/origami/null.rb +53 -62
- data/lib/origami/numeric.rb +162 -175
- data/lib/origami/obfuscation.rb +186 -174
- data/lib/origami/object.rb +593 -573
- data/lib/origami/outline.rb +42 -47
- data/lib/origami/outputintents.rb +73 -82
- data/lib/origami/page.rb +703 -592
- data/lib/origami/parser.rb +238 -290
- data/lib/origami/parsers/fdf.rb +41 -33
- data/lib/origami/parsers/pdf.rb +75 -95
- data/lib/origami/parsers/pdf/lazy.rb +137 -0
- data/lib/origami/parsers/pdf/linear.rb +64 -66
- data/lib/origami/parsers/ppklite.rb +34 -70
- data/lib/origami/pdf.rb +1030 -1005
- data/lib/origami/reference.rb +102 -102
- data/lib/origami/signature.rb +591 -609
- data/lib/origami/stream.rb +668 -551
- data/lib/origami/string.rb +397 -373
- data/lib/origami/template/patterns.rb +56 -0
- data/lib/origami/template/widgets.rb +151 -0
- data/lib/origami/trailer.rb +144 -158
- data/lib/origami/tree.rb +62 -0
- data/lib/origami/version.rb +23 -0
- data/lib/origami/webcapture.rb +88 -79
- data/lib/origami/xfa.rb +2863 -2882
- data/lib/origami/xreftable.rb +472 -384
- data/test/dataset/calc.pdf +85 -0
- data/test/dataset/crypto.pdf +82 -0
- data/test/dataset/empty.pdf +49 -0
- data/test/test_actions.rb +27 -0
- data/test/test_annotations.rb +90 -0
- data/test/test_pages.rb +31 -0
- data/test/test_pdf.rb +16 -0
- data/test/test_pdf_attachment.rb +34 -0
- data/test/test_pdf_create.rb +24 -0
- data/test/test_pdf_encrypt.rb +95 -0
- data/test/test_pdf_parse.rb +96 -0
- data/test/test_pdf_sign.rb +58 -0
- data/test/test_streams.rb +182 -0
- data/test/test_xrefs.rb +67 -0
- metadata +88 -58
- data/README +0 -67
- data/bin/pdf2graph +0 -121
- data/bin/pdfcocoon +0 -104
- data/lib/origami/file.rb +0 -233
- data/samples/README.txt +0 -45
- data/samples/actions/launch/calc.rb +0 -87
- data/samples/actions/launch/winparams.rb +0 -22
- data/samples/actions/loop/loopgoto.rb +0 -24
- data/samples/actions/loop/loopnamed.rb +0 -21
- data/samples/actions/named/named.rb +0 -31
- data/samples/actions/samba/smbrelay.rb +0 -26
- data/samples/actions/webbug/submitform.js +0 -26
- data/samples/actions/webbug/webbug-browser.rb +0 -68
- data/samples/actions/webbug/webbug-js.rb +0 -67
- data/samples/actions/webbug/webbug-reader.rb +0 -90
- data/samples/attachments/attach.rb +0 -40
- data/samples/attachments/attached.txt +0 -1
- data/samples/crypto/crypto.rb +0 -28
- data/samples/digsig/signed.rb +0 -46
- data/samples/exploits/cve-2008-2992-utilprintf.rb +0 -87
- data/samples/exploits/cve-2009-0927-geticon.rb +0 -65
- data/samples/exploits/exploit_customdictopen.rb +0 -55
- data/samples/exploits/getannots.rb +0 -69
- data/samples/flash/flash.rb +0 -31
- data/samples/javascript/attached.txt +0 -1
- data/samples/javascript/js.rb +0 -52
- data/templates/patterns.rb +0 -66
- data/templates/widgets.rb +0 -173
- data/templates/xdp.rb +0 -92
- data/test/ts_pdf.rb +0 -50
data/lib/origami/actions.rb
CHANGED
|
@@ -1,325 +1,305 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19
|
-
GNU Lesser General Public License for more details.
|
|
20
|
-
|
|
21
|
-
You should have received a copy of the GNU Lesser General Public License
|
|
22
|
-
along with Origami. If not, see <http://www.gnu.org/licenses/>.
|
|
3
|
+
This file is part of Origami, PDF manipulation framework for Ruby
|
|
4
|
+
Copyright (C) 2016 Guillaume Delugré.
|
|
5
|
+
|
|
6
|
+
Origami is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
Origami is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU Lesser General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
17
|
+
along with Origami. If not, see <http://www.gnu.org/licenses/>.
|
|
23
18
|
|
|
24
19
|
=end
|
|
25
20
|
|
|
26
21
|
module Origami
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
class PDF
|
|
24
|
+
#
|
|
25
|
+
# Lookup script in the scripts name directory.
|
|
26
|
+
#
|
|
27
|
+
def get_script_by_name(name)
|
|
28
|
+
resolve_name Names::JAVASCRIPT, name
|
|
29
|
+
end
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
#
|
|
38
|
-
# Calls block for each named JavaScript script.
|
|
39
|
-
#
|
|
40
|
-
def each_named_script(&b)
|
|
41
|
-
each_name(Names::Root::JAVASCRIPT, &b)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
# Class representing an action to launch in a PDF.
|
|
47
|
-
#
|
|
48
|
-
class Action < Dictionary
|
|
49
|
-
|
|
50
|
-
include StandardObject
|
|
51
|
-
|
|
52
|
-
field :Type, :Type => Name, :Default => :Action
|
|
53
|
-
field :S, :Type => Name, :Required => true
|
|
54
|
-
field :Next, :Type => [ Array, Dictionary ], :Version => "1.2"
|
|
55
|
-
|
|
56
|
-
#
|
|
57
|
-
# Class representing a action going to a destination in the current document.
|
|
58
|
-
#
|
|
59
|
-
class GoTo < Action
|
|
60
|
-
|
|
61
|
-
field :S, :Type => Name, :Default => :GoTo, :Required => true
|
|
62
|
-
field :D, :Type => [ Array, Name, ByteString ], :Required => true
|
|
63
|
-
|
|
64
|
-
#
|
|
65
|
-
# Creates a new GoTo Action.
|
|
66
|
-
# _hash_:: A hash of options to set for this jump.
|
|
67
|
-
#
|
|
68
|
-
def self.[](hash = {})
|
|
69
|
-
if hash.is_a? Destination
|
|
70
|
-
self.new(:S => :GoTo, :D => hash)
|
|
71
|
-
else
|
|
72
|
-
self.new(hash)
|
|
31
|
+
#
|
|
32
|
+
# Calls block for each named JavaScript script.
|
|
33
|
+
#
|
|
34
|
+
def each_named_script(&b)
|
|
35
|
+
each_name(Names::JAVASCRIPT, &b)
|
|
73
36
|
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def self.GoTo(hash = {})
|
|
79
|
-
Action::GoTo[hash]
|
|
80
37
|
end
|
|
81
38
|
|
|
82
39
|
#
|
|
83
|
-
# Class representing an action
|
|
40
|
+
# Class representing an action to launch in a PDF.
|
|
84
41
|
#
|
|
85
|
-
class
|
|
86
|
-
|
|
87
|
-
field :S, :Type => Name, :Default => :URI, :Required => true
|
|
88
|
-
field :URI, :Type => ByteString, :Required => true
|
|
89
|
-
field :IsMap, :Type => Boolean, :Default => false
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
# Creates a new URI Action.
|
|
93
|
-
# _uri_:: The URI to launch.
|
|
94
|
-
# _ismap_::
|
|
95
|
-
#
|
|
96
|
-
def self.[](uri, ismap = false)
|
|
97
|
-
self.new(:URI => uri, :IsMap => ismap)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
end
|
|
42
|
+
class Action < Dictionary
|
|
43
|
+
include StandardObject
|
|
101
44
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
45
|
+
field :Type, :Type => Name, :Default => :Action
|
|
46
|
+
field :S, :Type => Name, :Required => true
|
|
47
|
+
field :Next, :Type => [ Array.of(Action), Action ], :Version => "1.2"
|
|
48
|
+
|
|
49
|
+
#
|
|
50
|
+
# Class representing a action going to a destination in the current document.
|
|
51
|
+
#
|
|
52
|
+
class GoTo < Action
|
|
53
|
+
|
|
54
|
+
field :S, :Type => Name, :Default => :GoTo, :Required => true
|
|
55
|
+
field :D, :Type => [ Destination, Name, String ], :Required => true
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Creates a new GoTo Action.
|
|
59
|
+
# _hash_:: A hash of options to set for this jump.
|
|
60
|
+
#
|
|
61
|
+
def self.[](hash = {})
|
|
62
|
+
if hash.is_a? Destination
|
|
63
|
+
self.new(:S => :GoTo, :D => hash)
|
|
64
|
+
else
|
|
65
|
+
self.new(hash)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
105
69
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
class JavaScript < Action
|
|
110
|
-
|
|
111
|
-
field :S, :Type => Name, :Default => :JavaScript, :Required => true
|
|
112
|
-
field :JS, :Type => [ Stream, String ], :Required => true
|
|
113
|
-
|
|
114
|
-
#
|
|
115
|
-
# Creates a new JavaScript Action.
|
|
116
|
-
# _script_:: The script to be executed.
|
|
117
|
-
#
|
|
118
|
-
def self.[](script)
|
|
119
|
-
self.new(:JS => script)
|
|
120
|
-
end
|
|
121
|
-
end
|
|
70
|
+
def self.GoTo(hash = {})
|
|
71
|
+
Action::GoTo[hash]
|
|
72
|
+
end
|
|
122
73
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
74
|
+
#
|
|
75
|
+
# Class representing an action launching an URL.
|
|
76
|
+
#
|
|
77
|
+
class URI < Action
|
|
78
|
+
|
|
79
|
+
field :S, :Type => Name, :Default => :URI, :Required => true
|
|
80
|
+
field :URI, :Type => String, :Required => true
|
|
81
|
+
field :IsMap, :Type => Boolean, :Default => false
|
|
82
|
+
|
|
83
|
+
#
|
|
84
|
+
# Creates a new URI Action.
|
|
85
|
+
# _uri_:: The URI to launch.
|
|
86
|
+
# _ismap_::
|
|
87
|
+
#
|
|
88
|
+
def self.[](uri, ismap = false)
|
|
89
|
+
self.new(:URI => uri, :IsMap => ismap)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
126
92
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
class Launch < Action
|
|
131
|
-
|
|
132
|
-
field :S, :Type => Name, :Default => :Launch, :Required => true
|
|
133
|
-
field :F, :Type => [ ByteString, Dictionary ]
|
|
134
|
-
field :Win, :Type => Dictionary
|
|
135
|
-
field :Mac, :Type => Object
|
|
136
|
-
field :Unix, :Type => Object
|
|
137
|
-
field :NewWindow, :Type => Boolean
|
|
138
|
-
|
|
139
|
-
#
|
|
140
|
-
# Dictionary for passing parameter to Windows applications during Launch.
|
|
141
|
-
#
|
|
142
|
-
class WindowsLaunchParams < Dictionary
|
|
143
|
-
|
|
144
|
-
include StandardObject
|
|
145
|
-
|
|
146
|
-
field :F, :Type => ByteString, :Required => true
|
|
147
|
-
field :D, :Type => ByteString
|
|
148
|
-
field :O, :Type => ByteString, :Default => "open"
|
|
149
|
-
field :P, :Type => ByteString
|
|
93
|
+
def self.URI(uri, ismap = false)
|
|
94
|
+
Action::URI[uri, ismap]
|
|
95
|
+
end
|
|
150
96
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
NEXTPAGE = self[:NextPage]
|
|
168
|
-
PREVPAGE = self[:PrevPage]
|
|
169
|
-
FIRSTPAGE = self[:FirstPage]
|
|
170
|
-
LASTPAGE = self[:LastPage]
|
|
171
|
-
PRINT = self[:Print]
|
|
172
|
-
end
|
|
97
|
+
#
|
|
98
|
+
# Class representing a JavaScript Action.
|
|
99
|
+
#
|
|
100
|
+
class JavaScript < Action
|
|
101
|
+
|
|
102
|
+
field :S, :Type => Name, :Default => :JavaScript, :Required => true
|
|
103
|
+
field :JS, :Type => [ Stream, String ], :Required => true
|
|
104
|
+
|
|
105
|
+
#
|
|
106
|
+
# Creates a new JavaScript Action.
|
|
107
|
+
# _script_:: The script to be executed.
|
|
108
|
+
#
|
|
109
|
+
def self.[](script)
|
|
110
|
+
self.new(:JS => script)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
173
113
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
#
|
|
179
|
-
# Class representing a GoTo Action to an external file.
|
|
180
|
-
#
|
|
181
|
-
class GoToR < Action
|
|
182
|
-
|
|
183
|
-
field :S, :Type => Name, :Default => :GoToR, :Required => true
|
|
184
|
-
field :F, :Type => [ ByteString, Dictionary ], :Required => true
|
|
185
|
-
field :D, :Type => [ Array, Name, ByteString ], :Required => true
|
|
186
|
-
field :NewWindow, :Type => Boolean, :Version => "1.2"
|
|
187
|
-
|
|
188
|
-
#
|
|
189
|
-
# Creates a new GoTo remote Action.
|
|
190
|
-
# _file_:: A FileSpec describing the file.
|
|
191
|
-
# _dest_:: A Destination in the file.
|
|
192
|
-
# _newwindow_:: Specifies whether the file has to be opened in a new window.
|
|
193
|
-
#
|
|
194
|
-
def self.[](file, dest = Destination::GlobalFit.new(0), newwindow = false)
|
|
195
|
-
self.new(:F => file, :D => dest, :NewWindow => newwindow)
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
end
|
|
114
|
+
def self.JavaScript(script)
|
|
115
|
+
Action::JavaScript[script]
|
|
116
|
+
end
|
|
199
117
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
PARENT = :P
|
|
224
|
-
CHILD = :C
|
|
118
|
+
#
|
|
119
|
+
# Class representing an Action which run a command on the current system.
|
|
120
|
+
#
|
|
121
|
+
class Launch < Action
|
|
122
|
+
|
|
123
|
+
#
|
|
124
|
+
# Dictionary for passing parameter to Windows applications during Launch.
|
|
125
|
+
#
|
|
126
|
+
class WindowsLaunchParams < Dictionary
|
|
127
|
+
include StandardObject
|
|
128
|
+
|
|
129
|
+
field :F, :Type => String, :Required => true
|
|
130
|
+
field :D, :Type => String
|
|
131
|
+
field :O, :Type => String, :Default => "open"
|
|
132
|
+
field :P, :Type => String
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
field :S, :Type => Name, :Default => :Launch, :Required => true
|
|
136
|
+
field :F, :Type => [ String, FileSpec ]
|
|
137
|
+
field :Win, :Type => WindowsLaunchParams
|
|
138
|
+
field :Mac, :Type => Object
|
|
139
|
+
field :Unix, :Type => Object
|
|
140
|
+
field :NewWindow, :Type => Boolean
|
|
225
141
|
end
|
|
226
142
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
def self.[](filename, dest, newwindow = false)
|
|
236
|
-
self.new(:T => EmbeddedTarget.new(:R => :C, :N => filename), :D => dest, :NewWindow => newwindow)
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
end
|
|
143
|
+
#
|
|
144
|
+
# Class representing a Named Action.
|
|
145
|
+
# Named actions are predefined GoTo actions.
|
|
146
|
+
#
|
|
147
|
+
class Named < Action
|
|
240
148
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
#
|
|
246
|
-
# (PDF 1.2) Send data to a uniform resource locator. p703
|
|
247
|
-
#
|
|
248
|
-
class SubmitForm < Action
|
|
249
|
-
|
|
250
|
-
module Flags
|
|
251
|
-
INCLUDEEXCLUDE = 1 << 0
|
|
252
|
-
INCLUDENOVALUEFIELDS = 1 << 1
|
|
253
|
-
EXPORTFORMAT = 1 << 2
|
|
254
|
-
GETMETHOD = 1 << 3
|
|
255
|
-
SUBMITCOORDINATES = 1 << 4
|
|
256
|
-
XFDF = 1 << 5
|
|
257
|
-
INCLUDEAPPENDSAVES = 1 << 6
|
|
258
|
-
INCLUDEANNOTATIONS = 1 << 7
|
|
259
|
-
SUBMITPDF = 1 << 8
|
|
260
|
-
CANONICALFORMAT = 1 << 9
|
|
261
|
-
EXCLNONUSERANNOTS = 1 << 10
|
|
262
|
-
EXCLFKEY = 1 << 11
|
|
263
|
-
EMBEDFORM = 1 << 12
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
field :S, :Type => Name, :Default => :SubmitForm, :Required => true
|
|
267
|
-
field :F, :Type => Dictionary
|
|
268
|
-
field :Fields, :Type => Array
|
|
269
|
-
field :Flags, :Type => Integer, :Default => 0
|
|
270
|
-
|
|
271
|
-
def self.[](url, fields = [], flags = 0)
|
|
272
|
-
url = FileSpec.new(:FS => :URL, :F => url) unless url.is_a? FileSpec
|
|
273
|
-
self.new(:F => url, :Fields => fields, :Flags => flags)
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
end
|
|
149
|
+
field :S, :Type => Name, :Default => :Named, :Required => true
|
|
150
|
+
field :N, :Type => Name, :Required => true
|
|
277
151
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
152
|
+
def self.[](type)
|
|
153
|
+
self.new(:N => type)
|
|
154
|
+
end
|
|
281
155
|
|
|
282
|
-
|
|
156
|
+
NEXT_PAGE = self[:NextPage]
|
|
157
|
+
PREV_PAGE = self[:PrevPage]
|
|
158
|
+
FIRST_PAGE = self[:FirstPage]
|
|
159
|
+
LAST_PAGE = self[:LastPage]
|
|
160
|
+
PRINT = self[:Print]
|
|
161
|
+
end
|
|
283
162
|
|
|
284
|
-
|
|
285
|
-
|
|
163
|
+
def self.Named(type)
|
|
164
|
+
Action::Named[type]
|
|
165
|
+
end
|
|
286
166
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
167
|
+
#
|
|
168
|
+
# Class representing a GoTo Action to an external file.
|
|
169
|
+
#
|
|
170
|
+
class GoToR < Action
|
|
171
|
+
|
|
172
|
+
field :S, :Type => Name, :Default => :GoToR, :Required => true
|
|
173
|
+
field :F, :Type => [ String, FileSpec ], :Required => true
|
|
174
|
+
field :D, :Type => [ Destination, Name, String ], :Required => true
|
|
175
|
+
field :NewWindow, :Type => Boolean, :Version => "1.2"
|
|
176
|
+
|
|
177
|
+
#
|
|
178
|
+
# Creates a new GoTo remote Action.
|
|
179
|
+
# _file_:: A FileSpec describing the file.
|
|
180
|
+
# _dest_:: A Destination in the file.
|
|
181
|
+
# _new_window_:: Specifies whether the file has to be opened in a new window.
|
|
182
|
+
#
|
|
183
|
+
def self.[](file, dest: Destination::GlobalFit[0], new_window: false)
|
|
184
|
+
self.new(:F => file, :D => dest, :NewWindow => new_window)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
293
187
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
188
|
+
def self.GoToR(file, dest: Destination::GlobalFit[0], new_window: false)
|
|
189
|
+
Action::GoToR[file, dest: dest, new_window: new_window]
|
|
190
|
+
end
|
|
297
191
|
|
|
298
|
-
|
|
192
|
+
#
|
|
193
|
+
# Class representing a GoTo Action to an embedded pdf file.
|
|
194
|
+
#
|
|
195
|
+
class GoToE < Action
|
|
196
|
+
|
|
197
|
+
#
|
|
198
|
+
# A class representing a target for a GoToE to an embedded file.
|
|
199
|
+
#
|
|
200
|
+
class EmbeddedTarget < Dictionary
|
|
201
|
+
include StandardObject
|
|
202
|
+
|
|
203
|
+
module Relationship
|
|
204
|
+
PARENT = :P
|
|
205
|
+
CHILD = :C
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
field :R, :Type => Name, :Required => true
|
|
209
|
+
field :N, :Type => String
|
|
210
|
+
field :P, :Type => [ Integer, String ]
|
|
211
|
+
field :A, :Type => [ Integer, String ]
|
|
212
|
+
field :T, :Type => Dictionary
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
field :S, :Type => Name, :Default => :GoToE, :Required => true
|
|
216
|
+
field :F, :Type => [ String, FileSpec ]
|
|
217
|
+
field :D, :Type => [ Destination, Name, String ], :Required => true
|
|
218
|
+
field :NewWindow, :Type => Boolean
|
|
219
|
+
field :T, :Type => EmbeddedTarget
|
|
220
|
+
|
|
221
|
+
def self.[](filename, dest: Destination::GlobalFit[0], new_window: false)
|
|
222
|
+
self.new(:T => EmbeddedTarget.new(:R => :C, :N => filename), :D => dest, :NewWindow => new_window)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
299
225
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
field :CMD, :Type => Dictionary, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
226
|
+
def self.GoToE(filename, dest: Destination::GlobalFit[0], new_window: false)
|
|
227
|
+
Action::GoToE[filename, dest: dest, new_window: new_window]
|
|
228
|
+
end
|
|
304
229
|
|
|
305
|
-
|
|
306
|
-
|
|
230
|
+
#
|
|
231
|
+
# Class representing a SubmitForm action.
|
|
232
|
+
#
|
|
233
|
+
class SubmitForm < Action
|
|
234
|
+
module Flags
|
|
235
|
+
INCLUDEEXCLUDE = 1 << 0
|
|
236
|
+
INCLUDENOVALUEFIELDS = 1 << 1
|
|
237
|
+
EXPORTFORMAT = 1 << 2
|
|
238
|
+
GETMETHOD = 1 << 3
|
|
239
|
+
SUBMITCOORDINATES = 1 << 4
|
|
240
|
+
XFDF = 1 << 5
|
|
241
|
+
INCLUDEAPPENDSAVES = 1 << 6
|
|
242
|
+
INCLUDEANNOTATIONS = 1 << 7
|
|
243
|
+
SUBMITPDF = 1 << 8
|
|
244
|
+
CANONICALFORMAT = 1 << 9
|
|
245
|
+
EXCLNONUSERANNOTS = 1 << 10
|
|
246
|
+
EXCLFKEY = 1 << 11
|
|
247
|
+
EMBEDFORM = 1 << 12
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
field :S, :Type => Name, :Default => :SubmitForm, :Required => true
|
|
251
|
+
field :F, :Type => FileSpec
|
|
252
|
+
field :Fields, :Type => Array
|
|
253
|
+
field :Flags, :Type => Integer, :Default => 0
|
|
254
|
+
|
|
255
|
+
def self.[](url, fields = [], flags = 0)
|
|
256
|
+
url = FileSpec.new(:FS => :URL, :F => url) unless url.is_a? FileSpec
|
|
257
|
+
self.new(:F => url, :Fields => fields, :Flags => flags)
|
|
258
|
+
end
|
|
259
|
+
end
|
|
307
260
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
end
|
|
261
|
+
def self.SubmitForm(url, fields = [], flags = 0)
|
|
262
|
+
Action::SubmitForm[url, fields, flags]
|
|
263
|
+
end
|
|
312
264
|
|
|
313
|
-
|
|
314
|
-
self.new(:TA => annotation, :CMD => Command.new(:C => command, :A => params))
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
end
|
|
265
|
+
class ImportData < Action
|
|
318
266
|
|
|
319
|
-
|
|
320
|
-
|
|
267
|
+
field :S, :Type => Name, :Default => :ImportData, :Required => true
|
|
268
|
+
field :F, :Type => Dictionary, :Required => true
|
|
269
|
+
|
|
270
|
+
def self.[](file)
|
|
271
|
+
file = FileSpec.new(:FS => :File, :F => file) unless file.is_a? FileSpec
|
|
272
|
+
self.new(:F => file)
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def self.ImportData(file)
|
|
277
|
+
Action::ImportData[file]
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
class RichMediaExecute < Action
|
|
281
|
+
|
|
282
|
+
class Command < Dictionary
|
|
283
|
+
include StandardObject
|
|
284
|
+
|
|
285
|
+
field :Type, :Type => Name, :Default => :RichMediaCommand, :Version => "1.7", :ExtensionLevel => 3
|
|
286
|
+
field :C, :Type => String, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
287
|
+
field :A, :Type => Object, :Version => "1.7", :ExtensionLevel => 3
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
field :S, :Type => Name, :Default => :RichMediaExecute, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
291
|
+
field :TA, :Type => Annotation::RichMedia, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
292
|
+
field :TI, :Type => Annotation::RichMedia::Instance, :Version => "1.7", :ExtensionLevel => 3
|
|
293
|
+
field :CMD, :Type => Command, :Version => "1.7", :ExtensionLevel => 3, :Required => true
|
|
294
|
+
|
|
295
|
+
def self.[](annotation, command, *params)
|
|
296
|
+
self.new(:TA => annotation, :CMD => Command.new(:C => command, :A => params))
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def self.RichMediaExecute(annotation, command, *params)
|
|
301
|
+
Action::RichMediaExecute[annotation, command, *params]
|
|
302
|
+
end
|
|
321
303
|
end
|
|
322
|
-
|
|
323
|
-
end
|
|
324
304
|
|
|
325
305
|
end
|