hexapdf 0.15.8 → 0.17.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (446) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hexapdf/cli/batch.rb +1 -1
  3. data/lib/hexapdf/cli/command.rb +10 -1
  4. data/lib/hexapdf/cli/files.rb +1 -1
  5. data/lib/hexapdf/cli/fonts.rb +145 -0
  6. data/lib/hexapdf/cli/form.rb +27 -26
  7. data/lib/hexapdf/cli/image2pdf.rb +1 -1
  8. data/lib/hexapdf/cli/images.rb +1 -10
  9. data/lib/hexapdf/cli/info.rb +1 -1
  10. data/lib/hexapdf/cli/inspect.rb +1 -1
  11. data/lib/hexapdf/cli/merge.rb +1 -1
  12. data/lib/hexapdf/cli/modify.rb +1 -1
  13. data/lib/hexapdf/cli/optimize.rb +1 -1
  14. data/lib/hexapdf/cli/split.rb +1 -1
  15. data/lib/hexapdf/cli/watermark.rb +1 -1
  16. data/lib/hexapdf/cli.rb +3 -1
  17. data/lib/hexapdf/composer.rb +1 -1
  18. data/lib/hexapdf/configuration.rb +11 -2
  19. data/lib/hexapdf/content/canvas.rb +658 -167
  20. data/lib/hexapdf/content/color_space.rb +185 -3
  21. data/lib/hexapdf/content/graphic_object/arc.rb +111 -12
  22. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
  23. data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
  24. data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
  25. data/lib/hexapdf/content/graphic_object.rb +1 -1
  26. data/lib/hexapdf/content/graphics_state.rb +1 -1
  27. data/lib/hexapdf/content/operator.rb +1 -1
  28. data/lib/hexapdf/content/parser.rb +1 -1
  29. data/lib/hexapdf/content/processor.rb +1 -1
  30. data/lib/hexapdf/content/transformation_matrix.rb +1 -1
  31. data/lib/hexapdf/content.rb +1 -1
  32. data/lib/hexapdf/data_dir.rb +1 -1
  33. data/lib/hexapdf/dictionary.rb +1 -1
  34. data/lib/hexapdf/dictionary_fields.rb +30 -4
  35. data/lib/hexapdf/document/files.rb +3 -3
  36. data/lib/hexapdf/document/fonts.rb +1 -1
  37. data/lib/hexapdf/document/images.rb +1 -1
  38. data/lib/hexapdf/document/pages.rb +1 -1
  39. data/lib/hexapdf/document.rb +1 -1
  40. data/lib/hexapdf/encryption/aes.rb +1 -1
  41. data/lib/hexapdf/encryption/arc4.rb +1 -1
  42. data/lib/hexapdf/encryption/fast_aes.rb +1 -1
  43. data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
  44. data/lib/hexapdf/encryption/identity.rb +1 -1
  45. data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
  46. data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
  47. data/lib/hexapdf/encryption/security_handler.rb +1 -1
  48. data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
  49. data/lib/hexapdf/encryption.rb +1 -1
  50. data/lib/hexapdf/error.rb +1 -1
  51. data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
  52. data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
  53. data/lib/hexapdf/filter/crypt.rb +1 -1
  54. data/lib/hexapdf/filter/encryption.rb +1 -1
  55. data/lib/hexapdf/filter/flate_decode.rb +1 -1
  56. data/lib/hexapdf/filter/lzw_decode.rb +1 -1
  57. data/lib/hexapdf/filter/pass_through.rb +1 -1
  58. data/lib/hexapdf/filter/predictor.rb +1 -1
  59. data/lib/hexapdf/filter/run_length_decode.rb +1 -1
  60. data/lib/hexapdf/filter.rb +1 -1
  61. data/lib/hexapdf/font/cmap/parser.rb +1 -1
  62. data/lib/hexapdf/font/cmap/writer.rb +1 -1
  63. data/lib/hexapdf/font/cmap.rb +1 -1
  64. data/lib/hexapdf/font/encoding/base.rb +1 -1
  65. data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
  66. data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
  67. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
  68. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
  69. data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
  70. data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
  71. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
  72. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
  73. data/lib/hexapdf/font/encoding.rb +1 -1
  74. data/lib/hexapdf/font/invalid_glyph.rb +1 -1
  75. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  76. data/lib/hexapdf/font/true_type/font.rb +1 -1
  77. data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
  78. data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
  79. data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
  80. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
  81. data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
  82. data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
  83. data/lib/hexapdf/font/true_type/table/head.rb +1 -1
  84. data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
  85. data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
  86. data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
  87. data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
  88. data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
  89. data/lib/hexapdf/font/true_type/table/name.rb +1 -1
  90. data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
  91. data/lib/hexapdf/font/true_type/table/post.rb +1 -1
  92. data/lib/hexapdf/font/true_type/table.rb +1 -1
  93. data/lib/hexapdf/font/true_type.rb +1 -1
  94. data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
  95. data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
  96. data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
  97. data/lib/hexapdf/font/type1/font.rb +1 -1
  98. data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
  99. data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
  100. data/lib/hexapdf/font/type1.rb +1 -1
  101. data/lib/hexapdf/font/type1_wrapper.rb +1 -1
  102. data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
  103. data/lib/hexapdf/font_loader/from_file.rb +1 -1
  104. data/lib/hexapdf/font_loader/standard14.rb +1 -1
  105. data/lib/hexapdf/font_loader.rb +1 -1
  106. data/lib/hexapdf/image_loader/jpeg.rb +1 -1
  107. data/lib/hexapdf/image_loader/pdf.rb +1 -1
  108. data/lib/hexapdf/image_loader/png.rb +1 -1
  109. data/lib/hexapdf/image_loader.rb +1 -1
  110. data/lib/hexapdf/importer.rb +1 -1
  111. data/lib/hexapdf/layout/box.rb +4 -2
  112. data/lib/hexapdf/layout/frame.rb +1 -1
  113. data/lib/hexapdf/layout/image_box.rb +1 -1
  114. data/lib/hexapdf/layout/inline_box.rb +1 -1
  115. data/lib/hexapdf/layout/line.rb +1 -1
  116. data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
  117. data/lib/hexapdf/layout/style.rb +40 -2
  118. data/lib/hexapdf/layout/text_box.rb +1 -1
  119. data/lib/hexapdf/layout/text_fragment.rb +1 -1
  120. data/lib/hexapdf/layout/text_layouter.rb +1 -1
  121. data/lib/hexapdf/layout/text_shaper.rb +1 -1
  122. data/lib/hexapdf/layout/width_from_polygon.rb +2 -2
  123. data/lib/hexapdf/layout.rb +1 -1
  124. data/lib/hexapdf/name_tree_node.rb +1 -1
  125. data/lib/hexapdf/number_tree_node.rb +1 -1
  126. data/lib/hexapdf/object.rb +1 -1
  127. data/lib/hexapdf/parser.rb +2 -2
  128. data/lib/hexapdf/pdf_array.rb +1 -1
  129. data/lib/hexapdf/rectangle.rb +1 -1
  130. data/lib/hexapdf/reference.rb +1 -1
  131. data/lib/hexapdf/revision.rb +1 -1
  132. data/lib/hexapdf/revisions.rb +1 -1
  133. data/lib/hexapdf/serializer.rb +1 -1
  134. data/lib/hexapdf/stream.rb +1 -1
  135. data/lib/hexapdf/task/dereference.rb +1 -1
  136. data/lib/hexapdf/task/optimize.rb +1 -1
  137. data/lib/hexapdf/task.rb +1 -1
  138. data/lib/hexapdf/tokenizer.rb +1 -1
  139. data/lib/hexapdf/type/acro_form/appearance_generator.rb +14 -7
  140. data/lib/hexapdf/type/acro_form/button_field.rb +53 -28
  141. data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
  142. data/lib/hexapdf/type/acro_form/field.rb +21 -2
  143. data/lib/hexapdf/type/acro_form/form.rb +48 -29
  144. data/lib/hexapdf/type/acro_form/text_field.rb +2 -2
  145. data/lib/hexapdf/type/acro_form/variable_text_field.rb +17 -9
  146. data/lib/hexapdf/type/acro_form.rb +1 -1
  147. data/lib/hexapdf/type/action.rb +1 -1
  148. data/lib/hexapdf/type/actions/go_to.rb +1 -1
  149. data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
  150. data/lib/hexapdf/type/actions/launch.rb +1 -1
  151. data/lib/hexapdf/type/actions/uri.rb +1 -1
  152. data/lib/hexapdf/type/actions.rb +1 -1
  153. data/lib/hexapdf/type/annotation.rb +1 -1
  154. data/lib/hexapdf/type/annotations/link.rb +1 -1
  155. data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
  156. data/lib/hexapdf/type/annotations/text.rb +1 -1
  157. data/lib/hexapdf/type/annotations/widget.rb +2 -2
  158. data/lib/hexapdf/type/annotations.rb +1 -1
  159. data/lib/hexapdf/type/catalog.rb +1 -1
  160. data/lib/hexapdf/type/cid_font.rb +1 -1
  161. data/lib/hexapdf/type/embedded_file.rb +1 -1
  162. data/lib/hexapdf/type/file_specification.rb +1 -1
  163. data/lib/hexapdf/type/font.rb +1 -1
  164. data/lib/hexapdf/type/font_descriptor.rb +1 -1
  165. data/lib/hexapdf/type/font_simple.rb +1 -1
  166. data/lib/hexapdf/type/font_true_type.rb +1 -1
  167. data/lib/hexapdf/type/font_type0.rb +1 -1
  168. data/lib/hexapdf/type/font_type1.rb +1 -1
  169. data/lib/hexapdf/type/font_type3.rb +1 -1
  170. data/lib/hexapdf/type/form.rb +1 -1
  171. data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
  172. data/lib/hexapdf/type/icon_fit.rb +1 -1
  173. data/lib/hexapdf/type/image.rb +1 -1
  174. data/lib/hexapdf/type/info.rb +1 -1
  175. data/lib/hexapdf/type/names.rb +1 -1
  176. data/lib/hexapdf/type/object_stream.rb +1 -1
  177. data/lib/hexapdf/type/page.rb +15 -1
  178. data/lib/hexapdf/type/page_tree_node.rb +1 -1
  179. data/lib/hexapdf/type/resources.rb +1 -1
  180. data/lib/hexapdf/type/trailer.rb +1 -1
  181. data/lib/hexapdf/type/viewer_preferences.rb +1 -1
  182. data/lib/hexapdf/type/xref_stream.rb +1 -1
  183. data/lib/hexapdf/type.rb +1 -1
  184. data/lib/hexapdf/utils/bit_field.rb +1 -1
  185. data/lib/hexapdf/utils/bit_stream.rb +1 -1
  186. data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
  187. data/lib/hexapdf/utils/lru_cache.rb +1 -1
  188. data/lib/hexapdf/utils/math_helpers.rb +1 -1
  189. data/lib/hexapdf/utils/object_hash.rb +1 -1
  190. data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
  191. data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
  192. data/lib/hexapdf/version.rb +2 -2
  193. data/lib/hexapdf/writer.rb +1 -1
  194. data/lib/hexapdf/xref_section.rb +1 -1
  195. data/lib/hexapdf.rb +1 -1
  196. metadata +5 -264
  197. data/CHANGELOG.md +0 -954
  198. data/LICENSE +0 -29
  199. data/README.md +0 -120
  200. data/Rakefile +0 -108
  201. data/agpl-3.0.txt +0 -661
  202. data/examples/001-hello_world.rb +0 -16
  203. data/examples/002-graphics.rb +0 -275
  204. data/examples/003-arcs.rb +0 -50
  205. data/examples/004-optimizing.rb +0 -23
  206. data/examples/005-merging.rb +0 -27
  207. data/examples/006-standard_pdf_fonts.rb +0 -73
  208. data/examples/007-truetype.rb +0 -42
  209. data/examples/008-show_char_bboxes.rb +0 -55
  210. data/examples/009-text_layouter_alignment.rb +0 -47
  211. data/examples/010-text_layouter_inline_boxes.rb +0 -64
  212. data/examples/011-text_layouter_line_wrapping.rb +0 -57
  213. data/examples/012-text_layouter_styling.rb +0 -122
  214. data/examples/013-text_layouter_shapes.rb +0 -176
  215. data/examples/014-text_in_polygon.rb +0 -60
  216. data/examples/015-boxes.rb +0 -76
  217. data/examples/016-frame_automatic_box_placement.rb +0 -90
  218. data/examples/017-frame_text_flow.rb +0 -60
  219. data/examples/018-composer.rb +0 -44
  220. data/examples/019-acro_form.rb +0 -88
  221. data/examples/emoji-smile.png +0 -0
  222. data/examples/emoji-wink.png +0 -0
  223. data/examples/machupicchu.jpg +0 -0
  224. data/test/data/aes-test-vectors/CBCGFSbox-128-decrypt.data.gz +0 -0
  225. data/test/data/aes-test-vectors/CBCGFSbox-128-encrypt.data.gz +0 -0
  226. data/test/data/aes-test-vectors/CBCGFSbox-192-decrypt.data.gz +0 -0
  227. data/test/data/aes-test-vectors/CBCGFSbox-192-encrypt.data.gz +0 -0
  228. data/test/data/aes-test-vectors/CBCGFSbox-256-decrypt.data.gz +0 -0
  229. data/test/data/aes-test-vectors/CBCGFSbox-256-encrypt.data.gz +0 -0
  230. data/test/data/aes-test-vectors/CBCKeySbox-128-decrypt.data.gz +0 -0
  231. data/test/data/aes-test-vectors/CBCKeySbox-128-encrypt.data.gz +0 -0
  232. data/test/data/aes-test-vectors/CBCKeySbox-192-decrypt.data.gz +0 -0
  233. data/test/data/aes-test-vectors/CBCKeySbox-192-encrypt.data.gz +0 -0
  234. data/test/data/aes-test-vectors/CBCKeySbox-256-decrypt.data.gz +0 -0
  235. data/test/data/aes-test-vectors/CBCKeySbox-256-encrypt.data.gz +0 -0
  236. data/test/data/aes-test-vectors/CBCVarKey-128-decrypt.data.gz +0 -0
  237. data/test/data/aes-test-vectors/CBCVarKey-128-encrypt.data.gz +0 -0
  238. data/test/data/aes-test-vectors/CBCVarKey-192-decrypt.data.gz +0 -0
  239. data/test/data/aes-test-vectors/CBCVarKey-192-encrypt.data.gz +0 -0
  240. data/test/data/aes-test-vectors/CBCVarKey-256-decrypt.data.gz +0 -0
  241. data/test/data/aes-test-vectors/CBCVarKey-256-encrypt.data.gz +0 -0
  242. data/test/data/aes-test-vectors/CBCVarTxt-128-decrypt.data.gz +0 -0
  243. data/test/data/aes-test-vectors/CBCVarTxt-128-encrypt.data.gz +0 -0
  244. data/test/data/aes-test-vectors/CBCVarTxt-192-decrypt.data.gz +0 -0
  245. data/test/data/aes-test-vectors/CBCVarTxt-192-encrypt.data.gz +0 -0
  246. data/test/data/aes-test-vectors/CBCVarTxt-256-decrypt.data.gz +0 -0
  247. data/test/data/aes-test-vectors/CBCVarTxt-256-encrypt.data.gz +0 -0
  248. data/test/data/fonts/Ubuntu-Title.ttf +0 -0
  249. data/test/data/images/cmyk.jpg +0 -0
  250. data/test/data/images/fillbytes.jpg +0 -0
  251. data/test/data/images/gray.jpg +0 -0
  252. data/test/data/images/greyscale-1bit.png +0 -0
  253. data/test/data/images/greyscale-2bit.png +0 -0
  254. data/test/data/images/greyscale-4bit.png +0 -0
  255. data/test/data/images/greyscale-8bit.png +0 -0
  256. data/test/data/images/greyscale-alpha-8bit.png +0 -0
  257. data/test/data/images/greyscale-trns-8bit.png +0 -0
  258. data/test/data/images/greyscale-with-gamma1.0.png +0 -0
  259. data/test/data/images/greyscale-with-gamma1.5.png +0 -0
  260. data/test/data/images/indexed-1bit.png +0 -0
  261. data/test/data/images/indexed-2bit.png +0 -0
  262. data/test/data/images/indexed-4bit.png +0 -0
  263. data/test/data/images/indexed-8bit.png +0 -0
  264. data/test/data/images/indexed-alpha-4bit.png +0 -0
  265. data/test/data/images/indexed-alpha-8bit.png +0 -0
  266. data/test/data/images/rgb.jpg +0 -0
  267. data/test/data/images/truecolour-8bit.png +0 -0
  268. data/test/data/images/truecolour-alpha-8bit.png +0 -0
  269. data/test/data/images/truecolour-gama-chrm-8bit.png +0 -0
  270. data/test/data/images/truecolour-srgb-8bit.png +0 -0
  271. data/test/data/images/ycck.jpg +0 -0
  272. data/test/data/minimal.pdf +0 -44
  273. data/test/data/standard-security-handler/README +0 -9
  274. data/test/data/standard-security-handler/bothpwd-aes-128bit-V4.pdf +0 -44
  275. data/test/data/standard-security-handler/bothpwd-aes-256bit-V5.pdf +0 -0
  276. data/test/data/standard-security-handler/bothpwd-arc4-128bit-V2.pdf +0 -43
  277. data/test/data/standard-security-handler/bothpwd-arc4-128bit-V4.pdf +0 -43
  278. data/test/data/standard-security-handler/bothpwd-arc4-40bit-V1.pdf +0 -0
  279. data/test/data/standard-security-handler/nopwd-aes-128bit-V4.pdf +0 -43
  280. data/test/data/standard-security-handler/nopwd-aes-256bit-V5.pdf +0 -0
  281. data/test/data/standard-security-handler/nopwd-arc4-128bit-V2.pdf +0 -43
  282. data/test/data/standard-security-handler/nopwd-arc4-128bit-V4.pdf +0 -43
  283. data/test/data/standard-security-handler/nopwd-arc4-40bit-V1.pdf +0 -43
  284. data/test/data/standard-security-handler/ownerpwd-aes-128bit-V4.pdf +0 -0
  285. data/test/data/standard-security-handler/ownerpwd-aes-256bit-V5.pdf +0 -43
  286. data/test/data/standard-security-handler/ownerpwd-arc4-128bit-V2.pdf +0 -43
  287. data/test/data/standard-security-handler/ownerpwd-arc4-128bit-V4.pdf +0 -43
  288. data/test/data/standard-security-handler/ownerpwd-arc4-40bit-V1.pdf +0 -43
  289. data/test/data/standard-security-handler/userpwd-aes-128bit-V4.pdf +0 -43
  290. data/test/data/standard-security-handler/userpwd-aes-256bit-V5.pdf +0 -43
  291. data/test/data/standard-security-handler/userpwd-arc4-128bit-V2.pdf +0 -0
  292. data/test/data/standard-security-handler/userpwd-arc4-128bit-V4.pdf +0 -0
  293. data/test/data/standard-security-handler/userpwd-arc4-40bit-V1.pdf +0 -43
  294. data/test/hexapdf/common_tokenizer_tests.rb +0 -236
  295. data/test/hexapdf/content/common.rb +0 -39
  296. data/test/hexapdf/content/graphic_object/test_arc.rb +0 -93
  297. data/test/hexapdf/content/graphic_object/test_endpoint_arc.rb +0 -90
  298. data/test/hexapdf/content/graphic_object/test_geom2d.rb +0 -79
  299. data/test/hexapdf/content/graphic_object/test_solid_arc.rb +0 -86
  300. data/test/hexapdf/content/test_canvas.rb +0 -1216
  301. data/test/hexapdf/content/test_color_space.rb +0 -164
  302. data/test/hexapdf/content/test_graphics_state.rb +0 -151
  303. data/test/hexapdf/content/test_operator.rb +0 -619
  304. data/test/hexapdf/content/test_parser.rb +0 -99
  305. data/test/hexapdf/content/test_processor.rb +0 -163
  306. data/test/hexapdf/content/test_transformation_matrix.rb +0 -64
  307. data/test/hexapdf/document/test_files.rb +0 -72
  308. data/test/hexapdf/document/test_fonts.rb +0 -60
  309. data/test/hexapdf/document/test_images.rb +0 -72
  310. data/test/hexapdf/document/test_pages.rb +0 -130
  311. data/test/hexapdf/encryption/common.rb +0 -87
  312. data/test/hexapdf/encryption/test_aes.rb +0 -129
  313. data/test/hexapdf/encryption/test_arc4.rb +0 -39
  314. data/test/hexapdf/encryption/test_fast_aes.rb +0 -17
  315. data/test/hexapdf/encryption/test_fast_arc4.rb +0 -12
  316. data/test/hexapdf/encryption/test_identity.rb +0 -21
  317. data/test/hexapdf/encryption/test_ruby_aes.rb +0 -23
  318. data/test/hexapdf/encryption/test_ruby_arc4.rb +0 -20
  319. data/test/hexapdf/encryption/test_security_handler.rb +0 -380
  320. data/test/hexapdf/encryption/test_standard_security_handler.rb +0 -322
  321. data/test/hexapdf/filter/common.rb +0 -53
  322. data/test/hexapdf/filter/test_ascii85_decode.rb +0 -59
  323. data/test/hexapdf/filter/test_ascii_hex_decode.rb +0 -38
  324. data/test/hexapdf/filter/test_crypt.rb +0 -21
  325. data/test/hexapdf/filter/test_encryption.rb +0 -24
  326. data/test/hexapdf/filter/test_flate_decode.rb +0 -44
  327. data/test/hexapdf/filter/test_lzw_decode.rb +0 -52
  328. data/test/hexapdf/filter/test_predictor.rb +0 -219
  329. data/test/hexapdf/filter/test_run_length_decode.rb +0 -32
  330. data/test/hexapdf/font/cmap/test_parser.rb +0 -102
  331. data/test/hexapdf/font/cmap/test_writer.rb +0 -66
  332. data/test/hexapdf/font/encoding/test_base.rb +0 -45
  333. data/test/hexapdf/font/encoding/test_difference_encoding.rb +0 -29
  334. data/test/hexapdf/font/encoding/test_glyph_list.rb +0 -59
  335. data/test/hexapdf/font/encoding/test_zapf_dingbats_encoding.rb +0 -16
  336. data/test/hexapdf/font/test_cmap.rb +0 -104
  337. data/test/hexapdf/font/test_encoding.rb +0 -27
  338. data/test/hexapdf/font/test_invalid_glyph.rb +0 -34
  339. data/test/hexapdf/font/test_true_type_wrapper.rb +0 -186
  340. data/test/hexapdf/font/test_type1_wrapper.rb +0 -107
  341. data/test/hexapdf/font/true_type/common.rb +0 -17
  342. data/test/hexapdf/font/true_type/table/common.rb +0 -27
  343. data/test/hexapdf/font/true_type/table/test_cmap.rb +0 -47
  344. data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +0 -141
  345. data/test/hexapdf/font/true_type/table/test_directory.rb +0 -30
  346. data/test/hexapdf/font/true_type/table/test_glyf.rb +0 -58
  347. data/test/hexapdf/font/true_type/table/test_head.rb +0 -56
  348. data/test/hexapdf/font/true_type/table/test_hhea.rb +0 -26
  349. data/test/hexapdf/font/true_type/table/test_hmtx.rb +0 -30
  350. data/test/hexapdf/font/true_type/table/test_kern.rb +0 -61
  351. data/test/hexapdf/font/true_type/table/test_loca.rb +0 -33
  352. data/test/hexapdf/font/true_type/table/test_maxp.rb +0 -50
  353. data/test/hexapdf/font/true_type/table/test_name.rb +0 -76
  354. data/test/hexapdf/font/true_type/table/test_os2.rb +0 -55
  355. data/test/hexapdf/font/true_type/table/test_post.rb +0 -78
  356. data/test/hexapdf/font/true_type/test_builder.rb +0 -42
  357. data/test/hexapdf/font/true_type/test_font.rb +0 -116
  358. data/test/hexapdf/font/true_type/test_optimizer.rb +0 -26
  359. data/test/hexapdf/font/true_type/test_subsetter.rb +0 -73
  360. data/test/hexapdf/font/true_type/test_table.rb +0 -48
  361. data/test/hexapdf/font/type1/common.rb +0 -6
  362. data/test/hexapdf/font/type1/test_afm_parser.rb +0 -65
  363. data/test/hexapdf/font/type1/test_font.rb +0 -104
  364. data/test/hexapdf/font/type1/test_font_metrics.rb +0 -22
  365. data/test/hexapdf/font/type1/test_pfb_parser.rb +0 -37
  366. data/test/hexapdf/font_loader/test_from_configuration.rb +0 -43
  367. data/test/hexapdf/font_loader/test_from_file.rb +0 -36
  368. data/test/hexapdf/font_loader/test_standard14.rb +0 -33
  369. data/test/hexapdf/image_loader/test_jpeg.rb +0 -93
  370. data/test/hexapdf/image_loader/test_pdf.rb +0 -47
  371. data/test/hexapdf/image_loader/test_png.rb +0 -259
  372. data/test/hexapdf/layout/test_box.rb +0 -152
  373. data/test/hexapdf/layout/test_frame.rb +0 -350
  374. data/test/hexapdf/layout/test_image_box.rb +0 -73
  375. data/test/hexapdf/layout/test_inline_box.rb +0 -71
  376. data/test/hexapdf/layout/test_line.rb +0 -206
  377. data/test/hexapdf/layout/test_style.rb +0 -779
  378. data/test/hexapdf/layout/test_text_box.rb +0 -140
  379. data/test/hexapdf/layout/test_text_fragment.rb +0 -375
  380. data/test/hexapdf/layout/test_text_layouter.rb +0 -758
  381. data/test/hexapdf/layout/test_text_shaper.rb +0 -62
  382. data/test/hexapdf/layout/test_width_from_polygon.rb +0 -108
  383. data/test/hexapdf/task/test_dereference.rb +0 -51
  384. data/test/hexapdf/task/test_optimize.rb +0 -162
  385. data/test/hexapdf/test_composer.rb +0 -258
  386. data/test/hexapdf/test_configuration.rb +0 -93
  387. data/test/hexapdf/test_data_dir.rb +0 -32
  388. data/test/hexapdf/test_dictionary.rb +0 -340
  389. data/test/hexapdf/test_dictionary_fields.rb +0 -245
  390. data/test/hexapdf/test_document.rb +0 -641
  391. data/test/hexapdf/test_filter.rb +0 -100
  392. data/test/hexapdf/test_importer.rb +0 -106
  393. data/test/hexapdf/test_object.rb +0 -258
  394. data/test/hexapdf/test_parser.rb +0 -637
  395. data/test/hexapdf/test_pdf_array.rb +0 -169
  396. data/test/hexapdf/test_rectangle.rb +0 -73
  397. data/test/hexapdf/test_reference.rb +0 -50
  398. data/test/hexapdf/test_revision.rb +0 -188
  399. data/test/hexapdf/test_revisions.rb +0 -196
  400. data/test/hexapdf/test_serializer.rb +0 -195
  401. data/test/hexapdf/test_stream.rb +0 -274
  402. data/test/hexapdf/test_tokenizer.rb +0 -80
  403. data/test/hexapdf/test_type.rb +0 -18
  404. data/test/hexapdf/test_writer.rb +0 -140
  405. data/test/hexapdf/test_xref_section.rb +0 -61
  406. data/test/hexapdf/type/acro_form/test_appearance_generator.rb +0 -794
  407. data/test/hexapdf/type/acro_form/test_button_field.rb +0 -302
  408. data/test/hexapdf/type/acro_form/test_choice_field.rb +0 -220
  409. data/test/hexapdf/type/acro_form/test_field.rb +0 -247
  410. data/test/hexapdf/type/acro_form/test_form.rb +0 -353
  411. data/test/hexapdf/type/acro_form/test_signature_field.rb +0 -38
  412. data/test/hexapdf/type/acro_form/test_text_field.rb +0 -195
  413. data/test/hexapdf/type/acro_form/test_variable_text_field.rb +0 -77
  414. data/test/hexapdf/type/actions/test_launch.rb +0 -24
  415. data/test/hexapdf/type/actions/test_uri.rb +0 -23
  416. data/test/hexapdf/type/annotations/test_markup_annotation.rb +0 -22
  417. data/test/hexapdf/type/annotations/test_text.rb +0 -34
  418. data/test/hexapdf/type/annotations/test_widget.rb +0 -225
  419. data/test/hexapdf/type/test_annotation.rb +0 -97
  420. data/test/hexapdf/type/test_catalog.rb +0 -48
  421. data/test/hexapdf/type/test_cid_font.rb +0 -61
  422. data/test/hexapdf/type/test_file_specification.rb +0 -141
  423. data/test/hexapdf/type/test_font.rb +0 -67
  424. data/test/hexapdf/type/test_font_descriptor.rb +0 -61
  425. data/test/hexapdf/type/test_font_simple.rb +0 -176
  426. data/test/hexapdf/type/test_font_true_type.rb +0 -31
  427. data/test/hexapdf/type/test_font_type0.rb +0 -120
  428. data/test/hexapdf/type/test_font_type1.rb +0 -142
  429. data/test/hexapdf/type/test_font_type3.rb +0 -26
  430. data/test/hexapdf/type/test_form.rb +0 -120
  431. data/test/hexapdf/type/test_image.rb +0 -261
  432. data/test/hexapdf/type/test_info.rb +0 -9
  433. data/test/hexapdf/type/test_object_stream.rb +0 -117
  434. data/test/hexapdf/type/test_page.rb +0 -587
  435. data/test/hexapdf/type/test_page_tree_node.rb +0 -315
  436. data/test/hexapdf/type/test_resources.rb +0 -209
  437. data/test/hexapdf/type/test_trailer.rb +0 -116
  438. data/test/hexapdf/type/test_xref_stream.rb +0 -143
  439. data/test/hexapdf/utils/test_bit_field.rb +0 -63
  440. data/test/hexapdf/utils/test_bit_stream.rb +0 -69
  441. data/test/hexapdf/utils/test_graphics_helpers.rb +0 -37
  442. data/test/hexapdf/utils/test_lru_cache.rb +0 -22
  443. data/test/hexapdf/utils/test_object_hash.rb +0 -120
  444. data/test/hexapdf/utils/test_pdf_doc_encoding.rb +0 -18
  445. data/test/hexapdf/utils/test_sorted_tree_node.rb +0 -239
  446. data/test/test_helper.rb +0 -58
