hexapdf 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE +1 -1
  4. data/examples/009-text_layouter_alignment.rb +4 -0
  5. data/examples/010-text_layouter_inline_boxes.rb +4 -0
  6. data/examples/011-text_layouter_line_wrapping.rb +4 -0
  7. data/examples/012-text_layouter_styling.rb +9 -4
  8. data/examples/013-text_layouter_shapes.rb +5 -0
  9. data/examples/015-boxes.rb +3 -0
  10. data/examples/016-frame_automatic_box_placement.rb +3 -0
  11. data/examples/017-frame_text_flow.rb +3 -0
  12. data/examples/{028-frame_mask_mode.rb → 028-composer_mask_mode.rb} +3 -3
  13. data/lib/hexapdf/cli/batch.rb +1 -1
  14. data/lib/hexapdf/cli/command.rb +2 -2
  15. data/lib/hexapdf/cli/files.rb +1 -1
  16. data/lib/hexapdf/cli/fonts.rb +1 -1
  17. data/lib/hexapdf/cli/form.rb +1 -1
  18. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  19. data/lib/hexapdf/cli/images.rb +1 -1
  20. data/lib/hexapdf/cli/info.rb +1 -1
  21. data/lib/hexapdf/cli/inspect.rb +1 -1
  22. data/lib/hexapdf/cli/merge.rb +1 -1
  23. data/lib/hexapdf/cli/modify.rb +1 -1
  24. data/lib/hexapdf/cli/optimize.rb +1 -1
  25. data/lib/hexapdf/cli/split.rb +1 -1
  26. data/lib/hexapdf/cli/usage.rb +1 -1
  27. data/lib/hexapdf/cli/watermark.rb +1 -1
  28. data/lib/hexapdf/cli.rb +1 -1
  29. data/lib/hexapdf/composer.rb +1 -1
  30. data/lib/hexapdf/configuration.rb +6 -1
  31. data/lib/hexapdf/content/canvas.rb +1 -1
  32. data/lib/hexapdf/content/canvas_composer.rb +1 -1
  33. data/lib/hexapdf/content/color_space.rb +1 -1
  34. data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
  35. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  36. data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
  37. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  38. data/lib/hexapdf/content/graphic_object.rb +1 -1
  39. data/lib/hexapdf/content/graphics_state.rb +1 -1
  40. data/lib/hexapdf/content/operator.rb +1 -1
  41. data/lib/hexapdf/content/parser.rb +22 -25
  42. data/lib/hexapdf/content/processor.rb +1 -1
  43. data/lib/hexapdf/content/transformation_matrix.rb +1 -1
  44. data/lib/hexapdf/content.rb +1 -1
  45. data/lib/hexapdf/data_dir.rb +1 -1
  46. data/lib/hexapdf/dictionary.rb +1 -1
  47. data/lib/hexapdf/dictionary_fields.rb +1 -1
  48. data/lib/hexapdf/digital_signature/cms_handler.rb +1 -1
  49. data/lib/hexapdf/digital_signature/handler.rb +1 -1
  50. data/lib/hexapdf/digital_signature/pkcs1_handler.rb +1 -1
  51. data/lib/hexapdf/digital_signature/signature.rb +1 -1
  52. data/lib/hexapdf/digital_signature/signatures.rb +1 -1
  53. data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -1
  54. data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +1 -1
  55. data/lib/hexapdf/digital_signature/signing/timestamp_handler.rb +1 -1
  56. data/lib/hexapdf/digital_signature/signing.rb +1 -1
  57. data/lib/hexapdf/digital_signature/verification_result.rb +1 -1
  58. data/lib/hexapdf/digital_signature.rb +1 -1
  59. data/lib/hexapdf/document/destinations.rb +1 -1
  60. data/lib/hexapdf/document/files.rb +1 -1
  61. data/lib/hexapdf/document/fonts.rb +1 -1
  62. data/lib/hexapdf/document/images.rb +1 -1
  63. data/lib/hexapdf/document/layout.rb +1 -1
  64. data/lib/hexapdf/document/metadata.rb +1 -1
  65. data/lib/hexapdf/document/pages.rb +1 -1
  66. data/lib/hexapdf/document.rb +1 -1
  67. data/lib/hexapdf/encryption/aes.rb +1 -1
  68. data/lib/hexapdf/encryption/arc4.rb +1 -1
  69. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  70. data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
  71. data/lib/hexapdf/encryption/identity.rb +1 -1
  72. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  73. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  74. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  75. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  76. data/lib/hexapdf/encryption.rb +1 -1
  77. data/lib/hexapdf/error.rb +1 -1
  78. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  79. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  80. data/lib/hexapdf/filter/crypt.rb +1 -1
  81. data/lib/hexapdf/filter/encryption.rb +1 -1
  82. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  83. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  84. data/lib/hexapdf/filter/pass_through.rb +1 -1
  85. data/lib/hexapdf/filter/predictor.rb +1 -1
  86. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  87. data/lib/hexapdf/filter.rb +1 -1
  88. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  89. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  90. data/lib/hexapdf/font/cmap.rb +1 -1
  91. data/lib/hexapdf/font/encoding/base.rb +1 -1
  92. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  93. data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
  94. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  95. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  96. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  97. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  98. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  99. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  100. data/lib/hexapdf/font/encoding.rb +1 -1
  101. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  102. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  103. data/lib/hexapdf/font/true_type/font.rb +1 -1
  104. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  105. data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
  106. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  107. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  108. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  109. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  110. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  111. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  112. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  113. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  114. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  115. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  116. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  117. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  118. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  119. data/lib/hexapdf/font/true_type/table.rb +1 -1
  120. data/lib/hexapdf/font/true_type.rb +1 -1
  121. data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
  122. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  123. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  124. data/lib/hexapdf/font/type1/font.rb +1 -1
  125. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  126. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  127. data/lib/hexapdf/font/type1.rb +1 -1
  128. data/lib/hexapdf/font/type1_wrapper.rb +1 -1
  129. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  130. data/lib/hexapdf/font_loader/from_file.rb +1 -1
  131. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  132. data/lib/hexapdf/font_loader/variant_from_name.rb +1 -1
  133. data/lib/hexapdf/font_loader.rb +1 -1
  134. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  135. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  136. data/lib/hexapdf/image_loader/png.rb +1 -1
  137. data/lib/hexapdf/image_loader.rb +1 -1
  138. data/lib/hexapdf/importer.rb +1 -1
  139. data/lib/hexapdf/layout/box.rb +1 -1
  140. data/lib/hexapdf/layout/box_fitter.rb +1 -1
  141. data/lib/hexapdf/layout/column_box.rb +1 -1
  142. data/lib/hexapdf/layout/container_box.rb +1 -1
  143. data/lib/hexapdf/layout/frame.rb +1 -1
  144. data/lib/hexapdf/layout/image_box.rb +1 -1
  145. data/lib/hexapdf/layout/inline_box.rb +1 -1
  146. data/lib/hexapdf/layout/line.rb +1 -1
  147. data/lib/hexapdf/layout/list_box.rb +1 -1
  148. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  149. data/lib/hexapdf/layout/page_style.rb +1 -1
  150. data/lib/hexapdf/layout/style.rb +4 -2
  151. data/lib/hexapdf/layout/table_box.rb +9 -2
  152. data/lib/hexapdf/layout/text_box.rb +1 -1
  153. data/lib/hexapdf/layout/text_fragment.rb +11 -1
  154. data/lib/hexapdf/layout/text_layouter.rb +1 -1
  155. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  156. data/lib/hexapdf/layout/width_from_polygon.rb +1 -1
  157. data/lib/hexapdf/layout.rb +1 -1
  158. data/lib/hexapdf/name_tree_node.rb +1 -1
  159. data/lib/hexapdf/number_tree_node.rb +1 -1
  160. data/lib/hexapdf/object.rb +1 -1
  161. data/lib/hexapdf/parser.rb +1 -1
  162. data/lib/hexapdf/pdf_array.rb +1 -1
  163. data/lib/hexapdf/rectangle.rb +1 -1
  164. data/lib/hexapdf/reference.rb +1 -1
  165. data/lib/hexapdf/revision.rb +1 -1
  166. data/lib/hexapdf/revisions.rb +1 -1
  167. data/lib/hexapdf/serializer.rb +1 -1
  168. data/lib/hexapdf/stream.rb +1 -1
  169. data/lib/hexapdf/task/dereference.rb +1 -1
  170. data/lib/hexapdf/task/merge_acro_form.rb +1 -1
  171. data/lib/hexapdf/task/optimize.rb +1 -1
  172. data/lib/hexapdf/task/pdfa.rb +1 -1
  173. data/lib/hexapdf/task.rb +1 -1
  174. data/lib/hexapdf/test_utils.rb +1 -1
  175. data/lib/hexapdf/tokenizer.rb +49 -46
  176. data/lib/hexapdf/type/acro_form/appearance_generator.rb +1 -1
  177. data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
  178. data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
  179. data/lib/hexapdf/type/acro_form/field.rb +1 -1
  180. data/lib/hexapdf/type/acro_form/form.rb +1 -1
  181. data/lib/hexapdf/type/acro_form/java_script_actions.rb +1 -1
  182. data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
  183. data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
  184. data/lib/hexapdf/type/acro_form/variable_text_field.rb +1 -1
  185. data/lib/hexapdf/type/acro_form.rb +1 -1
  186. data/lib/hexapdf/type/action.rb +1 -1
  187. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  188. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  189. data/lib/hexapdf/type/actions/launch.rb +1 -1
  190. data/lib/hexapdf/type/actions/set_ocg_state.rb +1 -1
  191. data/lib/hexapdf/type/actions/uri.rb +1 -1
  192. data/lib/hexapdf/type/actions.rb +1 -1
  193. data/lib/hexapdf/type/annotation.rb +1 -1
  194. data/lib/hexapdf/type/annotations/link.rb +1 -1
  195. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  196. data/lib/hexapdf/type/annotations/text.rb +1 -1
  197. data/lib/hexapdf/type/annotations/widget.rb +1 -1
  198. data/lib/hexapdf/type/annotations.rb +1 -1
  199. data/lib/hexapdf/type/catalog.rb +2 -2
  200. data/lib/hexapdf/type/cid_font.rb +2 -2
  201. data/lib/hexapdf/type/cmap.rb +1 -1
  202. data/lib/hexapdf/type/embedded_file.rb +1 -1
  203. data/lib/hexapdf/type/file_specification.rb +1 -1
  204. data/lib/hexapdf/type/font.rb +1 -1
  205. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  206. data/lib/hexapdf/type/font_simple.rb +1 -1
  207. data/lib/hexapdf/type/font_true_type.rb +1 -1
  208. data/lib/hexapdf/type/font_type0.rb +1 -1
  209. data/lib/hexapdf/type/font_type1.rb +1 -1
  210. data/lib/hexapdf/type/font_type3.rb +1 -1
  211. data/lib/hexapdf/type/form.rb +1 -1
  212. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  213. data/lib/hexapdf/type/icon_fit.rb +1 -1
  214. data/lib/hexapdf/type/image.rb +1 -1
  215. data/lib/hexapdf/type/info.rb +1 -1
  216. data/lib/hexapdf/type/mark_information.rb +1 -1
  217. data/lib/hexapdf/type/marked_content_reference.rb +59 -0
  218. data/lib/hexapdf/type/metadata.rb +1 -1
  219. data/lib/hexapdf/type/names.rb +1 -1
  220. data/lib/hexapdf/type/namespace.rb +57 -0
  221. data/lib/hexapdf/type/object_reference.rb +57 -0
  222. data/lib/hexapdf/type/object_stream.rb +1 -1
  223. data/lib/hexapdf/type/optional_content_configuration.rb +1 -1
  224. data/lib/hexapdf/type/optional_content_group.rb +1 -1
  225. data/lib/hexapdf/type/optional_content_membership.rb +1 -1
  226. data/lib/hexapdf/type/optional_content_properties.rb +1 -1
  227. data/lib/hexapdf/type/outline.rb +1 -1
  228. data/lib/hexapdf/type/outline_item.rb +1 -1
  229. data/lib/hexapdf/type/output_intent.rb +1 -1
  230. data/lib/hexapdf/type/page.rb +1 -1
  231. data/lib/hexapdf/type/page_label.rb +1 -1
  232. data/lib/hexapdf/type/page_tree_node.rb +1 -1
  233. data/lib/hexapdf/type/resources.rb +7 -3
  234. data/lib/hexapdf/type/struct_elem.rb +72 -0
  235. data/lib/hexapdf/type/struct_tree_root.rb +64 -0
  236. data/lib/hexapdf/type/trailer.rb +1 -1
  237. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  238. data/lib/hexapdf/type/xref_stream.rb +1 -1
  239. data/lib/hexapdf/type.rb +6 -1
  240. data/lib/hexapdf/utils/bit_field.rb +1 -1
  241. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  242. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  243. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  244. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  245. data/lib/hexapdf/utils/object_hash.rb +1 -1
  246. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  247. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  248. data/lib/hexapdf/utils.rb +1 -1
  249. data/lib/hexapdf/version.rb +2 -2
  250. data/lib/hexapdf/writer.rb +1 -1
  251. data/lib/hexapdf/xref_section.rb +1 -1
  252. data/lib/hexapdf.rb +1 -1
  253. data/test/hexapdf/common_tokenizer_tests.rb +0 -5
  254. data/test/hexapdf/layout/test_box.rb +0 -2
  255. data/test/hexapdf/layout/test_style.rb +0 -10
  256. data/test/hexapdf/layout/test_table_box.rb +0 -15
  257. data/test/hexapdf/layout/test_text_box.rb +0 -6
  258. data/test/hexapdf/type/test_font_type1.rb +1 -1
  259. data/test/hexapdf/type/test_resources.rb +3 -1
  260. data/test/test_helper.rb +1 -0
  261. metadata +23 -7
