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,56 +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
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
-
23
- module Template
24
-
25
- class AxialGradient < Graphics::Pattern::Shading::Axial
26
- def initialize(from, to, color0, color1, coeff = 1)
27
- super()
28
-
29
- set_indirect(true)
30
-
31
- x, y = from
32
- tx, ty = to
33
-
34
- c0 = Graphics::Color.to_a(color0)
35
- c1 = Graphics::Color.to_a(color1)
36
-
37
- space =
38
- case c0.size
39
- when 1 then Graphics::Color::Space::DEVICE_GRAY
40
- when 3 then Graphics::Color::Space::DEVICE_RGB
41
- when 4 then Graphics::Color::Space::DEVICE_CMYK
42
- end
43
-
44
- f = Function::Exponential.new
45
- f.Domain = [ 0.0, 1.0 ]
46
- f.N = coeff
47
- f.C0, f.C1 = c0, c1
48
-
49
- self.ColorSpace = space
50
- self.Coords = [ x, y, tx, ty ]
51
- self.Function = f
52
- self.Extend = [ true, true ]
53
- end
54
- end
22
+ module Template
23
+ class AxialGradient < Graphics::Pattern::Shading::Axial
24
+ def initialize(from, to, color0, color1, coeff = 1)
25
+ super()
26
+
27
+ set_indirect(true)
28
+
29
+ x, y = from
30
+ tx, ty = to
31
+
32
+ c0 = Graphics::Color.to_a(color0)
33
+ c1 = Graphics::Color.to_a(color1)
34
+
35
+ space =
36
+ case c0.size
37
+ when 1 then Graphics::Color::Space::DEVICE_GRAY
38
+ when 3 then Graphics::Color::Space::DEVICE_RGB
39
+ when 4 then Graphics::Color::Space::DEVICE_CMYK
40
+ end
41
+
42
+ f = Function::Exponential.new
43
+ f.Domain = [0.0, 1.0]
44
+ f.N = coeff
45
+ f.C0, f.C1 = c0, c1
46
+
47
+ self.ColorSpace = space
48
+ self.Coords = [x, y, tx, ty]
49
+ self.Function = f
50
+ self.Extend = [true, true]
51
+ end
55
52
  end
53
+ end
56
54
  end
@@ -1,151 +1,148 @@
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 Template
23
+ class Button < Annotation::Widget::PushButton
24
+ def initialize(caption, x:, y:, width:, height:, id: nil)
25
+ super()
22
26
 
23
- module Template
24
-
25
- class Button < Annotation::Widget::PushButton
26
- def initialize(caption, id: nil, x:, y:, width:, height:)
27
- super()
28
-
29
- set_indirect(true)
27
+ set_indirect(true)
30
28
 
31
- self.set_name(id)
32
- self.H = Annotation::Widget::Highlight::INVERT
33
- self.Rect = [ x, y, x + width, y + height ]
34
- self.F = Annotation::Flags::PRINT
29
+ set_name(id)
30
+ self.H = Annotation::Widget::Highlight::INVERT
31
+ self.Rect = [x, y, x + width, y + height]
32
+ self.F = Annotation::Flags::PRINT
35
33
 
36
- appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
37
- appstm.BBox = [ 0, 0, width, height ]
38
- appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
34
+ appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
35
+ appstm.BBox = [0, 0, width, height]
36
+ appstm.Matrix = [1, 0, 0, 1, 0, 0]
39
37
 
40
- appstm.draw_rectangle(0, 0, width, height,
41
- fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(0xE6, 0xE6, 0xFA))
38
+ appstm.draw_rectangle(0, 0, width, height,
39
+ fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(0xE6, 0xE6, 0xFA))
42
40
 