data/CHANGELOG.md DELETED
@@ -1,954 +0,0 @@
1
- ## 0.15.8 - 2021-08-16
2
-
3
- ### Fixed
4
-
5
- * Regression when using `-v` with the hexapdf command line tool
6
-
7
-
8
- ## 0.15.7 - 2021-07-17
9
-
10
- ### Fixed
11
-
12
- * Infinite loop while parsing PDF array due to missing closing bracket
13
- * Handling of invalid files with missing or corrupted trailer dictionary
14
-
15
-
16
- ## 0.15.6 - 2021-07-16
17
-
18
- ### Fixed
19
-
20
- * Handling of indirect objects with invalid values which are now treated as null
21
- objects
22
-
23
-
24
- ## 0.15.5 - 2021-07-06
25
-
26
- ### Changed
27
-
28
- * Refactored [HexaPDF::Tokenizer#next_xref_entry] and changed yielded value
29
-
30
-
31
- ### Fixed
32
-
33
- * Handling of invalid cross-reference stream entries that ends with the sequence
34
- `\r\r`
35
-
36
-
37
- ## 0.15.4 - 2021-05-27
38
-
39
- ### Fixed
40
-
41
- * [HexaPDF::Type::Annotation#appearance] to handle cases where there is
42
- no valid appearance stream
43
-
44
-
45
- ## 0.15.3 - 2021-05-01
46
-
47
- ### Fixed
48
-
49
- * Handling of general (not document-level), unencrypted metadata streams
50
-
51
-
52
- ## 0.15.2 - 2021-05-01
53
-
54
- ### Fixed
55
-
56
- * Handling of unencrypted metadata streams
57
-
58
-
59
- ## 0.15.1 - 2021-04-15
60
-
61
- ### Fixed
62
-
63
- * Potential division by zero when calculating the scaling for XObjects
64
- * Handling of XObjects with a width or height of zero when drawing on canvas
65
-
66
-
67
- ## 0.15.0 - 2021-04-12
68
-
69
- ### Added
70
-
71
- * [HexaPDF::Type::Page#flatten_annotations] for flattening the annotations of a
72
- page
73
- * [HexaPDF::Type::AcroForm::Form#flatten] for flattening interactive forms
74
- * [HexaPDF::Revision#update] for updating the stored wrapper class of a PDF
75
- object
76
- * [HexaPDF::Type::AcroForm::SignatureField] for working with AcroForm signature
77
- fields
78
- * Support for form field flattening to the `hexapdf form` CLI command
79
-
80
- ### Changed
81
-
82
- * **Breaking change**: Overhauled the interface for accessing appearances of
83
- annotations to make it more convenient
84
- * Validation of [HexaPDF::Type::FontDescriptor] to delete invalid `/FontWeight`
85
- value
86
- * [HexaPDF::MalformedPDFError#pos] an accessor instead of a reader and update
87
- the exception message
88
- * Configuration option 'acro_form.fallback_font' to allow a callable object for
89
- more advanced fallback font handling
90
-
91
- ### Fixed
92
-
93
- * [HexaPDF::Type::Annotations::Widget#background_color] to correctly handle
94
- empty background color arrays
95
- * [HexaPDF::Type::AcroForm::Field#delete_widget] to update the wrapper object
96
- stored in the document in case the widget is embedded
97
- * Processing of invalid PDF files containing a space,CR,LF combination after
98
- the 'stream' keyword
99
- * Cross-reference stream reconstruction with respect to detection of linearized
100
- files
101
- * Detection of existing appearances for AcroForm push button fields when
102
- creating appearances
103
-
104
-
105
- ## 0.14.4 - 2021-02-27
106
-
107
- ### Added
108
-
109
- * Support for the Crypt filters
110
-
111
- ### Changed
112
-
113
- * [HexaPDF::MalformedPDFError] to make the `pos` argument optional
114
-
115
- ### Fixed
116
-
117
- * Handling of invalid floating point numbers NaN, Inf and -Inf when serializing
118
- * Processing of invalid PDF files containing NaN and Inf instead of numbers
119
- * Bug in Type1 font AFM parser that occured if the file doesn't end with a new
120
- line character
121
- * Cross-reference table reconstruction to handle the case of an entry specifying
122
- a non-existent indirect object
123
- * Cross-reference table reconstruction to handle trailers specified by cross-
124
- reference streams
125
- * Cross-reference table reconstruction to use the set security handle for
126
- decrypting indirect objects
127
- * Parsing of cross-reference streams where data is missing
128
-
129
-
130
- ## 0.14.3 - 2021-02-16
131
-
132
- ### Fixed
133
-
134
- * Bug in [HexaPDF::Font::TrueType::Subsetter#use_glyph] which lead to corrupt
135
- text output
136
- * [HexaPDF::Serializer] to handle infinite recursion problem
137
- * Cross-reference table reconstruction to avoid an O(n^2) performance problem
138
- * [HexaPDF::Type::Resources] validation to handle an invalid `/ProcSet` entry
139
- containing a single value instead of an array
140
- * Processing of invalid PDF files missing a required value in appearance streams
141
- * Processing of invalid empty arrays that should be rectangles by converting
142
- them to PDF null objects
143
- * Processing of invalid PDF files containing indirect objects with offset 0
144
- * Processing of invalid PDF files containing a space/CR or space/LF combination
145
- after the 'stream' keyword
146
-
147
-
148
- ## 0.14.2 - 2021-01-22
149
-
150
- ### Fixed
151
-
152
- * [HexaPDF::Font::TrueType::Subsetter#use_glyph] to really avoid using subset
153
- glyph ID 41 (`)`)
154
-
155
-
156
- ## 0.14.1 - 2021-01-21
157
-
158
- ### Changed
159
-
160
- * Validation message when checking for allowed values to include the invalid
161
- object
162
- * [HexaPDF::FontLoader::FromFile] to allow (re)using an existing font object
163
- * [HexaPDF::Importer] internals to avoid problems with retained memory
164
-
165
- ### Fixed
166
-
167
- * Parsing of invalid PDF files where whitespace is missing after the integer
168
- value of an indirect object
169
- * [HexaPDF::Dictionary] so that adding new key-value pairs during validation is
170
- possible
171
-
172
-
173
- ## 0.14.0 - 2020-12-30
174
-
175
- ### Added
176
-
177
- * Support for creating AcroForm multiline text fields and their appearances
178
- * Support for creating AcroForm comb text fields and their appearances
179
- * Support for creating AcroForm password fields and their appearances
180
- * Support for creating AcroForm file select fields and their appearances
181
- * Support for creating AcroForm list box appearances
182
- * [HexaPDF::Type::AcroForm::ChoiceField#list_box_top_index] and its setter
183
- method
184
- * [HexaPDF::Type::AcroForm::ChoiceField#update_widgets] to create appearances if
185
- they don't exist
186
- * Methods for caching data to [HexaPDF::Object]
187
- * Support for splitting by page size to CLI command `hexapdf split`
188
-
189
- ### Changed
190
-
191
- * [HexaPDF::Utils::ObjectHash#oids] to be public instead of private
192
- * Cross-reference table parsing to handle invalidly numbered main sections
193
- * [HexaPDF::Document#cache] and [HexaPDF::Object#cache] to allow updating
194
- values for existing keys
195
- * Appearance creation methods of AcroForm objects to allow forcing the creation
196
- of new appearances
197
- * [HexaPDF::Type::AcroForm::AppearanceGenerator#create_text_appearances] to
198
- re-use existing form objects
199
- * AcroForm field creation methods to allow specifying often used field
200
- properties
201
-
202
- ### Fixed
203
-
204
- * Missing usage of `:sort` flag for AcroForm choice fields
205
- * Setting the `/I` field for AcroForm list boxes with multiple selection
206
- * [HexaPDF::Layout::TextLayouter::SimpleLineWrapping] to remove glue items
207
- (whitespace) before a hard line break
208
- * Infinite loop when reconstructing the cross-reference table
209
- * [HexaPDF::Type::AcroForm::ChoiceField] to support export values for option
210
- items
211
- * AcroForm text field appearance creation to only create a new appearance if the
212
- field's value has changed
213
- * AcroForm choice field appearance creation to only create a new appearance if
214
- the involved dictionary fields' values have changed
215
- * [HexaPDF::Type::AcroForm::ChoiceField#list_box_top_index=] to raise an error
216
- if no option items are set
217
- * [HexaPDF::PDFArray#to_ary] to return an array with preprocessed values
218
- * [HexaPDF::Type::Form#contents=] to clear cached values to avoid returning e.g.
219
- an invalid canvas object later
220
- * [HexaPDF::Type::AcroForm::ButtonField#update_widgets] to create appearances if
221
- they don't exist
222
-
223
-
224
- ## 0.13.0 - 2020-11-15
225
-
226
- ### Added
227
-
228
- * Cross-reference table reconstruction for damaged PDFs, controllable via the
229
- new 'parser.try_xref_reconstruction' option
230
- * Two new `hexapdf inspect` commands for showing page objects and page content
231
- streams by page number
232
- * Flag `--check` to the CLI command `hexapdf info` for checking a file for
233
- parse and validation errors
234
- * [HexaPDF::Type::AcroForm::Field#embedded_widget?] for checking if a widget is
235
- embedded in the field object
236
- * [HexaPDF::Type::AcroForm::Field#delete_widget] for deleting a widget
237
- * [HexaPDF::PDFArray#delete] for deleting an object from a PDF array
238
- * [HexaPDF::Type::Page#ancestor_nodes] for retrieving all ancestor page tree
239
- nodes of a page
240
- * [HexaPDF::Type::PageTreeNode#move_page] for moving a page to another index
241
-
242
- ### Changed
243
-
244
- * **Breaking change**: Overhauled document/object validation interfaces and
245
- internals to be more similar and to allow for reporting of multiple validation
246
- problems
247
- * Validation of TrueType fonts to ignore missing fields if the font name
248
- suggests that the font is one of the standard 14 PDF fonts
249
- * Option `-p` of CLI command `hexapdf image2pdf` to also allow lowercase page
250
- size names
251
-
252
- ### Fixed
253
-
254
- * Reporting of cross-reference section entry parsing error
255
- * PDF version used by default for dictionary fields
256
- * Error in CLI command `hexapdf inspect` when parsing an invalid object number
257
- * Output of error messages in CLI command `hexapdf inspect` to go to `$stderr`
258
- * Bug in [HexaPDF::Type::AcroForm::TextField] validation due to missing nil
259
- handling
260
-
261
-
262
- ## 0.12.3 - 2020-08-22
263
-
264
- ### Changed
265
-
266
- * Allow any object responding to `#to_sym` when setting a radio button value
267
-
268
- ### Fixed
269
-
270
- * Error in the AcroForm appearance generator for text fields when the font is
271
- not found in the default resources
272
- * Parsing of long numbers when reading a file from IO
273
- * Usage of unsupported method for Ruby 2.4 so that all tests pass again
274
-
275
-
276
- ## 0.12.2 - 2020-08-17
277
-
278
- ### Fixed
279
-
280
- - Wrong origin for page canvases when bottom left corner of media box doesn't
281
- coincide with origin of coordinate system
282
- - Wrong origin for Form XObject canvas when bottom left corner of bounding box
283
- doesn't coincide with origin of coordinate system
284
-
285
-
286
- ## 0.12.1 - 2020-08-16
287
-
288
- ### Added
289
-
290
- * [HexaPDF::Font::Encoding::Base#code] for retrieving the code for a given
291
- glyph name
292
-
293
- ### Fixed
294
-
295
- * [HexaPDF::Font::Type1Wrapper#encode] to correctly resolve the code for a glyph
296
- name
297
-
298
-
299
- ## 0.12.0 - 2020-08-12
300
-
301
- ### Added
302
-
303
- * Convenience methods for accessing field flags for
304
- [HexaPDF::Type::AcroForm::Field]
305
- * [HexaPDF::Type::AcroForm::TextField] and
306
- [HexaPDF::Type::AcroForm::VariableTextField] for basic text field support
307
- * [HexaPDF::Type::AcroForm::ButtonField] for push button, radio button and
308
- check box support
309
- * [HexaPDF::Type::AcroForm::ChoiceField] for combo box and list box support
310
- * [HexaPDF::Type::AcroForm::AppearanceGenerator] as central class for
311
- generating appearance streams for form fields
312
- * Various convenience methods for [HexaPDF::Type::AcroForm::Form]
313
- * Various convenience methods for [HexaPDF::Type::AcroForm::Field]
314
- * Various convenience methods for [HexaPDF::Type::Annotations::Widget]
315
- * [HexaPDF::Type::Annotation::AppearanceDictionary]
316
- * [HexaPDF::Document#acro_form] and [HexaPDF::Type::Catalog#acro_form]
317
- convenience methods
318
- * CLI command `hexapdf form` for listing fields of interactive forms and filling
319
- them out
320
- * [HexaPDF::Rectangle] methods for setting the left, top, right, bottom, width
321
- and height
322
- * Method #prenormalized_color to all color space implementations
323
- * [HexaPDF::Type::Font#font_wrapper] for accessing an associated font wrapper
324
- instance
325
- * [HexaPDF::Type::FontType1#font_wrapper] for providing a font wrapper for the
326
- standard PDF fonts
327
- * [HexaPDF::Type::Annotation::Border] class
328
- * [HexaPDF::Content::ColorSpace::device_color_from_specification] for easily
329
- getting a device color object
330
- * [HexaPDF::Content::ColorSpace::prenormalized_device_color] for getting a device
331
- color object without normalizing values
332
- * [HexaPDF::Type::Annotation#appearance] for returning the associated appearance
333
- dictionary
334
- * [HexaPDF::Type::Annotation#appearance?] for checking whether an appearance for
335
- the annotation exists
336
- * Configuration option 'acro_form.create_appearance_streams' for automatically
337
- creating appearance streams
338
- * [HexaPDF::Type::Resources] methods `#pattern` and `add_pattern`
339
-
340
- ### Changed
341
-
342
- * Deletion of pages to delete them from the document as well
343
- * Refactored [HexaPDF::Font::Type1Wrapper] and [HexaPDF::Font::TrueTypeWrapper]
344
- and renamed `#dict` to `#pdf_object`
345
- * Fall back to the Type1 font's internal encoding when decoding a string
346
- * All [HexaPDF::Content::ColorSpace] implementations to only normalize values
347
- when using the ::color method
348
- * [HexaPDF::Content::Parser#parse] to also accept a block in place of a
349
- processor object
350
- * HexaPDF::Type::AcroForm::Field#full_name to
351
- [HexaPDF::Type::AcroForm::Field#full_field_name]
352
- * Moved `HexaPDF::Content::Canvas#color_space_for_components` to class method on
353
- [HexaPDF::Content::ColorSpace]
354
- * Added bit unsetter method to[HexaPDF::Utils::BitField]
355
- * [HexaPDF::Type::AcroForm::Form#find_root_fields] and `#each_field` to take the
356
- field type into account when wrapping a field dictionary
357
- * Pages specification of CLI commands to allow counting from the end using the
358
- new `r<N>` notation
359
- * [HexaPDF::Font::Type1Wrapper] to use the internal encoding of a font with a
360
- 'Special' character set instead of a custom encoding
361
- * Configuration 'filter.map' to use the pass-through filter on all unsupported
362
- filters
363
-
364
- ### Fixed
365
-
366
- * Wrong normalization of color values when invoking a color operator
367
- * Invalid type of `/DR` field of [HexaPDF::Type::AcroForm::Form]
368
- * Invalid ordering of types for the `/V` and `/DV` fields of
369
- [HexaPDF::Type::AcroForm::Field]
370
- * [HexaPDF::Type::AcroForm::Field#terminal_field?] to work according to the spec
371
- * Handling of empty files by throwing better error messages
372
- * [HexaPDF::Type::Image#info] to correctly identify images with a soft mask as
373
- currently not supported for writing
374
- * [HexaPDF::Revision#delete] to remove the connection between the object and the
375
- document
376
- * Missing `#definition` method of `DeviceRGB`, `DeviceCMYK` and `DeviceGray`
377
- color spaces
378
- * Handling of 'Pattern' color spaces when parsing content streams
379
-
380
-
381
- ## 0.11.9 - 2020-06-15
382
-
383
- ### Changed
384
-
385
- * Encryption dictionaries to always be indirect objects
386
-
387
-
388
- ## 0.11.8 - 2020-06-11
389
-
390
- ### Fixed
391
-
392
- * Serialization of special `/` (zero-length name) object in dictionaries and
393
- arrays
394
-
395
-
396
- ## 0.11.7 - 2020-06-10
397
-
398
- ### Fixed
399
-
400
- * Deletion of object streams in [HexaPDF::Task::Optimize] to avoid accessing
401
- then invalid object streams
402
- * [HexaPDF::Task::Optimize] to work correctly when deleting object streams and
403
- generating xref streams
404
-
405
-
406
- ## 0.11.6 - 2020-05-27
407
-
408
- ### Fixed
409
-
410
- * [HexaPDF::Layout::TextBox] to respect the set width and height when fitting
411
- and splitting the box
412
-
413
-
414
- ## 0.11.5 - 2020-01-27
415
-
416
- ### Changed
417
-
418
- * [HexaPDF::Font::TrueType::Table::CmapSubtable] to lazily parse the subtable
419
- * [HexaPDF::Font::TrueType::Table::Hmtx] to lazily parse the width data
420
- * CLI command `hexapdf image2pdf` to use the last argument as output file
421
- instead of the first (same order as `merge`)
422
- * Automatically require the HexaPDF C extension if it is installed
423
-
424
- ### Fixed
425
-
426
- * Wrong line length calculation for variable width layouting when a text box is
427
- too wide and needs to be broken into parts
428
- * CLI command `hexapdf image2pdf` so that treating a PDF as image works
429
-
430
-
431
- ## 0.11.4 - 2019-12-28
432
-
433
- ### Fixed
434
-
435
- * Memory consumption problem of PNG image loader when using images with alpha
436
- channel
437
-
438
-
439
- ## 0.11.3 - 2019-11-27
440
-
441
- ### Fixed
442
-
443
- * Restore compatibility with Ruby 2.4
444
-
445
-
446
- ## 0.11.2 - 2019-11-22
447
-
448
- ### Fixed
449
-
450
- * Conversion of [HexaPDF::Rectangle] type when the original is not a plain
451
- Array but a [HexaPDF::PDFArray]
452
-
453
-
454
- ## 0.11.1 - 2019-11-19
455
-
456
- ### Fixed
457
-
458
- * [HexaPDF::Type::AcroForm::Form#find_root_fields] to work for documents where
459
- not all pages have form fields
460
-
461
-
462
- ## 0.11.0 - 2019-11-19
463
-
464
- ### Added
465
-
466
- * [HexaPDF::PDFArray] to wrap arrays and allow automatic resolution of
467
- references like with [HexaPDF::Dictionary] - MAY BREAK THINGS!
468
- * CLI command `hexapdf watermark` to apply a watermark PDF as background or
469
- stamp onto another PDF file
470
- * CLI command `hexapdf image2pdf` to convert images into a PDF file
471
- * [HexaPDF::DictionaryFields::Field#allowed_values] to allow constraining a
472
- field to certain allowed values
473
- * [HexaPDF::Document::Fonts#configured_fonts] to return all font variants that
474
- are configured and available for adding to a document
475
- * [HexaPDF::Type::Annotations::Widget] and associated classes
476
- * [HexaPDF::Type::AcroForm::Form] and [HexaPDF::Type::AcroForm::Field] for basic
477
- AcroForm support
478
-
479
- ### Changed
480
-
481
- * Use Reline for interactive mode of `hexapdf inspect` if available
482
- * [HexaPDF::DictionaryFields::Field::new] to use keyword arguments
483
- * Update the field information for implemented PDF types to include the allowed
484
- values where possible
485
- * Interface of font loader objects to allow another method `available_fonts` for
486
- returning all available fonts
487
- * [HexaPDF::Layout::Style] to check for valid values where possible
488
-
489
- ### Fixed
490
-
491
- * Line spacing of empty lines for [HexaPDF::Layout::TextLayouter]
492
- * Handling of `/DecodeParms` when exporting to PNG images
493
-
494
-
495
- ## 0.10.0 - 2019-10-02
496
-
497
- ### Added
498
-
499
- * [HexaPDF::Reference#to_s] to return the serialized form of the PDF reference
500
- * [HexaPDF::Revision#xref] for getting cross-reference entries
501
- * HexaPDF::XRefSection::Entry#to_s to return a description of the
502
- cross-reference entry
503
-
504
- ### Changed
505
-
506
- * Enhanced the `hexapdf images` command to also show information on PPI (pixels
507
- per inch) and size
508
- * Completely revamped the `hexapdf inspect` command with an interactive mode,
509
- structure output, cross-reference entry output and object search
510
- * Output of validation problem messages for `hexapdf` command to include more
511
- information
512
- * The Validation feature to automatically correct String-for-Symbol and
513
- Symbol-for-String problems
514
-
515
- ### Fixed
516
-
517
- * [HexaPDF::Document#wrap] to better handle subtype mappings in case of unknown
518
- type information
519
- * [HexaPDF::DictionaryFields::DictionaryConverter] to not allow conversion to a
520
- [HexaPDF::Stream] subclass from objects without stream data
521
- * Import of JPEG images with YCCK color encoding
522
- * Export of images without `/FlateDecode` filter or `/DecodeParms` to PNG files
523
- * Mistyped name of field type for field `/Popup` of
524
- [HexaPDF::Type::Annotations::MarkupAnnotation]
525
- * Loading and saving of encrypted and signed PDFs
526
- * CLI commands that optimize font data structures won't crash when encountering
527
- invalid font objects
528
-
529
-
530
- ## 0.9.3 - 2019-06-13
531
-
532
- ### Changed
533
-
534
- * Behaviour of how object streams are generated to work around a bug (?) in
535
- Adobe Acrobat
536
-
537
- ### Fixed
538
-
539
- * Fix problem with [HexaPDF::Encryption::StandardSecurityHandler] due to
540
- behaviour change of Ruby 2.6.0 in `String#setbyte`
541
-
542
- ## 0.9.2 - 2019-05-22
543
-
544
- ### Changed
545
-
546
- * [HexaPDF::Encryption::AES] to handle invalid padding
547
- * [HexaPDF::Filter::FlateDecode] to correctly handle invalid empty streams
548
-
549
- ## 0.9.1 - 2019-03-26
550
-
551
- ### Fixed
552
-
553
- * [HexaPDF::Serializer] to avoid infinite loops for self-referencing streams
554
- * Bug due to frozen string in [HexaPDF::Font::CMap::Writer]
555
-
556
-
557
- ## 0.9.0 - 2018-12-31
558
-
559
- ### Added
560
-
561
- * [HexaPDF::Composer] for composing PDF documents in a high-level way
562
- * Incremental writing support (i.e. appending a single revision with all the
563
- changes to an existing document) to [HexaPDF::Writer] and [HexaPDF::Document]
564
- * CLI command `hexapdf split` to split a PDF file into individual pages
565
- * [HexaPDF::Revisions#parser] for accessing the parser object that is created
566
- when a document is read from an IO stream
567
- * [HexaPDF::Document#each] argument `only_loaded` for iteration over loaded
568
- objects only
569
- * [HexaPDF::Document#validate] argument `only_loaded` for validating only loaded
570
- objects
571
- * [HexaPDF::Revision#each_modified_object] for iterating over all modified
572
- objects of a revision
573
- * [HexaPDF::Layout::Box#split] and [HexaPDF::Layout::TextBox#split] for
574
- splitting a box into two parts
575
- * [HexaPDF::Layout::Frame#full?] for testing whether the frame has any space
576
- left
577
- * [HexaPDF::Layout::Style] property `last_line_gap` for controlling the spacing
578
- after the last line of text
579
- * HexaPDF::Layout::Box#draw_content for use by subclasses
580
- * [HexaPDF::Type::Form#width] and [HexaPDF::Type::Form#height] for compatibility
581
- with [HexaPDF::Type::Image]
582
- * [HexaPDF::Layout::ImageBox] for displaying an image inside a frame
583
-
584
- ### Changed
585
-
586
- * [HexaPDF::Revision#each] to allow iteration over loaded objects only
587
- * [HexaPDF::Document#each] method argument from `current` to `only_current`
588
- * [HexaPDF::Object#==] and [HexaPDF::Reference#==] so that Object and Reference
589
- objects can be compared
590
- * Refactored [HexaPDF::Layout::Frame] to allow separate fitting, splitting and
591
- drawing of boxes
592
- * [HexaPDF::Layout::Style::LineSpacing::new] to allow setting of line spacing
593
- via a single hash argument
594
- * Made [HexaPDF::Layout::Style] copyable
595
-
596
- ### Fixed
597
-
598
- * Configuration so that annotation objects are correctly mapped to classes
599
- * Fix problem with [HexaPDF::Filter::Predictor] due to behaviour change of Ruby
600
- 2.6.0 in `String#setbyte`
601
- * Fitting of [HexaPDF::Layout::TextBox] when the box has padding and/or borders
602
- * Fitting of [HexaPDF::Layout::TextBox] when width and/or height has been set
603
- * Fitting of absolutely positioned boxes in [HexaPDF::Layout::Frame]
604
- * Fix bug in variable width line wrapping due to not considering line spacing
605
- correctly ([HexaPDF::Layout::Line::HeightCalculator#simulate_height] return
606
- value needed to be changed for this fix)
607
-
608
- ## 0.8.0 - 2018-10-26
609
-
610
- ### Added
611
-
612
- * [HexaPDF::Layout::Frame] for box positioning and easier text layouting
613
- inside an arbitrary polygon
614
- * [HexaPDF::Layout::TextBox] for displaying text in a rectangular and for
615
- flowing text inside a frame
616
- * [HexaPDF::Layout::WidthFromPolygon] for getting a width specification from
617
- a polygon for use with the text layouting engine
618
- * [HexaPDF::Type::Image#width] and [HexaPDF::Type::Image#height] convenience
619
- methods
620
- * [HexaPDF::Type::FontType3] for Type 3 font support
621
- * [HexaPDF::Content::GraphicObject::Geom2D] for [Geom2D] object drawing support
622
- * [HexaPDF::Type::Page#orientation] for easy determination of page orientation
623
- * [HexaPDF::Type::Page#rotate] for rotating a page
624
- * [HexaPDF::Layout::Style::Quad#set] for setting all values at once
625
-
626
- ### Changed
627
-
628
- * [HexaPDF::Document#validate] to also yield the object that failed validation
629
- * [HexaPDF::Type::Page#box] to allow setting the value for a box
630
- * [HexaPDF::Layout::TextLayouter#fit] to allow fitting text into arbitrarily
631
- shaped areas
632
- * [HexaPDF::Layout::TextLayouter] to return a new
633
- [HexaPDF::Layout::TextLayouter::Result] structure when `#fit` is called that
634
- includes the `#draw` method
635
- * [HexaPDF::Layout::TextLayouter#fit] to require the height argument
636
- * Refactored [HexaPDF::Layout::Box] to make using it a bit easier
637
-
638
- ### Fixed
639
-
640
- * Validation and conversion of dictionary fields with multiple possible types
641
- * Box border drawing when border width is greater than edge length
642
-
643
- [geom2d]: https://github.com/gettalong/geom2d
644
-
645
-
646
- ## 0.7.0 - 2018-06-19
647
-
648
- ### Changed
649
-
650
- * All Ruby source files use frozen string literal pragma
651
- * [HexaPDF::MalformedPDFError::new] method signature
652
- * [HexaPDF::Layout::TextFragment::new] and
653
- [HexaPDF::Layout::TextFragment::create] method signatures
654
- * [HexaPDF::Encryption::SecurityHandler#set_up_encryption] argument `force_V4`
655
- to `force_v4`
656
- * HexaPDF::Layout::TextLayouter#draw to return result of #fit if possible
657
-
658
- ### Removed
659
-
660
- * Optional `leading` argument to HexaPDF::Content::Canvas#font_size method
661
-
662
- ### Fixed
663
-
664
- * Misspelt variable name in [HexaPDF::Layout::TextLayouter::SimpleLineWrapping]
665
- * [HexaPDF::Layout::TextLayouter::SimpleTextSegmentation] to work if the last
666
- character in a text fragment is \r
667
- * [HexaPDF::Layout::TextLayouter] to work if an optional break point (think
668
- soft-hyphen) is followed by whitespace
669
- * [HexaPDF::Font::TrueType::Builder] to correctly order the entries in the
670
- table directory
671
- * [HexaPDF::Font::TrueType::Builder] to pad the table data to achieve the
672
- correct alignment
673
- * [HexaPDF::Filter::FlateDecode] by removing the Zlib pools since they were
674
- not thread safe
675
- * All color space classes to accept the color space definition as argument to
676
- `::new`
677
-
678
-
679
- ## 0.6.0 - 2017-10-27
680
-
681
- ### Added
682
-
683
- * [HexaPDF::Layout::Box] as base class for all layout boxes
684
- * More styling properties for [HexaPDF::Layout::Style]
685
- * Methods for checking whether styling properties in [HexaPDF::Layout::Style]
686
- have been accessed or set
687
- * [HexaPDF::FontLoader::FromFile] to allow specifying a font file directly
688
- * Configuration option 'page.default_media_orientation' for settig the default
689
- orientation of new pages
690
- * Convenience methods for getting underline and strikeout properties from fonts
691
- * Configuration option 'style.layers_map' for pre-defining overlay and underlay
692
- callback objects for [HexaPDF::Layout::Style]
693
- * [HexaPDF::Type::Action] as well as specific implementations for the GoTo,
694
- GoToR, Launch and URI actions
695
- * [HexaPDF::Type::Annotation] as well as specific implementations for the Text
696
- Link annotations
697
- * [HexaPDF::Layout::Style::LinkLayer] for easy adding of in-document, URI and
698
- file links
699
-
700
- ### Changed
701
-
702
- * [HexaPDF::Layout::TextFragment] to support more styling properties
703
- * Cross-reference subsection parsing can handle missing whitespace
704
- * Renamed HexaPDF::Layout::LineFragment to [HexaPDF::Layout::Line]
705
- * Renamed HexaPDF::Layout::TextBox to [HexaPDF::Layout::TextLayouter]
706
- * [HexaPDF::Layout::TextFragment::new] and
707
- [HexaPDF::Layout::TextLayouter::new] to either take a Style object or
708
- style options
709
- * [HexaPDF::Layout::TextLayouter#fit] method signature
710
- * [HexaPDF::Layout::InlineBox] to wrap a generic box
711
- * HexaPDF::Document::Fonts#load to [HexaPDF::Document::Fonts#add] for
712
- consistency
713
- * [HexaPDF::Document::Pages#add] to allow setting the paper orientation when
714
- creating new pages
715
- * [HexaPDF::Filter::Predictor] to allow correcting some common problems
716
- depending on the new configuration option 'filter.predictor.strict'
717
- * Moved configuration options 'encryption.aes', 'encryption.arc4',
718
- 'encryption.filter_map', 'encryption.sub_filter.map', 'filter.map',
719
- 'image_loader' and 'task.map' to the document specific configuration object
720
- * [HexaPDF::Configuration#constantize] can now dig into hierarchical values
721
- * [HexaPDF::Document#wrap] class resolution and configuration option structure
722
- of 'object.subtype_map'
723
-
724
- ### Removed
725
-
726
- * HexaPDF::Dictionary#to_hash method
727
-
728
- ### Fixed
729
-
730
- * [HexaPDF::Layout::TextLayouter#fit] to split text fragment into parts if the
731
- fragment doesn't fit on an empty line
732
- * Parsing of PDF files containing a loop with respect to cross-reference tables
733
- * [HexaPDF::Layout::InlineBox] to act as placeholder if no drawing block is
734
- given
735
- * Undefined method error in [HexaPDF::Content::Canvas] by raising a proper error
736
- * Invalid handling of fonts by [HexaPDF::Content::Canvas] when saving and
737
- restoring the graphics state
738
- * [HexaPDF::Layout::TextLayouter] so that text fragments don't pollute the
739
- graphics state
740
- * [HexaPDF::Content::Operator::SetTextRenderingMode] to normalize the value
741
- * [HexaPDF::Stream#stream_source] to always return a decrypted stream
742
- * [HexaPDF::Layout::TextLayouter] to correctly indent all paragraphs, not just
743
- the first one
744
- * One-off error in [HexaPDF::Filter::LZWDecode]
745
- * [HexaPDF::Configuration#merge] to duplicate array values to avoid unwanted
746
- modifications
747
- * [HexaPDF::Dictionary#key?] to return false if the key is present but nil
748
- * [HexaPDF::DictionaryFields::FileSpecificationConverter] to convert hash and
749
- dictionaries
750
- * Field /F definition in [HexaPDF::Stream]
751
-
752
-
753
- ## 0.5.0 - 2017-06-24
754
-
755
- ### Added
756
-
757
- * HexaPDF::Layout::TextBox for easy positioning and layouting of text
758
- * HexaPDF::Layout::LineFragment for single text line layout calculations
759
- * [HexaPDF::Layout::TextShaper] for text shaping functionality
760
- * [HexaPDF::Layout::TextFragment] for basic text metrics calculations
761
- * [HexaPDF::Layout::InlineBox] for fixed size inline graphics
762
- * [HexaPDF::Layout::Style] as container for text and graphics styling properties
763
- * Support for kerning of TrueType fonts via the 'kern' table
764
- * Support for determining the features provided by a font
765
-
766
- ### Changed
767
-
768
- * Handling of invalid glyphs is done using the special
769
- [HexaPDF::Font::InvalidGlyph] class
770
- * Configuration option 'font.on_missing_glyph'; returns an invalid glyph
771
- instead of raising an error
772
- * Bounding box of TrueType glyphs without contours is set to `[0, 0, 0, 0]`
773
- * Ligature pairs for AFM fonts are stored like kerning pairs
774
- * Use TrueType configuration option 'font.true_type.unknown_format' in all
775
- places where applicable
776
- * Allow passing a font object to [HexaPDF::Content::Canvas#font]
777
- * Handle invalid entry in TrueType format 4 cmap subtable encountered in the
778
- wild gracefully
779
- * Invalid positive descent values in font descriptors are now changed into
780
- negative ones by the validation feature
781
- * Allow specifying the page media box or a page format when adding a new page
782
- through [HexaPDF::Document::Pages#add]
783
-
784
- ### Fixed
785
-
786
- * [HexaPDF::Task::Dereference] to work correctly when encountering invalid
787
- references
788
- * [HexaPDF::Tokenizer] and HexaPDF::Content::Tokenizer to parse a solitary
789
- plus sign
790
- * Usage of Strings instead of Symbols for AFM font kerning and ligature pairs
791
- * Processing the contents of form XObjects in case they don't have a resources
792
- dictionary
793
- * Deletion of valid page node when optimizing page trees with the `hexapdf
794
- optimize` command
795
- * [HexaPDF::Type::FontType0] to always wrap the descendant font even if it is a
796
- direct object
797
-
798
-
799
- ## 0.4.0 - 2017-03-19
800
-
801
- ### Added
802
-
803
- * [HexaPDF::Type::FontType0] and [HexaPDF::Type::CIDFont] for composite font
804
- support
805
- * Complete support for CMaps for use with composite fonts; the interface for
806
- [HexaPDF::Font::CMap] changed to accomodate this
807
- * CLI command `hexapdf batch` for batch execution of a single command for
808
- multiple input files
809
- * CLI option `--verbose` for more verbose output; also changed the default
810
- verbosity level to only display warnings and not informational messages
811
- * CLI option `--quiet` for suppressing additional and diagnostic output
812
- * CLI option `--strict` for enabling strict parsing and validation; also
813
- changed the default from strict to non-strict parsing/validation
814
- * CLI optimization option `--optimize-fonts` for optimizing embedded fonts
815
- * Method `#word_spacing_applicable?` to font types
816
- * Support for marked-content points and sequences in [HexaPDF::Content::Canvas]
817
- * Support for property lists in a page's resource dictionary
818
- * Show file name and size in `hexapdf info` output
819
- * [HexaPDF::Type::Font#font_file] for getting the embedded font file
820
- * [HexaPDF::Font::TrueType::Optimizer] for optimizing TrueType fonts
821
- * Configuration option 'filter.flate_memory' for configuring memory use of the
822
- [HexaPDF::Filter::FlateDecode] filter
823
- * Method [HexaPDF::Content::Canvas#show_glyphs_only] for faster glyph showing
824
- without text matrix calculations
825
- * Methods for caching expensive computations of PDF objects
826
- ([HexaPDF::Document#cache] and others)
827
-
828
- ### Changed
829
-
830
- * Enabled in-place processing of PDF files for all CLI commands
831
- * Show warning instead of exiting when extracting images with `hexapdf images`
832
- and an image format is not supported
833
- * Handling of character code to Unicode mapping:
834
- - [HexaPDF::Font::CMap#to_unicode], [HexaPDF::Font::Encoding::Base#unicode]
835
- and [HexaPDF::Font::Encoding::GlyphList#name_to_unicode] return `nil`
836
- instead of an empty string
837
- - Font dictionaries use the new configuration option
838
- 'font.on_missing_unicode_mapping' in their `#to_utf8` method
839
- * [HexaPDF::Configuration#constantize] to raise error if constant is not found
840
- * Extracted TrueType font file building code into new module
841
- [HexaPDF::Font::TrueType::Builder]
842
- * [HexaPDF::Filter::FlateDecode] filter to use pools of Zlib inflaters and
843
- deflaters to conserve memory
844
-
845
- ### Fixed
846
-
847
- * Use of wrong glyph IDs for glyph width entries and unicode mapping for subset
848
- TrueType fonts
849
- * Invalid document reference when importing wrapped direct objects with
850
- [HexaPDF::Importer]
851
- * Invalid type of /DW key in CIDFont dictionary when embedding TrueType fonts
852
- * Caching problem in [HexaPDF::Document::Fonts] which lead to multiple instances
853
- of the same font
854
- * Bug in handling of word spacing with respect to offset calculations when
855
- showing or extracting text
856
- * Incorrect handling of page rotation values in `hexapdf merge`
857
- * Missing handling of certain rotation values in `hexapdf modify`
858
- * Removal of unused pages in `hexapdf modify`
859
- * Handling of invalid page numbers in CLI commands
860
- * Useless multiple extraction of the same image in `hexapdf images`
861
- * Type of /VP entry of [HexaPDF::Type::Page]
862
- * Parsing of inline images that contain the end-of-image marker
863
- * High memory usage due to not closing `Zlib::Stream` objects in
864
- [HexaPDF::Filter::FlateDecode]
865
-
866
-
867
- ## 0.3.0 - 2017-01-25
868
-
869
- ### Added
870
-
871
- * TrueType font subsetting support
872
- * Image extraction ability to CLI via `hexapdf images` command
873
- * [HexaPDF::Type::Image#write] for writing an image XObject to an IO stream or
874
- file
875
- * [HexaPDF::Type::Image#info] for getting image properties of an image XObject
876
- * CLI option `--[no-]force` to force overwriting existing files
877
-
878
- ### Changed
879
-
880
- * Refactor `hexapdf modify` command into three individual commands `modify`,
881
- `merge` and `optimize`
882
- * Rename `hexapdf extract` to `hexapdf files` and the option `--indices` to
883
- `--extract`
884
- * Show PDF trailer by default with `hexapdf inspect`
885
- * Refactor CLI command classes to use specialized superclass
886
- [HexaPDF::CLI::Command]
887
- * Optimize parsing of PDF files for better performance and memory efficiency
888
-
889
- ### Fixed
890
-
891
- * Writing of hybrid-reference PDF files - they are written as standard PDF files
892
- since all current applications should be able to handle PDF 1.5
893
- * Serialization of self-referential, indirect PDF objects
894
- * Performance problem for `hexapdf inspect --pages` when inspecting huge files
895
- * TrueType compound glyph component offset calculation
896
- * Parsing of TrueType data type 'fixed'
897
- * Updating a PDF trailer's ID field when it isn't an array
898
-
899
- ## 0.2.0 - 2016-11-28
900
-
901
- ### Added
902
-
903
- * PDF file merge ability to `hexapdf modify`, i.e. adding pages from other PDFs
904
- * Page interleaving support to 'hexapdf modify'
905
- * Step values in pages definitions for CLI commands
906
- * Convenience class for working with pages through [HexaPDF::Document#pages]
907
- with a more Ruby-like interface
908
- * Method [HexaPDF::Type::Form#canvas]
909
- * Method [HexaPDF::Type::Page#index]
910
- * Validation for [HexaPDF::Rectangle] objects
911
- * [HexaPDF::Font::Type1::FontMetrics#weight_class] for returning the numeric
912
- weight
913
-
914
- ### Changed
915
-
916
- * Refactor document utilities into own classes with a more Ruby-like interface;
917
- concern fonts, images and files, now accessible through
918
- [HexaPDF::Document#fonts], [HexaPDF::Document#images] and
919
- [HexaPDF::Document#files]
920
- * Validate nested collection values in [HexaPDF::Object]
921
- * Allow [HexaPDF::Dictionary#[]] to always unwrap nil values
922
- * Update [HexaPDF::Task::Optimize] to delete unused objects on `:compact`
923
- * Allow [HexaPDF::Type::PageTreeNode#delete_page] to take a page object or a
924
- page index
925
- * Don't set /EFF key in encryption dictionary
926
- * Better error handling for hexapdf CLI commands
927
- * Show help output when no command is given for `hexapdf` CLI
928
- * Set /FontWeight in [HexaPDF::Font::Type1Wrapper]
929
- * Use kramdown's man page support for the `hexapdf` man page instead of ronn
930
-
931
- ### Removed
932
-
933
- * Remove unneeded parts of TrueType implementation
934
-
935
- ### Fixed
936
-
937
- * Problem with unnamed classes/modules on serialization
938
- * Handle potentially indirect objects correctly in [HexaPDF::Object::deep_copy]
939
- * [HexaPDF::Revisions#merge] for objects that appear in multiple revisions
940
- * Output of `--pages` option of 'hexapdf inspect' command
941
- * Infinite recursion problem in [HexaPDF::Task::Dereference]
942
- * Problem with iteration over images in certain cases
943
- * [HexaPDF::Type::Page#[]] with respect to inherited fields
944
- * Problems with access permissions on encryption
945
- * Encryption routine of standard security handler with respect to owner password
946
- * Invalid check in validation of standard encryption dictionary
947
- * 'hexapdf modify' command to support files with many pages
948
- * Validation of encryption key for encryption revision 6
949
- * Various parts of the API documentation
950
-
951
-
952
- ## 0.1.0 - 2016-10-26
953
-
954
- * Initial release