@@ -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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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
@@ -265,7 +265,9 @@ module HexaPDF
265
265
  miter_limit(10).
266
266
  line_cap_style(line_cap_style(:top))
267
267
 
268
- canvas.rectangle(x, y, w, h).clip_path.end_path
268
+ if width.top > w || width.top > h
269
+ canvas.rectangle(x, y, w, h).clip_path.end_path
270
+ end
269
271
  if style.top == :solid
270
272
  canvas.line_dash_pattern(0).
271
273
  rectangle(x + offset, y + offset, w - 2 * offset, h - 2 * offset).stroke
@@ -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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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
@@ -85,6 +85,13 @@ module HexaPDF
85
85
  # #>pdf-composer
86
86
  # composer.table([['A', 'B'], ['C', 'D']])
87
87
  #
88
+ # Each cell can hold zero or more boxes:
89
+ #
90
+ # #>pdf-composer
91
+ # cells = [[[layout.text('A'), layout.image(machu_picchu, height: 40)], layout.text('B')],
92
+ # [nil, layout.text('D')]]
93
+ # composer.table(cells)
94
+ #
88
95
  # The style of the cells can be customized, e.g. to avoid drawing borders:
89
96
  #
90
97
  # #>pdf-composer
@@ -104,7 +111,7 @@ module HexaPDF
104
111
  # It is also possible to use row and column spans:
