hexapdf 0.15.9 → 0.17.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +62 -0
- data/LICENSE +1 -1
- data/README.md +11 -2
- data/Rakefile +2 -1
- data/examples/002-graphics.rb +4 -4
- data/lib/hexapdf/cli/batch.rb +1 -1
- data/lib/hexapdf/cli/command.rb +10 -1
- data/lib/hexapdf/cli/files.rb +1 -1
- data/lib/hexapdf/cli/fonts.rb +145 -0
- data/lib/hexapdf/cli/form.rb +27 -26
- data/lib/hexapdf/cli/image2pdf.rb +1 -1
- data/lib/hexapdf/cli/images.rb +1 -10
- data/lib/hexapdf/cli/info.rb +1 -1
- data/lib/hexapdf/cli/inspect.rb +1 -1
- data/lib/hexapdf/cli/merge.rb +1 -1
- data/lib/hexapdf/cli/modify.rb +1 -1
- data/lib/hexapdf/cli/optimize.rb +1 -1
- data/lib/hexapdf/cli/split.rb +1 -1
- data/lib/hexapdf/cli/watermark.rb +1 -1
- data/lib/hexapdf/cli.rb +3 -1
- data/lib/hexapdf/composer.rb +1 -1
- data/lib/hexapdf/configuration.rb +11 -2
- data/lib/hexapdf/content/canvas.rb +658 -167
- data/lib/hexapdf/content/color_space.rb +185 -3
- data/lib/hexapdf/content/graphic_object/arc.rb +111 -12
- data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +67 -1
- data/lib/hexapdf/content/graphic_object/geom2d.rb +14 -1
- data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
- data/lib/hexapdf/content/graphic_object.rb +1 -1
- data/lib/hexapdf/content/graphics_state.rb +1 -1
- data/lib/hexapdf/content/operator.rb +1 -1
- data/lib/hexapdf/content/parser.rb +1 -1
- data/lib/hexapdf/content/processor.rb +1 -1
- data/lib/hexapdf/content/transformation_matrix.rb +1 -1
- data/lib/hexapdf/content.rb +1 -1
- data/lib/hexapdf/data_dir.rb +1 -1
- data/lib/hexapdf/dictionary.rb +1 -1
- data/lib/hexapdf/dictionary_fields.rb +30 -4
- data/lib/hexapdf/document/files.rb +3 -3
- data/lib/hexapdf/document/fonts.rb +1 -1
- data/lib/hexapdf/document/images.rb +1 -1
- data/lib/hexapdf/document/pages.rb +1 -1
- data/lib/hexapdf/document.rb +1 -1
- data/lib/hexapdf/encryption/aes.rb +1 -1
- data/lib/hexapdf/encryption/arc4.rb +1 -1
- data/lib/hexapdf/encryption/fast_aes.rb +1 -1
- data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
- data/lib/hexapdf/encryption/identity.rb +1 -1
- data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
- data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
- data/lib/hexapdf/encryption/security_handler.rb +1 -1
- data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
- data/lib/hexapdf/encryption.rb +1 -1
- data/lib/hexapdf/error.rb +1 -1
- data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
- data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
- data/lib/hexapdf/filter/crypt.rb +1 -1
- data/lib/hexapdf/filter/encryption.rb +1 -1
- data/lib/hexapdf/filter/flate_decode.rb +1 -1
- data/lib/hexapdf/filter/lzw_decode.rb +1 -1
- data/lib/hexapdf/filter/pass_through.rb +1 -1
- data/lib/hexapdf/filter/predictor.rb +1 -1
- data/lib/hexapdf/filter/run_length_decode.rb +1 -1
- data/lib/hexapdf/filter.rb +1 -1
- data/lib/hexapdf/font/cmap/parser.rb +1 -1
- data/lib/hexapdf/font/cmap/writer.rb +1 -1
- data/lib/hexapdf/font/cmap.rb +1 -1
- data/lib/hexapdf/font/encoding/base.rb +1 -1
- data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
- data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding.rb +1 -1
- data/lib/hexapdf/font/invalid_glyph.rb +1 -1
- data/lib/hexapdf/font/true_type/builder.rb +1 -1
- data/lib/hexapdf/font/true_type/font.rb +1 -1
- data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
- data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
- data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
- data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
- data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
- data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
- data/lib/hexapdf/font/true_type/table/head.rb +1 -1
- data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
- data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
- data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
- data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
- data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
- data/lib/hexapdf/font/true_type/table/name.rb +1 -1
- data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
- data/lib/hexapdf/font/true_type/table/post.rb +1 -1
- data/lib/hexapdf/font/true_type/table.rb +1 -1
- data/lib/hexapdf/font/true_type.rb +1 -1
- data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
- data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
- data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
- data/lib/hexapdf/font/type1/font.rb +1 -1
- data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
- data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
- data/lib/hexapdf/font/type1.rb +1 -1
- data/lib/hexapdf/font/type1_wrapper.rb +1 -1
- data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
- data/lib/hexapdf/font_loader/from_file.rb +1 -1
- data/lib/hexapdf/font_loader/standard14.rb +1 -1
- data/lib/hexapdf/font_loader.rb +1 -1
- data/lib/hexapdf/image_loader/jpeg.rb +1 -1
- data/lib/hexapdf/image_loader/pdf.rb +1 -1
- data/lib/hexapdf/image_loader/png.rb +1 -1
- data/lib/hexapdf/image_loader.rb +1 -1
- data/lib/hexapdf/importer.rb +1 -1
- data/lib/hexapdf/layout/box.rb +4 -2
- data/lib/hexapdf/layout/frame.rb +1 -1
- data/lib/hexapdf/layout/image_box.rb +1 -1
- data/lib/hexapdf/layout/inline_box.rb +1 -1
- data/lib/hexapdf/layout/line.rb +1 -1
- data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
- data/lib/hexapdf/layout/style.rb +40 -2
- data/lib/hexapdf/layout/text_box.rb +1 -1
- data/lib/hexapdf/layout/text_fragment.rb +1 -1
- data/lib/hexapdf/layout/text_layouter.rb +1 -1
- data/lib/hexapdf/layout/text_shaper.rb +1 -1
- data/lib/hexapdf/layout/width_from_polygon.rb +2 -2
- data/lib/hexapdf/layout.rb +1 -1
- data/lib/hexapdf/name_tree_node.rb +1 -1
- data/lib/hexapdf/number_tree_node.rb +1 -1
- data/lib/hexapdf/object.rb +1 -1
- data/lib/hexapdf/parser.rb +1 -1
- data/lib/hexapdf/pdf_array.rb +1 -1
- data/lib/hexapdf/rectangle.rb +1 -1
- data/lib/hexapdf/reference.rb +1 -1
- data/lib/hexapdf/revision.rb +1 -1
- data/lib/hexapdf/revisions.rb +1 -1
- data/lib/hexapdf/serializer.rb +1 -1
- data/lib/hexapdf/stream.rb +1 -1
- data/lib/hexapdf/task/dereference.rb +1 -1
- data/lib/hexapdf/task/optimize.rb +1 -1
- data/lib/hexapdf/task.rb +1 -1
- data/lib/hexapdf/tokenizer.rb +1 -1
- data/lib/hexapdf/type/acro_form/appearance_generator.rb +14 -7
- data/lib/hexapdf/type/acro_form/button_field.rb +53 -28
- data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
- data/lib/hexapdf/type/acro_form/field.rb +21 -2
- data/lib/hexapdf/type/acro_form/form.rb +48 -29
- data/lib/hexapdf/type/acro_form/text_field.rb +2 -2
- data/lib/hexapdf/type/acro_form/variable_text_field.rb +17 -9
- data/lib/hexapdf/type/acro_form.rb +1 -1
- data/lib/hexapdf/type/action.rb +1 -1
- data/lib/hexapdf/type/actions/go_to.rb +1 -1
- data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
- data/lib/hexapdf/type/actions/launch.rb +1 -1
- data/lib/hexapdf/type/actions/uri.rb +1 -1
- data/lib/hexapdf/type/actions.rb +1 -1
- data/lib/hexapdf/type/annotation.rb +1 -1
- data/lib/hexapdf/type/annotations/link.rb +1 -1
- data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
- data/lib/hexapdf/type/annotations/text.rb +1 -1
- data/lib/hexapdf/type/annotations/widget.rb +2 -2
- data/lib/hexapdf/type/annotations.rb +1 -1
- data/lib/hexapdf/type/catalog.rb +1 -1
- data/lib/hexapdf/type/cid_font.rb +1 -1
- data/lib/hexapdf/type/embedded_file.rb +1 -1
- data/lib/hexapdf/type/file_specification.rb +1 -1
- data/lib/hexapdf/type/font.rb +1 -1
- data/lib/hexapdf/type/font_descriptor.rb +1 -1
- data/lib/hexapdf/type/font_simple.rb +1 -1
- data/lib/hexapdf/type/font_true_type.rb +1 -1
- data/lib/hexapdf/type/font_type0.rb +1 -1
- data/lib/hexapdf/type/font_type1.rb +1 -1
- data/lib/hexapdf/type/font_type3.rb +1 -1
- data/lib/hexapdf/type/form.rb +1 -1
- data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
- data/lib/hexapdf/type/icon_fit.rb +1 -1
- data/lib/hexapdf/type/image.rb +1 -1
- data/lib/hexapdf/type/info.rb +1 -1
- data/lib/hexapdf/type/names.rb +1 -1
- data/lib/hexapdf/type/object_stream.rb +1 -1
- data/lib/hexapdf/type/page.rb +15 -1
- data/lib/hexapdf/type/page_tree_node.rb +1 -1
- data/lib/hexapdf/type/resources.rb +1 -1
- data/lib/hexapdf/type/trailer.rb +1 -1
- data/lib/hexapdf/type/viewer_preferences.rb +1 -1
- data/lib/hexapdf/type/xref_stream.rb +1 -1
- data/lib/hexapdf/type.rb +1 -1
- data/lib/hexapdf/utils/bit_field.rb +1 -1
- data/lib/hexapdf/utils/bit_stream.rb +1 -1
- data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
- data/lib/hexapdf/utils/lru_cache.rb +1 -1
- data/lib/hexapdf/utils/math_helpers.rb +1 -1
- data/lib/hexapdf/utils/object_hash.rb +1 -1
- data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
- data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
- data/lib/hexapdf/version.rb +2 -2
- data/lib/hexapdf/writer.rb +1 -1
- data/lib/hexapdf/xref_section.rb +1 -1
- data/lib/hexapdf.rb +1 -1
- data/test/hexapdf/content/graphic_object/test_arc.rb +16 -7
- data/test/hexapdf/content/test_canvas.rb +63 -0
- data/test/hexapdf/content/test_color_space.rb +13 -1
- data/test/hexapdf/layout/test_box.rb +2 -0
- data/test/hexapdf/layout/test_style.rb +11 -0
- data/test/hexapdf/layout/test_width_from_polygon.rb +1 -0
- data/test/hexapdf/test_dictionary_fields.rb +24 -0
- data/test/hexapdf/test_writer.rb +2 -2
- data/test/hexapdf/type/acro_form/test_appearance_generator.rb +2 -1
- data/test/hexapdf/type/acro_form/test_button_field.rb +19 -13
- data/test/hexapdf/type/acro_form/test_field.rb +12 -0
- data/test/hexapdf/type/acro_form/test_form.rb +4 -0
- data/test/hexapdf/type/acro_form/test_text_field.rb +6 -0
- data/test/hexapdf/type/acro_form/test_variable_text_field.rb +15 -4
- data/test/hexapdf/type/test_page.rb +11 -0
- metadata +4 -3
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -96,6 +96,170 @@ module HexaPDF
|
|
96
96
|
# See: PDF1.7 s8.6
|
97
97
|
module ColorSpace
|
98
98
|
|
99
|
+
# Mapping of CSS Color Module Level 3 names to RGB values.
|
100
|
+
#
|
101
|
+
# Visual listing of all colors:
|
102
|
+
#
|
103
|
+
# #>pdf-big
|
104
|
+
# canvas.font("Helvetica", size: 8)
|
105
|
+
# map = HexaPDF::Content::ColorSpace::CSS_COLOR_NAMES
|
106
|
+
# map.each_slice(38).each_with_index do |slice, col|
|
107
|
+
# x = 10 + col * 100
|
108
|
+
# slice.each_with_index do |(name, rgb), row|
|
109
|
+
# canvas.fill_color(rgb).rectangle(x, 380 - row * 10, 10, 10).fill
|
110
|
+
# canvas.fill_color("black").text(name, at: [x + 15, 380 - row * 10 + 2])
|
111
|
+
# end
|
112
|
+
# end
|
113
|
+
CSS_COLOR_NAMES = {
|
114
|
+
"aliceblue" => [240, 248, 255],
|
115
|
+
"antiquewhite" => [250, 235, 215],
|
116
|
+
"aqua" => [0, 255, 255],
|
117
|
+
"aquamarine" => [127, 255, 212],
|
118
|
+
"azure" => [240, 255, 255],
|
119
|
+
"beige" => [245, 245, 220],
|
120
|
+
"bisque" => [255, 228, 196],
|
121
|
+
"black" => [0, 0, 0],
|
122
|
+
"blanchedalmond" => [255, 235, 205],
|
123
|
+
"blue" => [0, 0, 255],
|
124
|
+
"blueviolet" => [138, 43, 226],
|
125
|
+
"brown" => [165, 42, 42],
|
126
|
+
"burlywood" => [222, 184, 135],
|
127
|
+
"cadetblue" => [95, 158, 160],
|
128
|
+
"chartreuse" => [127, 255, 0],
|
129
|
+
"chocolate" => [210, 105, 30],
|
130
|
+
"coral" => [255, 127, 80],
|
131
|
+
"cornflowerblue" => [100, 149, 237],
|
132
|
+
"cornsilk" => [255, 248, 220],
|
133
|
+
"crimson" => [220, 20, 60],
|
134
|
+
"cyan" => [0, 255, 255],
|
135
|
+
"darkblue" => [0, 0, 139],
|
136
|
+
"darkcyan" => [0, 139, 139],
|
137
|
+
"darkgoldenrod" => [184, 134, 11],
|
138
|
+
"darkgray" => [169, 169, 169],
|
139
|
+
"darkgreen" => [0, 100, 0],
|
140
|
+
"darkgrey" => [169, 169, 169],
|
141
|
+
"darkkhaki" => [189, 183, 107],
|
142
|
+
"darkmagenta" => [139, 0, 139],
|
143
|
+
"darkolivegreen" => [85, 107, 47],
|
144
|
+
"darkorange" => [255, 140, 0],
|
145
|
+
"darkorchid" => [153, 50, 204],
|
146
|
+
"darkred" => [139, 0, 0],
|
147
|
+
"darksalmon" => [233, 150, 122],
|
148
|
+
"darkseagreen" => [143, 188, 143],
|
149
|
+
"darkslateblue" => [72, 61, 139],
|
150
|
+
"darkslategray" => [47, 79, 79],
|
151
|
+
"darkslategrey" => [47, 79, 79],
|
152
|
+
"darkturquoise" => [0, 206, 209],
|
153
|
+
"darkviolet" => [148, 0, 211],
|
154
|
+
"deeppink" => [255, 20, 147],
|
155
|
+
"deepskyblue" => [0, 191, 255],
|
156
|
+
"dimgray" => [105, 105, 105],
|
157
|
+
"dimgrey" => [105, 105, 105],
|
158
|
+
"dodgerblue" => [30, 144, 255],
|
159
|
+
"firebrick" => [178, 34, 34],
|
160
|
+
"floralwhite" => [255, 250, 240],
|
161
|
+
"forestgreen" => [34, 139, 34],
|
162
|
+
"fuchsia" => [255, 0, 255],
|
163
|
+
"gainsboro" => [220, 220, 220],
|
164
|
+
"ghostwhite" => [248, 248, 255],
|
165
|
+
"gold" => [255, 215, 0],
|
166
|
+
"goldenrod" => [218, 165, 32],
|
167
|
+
"gray" => [128, 128, 128],
|
168
|
+
"green" => [0, 128, 0],
|
169
|
+
"greenyellow" => [173, 255, 47],
|
170
|
+
"grey" => [128, 128, 128],
|
171
|
+
"honeydew" => [240, 255, 240],
|
172
|
+
"hotpink" => [255, 105, 180],
|
173
|
+
"indianred" => [205, 92, 92],
|
174
|
+
"indigo" => [75, 0, 130],
|
175
|
+
"ivory" => [255, 255, 240],
|
176
|
+
"khaki" => [240, 230, 140],
|
177
|
+
"lavender" => [230, 230, 250],
|
178
|
+
"lavenderblush" => [255, 240, 245],
|
179
|
+
"lawngreen" => [124, 252, 0],
|
180
|
+
"lemonchiffon" => [255, 250, 205],
|
181
|
+
"lightblue" => [173, 216, 230],
|
182
|
+
"lightcoral" => [240, 128, 128],
|
183
|
+
"lightcyan" => [224, 255, 255],
|
184
|
+
"lightgoldenrodyellow" => [250, 250, 210],
|
185
|
+
"lightgray" => [211, 211, 211],
|
186
|
+
"lightgreen" => [144, 238, 144],
|
187
|
+
"lightgrey" => [211, 211, 211],
|
188
|
+
"lightpink" => [255, 182, 193],
|
189
|
+
"lightsalmon" => [255, 160, 122],
|
190
|
+
"lightseagreen" => [32, 178, 170],
|
191
|
+
"lightskyblue" => [135, 206, 250],
|
192
|
+
"lightslategray" => [119, 136, 153],
|
193
|
+
"lightslategrey" => [119, 136, 153],
|
194
|
+
"lightsteelblue" => [176, 196, 222],
|
195
|
+
"lightyellow" => [255, 255, 224],
|
196
|
+
"lime" => [0, 255, 0],
|
197
|
+
"limegreen" => [50, 205, 50],
|
198
|
+
"linen" => [250, 240, 230],
|
199
|
+
"magenta" => [255, 0, 255],
|
200
|
+
"maroon" => [128, 0, 0],
|
201
|
+
"mediumaquamarine" => [102, 205, 170],
|
202
|
+
"mediumblue" => [0, 0, 205],
|
203
|
+
"mediumorchid" => [186, 85, 211],
|
204
|
+
"mediumpurple" => [147, 112, 219],
|
205
|
+
"mediumseagreen" => [60, 179, 113],
|
206
|
+
"mediumslateblue" => [123, 104, 238],
|
207
|
+
"mediumspringgreen" => [0, 250, 154],
|
208
|
+
"mediumturquoise" => [72, 209, 204],
|
209
|
+
"mediumvioletred" => [199, 21, 133],
|
210
|
+
"midnightblue" => [25, 25, 112],
|
211
|
+
"mintcream" => [245, 255, 250],
|
212
|
+
"mistyrose" => [255, 228, 225],
|
213
|
+
"moccasin" => [255, 228, 181],
|
214
|
+
"navajowhite" => [255, 222, 173],
|
215
|
+
"navy" => [0, 0, 128],
|
216
|
+
"oldlace" => [253, 245, 230],
|
217
|
+
"olive" => [128, 128, 0],
|
218
|
+
"olivedrab" => [107, 142, 35],
|
219
|
+
"orange" => [255, 165, 0],
|
220
|
+
"orangered" => [255, 69, 0],
|
221
|
+
"orchid" => [218, 112, 214],
|
222
|
+
"palegoldenrod" => [238, 232, 170],
|
223
|
+
"palegreen" => [152, 251, 152],
|
224
|
+
"paleturquoise" => [175, 238, 238],
|
225
|
+
"palevioletred" => [219, 112, 147],
|
226
|
+
"papayawhip" => [255, 239, 213],
|
227
|
+
"peachpuff" => [255, 218, 185],
|
228
|
+
"peru" => [205, 133, 63],
|
229
|
+
"pink" => [255, 192, 203],
|
230
|
+
"plum" => [221, 160, 221],
|
231
|
+
"powderblue" => [176, 224, 230],
|
232
|
+
"purple" => [128, 0, 128],
|
233
|
+
"red" => [255, 0, 0],
|
234
|
+
"rosybrown" => [188, 143, 143],
|
235
|
+
"royalblue" => [65, 105, 225],
|
236
|
+
"saddlebrown" => [139, 69, 19],
|
237
|
+
"salmon" => [250, 128, 114],
|
238
|
+
"sandybrown" => [244, 164, 96],
|
239
|
+
"seagreen" => [46, 139, 87],
|
240
|
+
"seashell" => [255, 245, 238],
|
241
|
+
"sienna" => [160, 82, 45],
|
242
|
+
"silver" => [192, 192, 192],
|
243
|
+
"skyblue" => [135, 206, 235],
|
244
|
+
"slateblue" => [106, 90, 205],
|
245
|
+
"slategray" => [112, 128, 144],
|
246
|
+
"slategrey" => [112, 128, 144],
|
247
|
+
"snow" => [255, 250, 250],
|
248
|
+
"springgreen" => [0, 255, 127],
|
249
|
+
"steelblue" => [70, 130, 180],
|
250
|
+
"tan" => [210, 180, 140],
|
251
|
+
"teal" => [0, 128, 128],
|
252
|
+
"thistle" => [216, 191, 216],
|
253
|
+
"tomato" => [255, 99, 71],
|
254
|
+
"turquoise" => [64, 224, 208],
|
255
|
+
"violet" => [238, 130, 238],
|
256
|
+
"wheat" => [245, 222, 179],
|
257
|
+
"white" => [255, 255, 255],
|
258
|
+
"whitesmoke" => [245, 245, 245],
|
259
|
+
"yellow" => [255, 255, 0],
|
260
|
+
"yellowgreen" => [154, 205, 50],
|
261
|
+
}.freeze
|
262
|
+
|
99
263
|
# :call-seq:
|
100
264
|
# ColorSpace.device_color_from_specification(gray) => color
|
101
265
|
# ColorSpace.device_color_from_specification(r, g, b) => color
|
@@ -111,14 +275,32 @@ module HexaPDF
|
|
111
275
|
# * Three numeric arguments specify an RGB color (see DeviceRGB::Color).
|
112
276
|
# * A string in the format "RRGGBB" where "RR" is the hexadecimal number for the red, "GG"
|
113
277
|
# for the green and "BB" for the blue color value also specifies an RGB color.
|
278
|
+
# * As does a string in the format "RGB" where "RR", "GG" and "BB" would be used as the
|
279
|
+
# hexadecimal numbers for the red, green and blue color values of an RGB color.
|
280
|
+
# * Any other string is treated as a CSS Color Module Level 3 color name, see
|
281
|
+
# https://www.w3.org/TR/css-color-3/#svg-color.
|
114
282
|
# * Four numeric arguments specify a CMYK color (see DeviceCMYK::Color).
|
115
283
|
# * An array is treated as if its items were specified separately as arguments.
|
116
284
|
#
|
117
285
|
# Note that it makes a difference whether integer or float values are used because the given
|
118
|
-
# values are first normalized
|
286
|
+
# values are first normalized (expected range by the PDF specification is 0.0 - 1.0) - see
|
287
|
+
# DeviceGray#color, DeviceRGB#color and DeviceCMYK#color for details.
|
288
|
+
#
|
289
|
+
# For examples see HexaPDF::Content::Canvas#stroke_color.
|
119
290
|
def self.device_color_from_specification(*spec)
|
120
291
|
spec.flatten!
|
121
|
-
|
292
|
+
first_item = spec[0]
|
293
|
+
if spec.length == 1 && first_item.kind_of?(String)
|
294
|
+
spec = if first_item.match?(/\A\h{6}\z/)
|
295
|
+
first_item.scan(/../).map!(&:hex)
|
296
|
+
elsif first_item.match?(/\A\h{3}\z/)
|
297
|
+
first_item.each_char.map {|x| (x*2).hex}
|
298
|
+
elsif CSS_COLOR_NAMES.key?(first_item)
|
299
|
+
CSS_COLOR_NAMES[first_item]
|
300
|
+
else
|
301
|
+
raise ArgumentError, "Given string is neither a hex color nor a color name"
|
302
|
+
end
|
303
|
+
end
|
122
304
|
GlobalConfiguration.constantize('color_space.map', for_components(spec)).new.color(*spec)
|
123
305
|
end
|
124
306
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -40,11 +40,20 @@ module HexaPDF
|
|
40
40
|
module Content
|
41
41
|
module GraphicObject
|
42
42
|
|
43
|
-
# This class describes an elliptical in center parameterization
|
43
|
+
# This class describes an elliptical arc in center parameterization that is approximated using
|
44
44
|
# Bezier curves. It can be used to draw circles, circular arcs, ellipses and elliptical arcs,
|
45
45
|
# all either in clockwise or counterclockwise direction and optionally inclined in respect to
|
46
46
|
# the x-axis.
|
47
47
|
#
|
48
|
+
# This graphic object is registered under the :arc key for use with the
|
49
|
+
# HexaPDF::Content::Canvas class.
|
50
|
+
#
|
51
|
+
# Examples:
|
52
|
+
#
|
53
|
+
# #>pdf-center
|
54
|
+
# arc = canvas.graphic_object(:arc, a: 100, b: 50).stroke
|
55
|
+
# arc.draw(canvas).stroke # or: canvas.draw(arc).stroke
|
56
|
+
#
|
48
57
|
# See: ELL - https://spaceroots.org/documents/ellipse/elliptical-arc.pdf
|
49
58
|
class Arc
|
50
59
|
|
@@ -62,36 +71,111 @@ module HexaPDF
|
|
62
71
|
# The higher the value the better the approximation will be but it will also take longer
|
63
72
|
# to compute. The value should not be lower than 4. Default value is 6 which already
|
64
73
|
# provides a good approximation.
|
74
|
+
#
|
75
|
+
# Examples:
|
76
|
+
#
|
77
|
+
# #>pdf-center
|
78
|
+
# arc = canvas.graphic_object(:arc, cx: -50, a: 40, b: 40)
|
79
|
+
# arc.max_curves = 2
|
80
|
+
# canvas.draw(arc)
|
81
|
+
# arc.max_curves = 10
|
82
|
+
# canvas.draw(arc, cx: 50)
|
83
|
+
# canvas.stroke
|
65
84
|
attr_accessor :max_curves
|
66
85
|
|
67
86
|
# x-coordinate of center point
|
87
|
+
#
|
88
|
+
# Examples:
|
89
|
+
#
|
90
|
+
# #>pdf-center
|
91
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 20)
|
92
|
+
# canvas.draw(arc).stroke
|
93
|
+
# canvas.stroke_color("red").draw(arc, cx: -50).stroke
|
68
94
|
attr_reader :cx
|
69
95
|
|
70
96
|
# y-coordinate of center point
|
97
|
+
#
|
98
|
+
# Examples:
|
99
|
+
#
|
100
|
+
# #>pdf-center
|
101
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 20)
|
102
|
+
# canvas.draw(arc).stroke
|
103
|
+
# canvas.stroke_color("red").draw(arc, cy: 50).stroke
|
71
104
|
attr_reader :cy
|
72
105
|
|
73
|
-
# Length of semi-major axis
|
106
|
+
# Length of semi-major axis which (without altering the #inclination) is parallel to the
|
107
|
+
# x-axis
|
108
|
+
#
|
109
|
+
# Examples:
|
110
|
+
#
|
111
|
+
# #>pdf-center
|
112
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
113
|
+
# canvas.draw(arc).stroke
|
114
|
+
# canvas.stroke_color("red").draw(arc, a: 60).stroke
|
74
115
|
attr_reader :a
|
75
116
|
|
76
|
-
# Length of semi-minor axis
|
117
|
+
# Length of semi-minor axis which (without altering the #inclination) is parallel to the
|
118
|
+
# y-axis
|
119
|
+
#
|
120
|
+
# Examples:
|
121
|
+
#
|
122
|
+
# #>pdf-center
|
123
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
124
|
+
# canvas.draw(arc).stroke
|
125
|
+
# canvas.stroke_color("red").draw(arc, b: 60).stroke
|
77
126
|
attr_reader :b
|
78
127
|
|
79
|
-
# Start angle in degrees
|
128
|
+
# Start angle of the arc in degrees
|
129
|
+
#
|
130
|
+
# Examples:
|
131
|
+
#
|
132
|
+
# #>pdf-center
|
133
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
134
|
+
# canvas.draw(arc, start_angle: 45).stroke
|
80
135
|
attr_reader :start_angle
|
81
136
|
|
82
|
-
# End angle in degrees
|
137
|
+
# End angle of the arc in degrees
|
138
|
+
#
|
139
|
+
# Examples:
|
140
|
+
#
|
141
|
+
# #>pdf-center
|
142
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
143
|
+
# canvas.draw(arc, end_angle: 160).stroke
|
83
144
|
attr_reader :end_angle
|
84
145
|
|
85
|
-
# Inclination in degrees of semi-major axis
|
146
|
+
# Inclination in degrees of the semi-major axis with respect to the x-axis
|
147
|
+
#
|
148
|
+
# Examples:
|
149
|
+
#
|
150
|
+
# #>pdf-center
|
151
|
+
# arc = canvas.graphic_object(:arc, a: 60, b: 30)
|
152
|
+
# canvas.draw(arc, inclination: 45).stroke
|
86
153
|
attr_reader :inclination
|
87
154
|
|
88
155
|
# Direction of arc - if +true+ in clockwise direction, else in counterclockwise direction
|
156
|
+
#
|
157
|
+
# This is needed when filling paths using the nonzero winding number rule to achieve
|
158
|
+
# different effects.
|
159
|
+
#
|
160
|
+
# Examples:
|
161
|
+
#
|
162
|
+
# #>pdf-center
|
163
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 40)
|
164
|
+
# canvas.draw(arc, cx: -50).draw(arc, cx: 50).
|
165
|
+
# draw(arc, cx: -50, b: 80).
|
166
|
+
# draw(arc, cx: 50, b: 80, clockwise: true).
|
167
|
+
# fill(:nonzero)
|
89
168
|
attr_reader :clockwise
|
90
169
|
|
91
170
|
# Creates an elliptical arc with default values (a counterclockwise unit circle at the
|
92
171
|
# origin).
|
172
|
+
#
|
173
|
+
# Examples:
|
174
|
+
#
|
175
|
+
# #>pdf-center
|
176
|
+
# canvas.draw(:arc).stroke
|
93
177
|
def initialize
|
94
|
-
@max_curves =
|
178
|
+
@max_curves = nil
|
95
179
|
@cx = @cy = 0
|
96
180
|
@a = @b = 1
|
97
181
|
@start_angle = 0
|
@@ -135,11 +219,25 @@ module HexaPDF
|
|
135
219
|
end
|
136
220
|
|
137
221
|
# Returns the start point of the elliptical arc.
|
222
|
+
#
|
223
|
+
# Examples:
|
224
|
+
#
|
225
|
+
# #>pdf-center
|
226
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 30, start_angle: 60)
|
227
|
+
# canvas.draw(arc).stroke
|
228
|
+
# canvas.fill_color("red").circle(*arc.start_point, 2).fill
|
138
229
|
def start_point
|
139
230
|
evaluate(@start_eta)
|
140
231
|
end
|
141
232
|
|
142
233
|
# Returns the end point of the elliptical arc.
|
234
|
+
#
|
235
|
+
# Examples:
|
236
|
+
#
|
237
|
+
# #>pdf-center
|
238
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 30, end_angle: 245)
|
239
|
+
# canvas.draw(arc).stroke
|
240
|
+
# canvas.fill_color("red").circle(*arc.end_point, 2).fill
|
143
241
|
def end_point
|
144
242
|
evaluate(@end_eta)
|
145
243
|
end
|
@@ -157,10 +255,10 @@ module HexaPDF
|
|
157
255
|
# move the current point to the start point of the arc. Otherwise it is assumed that the
|
158
256
|
# current point already coincides with the start point
|
159
257
|
#
|
160
|
-
# The #max_curves value is set to the value of the configuration
|
161
|
-
# 'graphic_object.arc.max_curves' before drawing.
|
258
|
+
# The #max_curves value, if not already changed, is set to the value of the configuration
|
259
|
+
# option 'graphic_object.arc.max_curves' before drawing.
|
162
260
|
def draw(canvas, move_to_start: true)
|
163
|
-
@max_curves
|
261
|
+
@max_curves ||= canvas.context.document.config['graphic_object.arc.max_curves']
|
164
262
|
canvas.move_to(*start_point) if move_to_start
|
165
263
|
curves.each {|x, y, hash| canvas.curve_to(x, y, **hash) }
|
166
264
|
end
|
@@ -183,7 +281,8 @@ module HexaPDF
|
|
183
281
|
result = []
|
184
282
|
|
185
283
|
# Number of curves to use, maximal segment angle is 2*PI/max_curves
|
186
|
-
|
284
|
+
max_curves = @max_curves || 6
|
285
|
+
n = [max_curves, ((@end_eta - @start_eta).abs / (2 * Math::PI / max_curves)).ceil].min
|
187
286
|
d_eta = (@end_eta - @start_eta) / n
|
188
287
|
|
189
288
|
alpha = Math.sin(d_eta) * (Math.sqrt(4 + 3 * Math.tan(d_eta / 2)**2) - 1) / 3
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -43,6 +43,15 @@ module HexaPDF
|
|
43
43
|
# This class describes an elliptical arc in endpoint parameterization. It allows one to
|
44
44
|
# generate an arc from the current point to a given point, similar to Content::Canvas#line_to.
|
45
45
|
#
|
46
|
+
# This graphic object is registered under the :endpoint_arc key for use with the
|
47
|
+
# HexaPDF::Content::Canvas class.
|
48
|
+
#
|
49
|
+
# Examples:
|
50
|
+
#
|
51
|
+
# #>pdf-center
|
52
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 10).stroke
|
53
|
+
# arc.move_to(0, 0).draw(canvas).stroke # or: canvas.draw(arc).stroke
|
54
|
+
#
|
46
55
|
# See: GraphicObject::Arc, ARC - https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
|
47
56
|
class EndpointArc
|
48
57
|
|
@@ -58,29 +67,86 @@ module HexaPDF
|
|
58
67
|
end
|
59
68
|
|
60
69
|
# x-coordinate of endpoint
|
70
|
+
#
|
71
|
+
# Examples:
|
72
|
+
#
|
73
|
+
# #>pdf-center
|
74
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
75
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
76
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, x: -50).stroke
|
61
77
|
attr_reader :x
|
62
78
|
|
63
79
|
# y-coordinate of endpoint
|
80
|
+
#
|
81
|
+
# Examples:
|
82
|
+
#
|
83
|
+
# #>pdf-center
|
84
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
85
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
86
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, y: -20).stroke
|
64
87
|
attr_reader :y
|
65
88
|
|
66
89
|
# Length of semi-major axis
|
90
|
+
#
|
91
|
+
# Examples:
|
92
|
+
#
|
93
|
+
# #>pdf-center
|
94
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
95
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
96
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, a: 40).stroke
|
67
97
|
attr_reader :a
|
68
98
|
|
69
99
|
# Length of semi-minor axis
|
100
|
+
#
|
101
|
+
# Examples:
|
102
|
+
#
|
103
|
+
# #>pdf-center
|
104
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
105
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
106
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, b: 50).stroke
|
70
107
|
attr_reader :b
|
71
108
|
|
72
109
|
# Inclination in degrees of semi-major axis in respect to x-axis
|
110
|
+
#
|
111
|
+
# Examples:
|
112
|
+
#
|
113
|
+
# #>pdf-center
|
114
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
115
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
116
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, inclination: 45).stroke
|
73
117
|
attr_reader :inclination
|
74
118
|
|
75
119
|
# Large arc choice - if +true+ use the large arc (i.e. the one spanning more than 180
|
76
120
|
# degrees), else the small arc
|
121
|
+
#
|
122
|
+
# Examples:
|
123
|
+
#
|
124
|
+
# #>pdf-center
|
125
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
126
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
127
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, large_arc: false, clockwise: true).stroke
|
77
128
|
attr_reader :large_arc
|
78
129
|
|
79
130
|
# Direction of arc - if +true+ in clockwise direction, else in counterclockwise direction
|
131
|
+
#
|
132
|
+
# This is needed, for example, when filling paths using the nonzero winding number rule to achieve
|
133
|
+
# different effects.
|
134
|
+
#
|
135
|
+
# Examples:
|
136
|
+
#
|
137
|
+
# #>pdf-center
|
138
|
+
# arc = canvas.graphic_object(:endpoint_arc, x: 50, y: 20, a: 30, b: 20)
|
139
|
+
# canvas.move_to(0, 0).draw(arc).stroke
|
140
|
+
# canvas.stroke_color("red").move_to(0, 0).draw(arc, clockwise: true).stroke
|
80
141
|
attr_reader :clockwise
|
81
142
|
|
82
143
|
# Creates an endpoint arc with default values x=0, y=0, a=0, b=0, inclination=0,
|
83
144
|
# large_arc=true, clockwise=false (a line to the origin).
|
145
|
+
#
|
146
|
+
# Examples:
|
147
|
+
#
|
148
|
+
# #>pdf-center
|
149
|
+
# canvas.move_to(30, 30).draw(:endpoint_arc).stroke
|
84
150
|
def initialize
|
85
151
|
@x = @y = 0
|
86
152
|
@a = @b = 0
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -57,9 +57,22 @@ module HexaPDF
|
|
57
57
|
attr_accessor :object
|
58
58
|
|
59
59
|
# The radius to use when drawing Geom2D::Point objects; defaults to 1
|
60
|
+
#
|
61
|
+
# Examples:
|
62
|
+
#
|
63
|
+
# #>pdf-center
|
64
|
+
# canvas.draw(:geom2d, object: ::Geom2D::Point(0, 0))
|
65
|
+
# canvas.draw(:geom2d, object: ::Geom2D::Point(50, 0), point_radius: 5)
|
60
66
|
attr_accessor :point_radius
|
61
67
|
|
62
68
|
# Specifies whether only paths should be drawn or if they should be stroked/filled too
|
69
|
+
# (default).
|
70
|
+
#
|
71
|
+
# Examples:
|
72
|
+
#
|
73
|
+
# #>pdf-center
|
74
|
+
# canvas.draw(:geom2d, object: ::Geom2D::Segment([0, 0], [0, 50]))
|
75
|
+
# canvas.draw(:geom2d, object: ::Geom2D::Segment([0, 0], [50, 0]), path_only: true)
|
63
76
|
attr_accessor :path_only
|
64
77
|
|
65
78
|
# Creates a Geom2D drawing support object.
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/content.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/data_dir.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/dictionary.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|