43
- appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
44
- fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
41
+ appstm.draw_polygon([[1, 1], [1, height - 1], [width - 1, height - 1], [width - 2, height - 2], [2, height - 2], [2, 2]],
42
+ fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
45
43
 
46
- appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
47
- fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
44
+ appstm.draw_polygon([[width - 1, height - 1], [width - 1, 1], [1, 1], [2, 2], [width - 2, 2], [width - 2, height - 2]],
45
+ fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
48
46
 
49
- appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
50
- fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
47
+ appstm.draw_rectangle(0.5, 0.5, width - 1, height - 1,
48
+ fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
51
49
 
52
- text_width = 4.75 * caption.length
53
- appstm.write(caption,
54
- x: (width - text_width)/2, y: height/2-5, size: 10)
50
+ text_width = 4.75 * caption.length
51
+ appstm.write(caption,
52
+ x: (width - text_width) / 2, y: height / 2 - 5, size: 10)
55
53
 
56
- appstm.Resources = Resources.new
57
- set_normal_appearance(appstm)
58
- end
59
- end
54
+ appstm.Resources = Resources.new
55
+ set_normal_appearance(appstm)
56
+ end
57
+ end
60
58
 
61
- class Edit < Annotation::Widget::Text
62
- def initialize(id, x:, y:, width:, height:)
63
- super()
59
+ class Edit < Annotation::Widget::Text
60
+ def initialize(id, x:, y:, width:, height:)
61
+ super()
64
62
 
65
- set_indirect(true)
63
+ set_indirect(true)
66
64
 
67
- self.set_name(id)
68
- self.Rect = [ x, y, x+width, y+height ]
69
- self.F = Annotation::Flags::PRINT
70
- self.DA = '/F1 12 Tf 0 g'
65
+ set_name(id)
66
+ self.Rect = [x, y, x + width, y + height]
67
+ self.F = Annotation::Flags::PRINT
68
+ self.DA = '/F1 12 Tf 0 g'
71
69
 
72
- appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
73
- appstm.BBox = [ 0, 0, width, height ]
74
- appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
70
+ appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
71
+ appstm.BBox = [0, 0, width, height]
72
+ appstm.Matrix = [1, 0, 0, 1, 0, 0]
75
73
 
76
- appstm.draw_rectangle(0, 0, width, height,
77
- fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
74
+ appstm.draw_rectangle(0, 0, width, height,
75
+ fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
78
76
 
79
- appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
80
- fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
77
+ appstm.draw_polygon([[1, 1], [1, height - 1], [width - 1, height - 1], [width - 2, height - 2], [2, height - 2], [2, 2]],
78
+ fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
81
79
 
82
- appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
83
- fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
80
+ appstm.draw_polygon([[width - 1, height - 1], [width - 1, 1], [1, 1], [2, 2], [width - 2, 2], [width - 2, height - 2]],
81
+ fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
84
82
 
85
- appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
86
- fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
83
+ appstm.draw_rectangle(0.5, 0.5, width - 1, height - 1,
84
+ fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
87
85
 
88
- set_normal_appearance(appstm)
89
- end
90
- end
86
+ set_normal_appearance(appstm)
87
+ end
88
+ end
91
89
 
92
- class MultiLineEdit < Edit
93
- def initialize(id, x:, y:, width:, height:)
94
- super(id, x: x, y: y, width: width, height: height)
90
+ class MultiLineEdit < Edit
91
+ def initialize(id, x:, y:, width:, height:)
92
+ super
95
93
 
96
- self.Ff ||= 0
97
- self.Ff |= Annotation::Widget::Text::Flags::MULTILINE
98
- end
99
- end
94
+ self.Ff ||= 0
95
+ self.Ff |= Annotation::Widget::Text::Flags::MULTILINE
96
+ end
97
+ end
100
98
 
101
- class RichTextEdit < MultiLineEdit
102
- def initialize(id, x: , y:, width:, height:)
103
- super(id, x: x, y: y, width: width, height: height)
99
+ class RichTextEdit < MultiLineEdit
100
+ def initialize(id, x:, y:, width:, height:)
101
+ super
104
102
 
105
- self.F |= Annotation::Flags::READONLY
106
- self.Ff |= (Annotation::Widget::Text::Flags::RICHTEXT | Field::Flags::READONLY)
107
- end
108
- end
103
+ self.F |= Annotation::Flags::READONLY
104
+ self.Ff |= (Annotation::Widget::Text::Flags::RICHTEXT | Field::Flags::READONLY)
105
+ end
106
+ end
109
107
 
110
- class PasswordEdit < Edit
111
- def initialize(id, x:, y:, width:, height:)
112
- super(id, x: x, y: y, width: width, height: height)
108
+ class PasswordEdit < Edit
109
+ def initialize(id, x:, y:, width:, height:)
110
+ super
113
111
 
114
- self.Ff ||= 0
115
- self.Ff |= Annotation::Widget::Text::Flags::PASSWORD
116
- end
117
- end
112
+ self.Ff ||= 0
113
+ self.Ff |= Annotation::Widget::Text::Flags::PASSWORD
114
+ end
115
+ end
118
116
 
119
- class TextPanel < Annotation::FreeText
120
- def initialize(id, x:, y:, width:, height:)
121
- super()
117
+ class TextPanel < Annotation::FreeText
118
+ def initialize(id, x:, y:, width:, height:)
119
+ super()
122
120
 
123
- set_indirect(true)
121
+ set_indirect(true)
124
122
 
125
- self.Rect = [ x, y, x + width, y + height ]
126
- self.F = Annotation::Flags::PRINT
127
- self.NM = id
128
- self.DA = '/F1 12 Tf 0 g'
123
+ self.Rect = [x, y, x + width, y + height]
124
+ self.F = Annotation::Flags::PRINT
125
+ self.NM = id
126
+ self.DA = '/F1 12 Tf 0 g'
129
127
 
130
- appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
131
- appstm.BBox = [ 0, 0, width, height ]
132
- appstm.Matrix = [ 1, 0, 0, 1, 0, 0 ]
128
+ appstm = Annotation::AppearanceStream.new.setFilter(:FlateDecode)
129
+ appstm.BBox = [0, 0, width, height]
130
+ appstm.Matrix = [1, 0, 0, 1, 0, 0]
133
131
 
134
- appstm.draw_rectangle(0, 0, width, height,
135
- fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
132
+ appstm.draw_rectangle(0, 0, width, height,
133
+ fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
136
134
 
137
- appstm.draw_polygon([[1,1],[1,height-1],[width-1,height-1],[width-2,height-2],[2,height-2],[2,2]],
138
- fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
135
+ appstm.draw_polygon([[1, 1], [1, height - 1], [width - 1, height - 1], [width - 2, height - 2], [2, height - 2], [2, 2]],
136
+ fill: true, stroke: false, fill_color: Graphics::Color::RGB.new(130, 130, 130))
139
137
 
140
- appstm.draw_polygon([[width-1,height-1],[width-1,1],[1,1],[2,2],[width-2,2],[width-2,height-2]],
141
- fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
138
+ appstm.draw_polygon([[width - 1, height - 1], [width - 1, 1], [1, 1], [2, 2], [width - 2, 2], [width - 2, height - 2]],
139
+ fill: true, stroke: false, fill_color: Graphics::Color::GrayScale.new(1.0))
142
140
 
143
- appstm.draw_rectangle(0.5, 0.5, width-1, height-1,
144
- fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
141
+ appstm.draw_rectangle(0.5, 0.5, width - 1, height - 1,
142
+ fill: false, stroke: true, stroke_color: Graphics::Color::GrayScale.new(0.0))
145
143
 
146
- set_normal_appearance(appstm)
147
- end
148
- end
144
+ set_normal_appearance(appstm)
145
+ end
149
146
  end
150
-
147
+ end
151
148
  end