105
112
  #
106
113
  # #>pdf-composer
107
- # cells = [[{content: layout.text('A'), col_span: 2}, {content: layout.text('B'), row_span: 2}],
114
+ # cells = [[{content: layout.text('A'), col_span: 2}, {content: layout.text("B\nB\nB"), row_span: 2}],
108
115
  # [{content: layout.text('C'), col_span: 2, row_span: 2}],
109
116
  # [layout.text('D')]]
110
117
  # composer.table(cells)
@@ -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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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
@@ -55,6 +55,10 @@ module HexaPDF
55
55
  # The rectangle with the bottom-left corner (#x_min, #y_min) and the top-right corner (#x_max,
56
56
  # #y_max) describes the minimum bounding box of the whole text fragment and is usually *not*
57
57
  # equal to the box (0, 0)-(#width, #height).
58
+ #
59
+ # *Note*: This class should not be used directly but via
60
+ # HexaPDF::Document::Layout#text_fragments. This way the whole document layout infrastructure
61
+ # like font fallback and such is automatically used.
58
62
  class TextFragment
59
63
 
60
64
  using NumericRefinements
@@ -64,6 +68,8 @@ module HexaPDF
64
68
  # The needed style of the text fragment is specified by the +style+ argument (see
65
69
  # Style::create for details). Note that the resulting style object needs at least the font
66
70
  # set.
71
+ #
72
+ # For internal use, see the note under TextFragment for details.
67
73
  def self.create(text, style)
68
74
  style = Style.create(style)
69
75
  fragment = new(style.font.decode_utf8(text), style)
@@ -90,6 +96,8 @@ module HexaPDF
90
96
  # The needed style of the text fragments is specified by the +style+ argument (see
91
97
  # Style::create for details). Note that the resulting style object needs at least the font
92
98
  # set.
99
+ #
100
+ # For internal use, see the note under TextFragment for details.
93
101
  def self.create_with_fallback_glyphs(text, style)
94
102
  return [create(text, style)] if !block_given? || text.empty?
95
103
 
@@ -155,6 +163,8 @@ module HexaPDF
155
163
  #
156
164
  # The argument +style+ can either be a Style object or a hash of style properties, see
157
165
  # Style::create for details.
166
+ #
167
+ # For internal use, see the note under TextFragment for details.
158
168
  def initialize(items, style, properties: nil)
159
169
  @items = items
160
170
  @style = Style.create(style)
@@ -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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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-2024 Thomas Leitner
7
+ # Copyright (C) 2014-2025 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