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,183 @@
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 OptionalContent
24
+
25
+ class Usage < Dictionary
26
+ include StandardObject
27
+
28
+ class CreatorInfo < Dictionary
29
+ include StandardObject
30
+
31
+ field :Creator, :Type => String, :Required => true
32
+ field :Subtype, :Type => Name, :Required => true
33
+ end
34
+
35
+ class Language < Dictionary
36
+ include StandardObject
37
+
38
+ field :Lang, :Type => String, :Required => true
39
+ field :Preferred, :Type => Name, :Default => :OFF
40
+ end
41
+
42
+ class Export < Dictionary
43
+ include StandardObject
44
+
45
+ field :ExportState, :Type => Name, :Required => true
46
+ end
47
+
48
+ class Zoom < Dictionary
49
+ include StandardObject
50
+
51
+ field :min, :Type => Real, :Default => 0
52
+ field :max, :Type => Real, :Default => Float::INFINITY
53
+ end
54
+
55
+ class Print < Dictionary
56
+ include StandardObject
57
+
58
+ field :Subtype, :Type => Name
59
+ field :PrintState, :Type => Name
60
+ end
61
+
62
+ class View < Dictionary
63
+ include StandardObject
64
+
65
+ field :ViewState, :Type => Name, :Required => true
66
+ end
67
+
68
+ class User < Dictionary
69
+ include StandardObject
70
+
71
+ module Type
72
+ INDIVIDUAL = :Ind
73
+ TITLE = :Ttl
74
+ ORGANIZATION = :Org
75
+ end
76
+
77
+ field :Type, :Type => Name, :Required => true
78
+ field :Name, :Type => [ String, Array.of(String) ], :Required => true
79
+ end
80
+
81
+ class PageElement < Dictionary
82
+ include StandardObject
83
+
84
+ module Type
85
+ HEADER_FOOTER = :HF
86
+ FOREGROUND = :FG
87
+ BACKGROUND = :BG
88
+ LOGO = :L
89
+ end
90
+
91
+ field :Subtype, :Type => Name, :Required => true
92
+ end
93
+
94
+ field :CreatorInfo, :Type => CreatorInfo
95
+ field :Language, :Type => Language
96
+ field :Export, :Type => Export
97
+ field :Zoom, :Type => Zoom
98
+ field :Print, :Type => Print
99
+ field :View, :Type => View
100
+ field :User, :Type => User
101
+ field :PageElement, :Type => PageElement
102
+ end
103
+
104
+ class Group < Dictionary
105
+ include StandardObject
106
+
107
+ module Intent
108
+ VIEW = :View
109
+ DESIGN = :Design
110
+ end
111
+
112
+ field :Type, :Type => Name, :Required => true, :Default => :OCG
113
+ field :Name, :Type => String, :Required => true
114
+ field :Intent, :Type => [ Name, Array.of(Name) ]
115
+ field :Usage, :Type => Usage
116
+ end
117
+
118
+ class Membership < Dictionary
119
+ include StandardObject
120
+
121
+ module Policy
122
+ ALL_ON = :AllOn
123
+ ANY_ON = :AnyOn
124
+ ALL_OFF = :AllOff
125
+ ANY_OFF = :AnyOff
126
+ end
127
+
128
+ field :Type, :Type => Name, :Required => true, :Default => :OCMD
129
+ field :OCGs, :Type => [ Group, Array.of(Group) ]
130
+ field :P, :Type => Name, :Default => Policy::ANY_ON
131
+ field :VE, :Type => Array, :Version => "1.6"
132
+ end
133
+
134
+ class UsageApplication < Dictionary
135
+ include StandardObject
136
+
137
+ module Event
138
+ VIEW = :View
139
+ PRINT = :Print
140
+ EXPORT = :Export
141
+ end
142
+
143
+ field :Event, :Type => Name, :Required => true
144
+ field :OCGs, :Type => Array.of(Group), :Default => []
145
+ field :Category, :Type => Array.of(Name), :Required => true
146
+ end
147
+
148
+ class Configuration < Dictionary
149
+ include StandardObject
150
+
151
+ module State
152
+ ON = :On
153
+ OFF = :Off
154
+ UNCHANGED = :Unchanged
155
+ end
156
+
157
+ module Mode
158
+ ALL_PAGES = :AllPages
159
+ VISIBLE_PAGES = :VisiblePages
160
+ end
161
+
162
+ field :Name, :Type => String
163
+ field :Creator, :Type => String
164
+ field :BaseState, :Type => Name, :Default => State::ON
165
+ field :ON, :Type => Array.of(Group)
166
+ field :OFF, :Type => Array.of(Group)
167
+ field :Intent, :Type => [ Name, Array.of(Name) ]
168
+ field :AS, :Type => Array.of(UsageApplication)
169
+ field :Order, :Type => Array
170
+ field :ListMode, :Type => Name, :Default => Mode::ALL_PAGES
171
+ field :RBGroups, :Type => Array.of(Array.of(Group)), :Default => []
172
+ field :Locked, :Type => Array.of(Group), :Default => [], :Version => "1.6"
173
+ end
174
+
175
+ class Properties < Dictionary
176
+ include StandardObject
177
+
178
+ field :OCGs, :Type => Array.of(Group), :Required => true
179
+ field :D, :Type => Configuration, :Required => true
180
+ field :Configs, :Type => Array.of(Configuration)
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,54 @@
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 OutlineItem < Dictionary
24
+ include StandardObject
25
+
26
+ module Style
27
+ ITALIC = 1 << 0
28
+ BOLD = 1 << 1
29
+ end
30
+
31
+ field :Title, :Type => String, :Required => true
32
+ field :Parent, :Type => Dictionary, :Required => true
33
+ field :Prev, :Type => OutlineItem
34
+ field :Next, :Type => OutlineItem
35
+ field :First, :Type => OutlineItem
36
+ field :Last, :Type => OutlineItem
37
+ field :Count, :Type => Integer
38
+ field :Dest, :Type => [ Name, String, Destination ]
39
+ field :A, :Type => Action, :Version => "1.1"
40
+ field :SE, :Type => Dictionary, :Version => "1.3"
41
+ field :C, :Type => Array.of(Number, length: 3), :Default => [ 0.0, 0.0, 0.0 ], :Version => "1.4"
42
+ field :F, :Type => Integer, :Default => 0, :Version => "1.4"
43
+ end
44
+
45
+ class Outline < Dictionary
46
+ include StandardObject
47
+
48
+ field :Type, :Type => Name, :Default => :Outlines
49
+ field :First, :Type => OutlineItem
50
+ field :Last, :Type => OutlineItem
51
+ field :Count, :Type => Integer
52
+ end
53
+
54
+ end
@@ -0,0 +1,85 @@
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 OutputIntent < Dictionary
24
+ include StandardObject
25
+
26
+ module Intent
27
+ PDFX = :GTS_PDFX
28
+ PDFA1 = :GTS_PDFA1
29
+ PDFE1 = :GTS_PDFE1
30
+ end
31
+
32
+ field :Type, :Type => Name, :Default => :OutputIntent
33
+ field :S, :Type => Name, :Version => '1.4', :Required => true
34
+ field :OutputCondition, :Type => String
35
+ field :OutputConditionIdentifier, :Type => String
36
+ field :RegistryName, :Type => String
37
+ field :Info, :Type => String
38
+ field :DestOutputProfile, :Type => Stream
39
+ end
40
+
41
+ class PDF
42
+ def pdfa1?
43
+ self.Catalog.OutputIntents.is_a?(Array) and
44
+ self.Catalog.OutputIntents.any?{|intent|
45
+ intent.solve.S == OutputIntent::Intent::PDFA1
46
+ } and
47
+ self.metadata? and (
48
+ doc = REXML::Document.new self.Catalog.Metadata.data;
49
+ REXML::XPath.match(doc, "*/*/rdf:Description[@xmlns:pdfaid]").any? {|desc|
50
+ desc.elements["pdfaid:conformance"].text == "A" and
51
+ desc.elements["pdfaid:part"].text == "1"
52
+ }
53
+ )
54
+ end
55
+
56
+ private
57
+
58
+ def intents_as_pdfa1
59
+ return if self.pdfa1?
60
+
61
+ self.Catalog.OutputIntents ||= []
62
+ self.Catalog.OutputIntents << self.insert(
63
+ OutputIntent.new(
64
+ :Type => :OutputIntent,
65
+ :S => OutputIntent::Intent::PDFA1,
66
+ :OutputConditionIdentifier => "RGB"
67
+ )
68
+ )
69
+
70
+ metadata = self.create_metadata
71
+ doc = REXML::Document.new(metadata.data)
72
+
73
+ desc = REXML::Element.new 'rdf:Description'
74
+ desc.add_attribute 'rdf:about', ''
75
+ desc.add_attribute 'xmlns:pdfaid', 'http://www.aiim.org/pdfa/ns/id/'
76
+ desc.add REXML::Element.new('pdfaid:conformance').add_text('A')
77
+ desc.add REXML::Element.new('pdfaid:part').add_text('1')
78
+ doc.elements["*/rdf:RDF"].add desc
79
+
80
+ xml = ""; doc.write(xml, 3)
81
+ metadata.data = xml
82
+ end
83
+ end
84
+
85
+ end