origami-docspring 2.2.0 → 2.3.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/examples/attachments/attachment.rb +7 -8
  4. data/examples/attachments/nested_document.rb +6 -5
  5. data/examples/encryption/encryption.rb +5 -4
  6. data/examples/events/events.rb +7 -6
  7. data/examples/flash/flash.rb +10 -9
  8. data/examples/forms/javascript.rb +14 -13
  9. data/examples/forms/xfa.rb +67 -66
  10. data/examples/javascript/hello_world.rb +6 -5
  11. data/examples/javascript/js_emulation.rb +26 -26
  12. data/examples/loop/goto.rb +12 -11
  13. data/examples/loop/named.rb +17 -16
  14. data/examples/signature/signature.rb +11 -11
  15. data/examples/uri/javascript.rb +25 -24
  16. data/examples/uri/open-uri.rb +5 -4
  17. data/examples/uri/submitform.rb +11 -10
  18. data/lib/origami/3d.rb +330 -334
  19. data/lib/origami/acroform.rb +267 -268
  20. data/lib/origami/actions.rb +266 -278
  21. data/lib/origami/annotations.rb +659 -670
  22. data/lib/origami/array.rb +192 -196
  23. data/lib/origami/boolean.rb +66 -70
  24. data/lib/origami/catalog.rb +360 -363
  25. data/lib/origami/collections.rb +132 -133
  26. data/lib/origami/compound.rb +125 -129
  27. data/lib/origami/destinations.rb +226 -237
  28. data/lib/origami/dictionary.rb +155 -154
  29. data/lib/origami/encryption.rb +967 -923
  30. data/lib/origami/extensions/fdf.rb +270 -275
  31. data/lib/origami/extensions/ppklite.rb +323 -328
  32. data/lib/origami/filespec.rb +170 -173
  33. data/lib/origami/filters/ascii.rb +162 -167
  34. data/lib/origami/filters/ccitt/tables.rb +248 -252
  35. data/lib/origami/filters/ccitt.rb +309 -312
  36. data/lib/origami/filters/crypt.rb +31 -34
  37. data/lib/origami/filters/dct.rb +47 -50
  38. data/lib/origami/filters/flate.rb +57 -60
  39. data/lib/origami/filters/jbig2.rb +50 -53
  40. data/lib/origami/filters/jpx.rb +40 -43
  41. data/lib/origami/filters/lzw.rb +151 -155
  42. data/lib/origami/filters/predictors.rb +250 -255
  43. data/lib/origami/filters/runlength.rb +111 -115
  44. data/lib/origami/filters.rb +319 -325
  45. data/lib/origami/font.rb +173 -177
  46. data/lib/origami/functions.rb +62 -66
  47. data/lib/origami/graphics/colors.rb +203 -208
  48. data/lib/origami/graphics/instruction.rb +79 -81
  49. data/lib/origami/graphics/path.rb +141 -144
  50. data/lib/origami/graphics/patterns.rb +156 -160
  51. data/lib/origami/graphics/render.rb +51 -47
  52. data/lib/origami/graphics/state.rb +144 -142
  53. data/lib/origami/graphics/text.rb +185 -188
  54. data/lib/origami/graphics/xobject.rb +818 -804
  55. data/lib/origami/graphics.rb +25 -26
  56. data/lib/origami/header.rb +63 -65
  57. data/lib/origami/javascript.rb +718 -651
  58. data/lib/origami/linearization.rb +284 -285
  59. data/lib/origami/metadata.rb +156 -135
  60. data/lib/origami/name.rb +98 -100
  61. data/lib/origami/null.rb +49 -51
  62. data/lib/origami/numeric.rb +133 -135
  63. data/lib/origami/obfuscation.rb +180 -182
  64. data/lib/origami/object.rb +634 -631
  65. data/lib/origami/optionalcontent.rb +147 -149
  66. data/lib/origami/outline.rb +46 -48
  67. data/lib/origami/outputintents.rb +76 -77
  68. data/lib/origami/page.rb +637 -596
  69. data/lib/origami/parser.rb +214 -221
  70. data/lib/origami/parsers/fdf.rb +44 -45
  71. data/lib/origami/parsers/pdf/lazy.rb +147 -154
  72. data/lib/origami/parsers/pdf/linear.rb +104 -109
  73. data/lib/origami/parsers/pdf.rb +109 -107
  74. data/lib/origami/parsers/ppklite.rb +44 -46
  75. data/lib/origami/pdf.rb +886 -896
  76. data/lib/origami/reference.rb +116 -120
  77. data/lib/origami/signature.rb +617 -625
  78. data/lib/origami/stream.rb +560 -558
  79. data/lib/origami/string.rb +366 -368
  80. data/lib/origami/template/patterns.rb +50 -52
  81. data/lib/origami/template/widgets.rb +111 -114
  82. data/lib/origami/trailer.rb +153 -157
  83. data/lib/origami/tree.rb +55 -57
  84. data/lib/origami/version.rb +19 -19
  85. data/lib/origami/webcapture.rb +87 -90
  86. data/lib/origami/xfa/config.rb +409 -414
  87. data/lib/origami/xfa/connectionset.rb +113 -117
  88. data/lib/origami/xfa/datasets.rb +38 -42
  89. data/lib/origami/xfa/localeset.rb +33 -37
  90. data/lib/origami/xfa/package.rb +49 -52
  91. data/lib/origami/xfa/pdf.rb +54 -59
  92. data/lib/origami/xfa/signature.rb +33 -37
  93. data/lib/origami/xfa/sourceset.rb +34 -38
  94. data/lib/origami/xfa/stylesheet.rb +35 -39
  95. data/lib/origami/xfa/template.rb +1630 -1634
  96. data/lib/origami/xfa/xdc.rb +33 -37
  97. data/lib/origami/xfa/xfa.rb +132 -123
  98. data/lib/origami/xfa/xfdf.rb +34 -38
  99. data/lib/origami/xfa/xmpmeta.rb +34 -38
  100. data/lib/origami/xfa.rb +50 -53
  101. data/lib/origami/xreftable.rb +462 -462
  102. data/lib/origami.rb +37 -38
  103. data/test/test_actions.rb +22 -20
  104. data/test/test_annotations.rb +54 -52
  105. data/test/test_forms.rb +23 -21
  106. data/test/test_native_types.rb +82 -78
  107. data/test/test_object_tree.rb +25 -24
  108. data/test/test_pages.rb +43 -41
  109. data/test/test_pdf.rb +2 -0
  110. data/test/test_pdf_attachment.rb +23 -21
  111. data/test/test_pdf_create.rb +16 -15
  112. data/test/test_pdf_encrypt.rb +69 -66
  113. data/test/test_pdf_parse.rb +131 -129
  114. data/test/test_pdf_parse_lazy.rb +53 -53
  115. data/test/test_pdf_sign.rb +67 -67
  116. data/test/test_streams.rb +145 -143
  117. data/test/test_xrefs.rb +46 -45
  118. metadata +64 -8
