origamindee 3.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 +7 -0
- data/CHANGELOG.md +89 -0
- data/COPYING.LESSER +165 -0
- data/README.md +131 -0
- data/bin/config/pdfcop.conf.yml +236 -0
- data/bin/pdf2pdfa +87 -0
- data/bin/pdf2ruby +333 -0
- data/bin/pdfcop +476 -0
- data/bin/pdfdecompress +97 -0
- data/bin/pdfdecrypt +91 -0
- data/bin/pdfencrypt +113 -0
- data/bin/pdfexplode +223 -0
- data/bin/pdfextract +277 -0
- data/bin/pdfmetadata +143 -0
- data/bin/pdfsh +12 -0
- data/bin/shell/console.rb +128 -0
- data/bin/shell/hexdump.rb +59 -0
- data/bin/shell/irbrc +69 -0
- 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/examples/events/events.rb +72 -0
- data/examples/flash/flash.rb +37 -0
- data/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/3d.rb +364 -0
- data/lib/origami/acroform.rb +321 -0
- data/lib/origami/actions.rb +318 -0
- data/lib/origami/annotations.rb +711 -0
- data/lib/origami/array.rb +242 -0
- data/lib/origami/boolean.rb +90 -0
- data/lib/origami/catalog.rb +418 -0
- data/lib/origami/collections.rb +144 -0
- data/lib/origami/compound.rb +161 -0
- data/lib/origami/destinations.rb +252 -0
- data/lib/origami/dictionary.rb +192 -0
- data/lib/origami/encryption.rb +1084 -0
- data/lib/origami/extensions/fdf.rb +347 -0
- data/lib/origami/extensions/ppklite.rb +422 -0
- data/lib/origami/filespec.rb +197 -0
- data/lib/origami/filters/ascii.rb +211 -0
- data/lib/origami/filters/ccitt/tables.rb +267 -0
- data/lib/origami/filters/ccitt.rb +357 -0
- data/lib/origami/filters/crypt.rb +38 -0
- data/lib/origami/filters/dct.rb +54 -0
- data/lib/origami/filters/flate.rb +69 -0
- data/lib/origami/filters/jbig2.rb +57 -0
- data/lib/origami/filters/jpx.rb +47 -0
- data/lib/origami/filters/lzw.rb +170 -0
- data/lib/origami/filters/predictors.rb +292 -0
- data/lib/origami/filters/runlength.rb +129 -0
- data/lib/origami/filters.rb +364 -0
- data/lib/origami/font.rb +196 -0
- data/lib/origami/functions.rb +79 -0
- data/lib/origami/graphics/colors.rb +230 -0
- data/lib/origami/graphics/instruction.rb +98 -0
- data/lib/origami/graphics/path.rb +182 -0
- data/lib/origami/graphics/patterns.rb +174 -0
- data/lib/origami/graphics/render.rb +62 -0
- data/lib/origami/graphics/state.rb +149 -0
- data/lib/origami/graphics/text.rb +225 -0
- data/lib/origami/graphics/xobject.rb +918 -0
- data/lib/origami/graphics.rb +38 -0
- data/lib/origami/header.rb +75 -0
- data/lib/origami/javascript.rb +713 -0
- data/lib/origami/linearization.rb +330 -0
- data/lib/origami/metadata.rb +172 -0
- data/lib/origami/name.rb +135 -0
- data/lib/origami/null.rb +65 -0
- data/lib/origami/numeric.rb +181 -0
- data/lib/origami/obfuscation.rb +245 -0
- data/lib/origami/object.rb +760 -0
- data/lib/origami/optionalcontent.rb +183 -0
- data/lib/origami/outline.rb +54 -0
- data/lib/origami/outputintents.rb +85 -0
- data/lib/origami/page.rb +722 -0
- data/lib/origami/parser.rb +269 -0
- data/lib/origami/parsers/fdf.rb +56 -0
- data/lib/origami/parsers/pdf/lazy.rb +176 -0
- data/lib/origami/parsers/pdf/linear.rb +122 -0
- data/lib/origami/parsers/pdf.rb +118 -0
- data/lib/origami/parsers/ppklite.rb +57 -0
- data/lib/origami/pdf.rb +1108 -0
- data/lib/origami/reference.rb +134 -0
- data/lib/origami/signature.rb +702 -0
- data/lib/origami/stream.rb +705 -0
- data/lib/origami/string.rb +444 -0
- data/lib/origami/template/patterns.rb +56 -0
- data/lib/origami/template/widgets.rb +151 -0
- data/lib/origami/trailer.rb +190 -0
- data/lib/origami/tree.rb +62 -0
- data/lib/origami/version.rb +23 -0
- data/lib/origami/webcapture.rb +100 -0
- data/lib/origami/xfa/config.rb +453 -0
- data/lib/origami/xfa/connectionset.rb +146 -0
- data/lib/origami/xfa/datasets.rb +49 -0
- data/lib/origami/xfa/localeset.rb +42 -0
- data/lib/origami/xfa/package.rb +59 -0
- data/lib/origami/xfa/pdf.rb +73 -0
- data/lib/origami/xfa/signature.rb +42 -0
- data/lib/origami/xfa/sourceset.rb +43 -0
- data/lib/origami/xfa/stylesheet.rb +44 -0
- data/lib/origami/xfa/template.rb +1691 -0
- data/lib/origami/xfa/xdc.rb +42 -0
- data/lib/origami/xfa/xfa.rb +146 -0
- data/lib/origami/xfa/xfdf.rb +43 -0
- data/lib/origami/xfa/xmpmeta.rb +43 -0
- data/lib/origami/xfa.rb +62 -0
- data/lib/origami/xreftable.rb +557 -0
- data/lib/origami.rb +47 -0
- data/test/dataset/calc.pdf +85 -0
- data/test/dataset/crypto.pdf +36 -0
- data/test/dataset/empty.pdf +49 -0
- data/test/test_actions.rb +27 -0
- data/test/test_annotations.rb +68 -0
- data/test/test_forms.rb +30 -0
- data/test/test_native_types.rb +83 -0
- data/test/test_object_tree.rb +33 -0
- data/test/test_pages.rb +60 -0
- data/test/test_pdf.rb +20 -0
- data/test/test_pdf_attachment.rb +34 -0
- data/test/test_pdf_create.rb +24 -0
- data/test/test_pdf_encrypt.rb +102 -0
- data/test/test_pdf_parse.rb +134 -0
- data/test/test_pdf_parse_lazy.rb +69 -0
- data/test/test_pdf_sign.rb +97 -0
- data/test/test_streams.rb +184 -0
- data/test/test_xrefs.rb +67 -0
- metadata +280 -0
@@ -0,0 +1,318 @@
|
|
1
|
+
=begin
|
2
|
+
|
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/>.
|
18
|
+
|
19
|
+
=end
|
20
|
+
|
21
|
+
module Origami
|
22
|
+
|
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
|
30
|
+
|
31
|
+
#
|
32
|
+
# Calls block for each named JavaScript script.
|
33
|
+
#
|
34
|
+
def each_named_script(&b)
|
35
|
+
each_name(Names::JAVASCRIPT, &b)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Class representing an action to launch in a PDF.
|
41
|
+
#
|
42
|
+
class Action < Dictionary
|
43
|
+
include StandardObject
|
44
|
+
|
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
|
69
|
+
|
70
|
+
def self.GoTo(hash = {})
|
71
|
+
Action::GoTo[hash]
|
72
|
+
end
|
73
|
+
|
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
|
92
|
+
|
93
|
+
def self.URI(uri, ismap = false)
|
94
|
+
Action::URI[uri, ismap]
|
95
|
+
end
|
96
|
+
|
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
|
113
|
+
|
114
|
+
def self.JavaScript(script)
|
115
|
+
Action::JavaScript[script]
|
116
|
+
end
|
117
|
+
|
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
|
141
|
+
end
|
142
|
+
|
143
|
+
#
|
144
|
+
# Class representing a Named Action.
|
145
|
+
# Named actions are predefined GoTo actions.
|
146
|
+
#
|
147
|
+
class Named < Action
|
148
|
+
|
149
|
+
field :S, :Type => Name, :Default => :Named, :Required => true
|
150
|
+
field :N, :Type => Name, :Required => true
|
151
|
+
|
152
|
+
def self.[](type)
|
153
|
+
self.new(:N => type)
|
154
|
+
end
|
155
|
+
|
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
|
162
|
+
|
163
|
+
def self.Named(type)
|
164
|
+
Action::Named[type]
|
165
|
+
end
|
166
|
+
|
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
|
187
|
+
|
188
|
+
def self.GoToR(file, dest: Destination::GlobalFit[0], new_window: false)
|
189
|
+
Action::GoToR[file, dest: dest, new_window: new_window]
|
190
|
+
end
|
191
|
+
|
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
|
225
|
+
|
226
|
+
def self.GoToE(filename, dest: Destination::GlobalFit[0], new_window: false)
|
227
|
+
Action::GoToE[filename, dest: dest, new_window: new_window]
|
228
|
+
end
|
229
|
+
|
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
|
260
|
+
|
261
|
+
def self.SubmitForm(url, fields = [], flags = 0)
|
262
|
+
Action::SubmitForm[url, fields, flags]
|
263
|
+
end
|
264
|
+
|
265
|
+
class ImportData < Action
|
266
|
+
|
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
|
303
|
+
|
304
|
+
class SetOCGState < Action
|
305
|
+
|
306
|
+
module State
|
307
|
+
ON = :ON
|
308
|
+
OFF = :OFF
|
309
|
+
TOGGLE = :Toggle
|
310
|
+
end
|
311
|
+
|
312
|
+
field :S, :Type => Name, :Default => :SetOCGState, :Required => true
|
313
|
+
field :State, :Type => Array.of([Name, OptionalContent::Group]), :Required => true
|
314
|
+
field :PreserveRB, :Type => Boolean, :Default => true
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
end
|