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,62 +1,66 @@
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
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
+ #
20
20
 
21
21
  module Origami
22
+ module Graphics
23
+ module Canvas
24
+ attr_reader :gs
22
25
 
23
- module Graphics
26
+ def initialize
27
+ @gs = Graphics::State.new
28
+ end
24
29
 
25
- module Canvas
26
- attr_reader :gs
30
+ def clear
31
+ @gs.reset
32
+ end
27
33
 
28
- def initialize
29
- @gs = Graphics::State.new
30
- end
34
+ def write_text(s)
35
+ end
31
36
 
32
- def clear
33
- @gs.reset
34
- end
37
+ def stroke_path
38
+ end
35
39
 
36
- def write_text(s); end
37
- def stroke_path; end
38
- def fill_path; end
39
- def paint_shading(sh); end
40
- end
40
+ def fill_path
41
+ end
41
42
 
42
- class DummyCanvas
43
- include Canvas
44
- end
43
+ def paint_shading(sh)
44
+ end
45
+ end
45
46
 
46
- class TextCanvas
47
- include Canvas
47
+ class DummyCanvas
48
+ include Canvas
49
+ end
48
50
 
49
- def initialize(output = STDOUT, columns = 80, lines = 25)
50
- super()
51
+ class TextCanvas
52
+ include Canvas
51
53
 
52
- @output = output
53
- @columns, @lines = columns, lines
54
- end
54
+ def initialize(output = $stdout, columns = 80, lines = 25)
55
+ super()
55
56
 
56
- def write_text(s)
57
- @output.print(s)
58
- end
59
- end
57
+ @output = output
58
+ @columns, @lines = columns, lines
59
+ end
60
60
 
61
+ def write_text(s)
62
+ @output.print(s)
63
+ end
61
64
  end
65
+ end
62
66
  end
@@ -1,149 +1,151 @@
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
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
+ #
20
20
 
21
21
  require 'matrix'
22
22
 
23
23
  module Origami
24
+ module Graphics
25
+ class GraphicsStateError < Error # :nodoc:
26
+ end
24
27
 