@@ -1,197 +1,194 @@
1
- =begin
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # This file is part of Origami, PDF manipulation framework for Ruby
5
+ # Copyright (C) 2016 Guillaume Delugré.
6
+ #
7
+ # Origami is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Lesser General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # Origami is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU Lesser General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU Lesser General Public License
18
+ # along with Origami. If not, see <http://www.gnu.org/licenses/>.
19
+ #
2
20
 
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.
21
+ module Origami
22
+ class PDF
23
+ #
24
+ # Attachs an embedded file to the PDF.
25
+ # _path_:: The path to the file to attach.
26
+ # _register_:: Whether the file shall be registered in the name directory.
27
+ # _name_:: The embedded file name of the attachment.
28
+ # _filter_:: The stream filter used to store the file contents.
29
+ #
30
+ def attach_file(path, register: true, name: nil, filter: :FlateDecode)
31
+ if path.is_a? FileSpec
32
+ filespec = path
33
+ name ||= ''
34
+ else
35
+ if path.respond_to?(:read)
36
+ data = path.read.force_encoding('binary')
37
+ name ||= ''
38
+ else
39
+ data = File.binread(File.expand_path(path))
40
+ name ||= File.basename(path)
41
+ end
10
42
 
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.
43
+ fstream = EmbeddedFileStream.new
44
+ fstream.data = data
15
45
 
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/>.
46
+ fstream.Filter = filter
47
+ filespec = FileSpec.new(F: fstream)
48
+ end
18
49
 
19
- =end
50
+ fspec = FileSpec.new.setType(:Filespec).setF(name.dup).setEF(filespec)
20
51
 
21
- module Origami
52
+ if register
53
+ self.register(
54
+ Names::EMBEDDED_FILES,
55
+ name.dup,
56
+ fspec
57
+ )
58
+ end
22
59
 
