hexapdf 0.37.1 → 0.37.2

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 (253) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/LICENSE +1 -1
  4. data/lib/hexapdf/cli/batch.rb +1 -1
  5. data/lib/hexapdf/cli/command.rb +1 -1
  6. data/lib/hexapdf/cli/files.rb +1 -1
  7. data/lib/hexapdf/cli/fonts.rb +1 -1
  8. data/lib/hexapdf/cli/form.rb +1 -1
  9. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  10. data/lib/hexapdf/cli/images.rb +1 -1
  11. data/lib/hexapdf/cli/info.rb +1 -1
  12. data/lib/hexapdf/cli/inspect.rb +1 -1
  13. data/lib/hexapdf/cli/merge.rb +1 -1
  14. data/lib/hexapdf/cli/modify.rb +1 -1
  15. data/lib/hexapdf/cli/optimize.rb +1 -1
  16. data/lib/hexapdf/cli/split.rb +1 -1
  17. data/lib/hexapdf/cli/watermark.rb +1 -1
  18. data/lib/hexapdf/cli.rb +1 -1
  19. data/lib/hexapdf/composer.rb +1 -1
  20. data/lib/hexapdf/configuration.rb +3 -4
  21. data/lib/hexapdf/content/canvas.rb +2 -2
  22. data/lib/hexapdf/content/canvas_composer.rb +1 -1
  23. data/lib/hexapdf/content/color_space.rb +1 -1
  24. data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
  25. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  26. data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
  27. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  28. data/lib/hexapdf/content/graphic_object.rb +1 -1
  29. data/lib/hexapdf/content/graphics_state.rb +1 -1
  30. data/lib/hexapdf/content/operator.rb +1 -1
  31. data/lib/hexapdf/content/parser.rb +1 -1
  32. data/lib/hexapdf/content/processor.rb +4 -4
  33. data/lib/hexapdf/content/transformation_matrix.rb +3 -3
  34. data/lib/hexapdf/content.rb +1 -1
  35. data/lib/hexapdf/data_dir.rb +1 -1
  36. data/lib/hexapdf/dictionary.rb +1 -1
  37. data/lib/hexapdf/dictionary_fields.rb +1 -1
  38. data/lib/hexapdf/digital_signature/cms_handler.rb +1 -2
  39. data/lib/hexapdf/digital_signature/handler.rb +1 -1
  40. data/lib/hexapdf/digital_signature/pkcs1_handler.rb +1 -1
  41. data/lib/hexapdf/digital_signature/signature.rb +2 -2
  42. data/lib/hexapdf/digital_signature/signatures.rb +1 -1
  43. data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -1
  44. data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +1 -1
  45. data/lib/hexapdf/digital_signature/signing/timestamp_handler.rb +1 -1
  46. data/lib/hexapdf/digital_signature/signing.rb +1 -1
  47. data/lib/hexapdf/digital_signature/verification_result.rb +1 -1
  48. data/lib/hexapdf/digital_signature.rb +1 -1
  49. data/lib/hexapdf/document/destinations.rb +1 -1
  50. data/lib/hexapdf/document/files.rb +1 -1
  51. data/lib/hexapdf/document/fonts.rb +1 -1
  52. data/lib/hexapdf/document/images.rb +1 -1
  53. data/lib/hexapdf/document/layout.rb +1 -1
  54. data/lib/hexapdf/document/metadata.rb +14 -13
  55. data/lib/hexapdf/document/pages.rb +1 -1
  56. data/lib/hexapdf/document.rb +1 -1
  57. data/lib/hexapdf/encryption/aes.rb +1 -1
  58. data/lib/hexapdf/encryption/arc4.rb +1 -1
  59. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  60. data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
  61. data/lib/hexapdf/encryption/identity.rb +1 -1
  62. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  63. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  64. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  65. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  66. data/lib/hexapdf/encryption.rb +1 -1
  67. data/lib/hexapdf/error.rb +1 -1
  68. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  69. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  70. data/lib/hexapdf/filter/crypt.rb +1 -1
  71. data/lib/hexapdf/filter/encryption.rb +1 -1
  72. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  73. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  74. data/lib/hexapdf/filter/pass_through.rb +1 -1
  75. data/lib/hexapdf/filter/predictor.rb +1 -1
  76. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  77. data/lib/hexapdf/filter.rb +1 -1
  78. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  79. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  80. data/lib/hexapdf/font/cmap.rb +1 -1
  81. data/lib/hexapdf/font/encoding/base.rb +1 -1
  82. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  83. data/lib/hexapdf/font/encoding/glyph_list.rb +2 -2
  84. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  85. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  86. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  87. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  88. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  89. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  90. data/lib/hexapdf/font/encoding.rb +1 -1
  91. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  92. data/lib/hexapdf/font/true_type/builder.rb +2 -2
  93. data/lib/hexapdf/font/true_type/font.rb +1 -1
  94. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  95. data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
  96. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  97. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  98. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  99. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  100. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  101. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  102. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  103. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  104. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  105. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  106. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  107. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  108. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  109. data/lib/hexapdf/font/true_type/table.rb +1 -1
  110. data/lib/hexapdf/font/true_type.rb +1 -1
  111. data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
  112. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  113. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  114. data/lib/hexapdf/font/type1/font.rb +2 -2
  115. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  116. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  117. data/lib/hexapdf/font/type1.rb +1 -1
  118. data/lib/hexapdf/font/type1_wrapper.rb +2 -2
  119. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  120. data/lib/hexapdf/font_loader/from_file.rb +1 -1
  121. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  122. data/lib/hexapdf/font_loader.rb +1 -1
  123. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  124. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  125. data/lib/hexapdf/image_loader/png.rb +1 -1
  126. data/lib/hexapdf/image_loader.rb +1 -1
  127. data/lib/hexapdf/importer.rb +1 -1
  128. data/lib/hexapdf/layout/box.rb +4 -4
  129. data/lib/hexapdf/layout/box_fitter.rb +1 -1
  130. data/lib/hexapdf/layout/column_box.rb +1 -1
  131. data/lib/hexapdf/layout/container_box.rb +4 -4
  132. data/lib/hexapdf/layout/frame.rb +1 -1
  133. data/lib/hexapdf/layout/image_box.rb +1 -1
  134. data/lib/hexapdf/layout/inline_box.rb +1 -1
  135. data/lib/hexapdf/layout/line.rb +1 -1
  136. data/lib/hexapdf/layout/list_box.rb +4 -6
  137. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  138. data/lib/hexapdf/layout/page_style.rb +1 -1
  139. data/lib/hexapdf/layout/style.rb +1 -1
  140. data/lib/hexapdf/layout/table_box.rb +4 -4
  141. data/lib/hexapdf/layout/text_box.rb +1 -1
  142. data/lib/hexapdf/layout/text_fragment.rb +1 -1
  143. data/lib/hexapdf/layout/text_layouter.rb +1 -1
  144. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  145. data/lib/hexapdf/layout/width_from_polygon.rb +1 -1
  146. data/lib/hexapdf/layout.rb +1 -1
  147. data/lib/hexapdf/name_tree_node.rb +1 -1
  148. data/lib/hexapdf/number_tree_node.rb +1 -1
  149. data/lib/hexapdf/object.rb +3 -3
  150. data/lib/hexapdf/parser.rb +1 -1
  151. data/lib/hexapdf/pdf_array.rb +1 -1
  152. data/lib/hexapdf/rectangle.rb +1 -1
  153. data/lib/hexapdf/reference.rb +1 -1
  154. data/lib/hexapdf/revision.rb +1 -1
  155. data/lib/hexapdf/revisions.rb +1 -1
  156. data/lib/hexapdf/serializer.rb +1 -1
  157. data/lib/hexapdf/stream.rb +1 -1
  158. data/lib/hexapdf/task/dereference.rb +1 -1
  159. data/lib/hexapdf/task/optimize.rb +1 -1
  160. data/lib/hexapdf/task.rb +1 -1
  161. data/lib/hexapdf/test_utils.rb +1 -1
  162. data/lib/hexapdf/tokenizer.rb +1 -1
  163. data/lib/hexapdf/type/acro_form/appearance_generator.rb +5 -5
  164. data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
  165. data/lib/hexapdf/type/acro_form/choice_field.rb +12 -2
  166. data/lib/hexapdf/type/acro_form/field.rb +1 -1
  167. data/lib/hexapdf/type/acro_form/form.rb +2 -1
  168. data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
  169. data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
  170. data/lib/hexapdf/type/acro_form/variable_text_field.rb +8 -5
  171. data/lib/hexapdf/type/acro_form.rb +1 -1
  172. data/lib/hexapdf/type/action.rb +1 -1
  173. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  174. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  175. data/lib/hexapdf/type/actions/launch.rb +1 -1
  176. data/lib/hexapdf/type/actions/set_ocg_state.rb +1 -1
  177. data/lib/hexapdf/type/actions/uri.rb +1 -1
  178. data/lib/hexapdf/type/actions.rb +1 -1
  179. data/lib/hexapdf/type/annotation.rb +2 -2
  180. data/lib/hexapdf/type/annotations/link.rb +1 -1
  181. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  182. data/lib/hexapdf/type/annotations/text.rb +1 -1
  183. data/lib/hexapdf/type/annotations/widget.rb +1 -1
  184. data/lib/hexapdf/type/annotations.rb +1 -1
  185. data/lib/hexapdf/type/catalog.rb +1 -1
  186. data/lib/hexapdf/type/cid_font.rb +1 -1
  187. data/lib/hexapdf/type/embedded_file.rb +1 -1
  188. data/lib/hexapdf/type/file_specification.rb +1 -1
  189. data/lib/hexapdf/type/font.rb +1 -1
  190. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  191. data/lib/hexapdf/type/font_simple.rb +1 -1
  192. data/lib/hexapdf/type/font_true_type.rb +1 -1
  193. data/lib/hexapdf/type/font_type0.rb +2 -2
  194. data/lib/hexapdf/type/font_type1.rb +1 -1
  195. data/lib/hexapdf/type/font_type3.rb +1 -1
  196. data/lib/hexapdf/type/form.rb +16 -16
  197. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  198. data/lib/hexapdf/type/icon_fit.rb +1 -1
  199. data/lib/hexapdf/type/image.rb +1 -1
  200. data/lib/hexapdf/type/info.rb +1 -1
  201. data/lib/hexapdf/type/mark_information.rb +1 -1
  202. data/lib/hexapdf/type/metadata.rb +1 -1
  203. data/lib/hexapdf/type/names.rb +1 -1
  204. data/lib/hexapdf/type/object_stream.rb +1 -1
  205. data/lib/hexapdf/type/optional_content_configuration.rb +5 -5
  206. data/lib/hexapdf/type/optional_content_group.rb +17 -1
  207. data/lib/hexapdf/type/optional_content_membership.rb +1 -1
  208. data/lib/hexapdf/type/optional_content_properties.rb +1 -2
  209. data/lib/hexapdf/type/outline.rb +1 -1
  210. data/lib/hexapdf/type/outline_item.rb +1 -1
  211. data/lib/hexapdf/type/page.rb +30 -15
  212. data/lib/hexapdf/type/page_label.rb +1 -1
  213. data/lib/hexapdf/type/page_tree_node.rb +1 -1
  214. data/lib/hexapdf/type/resources.rb +1 -1
  215. data/lib/hexapdf/type/trailer.rb +1 -1
  216. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  217. data/lib/hexapdf/type/xref_stream.rb +1 -1
  218. data/lib/hexapdf/type.rb +1 -1
  219. data/lib/hexapdf/utils/bit_field.rb +1 -1
  220. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  221. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  222. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  223. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  224. data/lib/hexapdf/utils/object_hash.rb +1 -1
  225. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  226. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  227. data/lib/hexapdf/utils.rb +3 -3
  228. data/lib/hexapdf/version.rb +2 -2
  229. data/lib/hexapdf/writer.rb +1 -1
  230. data/lib/hexapdf/xref_section.rb +1 -1
  231. data/lib/hexapdf.rb +1 -1
  232. data/test/hexapdf/content/test_canvas.rb +1 -1
  233. data/test/hexapdf/digital_signature/common.rb +1 -1
  234. data/test/hexapdf/document/test_layout.rb +2 -2
  235. data/test/hexapdf/document/test_metadata.rb +28 -28
  236. data/test/hexapdf/encryption/test_standard_security_handler.rb +9 -9
  237. data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +2 -2
  238. data/test/hexapdf/font/true_type/table/test_name.rb +5 -5
  239. data/test/hexapdf/layout/test_box.rb +2 -2
  240. data/test/hexapdf/layout/test_column_box.rb +5 -5
  241. data/test/hexapdf/layout/test_frame.rb +4 -5
  242. data/test/hexapdf/layout/test_text_fragment.rb +1 -1
  243. data/test/hexapdf/layout/test_text_shaper.rb +2 -2
  244. data/test/hexapdf/test_composer.rb +1 -1
  245. data/test/hexapdf/test_utils.rb +1 -1
  246. data/test/hexapdf/test_writer.rb +2 -2
  247. data/test/hexapdf/type/acro_form/test_choice_field.rb +7 -0
  248. data/test/hexapdf/type/acro_form/test_form.rb +6 -0
  249. data/test/hexapdf/type/acro_form/test_variable_text_field.rb +12 -0
  250. data/test/hexapdf/type/test_annotation.rb +1 -1
  251. data/test/hexapdf/type/test_optional_content_group.rb +2 -2
  252. data/test/hexapdf/type/test_page.rb +67 -38
  253. 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-2023 Thomas Leitner
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
- if array[index + 1].kind_of?(Array) || array[index + 1].kind_of?(PDFArray)
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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
 
@@ -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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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".to_sym] = rectangle
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
- case type
237
- when :media then self[:MediaBox]
238
- when :crop then self[:CropBox] || self[:MediaBox]
239
- when :bleed then self[:BleedBox] || self[:CropBox] || self[:MediaBox]
240
- when :trim then self[:TrimBox] || self[:CropBox] || self[:MediaBox]
241
- when :art then self[:ArtBox] || self[:CropBox] || self[:MediaBox]
242
- else
243
- raise ArgumentError, "Unsupported page box type provided: #{type}"
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, -box.bottom, box.right)
295
- when 180 then Content::TransformationMatrix.new(-1, 0, 0, -1, box.right, box.top)
296
- when 270 then Content::TransformationMatrix.new(0, 1, -1, 0, box.top, -box.left)
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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.
@@ -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-2023 Thomas Leitner
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.1'
40
+ VERSION = '0.37.2'
41
41
 
42
42
  end
@@ -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-2023 Thomas Leitner
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-2023 Thomas Leitner
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-2023 Thomas Leitner
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 (@tsr.policy_id || '1.2.3.4.0')
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, invalid_glyph|
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
- properties: {key: :value})
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
- <?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"?>
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