hexapdf 1.7.0 → 1.8.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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -1
  3. data/LICENSE +1 -1
  4. data/examples/005-merging.rb +2 -1
  5. data/lib/hexapdf/cli/batch.rb +1 -1
  6. data/lib/hexapdf/cli/command.rb +1 -1
  7. data/lib/hexapdf/cli/debug_info.rb +1 -1
  8. data/lib/hexapdf/cli/files.rb +1 -1
  9. data/lib/hexapdf/cli/fonts.rb +6 -4
  10. data/lib/hexapdf/cli/form.rb +1 -1
  11. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  12. data/lib/hexapdf/cli/images.rb +17 -17
  13. data/lib/hexapdf/cli/info.rb +1 -1
  14. data/lib/hexapdf/cli/inspect.rb +1 -1
  15. data/lib/hexapdf/cli/merge.rb +14 -2
  16. data/lib/hexapdf/cli/modify.rb +1 -1
  17. data/lib/hexapdf/cli/optimize.rb +1 -1
  18. data/lib/hexapdf/cli/split.rb +1 -1
  19. data/lib/hexapdf/cli/usage.rb +1 -1
  20. data/lib/hexapdf/cli/watermark.rb +1 -1
  21. data/lib/hexapdf/cli.rb +1 -1
  22. data/lib/hexapdf/composer.rb +1 -1
  23. data/lib/hexapdf/configuration.rb +2 -1
  24. data/lib/hexapdf/content/canvas.rb +1 -1
  25. data/lib/hexapdf/content/canvas_composer.rb +1 -1
  26. data/lib/hexapdf/content/color_space.rb +1 -1
  27. data/lib/hexapdf/content/graphic_object/arc.rb +1 -1
  28. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  29. data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
  30. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  31. data/lib/hexapdf/content/graphic_object.rb +1 -1
  32. data/lib/hexapdf/content/graphics_state.rb +1 -1
  33. data/lib/hexapdf/content/operator.rb +1 -1
  34. data/lib/hexapdf/content/parser.rb +1 -1
  35. data/lib/hexapdf/content/processor.rb +1 -1
  36. data/lib/hexapdf/content/smart_text_extractor.rb +10 -4
  37. data/lib/hexapdf/content/transformation_matrix.rb +1 -1
  38. data/lib/hexapdf/content.rb +1 -1
  39. data/lib/hexapdf/data_dir.rb +1 -1
  40. data/lib/hexapdf/dictionary.rb +1 -1
  41. data/lib/hexapdf/dictionary_fields.rb +1 -1
  42. data/lib/hexapdf/digital_signature/cms_handler.rb +1 -1
  43. data/lib/hexapdf/digital_signature/handler.rb +1 -1
  44. data/lib/hexapdf/digital_signature/pkcs1_handler.rb +1 -1
  45. data/lib/hexapdf/digital_signature/signature.rb +1 -1
  46. data/lib/hexapdf/digital_signature/signatures.rb +1 -1
  47. data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -1
  48. data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +1 -1
  49. data/lib/hexapdf/digital_signature/signing/timestamp_handler.rb +1 -1
  50. data/lib/hexapdf/digital_signature/signing.rb +1 -1
  51. data/lib/hexapdf/digital_signature/verification_result.rb +1 -1
  52. data/lib/hexapdf/digital_signature.rb +1 -1
  53. data/lib/hexapdf/document/annotations.rb +1 -1
  54. data/lib/hexapdf/document/destinations.rb +1 -1
  55. data/lib/hexapdf/document/files.rb +1 -1
  56. data/lib/hexapdf/document/fonts.rb +1 -1
  57. data/lib/hexapdf/document/images.rb +1 -1
  58. data/lib/hexapdf/document/layout.rb +1 -1
  59. data/lib/hexapdf/document/metadata.rb +1 -1
  60. data/lib/hexapdf/document/pages.rb +1 -1
  61. data/lib/hexapdf/document.rb +1 -1
  62. data/lib/hexapdf/encryption/aes.rb +1 -1
  63. data/lib/hexapdf/encryption/arc4.rb +1 -1
  64. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  65. data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
  66. data/lib/hexapdf/encryption/identity.rb +1 -1
  67. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  68. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  69. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  70. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  71. data/lib/hexapdf/encryption.rb +1 -1
  72. data/lib/hexapdf/error.rb +1 -1
  73. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  74. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  75. data/lib/hexapdf/filter/brotli_decode.rb +1 -1
  76. data/lib/hexapdf/filter/crypt.rb +1 -1
  77. data/lib/hexapdf/filter/encryption.rb +1 -1
  78. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  79. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  80. data/lib/hexapdf/filter/pass_through.rb +1 -1
  81. data/lib/hexapdf/filter/predictor.rb +1 -1
  82. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  83. data/lib/hexapdf/filter.rb +1 -1
  84. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  85. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  86. data/lib/hexapdf/font/cmap.rb +1 -1
  87. data/lib/hexapdf/font/encoding/base.rb +1 -1
  88. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  89. data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
  90. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  91. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  92. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  93. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  94. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  95. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  96. data/lib/hexapdf/font/encoding.rb +1 -1
  97. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  98. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  99. data/lib/hexapdf/font/true_type/font.rb +1 -1
  100. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  101. data/lib/hexapdf/font/true_type/subsetter.rb +4 -4
  102. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  103. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  104. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  105. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  106. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  107. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  108. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  109. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  110. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  111. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  112. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  113. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  114. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  115. data/lib/hexapdf/font/true_type/table.rb +1 -1
  116. data/lib/hexapdf/font/true_type.rb +1 -1
  117. data/lib/hexapdf/font/true_type_wrapper.rb +3 -3
  118. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  119. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  120. data/lib/hexapdf/font/type1/font.rb +1 -1
  121. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  122. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  123. data/lib/hexapdf/font/type1.rb +1 -1
  124. data/lib/hexapdf/font/type1_wrapper.rb +1 -1
  125. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  126. data/lib/hexapdf/font_loader/from_file.rb +5 -1
  127. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  128. data/lib/hexapdf/font_loader/variant_from_name.rb +1 -1
  129. data/lib/hexapdf/font_loader.rb +1 -1
  130. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  131. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  132. data/lib/hexapdf/image_loader/png.rb +1 -1
  133. data/lib/hexapdf/image_loader.rb +1 -1
  134. data/lib/hexapdf/importer.rb +1 -1
  135. data/lib/hexapdf/layout/box.rb +1 -1
  136. data/lib/hexapdf/layout/box_fitter.rb +1 -1
  137. data/lib/hexapdf/layout/column_box.rb +1 -1
  138. data/lib/hexapdf/layout/container_box.rb +1 -1
  139. data/lib/hexapdf/layout/frame.rb +1 -1
  140. data/lib/hexapdf/layout/image_box.rb +1 -1
  141. data/lib/hexapdf/layout/inline_box.rb +1 -1
  142. data/lib/hexapdf/layout/line.rb +1 -1
  143. data/lib/hexapdf/layout/list_box.rb +1 -1
  144. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  145. data/lib/hexapdf/layout/page_style.rb +1 -1
  146. data/lib/hexapdf/layout/style.rb +1 -1
  147. data/lib/hexapdf/layout/table_box.rb +1 -1
  148. data/lib/hexapdf/layout/text_box.rb +1 -1
  149. data/lib/hexapdf/layout/text_fragment.rb +1 -1
  150. data/lib/hexapdf/layout/text_layouter.rb +1 -1
  151. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  152. data/lib/hexapdf/layout/width_from_polygon.rb +1 -1
  153. data/lib/hexapdf/layout.rb +1 -1
  154. data/lib/hexapdf/name_tree_node.rb +1 -1
  155. data/lib/hexapdf/number_tree_node.rb +1 -1
  156. data/lib/hexapdf/object.rb +1 -1
  157. data/lib/hexapdf/parser.rb +1 -1
  158. data/lib/hexapdf/pdf_array.rb +1 -1
  159. data/lib/hexapdf/rectangle.rb +1 -1
  160. data/lib/hexapdf/reference.rb +1 -1
  161. data/lib/hexapdf/revision.rb +1 -1
  162. data/lib/hexapdf/revisions.rb +1 -1
  163. data/lib/hexapdf/serializer.rb +3 -3
  164. data/lib/hexapdf/stream.rb +1 -1
  165. data/lib/hexapdf/task/dereference.rb +1 -1
  166. data/lib/hexapdf/task/import_pages.rb +185 -0
  167. data/lib/hexapdf/task/merge_acro_form.rb +1 -1
  168. data/lib/hexapdf/task/optimize.rb +1 -1
  169. data/lib/hexapdf/task/pdfa.rb +1 -1
  170. data/lib/hexapdf/task.rb +2 -1
  171. data/lib/hexapdf/test_utils.rb +1 -1
  172. data/lib/hexapdf/tokenizer.rb +1 -1
  173. data/lib/hexapdf/type/acro_form/appearance_generator.rb +1 -1
  174. data/lib/hexapdf/type/acro_form/button_field.rb +1 -1
  175. data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
  176. data/lib/hexapdf/type/acro_form/field.rb +1 -1
  177. data/lib/hexapdf/type/acro_form/form.rb +1 -1
  178. data/lib/hexapdf/type/acro_form/java_script_actions.rb +1 -1
  179. data/lib/hexapdf/type/acro_form/signature_field.rb +1 -1
  180. data/lib/hexapdf/type/acro_form/text_field.rb +1 -1
  181. data/lib/hexapdf/type/acro_form/variable_text_field.rb +1 -1
  182. data/lib/hexapdf/type/acro_form.rb +1 -1
  183. data/lib/hexapdf/type/action.rb +1 -1
  184. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  185. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  186. data/lib/hexapdf/type/actions/launch.rb +1 -1
  187. data/lib/hexapdf/type/actions/set_ocg_state.rb +1 -1
  188. data/lib/hexapdf/type/actions/uri.rb +1 -1
  189. data/lib/hexapdf/type/actions.rb +1 -1
  190. data/lib/hexapdf/type/annotation.rb +1 -1
  191. data/lib/hexapdf/type/annotations/appearance_generator.rb +1 -1
  192. data/lib/hexapdf/type/annotations/border_effect.rb +1 -1
  193. data/lib/hexapdf/type/annotations/border_styling.rb +1 -1
  194. data/lib/hexapdf/type/annotations/circle.rb +1 -1
  195. data/lib/hexapdf/type/annotations/interior_color.rb +1 -1
  196. data/lib/hexapdf/type/annotations/line.rb +1 -1
  197. data/lib/hexapdf/type/annotations/line_ending_styling.rb +1 -1
  198. data/lib/hexapdf/type/annotations/link.rb +1 -1
  199. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  200. data/lib/hexapdf/type/annotations/polygon.rb +1 -1
  201. data/lib/hexapdf/type/annotations/polygon_polyline.rb +1 -1
  202. data/lib/hexapdf/type/annotations/polyline.rb +1 -1
  203. data/lib/hexapdf/type/annotations/square.rb +1 -1
  204. data/lib/hexapdf/type/annotations/square_circle.rb +1 -1
  205. data/lib/hexapdf/type/annotations/text.rb +1 -1
  206. data/lib/hexapdf/type/annotations/widget.rb +1 -1
  207. data/lib/hexapdf/type/annotations.rb +1 -1
  208. data/lib/hexapdf/type/catalog.rb +1 -1
  209. data/lib/hexapdf/type/cid_font.rb +1 -1
  210. data/lib/hexapdf/type/cmap.rb +1 -1
  211. data/lib/hexapdf/type/document_security_store.rb +1 -1
  212. data/lib/hexapdf/type/embedded_file.rb +1 -1
  213. data/lib/hexapdf/type/file_specification.rb +1 -1
  214. data/lib/hexapdf/type/font.rb +4 -4
  215. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  216. data/lib/hexapdf/type/font_simple.rb +1 -1
  217. data/lib/hexapdf/type/font_true_type.rb +1 -1
  218. data/lib/hexapdf/type/font_type0.rb +1 -1
  219. data/lib/hexapdf/type/font_type1.rb +1 -1
  220. data/lib/hexapdf/type/font_type3.rb +6 -1
  221. data/lib/hexapdf/type/form.rb +1 -1
  222. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  223. data/lib/hexapdf/type/icon_fit.rb +1 -1
  224. data/lib/hexapdf/type/image.rb +1 -1
  225. data/lib/hexapdf/type/info.rb +1 -1
  226. data/lib/hexapdf/type/mark_information.rb +1 -1
  227. data/lib/hexapdf/type/marked_content_reference.rb +1 -1
  228. data/lib/hexapdf/type/measure.rb +1 -1
  229. data/lib/hexapdf/type/metadata.rb +1 -1
  230. data/lib/hexapdf/type/names.rb +1 -1
  231. data/lib/hexapdf/type/namespace.rb +1 -1
  232. data/lib/hexapdf/type/object_reference.rb +1 -1
  233. data/lib/hexapdf/type/object_stream.rb +1 -1
  234. data/lib/hexapdf/type/optional_content_configuration.rb +1 -1
  235. data/lib/hexapdf/type/optional_content_group.rb +1 -1
  236. data/lib/hexapdf/type/optional_content_membership.rb +1 -1
  237. data/lib/hexapdf/type/optional_content_properties.rb +1 -1
  238. data/lib/hexapdf/type/outline.rb +1 -1
  239. data/lib/hexapdf/type/outline_item.rb +1 -1
  240. data/lib/hexapdf/type/output_intent.rb +1 -1
  241. data/lib/hexapdf/type/page.rb +1 -1
  242. data/lib/hexapdf/type/page_label.rb +1 -1
  243. data/lib/hexapdf/type/page_tree_node.rb +1 -1
  244. data/lib/hexapdf/type/resources.rb +1 -1
  245. data/lib/hexapdf/type/struct_elem.rb +1 -1
  246. data/lib/hexapdf/type/struct_tree_root.rb +1 -1
  247. data/lib/hexapdf/type/trailer.rb +1 -1
  248. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  249. data/lib/hexapdf/type/xref_stream.rb +1 -1
  250. data/lib/hexapdf/type.rb +1 -1
  251. data/lib/hexapdf/utils/bit_field.rb +1 -1
  252. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  253. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  254. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  255. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  256. data/lib/hexapdf/utils/object_hash.rb +1 -1
  257. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  258. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  259. data/lib/hexapdf/utils.rb +1 -1
  260. data/lib/hexapdf/version.rb +2 -2
  261. data/lib/hexapdf/writer.rb +1 -1
  262. data/lib/hexapdf/xref_section.rb +1 -1
  263. data/lib/hexapdf.rb +1 -1
  264. data/test/hexapdf/filter/test_brotli_decode.rb +1 -1
  265. data/test/hexapdf/font/test_true_type_wrapper.rb +2 -2
  266. data/test/hexapdf/font/true_type/test_subsetter.rb +7 -6
  267. data/test/hexapdf/font_loader/test_from_file.rb +7 -0
  268. data/test/hexapdf/task/test_import_pages.rb +126 -0
  269. data/test/hexapdf/test_serializer.rb +1 -1
  270. data/test/hexapdf/type/test_font_type3.rb +4 -0
  271. metadata +5 -3