25
- module Graphics
26
- class GraphicsStateError < Error #:nodoc:
27
- end
28
-
29
- class State
30
- #
31
- # Device-independent parameters.
32
- #
33
- attr_accessor :ctm
34
- attr_accessor :clipping_path
35
- attr_accessor :stroking_colorspace, :nonstroking_colorspace, :stroking_color, :nonstroking_color
36
- attr_accessor :text_state
37
- attr_accessor :line_width, :line_cap, :line_join, :miter_limit, :dash_pattern
38
- attr_accessor :rendering_intent
39
- attr_accessor :stroke_adjustment
40
- attr_accessor :blend_mode, :soft_mask, :alpha_constant, :alpha_source
41
-
42
- attr_reader :current_path
43
-
44
- def initialize
45
- @stack = []
46
- @current_path = []
47
- @text_state = Text::State.new
48
-
49
- self.reset
50
- end
51
-
52
- def reset
53
- @ctm = Matrix.identity(3)
54
- @clipping_path = nil
55
- @stroking_colorspace = @nonstroking_colorspace = Color::Space::DEVICE_GRAY
56
- @stroking_color = @nonstroking_color = [ 0.0 ] #black
57
- @text_state.reset
58
- @line_width = 1.0
59
- @line_cap = LineCapStyle::BUTT_CAP
60
- @line_join = LineJoinStyle::MITER_JOIN
61
- @miter_limit = 10.0
62
- @dash_pattern = DashPattern.new([], 0)
63
- @rendering_intent = Color::Intent::RELATIVE
64
- @stroke_adjustment = false
65
- @blend_mode = Color::BlendMode::NORMAL
66
- @soft_mask = :None
67
- @alpha_constant = 1.0
68
- @alpha_source = false
69
- end
70
-
71
- def save
72
- context =
73
- [
74
- @ctm, @clipping_path,
75
- @stroking_colorspace, @nonstroking_colorspace,
76
- @stroking_color, @nonstroking_color,
77
- @text_state, @line_width, @line_cap, @line_join,
78
- @miter_limit, @dash_pattern, @rendering_intent,
79
- @stroke_adjustment,
80
- @blend_mode, @soft_mask, @alpha_constant, @alpha_source
81
- ]
82
- @stack.push(context)
83
- end
84
-
85
- def restore
86
- raise GraphicsStateError, "Cannot restore context : empty stack" if @stack.empty?
87
-
88
- @ctm, @clipping_path,
89
- @stroking_colorspace, @nonstroking_colorspace,
90
- @stroking_color, @nonstroking_color,
91
- @text_state, @line_width, @line_cap, @line_join,
92
- @miter_limit, @dash_pattern, @rendering_intent,
93
- @stroke_adjustment,
94
- @blend_mode, @soft_mask, @alpha_constant, @alpha_source = @stack.pop
95
- end
96
- end
97
-
98
- #
99
- # Generic Graphic state
100
- # 4.3.4 Graphics State Parameter Dictionaries p219
101
- #
102
- class ExtGState < Dictionary
103
- include StandardObject
104
-
105
- field :Type, :Type => Name, :Default => :ExtGState, :Required => true
106
- field :LW, :Type => Integer, :Version => "1.3"
107
- field :LC, :Type => Integer, :Version => "1.3"
108
- field :LJ, :Type => Integer, :Version => "1.3"
109
- field :ML, :Type => Number, :Version => "1.3"
110
- field :D, :Type => Array.of(Array, Integer, length: 2), :Version => "1.3"
111
- field :RI, :Type => Name, :Version => "1.3"
112
- field :OP, :Type => Boolean
113
- field :op, :Type => Boolean, :Version => "1.3"
114
- field :OPM, :Type => Number, :Version => "1.3"
115
- field :Font, :Type => Array, :Version => "1.3"
116
- field :BG, :Type => Object
117
- field :BG2, :Type => Object, :Version => "1.3"
118
- field :UCR, :Type => Object
119
- field :UCR2, :Type => Object, :Version => "1.3"
120
- field :TR, :Type => Object
121
- field :TR2, :Type => Object, :Version => "1.3"
122
- field :HT, :Type => [ Dictionary, Name, Stream ]
123
- field :FL, :Type => Number, :Version => "1.3"
124
- field :SM, :Type => Number, :Version => "1.3"
125
- field :SA, :Type => Boolean
126
- field :BM, :Type => [ Name, Array ], :Version => "1.4"
127
- field :SMask, :Type => [ Dictionary, Name ], :Version => "1.4"
128
- field :CA, :Type => Number
129
- field :ca, :Type => Number, :Version => "1.4"
130
- field :AIS, :Type => Boolean, :Version => "1.4"
131
- field :TK, :Type => Boolean, :Version => "1.4"
132
- end
133
- end #module Graphics
134
-
135
- class PDF::Instruction
136
- insn 'q' do |canvas| canvas.gs.save; canvas.gs.reset end
137
- insn 'Q' do |canvas| canvas.gs.restore end
138
- insn 'w', Real do |canvas, lw| canvas.gs.line_width = lw end
139
- insn 'J', Real do |canvas, lc| canvas.gs.line_cap = lc end
140
- insn 'j', Real do |canvas, lj| canvas.gs.line_join = lj end
141
- insn 'M', Real do |canvas, ml| canvas.gs.miter_limit = ml end
142
-
143
- insn 'd', Array, Integer do |canvas, array, phase|
144
- canvas.gs.dash_pattern = Graphics::DashPattern.new array, phase
145
- end
146
-
147
- insn 'ri', Name do |canvas, ri| canvas.gs.rendering_intent = ri end
28
+ class State
29
+ #
30
+ # Device-independent parameters.
31
+ #
32
+ attr_accessor :ctm
33
+ attr_accessor :clipping_path
34
+ attr_accessor :stroking_colorspace, :nonstroking_colorspace, :stroking_color, :nonstroking_color
35
+ attr_accessor :text_state
36
+ attr_accessor :line_width, :line_cap, :line_join, :miter_limit, :dash_pattern
37
+ attr_accessor :rendering_intent
38
+ attr_accessor :stroke_adjustment
39
+ attr_accessor :blend_mode, :soft_mask, :alpha_constant, :alpha_source
40
+
41
+ attr_reader :current_path
42
+
43
+ def initialize
44
+ @stack = []
45
+ @current_path = []
46
+ @text_state = Text::State.new
47
+
48
+ reset
49
+ end
50
+
51
+ def reset
52
+ @ctm = Matrix.identity(3)
53
+ @clipping_path = nil
54
+ @stroking_colorspace = @nonstroking_colorspace = Color::Space::DEVICE_GRAY
55
+ @stroking_color = @nonstroking_color = [0.0] # black
56
+ @text_state.reset
57
+ @line_width = 1.0
58
+ @line_cap = LineCapStyle::BUTT_CAP
59
+ @line_join = LineJoinStyle::MITER_JOIN
60
+ @miter_limit = 10.0
61
+ @dash_pattern = DashPattern.new([], 0)
62
+ @rendering_intent = Color::Intent::RELATIVE
63
+ @stroke_adjustment = false
64
+ @blend_mode = Color::BlendMode::NORMAL
65
+ @soft_mask = :None
66
+ @alpha_constant = 1.0
67
+ @alpha_source = false
68
+ end
69
+
70
+ def save
71
+ context =
72
+ [
73
+ @ctm, @clipping_path,
74
+ @stroking_colorspace, @nonstroking_colorspace,
75
+ @stroking_color, @nonstroking_color,
76
+ @text_state, @line_width, @line_cap, @line_join,
77
+ @miter_limit, @dash_pattern, @rendering_intent,
78
+ @stroke_adjustment,
79
+ @blend_mode, @soft_mask, @alpha_constant, @alpha_source
80
+ ]
81
+ @stack.push(context)
82
+ end
83
+
84
+ def restore
85
+ raise GraphicsStateError, "Cannot restore context : empty stack" if @stack.empty?
86
+
87
+ @ctm, @clipping_path,
88
+ @stroking_colorspace, @nonstroking_colorspace,
89
+ @stroking_color, @nonstroking_color,
90
+ @text_state, @line_width, @line_cap, @line_join,
91
+ @miter_limit, @dash_pattern, @rendering_intent,
92
+ @stroke_adjustment,
93
+ @blend_mode, @soft_mask, @alpha_constant, @alpha_source = @stack.pop
94
+ end
148
95
  end
