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,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
|