@@ -4,7 +4,7 @@
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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
@@ -89,13 +89,13 @@ module HexaPDF
89
89
 
90
90
  # Returns +true+ if the font is embedded.
91
91
  def embedded?
92
- dict = self[:FontDescriptor]
93
- dict && (dict[:FontFile] || dict[:FontFile2] || dict[:FontFile3])
92
+ font_file
94
93
  end
95
94
 
96
95
  # Returns the embeeded font file object or +nil+ if the font is not embedded.
97
96
  def font_file
98
- embedded?
97
+ dict = self[:FontDescriptor]
98
+ dict && (dict[:FontFile] || dict[:FontFile2] || dict[:FontFile3])
99
99
  end
100
100
 
101
101
  # Returns the glyph scaling factor for transforming from glyph space to text space.
@@ -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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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
@@ -70,6 +70,11 @@ module HexaPDF
70
70
  self[:FontMatrix][0]
71
71
  end
72
72
 
73
+ # Returns +true+ because Type3 fonts are always inherently embedded.
74
+ def embedded?
75
+ true
76
+ end
77
+
73
78
  private
74
79
 
75
80
  def perform_validation
@@ -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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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 = '1.7.0'
40
+ VERSION = '1.8.0'
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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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-2025 Thomas Leitner
7
+ # Copyright (C) 2014-2026 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
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require_relative 'common'
4
- require 'hexapdf/filter/flate_decode'
4
+ require 'hexapdf/filter/brotli_decode'
5
5
 
