hexapdf 0.37.1 → 0.37.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 +17 -0
- data/LICENSE +1 -1
- data/lib/hexapdf/cli/batch.rb +1 -1
- data/lib/hexapdf/cli/command.rb +1 -1
- data/lib/hexapdf/cli/files.rb +1 -1
- data/lib/hexapdf/cli/fonts.rb +1 -1
- data/lib/hexapdf/cli/form.rb +1 -1
- data/lib/hexapdf/cli/image2pdf.rb +1 -1
- data/lib/hexapdf/cli/images.rb +1 -1
- 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 +1 -1
- data/lib/hexapdf/composer.rb +1 -1
- data/lib/hexapdf/configuration.rb +3 -4
- data/lib/hexapdf/content/canvas.rb +2 -2
- data/lib/hexapdf/content/canvas_composer.rb +1 -1
- data/lib/hexapdf/content/color_space.rb +1 -1
- data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
- data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
- data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -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 +4 -4
- data/lib/hexapdf/content/transformation_matrix.rb +3 -3
- 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 +1 -1
- data/lib/hexapdf/digital_signature/cms_handler.rb +1 -2
- data/lib/hexapdf/digital_signature/handler.rb +1 -1
- data/lib/hexapdf/digital_signature/pkcs1_handler.rb +1 -1
- data/lib/hexapdf/digital_signature/signature.rb +2 -2
- data/lib/hexapdf/digital_signature/signatures.rb +1 -1
- data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -1
- data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +1 -1
- data/lib/hexapdf/digital_signature/signing/timestamp_handler.rb +1 -1
- data/lib/hexapdf/digital_signature/signing.rb +1 -1
- data/lib/hexapdf/digital_signature/verification_result.rb +1 -1
- data/lib/hexapdf/digital_signature.rb +1 -1
- data/lib/hexapdf/document/destinations.rb +1 -1
- data/lib/hexapdf/document/files.rb +1 -1
- data/lib/hexapdf/document/fonts.rb +1 -1
- data/lib/hexapdf/document/images.rb +1 -1
- data/lib/hexapdf/document/layout.rb +1 -1
- data/lib/hexapdf/document/metadata.rb +14 -13
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 -4
- data/lib/hexapdf/layout/box_fitter.rb +1 -1
- data/lib/hexapdf/layout/column_box.rb +1 -1
- data/lib/hexapdf/layout/container_box.rb +4 -4
- 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/list_box.rb +4 -6
- data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
- data/lib/hexapdf/layout/page_style.rb +1 -1
- data/lib/hexapdf/layout/style.rb +1 -1
- data/lib/hexapdf/layout/table_box.rb +4 -4
- 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 +1 -1
- 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 +3 -3
- 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/test_utils.rb +1 -1
- data/lib/hexapdf/tokenizer.rb +1 -1
- data/lib/hexapdf/type/acro_form/appearance_generator.rb +5 -5
- data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
- data/lib/hexapdf/type/acro_form/choice_field.rb +12 -2
- data/lib/hexapdf/type/acro_form/field.rb +1 -1
- data/lib/hexapdf/type/acro_form/form.rb +2 -1
- data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
- data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
- data/lib/hexapdf/type/acro_form/variable_text_field.rb +8 -5
- 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/set_ocg_state.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 +2 -2
- 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 +1 -1
- 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 +2 -2
- data/lib/hexapdf/type/font_type1.rb +1 -1
- data/lib/hexapdf/type/font_type3.rb +1 -1
- data/lib/hexapdf/type/form.rb +16 -16
- 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/mark_information.rb +1 -1
- data/lib/hexapdf/type/metadata.rb +1 -1
- data/lib/hexapdf/type/names.rb +1 -1
- data/lib/hexapdf/type/object_stream.rb +1 -1
- data/lib/hexapdf/type/optional_content_configuration.rb +5 -5
- data/lib/hexapdf/type/optional_content_group.rb +17 -1
- data/lib/hexapdf/type/optional_content_membership.rb +1 -1
- data/lib/hexapdf/type/optional_content_properties.rb +1 -2
- data/lib/hexapdf/type/outline.rb +1 -1
- data/lib/hexapdf/type/outline_item.rb +1 -1
- data/lib/hexapdf/type/page.rb +30 -15
- data/lib/hexapdf/type/page_label.rb +1 -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/utils.rb +3 -3
- 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/test_canvas.rb +1 -1
- data/test/hexapdf/digital_signature/common.rb +1 -1
- data/test/hexapdf/document/test_layout.rb +2 -2
- data/test/hexapdf/document/test_metadata.rb +28 -28
- data/test/hexapdf/encryption/test_standard_security_handler.rb +9 -9
- data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +2 -2
- data/test/hexapdf/font/true_type/table/test_name.rb +5 -5
- data/test/hexapdf/layout/test_box.rb +2 -2
- data/test/hexapdf/layout/test_column_box.rb +5 -5
- data/test/hexapdf/layout/test_frame.rb +4 -5
- data/test/hexapdf/layout/test_text_fragment.rb +1 -1
- data/test/hexapdf/layout/test_text_shaper.rb +2 -2
- data/test/hexapdf/test_composer.rb +1 -1
- data/test/hexapdf/test_utils.rb +1 -1
- data/test/hexapdf/test_writer.rb +2 -2
- data/test/hexapdf/type/acro_form/test_choice_field.rb +7 -0
- data/test/hexapdf/type/acro_form/test_form.rb +6 -0
- data/test/hexapdf/type/acro_form/test_variable_text_field.rb +12 -0
- data/test/hexapdf/type/test_annotation.rb +1 -1
- data/test/hexapdf/type/test_optional_content_group.rb +2 -2
- data/test/hexapdf/type/test_page.rb +67 -38
- metadata +2 -2
@@ -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-2024 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,10 +57,12 @@ module HexaPDF
|
|
57
57
|
#
|
58
58
|
# See: PDF2.0 s8.11.4.4
|
59
59
|
class UsageApplication < Dictionary
|
60
|
+
|
60
61
|
define_type :XXOCUsageApplication
|
61
62
|
define_field :Event, type: Symbol, required: true, allowed_values: [:View, :Print, :Export]
|
62
63
|
define_field :OCGs, type: PDFArray, default: []
|
63
64
|
define_field :Category, type: PDFArray, required: true
|
65
|
+
|
64
66
|
end
|
65
67
|
|
66
68
|
define_type :XXOCConfiguration
|
@@ -153,12 +155,10 @@ module HexaPDF
|
|
153
155
|
array << item << []
|
154
156
|
index = -2
|
155
157
|
end
|
156
|
-
|
157
|
-
array = array[index + 1]
|
158
|
-
else
|
158
|
+
unless array[index + 1].kind_of?(Array) || array[index + 1].kind_of?(PDFArray)
|
159
159
|
array.insert(index + 1, [])
|
160
|
-
array = array[index + 1]
|
161
160
|
end
|
161
|
+
array = array[index + 1]
|
162
162
|
end
|
163
163
|
end
|
164
164
|
array << ocg
|
@@ -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-2024 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
|
@@ -67,69 +67,85 @@ module HexaPDF
|
|
67
67
|
#
|
68
68
|
# See: PDF2.0 s8.11.4.4
|
69
69
|
class CreatorInfo < Dictionary
|
70
|
+
|
70
71
|
define_type :XXOCUsageCreatorInfo
|
71
72
|
define_field :Creator, type: String, required: true
|
72
73
|
define_field :Subtype, type: Symbol, required: true
|
74
|
+
|
73
75
|
end
|
74
76
|
|
75
77
|
# The dictionary used as value for the /Language key.
|
76
78
|
#
|
77
79
|
# See: PDF2.0 s8.11.4.4
|
78
80
|
class Language < Dictionary
|
81
|
+
|
79
82
|
define_type :XXOCUsageLanguage
|
80
83
|
define_field :Lang, type: String, required: true
|
81
84
|
define_field :Preferred, type: Symbol, default: :OFF, allowed_values: [:ON, :OFF]
|
85
|
+
|
82
86
|
end
|
83
87
|
|
84
88
|
# The dictionary used as value for the /Export key.
|
85
89
|
#
|
86
90
|
# See: PDF2.0 s8.11.4.4
|
87
91
|
class Export < Dictionary
|
92
|
+
|
88
93
|
define_type :XXOCUsageExport
|
89
94
|
define_field :ExportState, type: Symbol, required: true, allowed_values: [:ON, :OFF]
|
95
|
+
|
90
96
|
end
|
91
97
|
|
92
98
|
# The dictionary used as value for the /Zoom key.
|
93
99
|
#
|
94
100
|
# See: PDF2.0 s8.11.4.4
|
95
101
|
class Zoom < Dictionary
|
102
|
+
|
96
103
|
define_type :XXOCUsageZoom
|
97
104
|
define_field :min, type: Numeric, default: 0
|
98
105
|
define_field :max, type: Numeric
|
106
|
+
|
99
107
|
end
|
100
108
|
|
101
109
|
# The dictionary used as value for the /Print key.
|
102
110
|
#
|
103
111
|
# See: PDF2.0 s8.11.4.4
|
104
112
|
class Print < Dictionary
|
113
|
+
|
105
114
|
define_type :XXOCUsagePrint
|
106
115
|
define_field :Subtype, type: Symbol
|
107
116
|
define_field :PrintState, type: Symbol, allowed_values: [:ON, :OFF]
|
117
|
+
|
108
118
|
end
|
109
119
|
|
110
120
|
# The dictionary used as value for the /View key.
|
111
121
|
#
|
112
122
|
# See: PDF2.0 s8.11.4.4
|
113
123
|
class View < Dictionary
|
124
|
+
|
114
125
|
define_type :XXOCUsageView
|
115
126
|
define_field :ViewState, type: Symbol, required: true, allowed_values: [:ON, :OFF]
|
127
|
+
|
116
128
|
end
|
117
129
|
|
118
130
|
# The dictionary used as value for the /User key.
|
119
131
|
#
|
120
132
|
# See: PDF2.0 s8.11.4.4
|
121
133
|
class User < Dictionary
|
134
|
+
|
122
135
|
define_type :XXOCUsageUser
|
123
136
|
define_field :Type, type: Symbol, required: true, allowed_values: [:Ind, :Ttl, :Org]
|
124
137
|
define_field :Name, type: [String, PDFArray], required: true
|
138
|
+
|
125
139
|
end
|
126
140
|
|
127
141
|
# The dictionary used as value for the /PageElement key.
|
128
142
|
#
|
129
143
|
# See: PDF2.0 s8.11.4.4
|
130
144
|
class PageElement < Dictionary
|
145
|
+
|
131
146
|
define_type :XXOCUsagePageElement
|
132
147
|
define_field :Subtype, type: Symbol, required: true, allowed_values: [:HF, :FG, :BG, :L]
|
148
|
+
|
133
149
|
end
|
134
150
|
|
135
151
|
define_type :XXOCUsage
|
@@ -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-2024 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-2024 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
|
@@ -92,7 +92,6 @@ module HexaPDF
|
|
92
92
|
self[:OCGs].uniq.compact
|
93
93
|
end
|
94
94
|
|
95
|
-
|
96
95
|
OCMD_POLICY_MAPPING = {any_on: :AnyOn, AnyOn: :AnyOn, any_off: :AnyOff, # :nodoc:
|
97
96
|
AnyOff: :AnyOff, all_off: :AllOff, AllOff: :AllOff}
|
98
97
|
|
data/lib/hexapdf/type/outline.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-2024 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-2024 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/type/page.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-2024 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
|
@@ -34,6 +34,7 @@
|
|
34
34
|
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
35
35
|
#++
|
36
36
|
|
37
|
+
require 'set'
|
37
38
|
require 'hexapdf/error'
|
38
39
|
require 'hexapdf/dictionary'
|
39
40
|
require 'hexapdf/stream'
|
@@ -228,20 +229,33 @@ module HexaPDF
|
|
228
229
|
if rectangle
|
229
230
|
case type
|
230
231
|
when :media, :crop, :bleed, :trim, :art
|
231
|
-
self["#{type.capitalize}Box"
|
232
|
+
self[:"#{type.capitalize}Box"] = rectangle
|
232
233
|
else
|
233
234
|
raise ArgumentError, "Unsupported page box type provided: #{type}"
|
234
235
|
end
|
235
236
|
else
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
237
|
+
media_box = self[:MediaBox]
|
238
|
+
result = case type
|
239
|
+
when :media then media_box
|
240
|
+
when :crop then self[:CropBox] || media_box
|
241
|
+
when :bleed then self[:BleedBox] || self[:CropBox] || media_box
|
242
|
+
when :trim then self[:TrimBox] || self[:CropBox] || media_box
|
243
|
+
when :art then self[:ArtBox] || self[:CropBox] || media_box
|
244
|
+
else
|
245
|
+
raise ArgumentError, "Unsupported page box type provided: #{type}"
|
246
|
+
end
|
247
|
+
unless result == media_box
|
248
|
+
if result.right < media_box.left || result.left > media_box.right ||
|
249
|
+
result.top < media_box.bottom || result.bottom > media_box.top
|
250
|
+
result.value = [0, 0, 0, 0]
|
251
|
+
else
|
252
|
+
result.left = media_box.left if result.left < media_box.left
|
253
|
+
result.right = media_box.right if result.right > media_box.right
|
254
|
+
result.top = media_box.top if result.top > media_box.top
|
255
|
+
result.bottom = media_box.bottom if result.bottom < media_box.bottom
|
256
|
+
end
|
244
257
|
end
|
258
|
+
result
|
245
259
|
end
|
246
260
|
end
|
247
261
|
|
@@ -290,14 +304,15 @@ module HexaPDF
|
|
290
304
|
delete(:Rotate)
|
291
305
|
return if cw_angle == 0
|
292
306
|
|
307
|
+
pbox = box
|
293
308
|
matrix = case cw_angle
|
294
|
-
when 90 then Content::TransformationMatrix.new(0, -1, 1, 0, -
|
295
|
-
when 180 then Content::TransformationMatrix.new(-1, 0, 0, -1,
|
296
|
-
when 270 then Content::TransformationMatrix.new(0, 1, -1, 0,
|
309
|
+
when 90 then Content::TransformationMatrix.new(0, -1, 1, 0, -pbox.bottom, pbox.right)
|
310
|
+
when 180 then Content::TransformationMatrix.new(-1, 0, 0, -1, pbox.right, pbox.top)
|
311
|
+
when 270 then Content::TransformationMatrix.new(0, 1, -1, 0, pbox.top, -pbox.left)
|
297
312
|
end
|
298
313
|
|
299
314
|
rotate_box = lambda do |box|
|
300
|
-
llx, lly, urx, ury =
|
315
|
+
llx, lly, urx, ury =
|
301
316
|
case cw_angle
|
302
317
|
when 90 then [box.right, box.bottom, box.left, box.top]
|
303
318
|
when 180 then [box.right, box.top, box.left, box.bottom]
|
@@ -568,7 +583,7 @@ module HexaPDF
|
|
568
583
|
canvas.translate(-pos[0], -pos[1])
|
569
584
|
end
|
570
585
|
|
571
|
-
to_delete =
|
586
|
+
to_delete = Set.new
|
572
587
|
not_flattened -= annotations
|
573
588
|
annotations.each do |annotation|
|
574
589
|
unless annotation?(annotation)
|
@@ -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-2024 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-2024 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-2024 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/type/trailer.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-2024 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-2024 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-2024 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/type.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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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-2024 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/utils.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-2024 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
|
@@ -37,6 +37,8 @@
|
|
37
37
|
require 'geom2d/utils'
|
38
38
|
|
39
39
|
module HexaPDF
|
40
|
+
|
41
|
+
# This module contains helper methods for the whole library.
|
40
42
|
module Utils
|
41
43
|
|
42
44
|
# The precision with which to compare floating point numbers.
|
@@ -47,8 +49,6 @@ module HexaPDF
|
|
47
49
|
# Best effort of setting Geom2D's precision to the one used by HexaPDF.
|
48
50
|
::Geom2D::Utils.precision = EPSILON
|
49
51
|
|
50
|
-
module_function
|
51
|
-
|
52
52
|
private
|
53
53
|
|
54
54
|
# Compares two floats whether they are equal using the FLOAT_EPSILON precision.
|
data/lib/hexapdf/version.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-2024 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
|
@@ -37,6 +37,6 @@
|
|
37
37
|
module HexaPDF
|
38
38
|
|
39
39
|
# The version of HexaPDF.
|
40
|
-
VERSION = '0.37.
|
40
|
+
VERSION = '0.37.2'
|
41
41
|
|
42
42
|
end
|
data/lib/hexapdf/writer.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-2024 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/xref_section.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-2024 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.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-2024 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
|
@@ -1366,7 +1366,7 @@ describe HexaPDF::Content::Canvas do
|
|
1366
1366
|
end
|
1367
1367
|
end
|
1368
1368
|
|
1369
|
-
describe "color_from_specification "do
|
1369
|
+
describe "color_from_specification " do
|
1370
1370
|
it "accepts a color string" do
|
1371
1371
|
assert_equal([1, 0, 0], @canvas.color_from_specification("red").components)
|
1372
1372
|
end
|
@@ -129,7 +129,7 @@ module HexaPDF
|
|
129
129
|
Logger: WEBrick::Log.new(StringIO.new), AccessLog: [])
|
130
130
|
@tsa_server.mount_proc('/') do |request, response|
|
131
131
|
@tsr = OpenSSL::Timestamp::Request.new(request.body)
|
132
|
-
case
|
132
|
+
case @tsr.policy_id || '1.2.3.4.0'
|
133
133
|
when '1.2.3.4.0', '1.2.3.4.2'
|
134
134
|
fac = OpenSSL::Timestamp::Factory.new
|
135
135
|
fac.gen_time = Time.now
|
@@ -110,7 +110,7 @@ end
|
|
110
110
|
describe HexaPDF::Document::Layout do
|
111
111
|
before do
|
112
112
|
@doc = HexaPDF::Document.new
|
113
|
-
@doc.config['font.on_invalid_glyph'] = lambda do |codepoint,
|
113
|
+
@doc.config['font.on_invalid_glyph'] = lambda do |codepoint, _invalid_glyph|
|
114
114
|
[@doc.fonts.add('ZapfDingbats').decode_codepoint(codepoint)]
|
115
115
|
end
|
116
116
|
@layout = @doc.layout
|
@@ -267,7 +267,7 @@ describe HexaPDF::Document::Layout do
|
|
267
267
|
|
268
268
|
it "allows setting custom properties on the whole box" do
|
269
269
|
box = @layout.formatted_text_box([{text: "Test", properties: {key: :novalue}}],
|
270
|
-
|
270
|
+
properties: {key: :value})
|
271
271
|
assert_equal({key: :value}, box.properties)
|
272
272
|
end
|
273
273
|
|
@@ -149,34 +149,34 @@ describe HexaPDF::Document::Metadata do
|
|
149
149
|
@metadata.property('dc', 'other', 'https://test.org/example')
|
150
150
|
@doc.write(StringIO.new, update_fields: false)
|
151
151
|
metadata = <<~XMP
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
152
|
+
<?xpacket begin="" id=""?>
|
153
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
154
|
+
<rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
155
|
+
<dc:title><rdf:Alt>
|
156
|
+
<rdf:li xml:lang="en">Title</rdf:li>
|
157
|
+
<rdf:li xml:lang="de">Der Titel</rdf:li>
|
158
|
+
</rdf:Alt></dc:title>
|
159
|
+
<dc:creator><rdf:Seq>
|
160
|
+
<rdf:li>Author 1</rdf:li>
|
161
|
+
<rdf:li>Author 2</rdf:li>
|
162
|
+
</rdf:Seq></dc:creator>
|
163
|
+
<dc:description><rdf:Alt>
|
164
|
+
<rdf:li xml:lang="en">Subject</rdf:li>
|
165
|
+
</rdf:Alt></dc:description>
|
166
|
+
<dc:other rdf:resource="https://test.org/example" />
|
167
|
+
</rdf:Description>
|
168
|
+
<rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
|
169
|
+
<pdf:Keywords>Keywords</pdf:Keywords>
|
170
|
+
<pdf:Producer>Producer</pdf:Producer>
|
171
|
+
<pdf:Trapped>True</pdf:Trapped>
|
172
|
+
</rdf:Description>
|
173
|
+
<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
|
174
|
+
<xmp:CreatorTool>Creator</xmp:CreatorTool>
|
175
|
+
<xmp:CreateDate>#{@metadata.send(:xmp_date, @time)}</xmp:CreateDate>
|
176
|
+
<xmp:ModifyDate>#{@metadata.send(:xmp_date, @time)}</xmp:ModifyDate>
|
177
|
+
</rdf:Description>
|
178
|
+
</rdf:RDF>
|
179
|
+
<?xpacket end="r"?>
|
180
180
|
XMP
|
181
181
|
assert_equal(metadata, @doc.catalog[:Metadata].stream.sub(/(?<=id=")\w+/, ''))
|
182
182
|
end
|