23
- class PDF
24
-
25
- #
26
- # Attachs an embedded file to the PDF.
27
- # _path_:: The path to the file to attach.
28
- # _register_:: Whether the file shall be registered in the name directory.
29
- # _name_:: The embedded file name of the attachment.
30
- # _filter_:: The stream filter used to store the file contents.
31
- #
32
- def attach_file(path, register: true, name: nil, filter: :FlateDecode)
33
-
34
- if path.is_a? FileSpec
35
- filespec = path
36
- name ||= ''
37
- else
38
- if path.respond_to?(:read)
39
- data = path.read.force_encoding('binary')
40
- name ||= ''
41
- else
42
- data = File.binread(File.expand_path(path))
43
- name ||= File.basename(path)
44
- end
45
-
46
- fstream = EmbeddedFileStream.new
47
- fstream.data = data
48
-
49
- fstream.Filter = filter
50
- filespec = FileSpec.new(:F => fstream)
51
- end
52
-
53
- fspec = FileSpec.new.setType(:Filespec).setF(name.dup).setEF(filespec)
54
-
55
- self.register(
56
- Names::EMBEDDED_FILES,
57
- name.dup,
58
- fspec
59
- ) if register
60
-
61
- fspec
62
- end
63
-
64
- #
65
- # Lookup embedded file in the embedded files name directory.
66
- #
67
- def get_embedded_file_by_name(name)
68
- resolve_name Names::EMBEDDED_FILES, name
69
- end
70
-
71
- #
72
- # Calls block for each named embedded file.
73
- #
74
- def each_named_embedded_file(&b)
75
- each_name(Names::EMBEDDED_FILES, &b)
76
- end
77
- alias each_attachment each_named_embedded_file
60
+ fspec
78
61
  end
79
62
 
80
63
  #
81
- # Class used to convert system-dependent pathes into PDF pathes.
82
- # PDF path specification offers a single form for representing file pathes over operating systems.
64
+ # Lookup embedded file in the embedded files name directory.
83
65
  #
84
- class Filename
85
-
86
- class << self
87
- #
88
- # Converts UNIX file path into PDF file path.
89
- #
90
- def Unix(file)
91
- LiteralString.new(file)
92
- end
93
-
94
- #
95
- # Converts MacOS file path into PDF file path.
96
- #
97
- def Mac(file)
98
- LiteralString.new("/" + file.tr(":", "/"))
99
- end
100
-
101
- #
102
- # Converts Windows file path into PDF file path.
103
- #
104
- def DOS(file)
105
- path = ""
106
- # Absolute vs relative path
107
- if file.include? ":"
108
- path << "/"
109
- file.sub!(":","")
110
- end
111
-
112
- file.tr!("\\", "/")
113
- LiteralString.new(path + file)
114
- end
115
- end
66
+ def get_embedded_file_by_name(name)
67
+ resolve_name Names::EMBEDDED_FILES, name
116
68
  end
117
69
 
118
70
  #
119
- # Class representing a file specification.
120
- # File specifications can be used to reference external files, as well as embedded files and URIs.
71
+ # Calls block for each named embedded file.
121
72
  #
122
- class FileSpec < Dictionary
123
- include StandardObject
124
-
125
- field :Type, :Type => Name, :Default => :FileSpec
126
- field :FS, :Type => Name, :Default => :URL
127
- field :F, :Type => [ String, Stream ]
128
- field :UF, :Type => String
129
- field :DOS, :Type => String
130
- field :Mac, :Type => String
131
- field :Unix, :Type => String
132
- field :ID, :Type => Array
133
- field :V, :Type => Boolean, :Default => false, :Version => "1.2"
134
- field :EF, :Type => Dictionary, :Version => "1.3"
135
- field :RF, :Type => Dictionary, :Version => "1.3"
136
- field :Desc, :Type => String, :Version => "1.6"
137
- field :CI, :Type => Dictionary, :Version => "1.7"
138
- field :Thumb, :Type => Stream, :Version => "1.7", :ExtensionLevel => 3
73
+ def each_named_embedded_file(&b)
74
+ each_name(Names::EMBEDDED_FILES, &b)
139
75
  end
140
-
141
- #
142
- # Class representing a Uniform Resource Locator (URL)
143
- #
144
- class URL < FileSpec
145
- field :Type, :Type => Name, :Default => :URL, :Required => true
146
-
147
- def initialize(url)
148
- super(:F => url)
76
+ alias_method :each_attachment, :each_named_embedded_file
77
+ end
78
+
79
+ #
80
+ # Class used to convert system-dependent pathes into PDF pathes.
81
+ # PDF path specification offers a single form for representing file pathes over operating systems.
82
+ #
83
+ class Filename
84
+ class << self
85
+ #
86
+ # Converts UNIX file path into PDF file path.
87
+ #
88
+ def Unix(file)
89
+ LiteralString.new(file)
90
+ end
91
+
92
+ #
93
+ # Converts MacOS file path into PDF file path.
94
+ #
95
+ def Mac(file)
96
+ LiteralString.new("/" + file.tr(":", "/"))
97
+ end
98
+
99
+ #
100
+ # Converts Windows file path into PDF file path.
101
+ #
102
+ def DOS(file)
103
+ path = ""
104
+ # Absolute vs relative path
105
+ if file.include? ":"
106
+ path << "/"
107
+ file.sub!(":", "")
149
108
  end