6
6
  describe HexaPDF::Filter::BrotliDecode do
7
7
  include CommonFilterTests
@@ -119,9 +119,9 @@ describe HexaPDF::Font::TrueTypeWrapper do
119
119
  assert_equal([3].pack('n'), code)
120
120
  end
121
121
 
122
- it "doesn't use char codes 13, 40, 41 and 92 because they would need to be escaped" do
122
+ it "doesn't use char codes 10, 13, 40, 41 and 92 because they would need to be escaped" do
123
123
  codes = 1.upto(93).map {|i| @font_wrapper.encode(@font_wrapper.glyph(i)) }.join
124
- assert_equal([1..12, 14..39, 42..91, 93..97].flat_map(&:to_a).pack('n*'), codes)
124
+ assert_equal([1..9, 11..12, 14..39, 42..91, 93..98].flat_map(&:to_a).pack('n*'), codes)
125
125
  end
126
126
 
127
127
  it "raises an error if an InvalidGlyph is encoded" do
@@ -29,12 +29,13 @@ describe HexaPDF::Font::TrueType::Subsetter do
29
29
 
30
30
  it "doesn't use certain subset glyph IDs for performance reasons" do
31
31
  1.upto(93) {|i| @subsetter.use_glyph(i) }
32
- # glyph 0, 93 used glyph, 4 special glyphs
33
- assert_equal(1 + 93 + 4, @subsetter.instance_variable_get(:@glyph_map).size)
34
- 1.upto(12) {|i| assert_equal(i, @subsetter.subset_glyph_id(i), "id=#{i}") }
35
- 13.upto(38) {|i| assert_equal(i + 1, @subsetter.subset_glyph_id(i), "id=#{i}") }
36
- 39.upto(88) {|i| assert_equal(i + 3, @subsetter.subset_glyph_id(i), "id=#{i}") }
37
- 89.upto(93) {|i| assert_equal(i + 4, @subsetter.subset_glyph_id(i), "id=#{i}") }
32
+ # glyph 0 and 93 are used glyph, 5 special glyphs
33
+ assert_equal(1 + 93 + 5, @subsetter.instance_variable_get(:@glyph_map).size)
34
+ 1.upto(9) {|i| assert_equal(i, @subsetter.subset_glyph_id(i), "id=#{i}") }
35
+ 10.upto(11) {|i| assert_equal(i + 1, @subsetter.subset_glyph_id(i), "id=#{i}") }
36
+ 12.upto(37) {|i| assert_equal(i + 2, @subsetter.subset_glyph_id(i), "id=#{i}") }
37
+ 38.upto(87) {|i| assert_equal(i + 4, @subsetter.subset_glyph_id(i), "id=#{i}") }
38
+ 88.upto(93) {|i| assert_equal(i + 5, @subsetter.subset_glyph_id(i), "id=#{i}") }
38
39
  end
39
40
 
40
41
  it "creates the subset font file" do
@@ -30,6 +30,13 @@ describe HexaPDF::FontLoader::FromFile do
30
30
  refute(wrapper.subset?)
31
31
  end
32
32
 
33
+ it "raises an error if the provided font does not contain TrueType outlines" do
34
+ font = HexaPDF::Font::TrueType::Font.new(File.open(@font_file, 'rb'))
35
+ font.directory.instance_variable_get(:@tables).delete('glyf')
36
+ exception = assert_raises(HexaPDF::Error) { @klass.call(@doc, font) }
37
+ assert_match(/does not contain TrueType but CFF/, exception.message)
38
+ end
39
+
33
40
  it "returns nil if the given name doesn't represent a file" do
34
41
  assert_nil(@klass.call(@doc, "Unknown"))
35
42
  end