96
+
97
+ #
98
+ # Generic Graphic state
99
+ # 4.3.4 Graphics State Parameter Dictionaries p219
100
+ #
101
+ class ExtGState < Dictionary
102
+ include StandardObject
103
+
104
+ field :Type, Type: Name, Default: :ExtGState, Required: true
105
+ field :LW, Type: Integer, Version: "1.3"
106
+ field :LC, Type: Integer, Version: "1.3"
107
+ field :LJ, Type: Integer, Version: "1.3"
108
+ field :ML, Type: Number, Version: "1.3"
109
+ field :D, Type: Array.of(Array, Integer, length: 2), Version: "1.3"
110
+ field :RI, Type: Name, Version: "1.3"
111
+ field :OP, Type: Boolean
112
+ field :op, Type: Boolean, Version: "1.3"
113
+ field :OPM, Type: Number, Version: "1.3"
114
+ field :Font, Type: Array, Version: "1.3"
115
+ field :BG, Type: Object
116
+ field :BG2, Type: Object, Version: "1.3"
117
+ field :UCR, Type: Object
118
+ field :UCR2, Type: Object, Version: "1.3"
119
+ field :TR, Type: Object
120
+ field :TR2, Type: Object, Version: "1.3"
121
+ field :HT, Type: [Dictionary, Name, Stream]
122
+ field :FL, Type: Number, Version: "1.3"
123
+ field :SM, Type: Number, Version: "1.3"
124
+ field :SA, Type: Boolean
125
+ field :BM, Type: [Name, Array], Version: "1.4"
126
+ field :SMask, Type: [Dictionary, Name], Version: "1.4"
127
+ field :CA, Type: Number
128
+ field :ca, Type: Number, Version: "1.4"
129
+ field :AIS, Type: Boolean, Version: "1.4"
130
+ field :TK, Type: Boolean, Version: "1.4"
131
+ end
132
+ end # module Graphics
133
+
134
+ class PDF::Instruction
135
+ insn 'q' do |canvas|
136
+ canvas.gs.save
137
+ canvas.gs.reset
138
+ end
139
+ insn 'Q' do |canvas| canvas.gs.restore end
140
+ insn 'w', Real do |canvas, lw| canvas.gs.line_width = lw end
141
+ insn 'J', Real do |canvas, lc| canvas.gs.line_cap = lc end
142
+ insn 'j', Real do |canvas, lj| canvas.gs.line_join = lj end
143
+ insn 'M', Real do |canvas, ml| canvas.gs.miter_limit = ml end
144
+
145
+ insn 'd', Array, Integer do |canvas, array, phase|
146
+ canvas.gs.dash_pattern = Graphics::DashPattern.new array, phase
147
+ end
148
+
149
+ insn 'ri', Name do |canvas, ri| canvas.gs.rendering_intent = ri end
150
+ end
149
151
  end