150
- end
151
109
 
152
- #
153
- # A class representing a file outside the current PDF file.
154
- #
155
- class ExternalFile < FileSpec
156
- field :Type, :Type => Name, :Default => :FileSpec #, :Required => true
157
-
158
- #
159
- # Creates a new external file specification.
160
- # _dos_:: The Windows path to this file.
161
- # _mac_:: The MacOS path to this file.
162
- # _unix_:: The UNIX path to this file.
163
- #
164
- def initialize(dos, mac: "", unix: "")
165
- if not mac.empty? or not unix.empty?
166
- super(:DOS => Filename.DOS(dos), :Mac => Filename.Mac(mac), :Unix => Filename.Unix(unix))
167
- else
168
- super(:F => dos)
169
- end
170
- end
110
+ file.tr!("\\", "/")
111
+ LiteralString.new(path + file)
112
+ end
171
113
  end
172
-
173
- #
174
- # Class representing parameters for a EmbeddedFileStream.
175
- #
176
- class EmbeddedFileParameters < Dictionary
177
- include StandardObject
178
-
179
- field :Size, :Type => Integer
180
- field :CreationDate, :Type => String
181
- field :ModDate, :Type => String
182
- field :Mac, :Type => Dictionary
183
- field :Checksum, :Type => String
114
+ end
115
+
116
+ #
117
+ # Class representing a file specification.
118
+ # File specifications can be used to reference external files, as well as embedded files and URIs.
119
+ #
120
+ class FileSpec < Dictionary
121
+ include StandardObject
122
+
123
+ field :Type, Type: Name, Default: :FileSpec
124
+ field :FS, Type: Name, Default: :URL
125
+ field :F, Type: [String, Stream]
126
+ field :UF, Type: String
127
+ field :DOS, Type: String
128
+ field :Mac, Type: String
129
+ field :Unix, Type: String
130
+ field :ID, Type: Array
131
+ field :V, Type: Boolean, Default: false, Version: "1.2"
132
+ field :EF, Type: Dictionary, Version: "1.3"
133
+ field :RF, Type: Dictionary, Version: "1.3"
134
+ field :Desc, Type: String, Version: "1.6"
135
+ field :CI, Type: Dictionary, Version: "1.7"
136
+ field :Thumb, Type: Stream, Version: "1.7", ExtensionLevel: 3
137
+ end
138
+
139
+ #
140
+ # Class representing a Uniform Resource Locator (URL)
141
+ #
142
+ class URL < FileSpec
143
+ field :Type, Type: Name, Default: :URL, Required: true
144
+
145
+ def initialize(url)
146
+ super(F: url)
184
147
  end
148
+ end
149
+
150
+ #
151
+ # A class representing a file outside the current PDF file.
152
+ #
153
+ class ExternalFile < FileSpec
154
+ field :Type, Type: Name, Default: :FileSpec # , :Required => true
185
155
 
186
156
  #
187
- # Class representing the data of an embedded file.
157
+ # Creates a new external file specification.
158
+ # _dos_:: The Windows path to this file.
159
+ # _mac_:: The MacOS path to this file.
160
+ # _unix_:: The UNIX path to this file.
188
161
  #
189
- class EmbeddedFileStream < Stream
190
- include StandardObject
191
-
192
- field :Type, :Type => Name, :Default => :EmbeddedFile
193
- field :Subtype, :Type => Name
194
- field :Params, :Type => EmbeddedFileParameters
162
+ def initialize(dos, mac: "", unix: "")
163
+ if !mac.empty? || !unix.empty?
164
+ super(DOS: Filename.DOS(dos), Mac: Filename.Mac(mac), Unix: Filename.Unix(unix))
165
+ else
166
+ super(F: dos)
167
+ end
195
168
  end
196
-
169
+ end
170
+
171
+ #
172
+ # Class representing parameters for a EmbeddedFileStream.
173
+ #
174
+ class EmbeddedFileParameters < Dictionary
175
+ include StandardObject
176
+
177
+ field :Size, Type: Integer
178
+ field :CreationDate, Type: String
179
+ field :ModDate, Type: String
180
+ field :Mac, Type: Dictionary
181
+ field :Checksum, Type: String
182
+ end
183
+
184
+ #
185
+ # Class representing the data of an embedded file.
186
+ #
187
+ class EmbeddedFileStream < Stream
188
+ include StandardObject
189
+
190
+ field :Type, Type: Name, Default: :EmbeddedFile
191
+ field :Subtype, Type: Name
192
+ field :Params, Type: EmbeddedFileParameters
193
+ end
197
194
  end