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.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +89 -0
  3. data/COPYING.LESSER +165 -0
  4. data/README.md +131 -0
  5. data/bin/config/pdfcop.conf.yml +236 -0
  6. data/bin/pdf2pdfa +87 -0
  7. data/bin/pdf2ruby +333 -0
  8. data/bin/pdfcop +476 -0
  9. data/bin/pdfdecompress +97 -0
  10. data/bin/pdfdecrypt +91 -0
  11. data/bin/pdfencrypt +113 -0
  12. data/bin/pdfexplode +223 -0
  13. data/bin/pdfextract +277 -0
  14. data/bin/pdfmetadata +143 -0
  15. data/bin/pdfsh +12 -0
  16. data/bin/shell/console.rb +128 -0
  17. data/bin/shell/hexdump.rb +59 -0
  18. data/bin/shell/irbrc +69 -0
  19. data/examples/README.md +34 -0
  20. data/examples/attachments/attachment.rb +38 -0
  21. data/examples/attachments/nested_document.rb +51 -0
  22. data/examples/encryption/encryption.rb +28 -0
  23. data/examples/events/events.rb +72 -0
  24. data/examples/flash/flash.rb +37 -0
  25. data/examples/flash/helloworld.swf +0 -0
  26. data/examples/forms/javascript.rb +54 -0
  27. data/examples/forms/xfa.rb +115 -0
  28. data/examples/javascript/hello_world.rb +22 -0
  29. data/examples/javascript/js_emulation.rb +54 -0
  30. data/examples/loop/goto.rb +32 -0
  31. data/examples/loop/named.rb +33 -0
  32. data/examples/signature/signature.rb +65 -0
  33. data/examples/uri/javascript.rb +56 -0
  34. data/examples/uri/open-uri.rb +21 -0
  35. data/examples/uri/submitform.rb +47 -0
  36. data/lib/origami/3d.rb +364 -0
  37. data/lib/origami/acroform.rb +321 -0
  38. data/lib/origami/actions.rb +318 -0
  39. data/lib/origami/annotations.rb +711 -0
  40. data/lib/origami/array.rb +242 -0
  41. data/lib/origami/boolean.rb +90 -0
  42. data/lib/origami/catalog.rb +418 -0
  43. data/lib/origami/collections.rb +144 -0
  44. data/lib/origami/compound.rb +161 -0
  45. data/lib/origami/destinations.rb +252 -0
  46. data/lib/origami/dictionary.rb +192 -0
  47. data/lib/origami/encryption.rb +1084 -0
  48. data/lib/origami/extensions/fdf.rb +347 -0
  49. data/lib/origami/extensions/ppklite.rb +422 -0
  50. data/lib/origami/filespec.rb +197 -0
  51. data/lib/origami/filters/ascii.rb +211 -0
  52. data/lib/origami/filters/ccitt/tables.rb +267 -0
  53. data/lib/origami/filters/ccitt.rb +357 -0
  54. data/lib/origami/filters/crypt.rb +38 -0
  55. data/lib/origami/filters/dct.rb +54 -0
  56. data/lib/origami/filters/flate.rb +69 -0
  57. data/lib/origami/filters/jbig2.rb +57 -0
  58. data/lib/origami/filters/jpx.rb +47 -0
  59. data/lib/origami/filters/lzw.rb +170 -0
  60. data/lib/origami/filters/predictors.rb +292 -0
  61. data/lib/origami/filters/runlength.rb +129 -0
  62. data/lib/origami/filters.rb +364 -0
  63. data/lib/origami/font.rb +196 -0
  64. data/lib/origami/functions.rb +79 -0
  65. data/lib/origami/graphics/colors.rb +230 -0
  66. data/lib/origami/graphics/instruction.rb +98 -0
  67. data/lib/origami/graphics/path.rb +182 -0
  68. data/lib/origami/graphics/patterns.rb +174 -0
  69. data/lib/origami/graphics/render.rb +62 -0
  70. data/lib/origami/graphics/state.rb +149 -0
  71. data/lib/origami/graphics/text.rb +225 -0
  72. data/lib/origami/graphics/xobject.rb +918 -0
  73. data/lib/origami/graphics.rb +38 -0
  74. data/lib/origami/header.rb +75 -0
  75. data/lib/origami/javascript.rb +713 -0
  76. data/lib/origami/linearization.rb +330 -0
  77. data/lib/origami/metadata.rb +172 -0
  78. data/lib/origami/name.rb +135 -0
  79. data/lib/origami/null.rb +65 -0
  80. data/lib/origami/numeric.rb +181 -0
  81. data/lib/origami/obfuscation.rb +245 -0
  82. data/lib/origami/object.rb +760 -0
  83. data/lib/origami/optionalcontent.rb +183 -0
  84. data/lib/origami/outline.rb +54 -0
  85. data/lib/origami/outputintents.rb +85 -0
  86. data/lib/origami/page.rb +722 -0
  87. data/lib/origami/parser.rb +269 -0
  88. data/lib/origami/parsers/fdf.rb +56 -0
  89. data/lib/origami/parsers/pdf/lazy.rb +176 -0
  90. data/lib/origami/parsers/pdf/linear.rb +122 -0
  91. data/lib/origami/parsers/pdf.rb +118 -0
  92. data/lib/origami/parsers/ppklite.rb +57 -0
  93. data/lib/origami/pdf.rb +1108 -0
  94. data/lib/origami/reference.rb +134 -0
  95. data/lib/origami/signature.rb +702 -0
  96. data/lib/origami/stream.rb +705 -0
  97. data/lib/origami/string.rb +444 -0
  98. data/lib/origami/template/patterns.rb +56 -0
  99. data/lib/origami/template/widgets.rb +151 -0
  100. data/lib/origami/trailer.rb +190 -0
  101. data/lib/origami/tree.rb +62 -0
  102. data/lib/origami/version.rb +23 -0
  103. data/lib/origami/webcapture.rb +100 -0
  104. data/lib/origami/xfa/config.rb +453 -0
  105. data/lib/origami/xfa/connectionset.rb +146 -0
  106. data/lib/origami/xfa/datasets.rb +49 -0
  107. data/lib/origami/xfa/localeset.rb +42 -0
  108. data/lib/origami/xfa/package.rb +59 -0
  109. data/lib/origami/xfa/pdf.rb +73 -0
  110. data/lib/origami/xfa/signature.rb +42 -0
  111. data/lib/origami/xfa/sourceset.rb +43 -0
  112. data/lib/origami/xfa/stylesheet.rb +44 -0
  113. data/lib/origami/xfa/template.rb +1691 -0
  114. data/lib/origami/xfa/xdc.rb +42 -0
  115. data/lib/origami/xfa/xfa.rb +146 -0
  116. data/lib/origami/xfa/xfdf.rb +43 -0
  117. data/lib/origami/xfa/xmpmeta.rb +43 -0
  118. data/lib/origami/xfa.rb +62 -0
  119. data/lib/origami/xreftable.rb +557 -0
  120. data/lib/origami.rb +47 -0
  121. data/test/dataset/calc.pdf +85 -0
  122. data/test/dataset/crypto.pdf +36 -0
  123. data/test/dataset/empty.pdf +49 -0
  124. data/test/test_actions.rb +27 -0
  125. data/test/test_annotations.rb +68 -0
  126. data/test/test_forms.rb +30 -0
  127. data/test/test_native_types.rb +83 -0
  128. data/test/test_object_tree.rb +33 -0
  129. data/test/test_pages.rb +60 -0
  130. data/test/test_pdf.rb +20 -0
  131. data/test/test_pdf_attachment.rb +34 -0
  132. data/test/test_pdf_create.rb +24 -0
  133. data/test/test_pdf_encrypt.rb +102 -0
  134. data/test/test_pdf_parse.rb +134 -0
  135. data/test/test_pdf_parse_lazy.rb +69 -0
  136. data/test/test_pdf_sign.rb +97 -0
  137. data/test/test_streams.rb +184 -0
  138. data/test/test_xrefs.rb +67 -0
  139. 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