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,42 @@
1
+ =begin
2
+
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2017 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
+ module XDP
24
+
25
+ module Packet
26
+
27
+ #
28
+ # The _xdc_ packet encloses application-specific XFA driver configuration instruction.
29
+ #
30
+ class XDC < XFA::Element
31
+ mime_type ''
32
+
33
+ def initialize
34
+ super("xsl:xdc")
35
+
36
+ add_attribute 'xmlns:xdc', 'http://www.xfa.org/schema/xdc/1.0/'
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,146 @@
1
+ =begin
2
+
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2017 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
+ require 'rexml/element'
22
+
23
+ module Origami
24
+
25
+ module XFA
26
+ class XFAError < Error #:nodoc:
27
+ end
28
+
29
+ module ClassMethods
30
+
31
+ def xfa_attribute(name)
32
+ # Attribute getter.
33
+ attr_getter = "attr_#{name}"
34
+ remove_method(attr_getter) rescue NameError
35
+ define_method(attr_getter) do
36
+ self.attributes[name.to_s]
37
+ end
38
+
39
+ # Attribute setter.
40
+ attr_setter = "attr_#{name}="
41
+ remove_method(attr_setter) rescue NameError
42
+ define_method(attr_setter) do |value|
43
+ self.attributes[name.to_s] = value
44
+ end
45
+ end
46
+
47
+ def xfa_node(name, type, _range = (0..Float::INFINITY))
48
+
49
+ adder = "add_#{name}"
50
+ remove_method(adder) rescue NameError
51
+ define_method(adder) do |*attr|
52
+ elt = self.add_element(type.new)
53
+
54
+ unless attr.empty?
55
+ attr.first.each do |k,v|
56
+ elt.attributes[k.to_s] = v
57
+ end
58
+ end
59
+
60
+ elt
61
+ end
62
+ end
63
+
64
+ def mime_type(type)
65
+ define_method("mime_type") { return type }
66
+ end
67
+ end
68
+
69
+ def self.included(receiver)
70
+ receiver.extend(ClassMethods)
71
+ end
72
+
73
+ class Element < REXML::Element
74
+ include XFA
75
+
76
+ #
77
+ # A permission flag for allowing or blocking attempted changes to the element.
78
+ # 0 - Allow changes to properties and content.
79
+ # 1 - Block changes to properties and content.
80
+ #
81
+ module Lockable
82
+ def lock!
83
+ self.attr_lock = 1
84
+ end
85
+
86
+ def unlock!
87
+ self.attr_lock = 0
88
+ end
89
+
90
+ def locked?
91
+ self.attr_lock == 1
92
+ end
93
+
94
+ def self.included(receiver)
95
+ receiver.xfa_attribute "lock"
96
+ end
97
+ end
98
+
99
+ #
100
+ # An attribute to hold human-readable metadata.
101
+ #
102
+ module Descriptive
103
+ def self.included(receiver)
104
+ receiver.xfa_attribute "desc"
105
+ end
106
+ end
107
+
108
+ #
109
+ # A unique identifier that may be used to identify this element as a target.
110
+ #
111
+ module Referencable
112
+ def self.included?(receiver)
113
+ receiver.xfa_attribute "id"
114
+ end
115
+ end
116
+
117
+ #
118
+ # At template load time, invokes another object in the same document as a prototype for this object.
119
+ #
120
+ module Prototypable
121
+ def self.included?(receiver)
122
+ receiver.xfa_attribute "use"
123
+ receiver.xfa_attribute "usehref"
124
+ end
125
+ end
126
+
127
+ #
128
+ # An identifier that may be used to identify this element in script expressions.
129
+ #
130
+ module Namable
131
+ def self.included?(receiver)
132
+ receiver.xfa_attribute "name"
133
+ end
134
+ end
135
+ end
136
+
137
+ class TemplateElement < Element
138
+ include Referencable
139
+ include Prototypable
140
+ end
141
+
142
+ class NamedTemplateElement < TemplateElement
143
+ include Namable
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,43 @@
1
+ =begin
2
+
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2017 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
+ module XDP
24
+
25
+ module Packet
26
+
27
+ #
28
+ # The _xfdf_ (annotations) packet enclosed collaboration annotations placed upon a PDF document.
29
+ #
30
+ class XFDF < XFA::Element
31
+ mime_type 'application/vnd.adobe.xfdf'
32
+
33
+ def initialize
34
+ super("xfdf")
35
+
36
+ add_attribute 'xmlns', 'http://ns.adobe.com/xfdf/'
37
+ add_attribute 'xml:space', 'preserve'
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ =begin
2
+
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2017 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
+ module XDP
24
+
25
+ module Packet
26
+
27
+ #
28
+ # An _XMP_ packet contains XML representation of PDF metadata.
29
+ #
30
+ class XMPMeta < XFA::Element
31
+ mime_type 'application/rdf+xml'
32
+
33
+ def initialize
34
+ super("xmpmeta")
35
+
36
+ add_attribute 'xmlns', 'http://ns.adobe.com/xmpmeta/'
37
+ add_attribute 'xml:space', 'preserve'
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,62 @@
1
+ =begin
2
+
3
+ This file is part of Origami, PDF manipulation framework for Ruby
4
+ Copyright (C) 2017 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
+ autoload :XFA, "origami/xfa/xfa"
24
+
25
+ module XDP
26
+ autoload :Package, "origami/xfa/package"
27
+
28
+ module Packet
29
+ autoload :Config, "origami/xfa/config"
30
+ autoload :ConnectionSet, "origami/xfa/connectionset"
31
+ autoload :Datasets, "origami/xfa/datasets"
32
+ autoload :LocaleSet, "origami/xfa/localeset"
33
+ autoload :PDF, "origami/xfa/pdf"
34
+ autoload :Signature, "origami/xfa/signature"
35
+ autoload :SourceSet, "origami/xfa/sourceset"
36
+ autoload :StyleSheet, "origami/xfa/stylesheet"
37
+ autoload :Template, "origami/xfa/template"
38
+ autoload :XDC, "origami/xfa/xdc"
39
+ autoload :XFDF, "origami/xfa/xfdf"
40
+ autoload :XMPMeta, "origami/xfa/xmpmeta"
41
+ end
42
+
43
+ end
44
+
45
+ class XFAStream < Stream
46
+ # TODO
47
+ end
48
+
49
+ class PDF
50
+ def create_xfa_form(xdp, *fields)
51
+ acroform = create_form(*fields)
52
+ acroform.XFA = XFAStream.new(xdp, :Filter => :FlateDecode)
53
+
54
+ acroform
55
+ end
56
+
57
+ def xfa_form?
58
+ self.form? and self.Catalog.AcroForm.key?(:XFA)
59
+ end
60
+ end
61
+
62
+ end