hexapdf 1.5.0 → 1.7.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +54 -0
  3. data/README.md +8 -7
  4. data/examples/022-outline.rb +5 -1
  5. data/examples/032-acro_form_list_and_fill.rb +47 -0
  6. data/examples/033-text_extraction.rb +34 -0
  7. data/lib/hexapdf/cli/debug_info.rb +98 -0
  8. data/lib/hexapdf/cli/images.rb +2 -2
  9. data/lib/hexapdf/cli/info.rb +2 -0
  10. data/lib/hexapdf/cli/inspect.rb +5 -1
  11. data/lib/hexapdf/cli.rb +2 -0
  12. data/lib/hexapdf/configuration.rb +8 -0
  13. data/lib/hexapdf/content/canvas.rb +1 -1
  14. data/lib/hexapdf/content/smart_text_extractor.rb +305 -0
  15. data/lib/hexapdf/content.rb +2 -0
  16. data/lib/hexapdf/digital_signature/signing/default_handler.rb +1 -15
  17. data/lib/hexapdf/digital_signature/signing/signed_data_creator.rb +21 -8
  18. data/lib/hexapdf/document.rb +7 -3
  19. data/lib/hexapdf/encryption/security_handler.rb +3 -1
  20. data/lib/hexapdf/filter/brotli_decode.rb +88 -0
  21. data/lib/hexapdf/filter.rb +1 -0
  22. data/lib/hexapdf/font/cmap.rb +10 -6
  23. data/lib/hexapdf/font/true_type/builder.rb +1 -1
  24. data/lib/hexapdf/font/true_type/font.rb +13 -0
  25. data/lib/hexapdf/font/true_type/subsetter.rb +7 -2
  26. data/lib/hexapdf/font/true_type/table/directory.rb +5 -0
  27. data/lib/hexapdf/font/true_type.rb +1 -0
  28. data/lib/hexapdf/layout/style.rb +6 -2
  29. data/lib/hexapdf/parser.rb +29 -4
  30. data/lib/hexapdf/revision.rb +6 -2
  31. data/lib/hexapdf/task/pdfa.rb +108 -1
  32. data/lib/hexapdf/type/acro_form/field.rb +4 -1
  33. data/lib/hexapdf/type/acro_form/form.rb +4 -0
  34. data/lib/hexapdf/type/acro_form/text_field.rb +4 -2
  35. data/lib/hexapdf/type/annotations/widget.rb +9 -0
  36. data/lib/hexapdf/type/document_security_store.rb +80 -0
  37. data/lib/hexapdf/type/page.rb +11 -0
  38. data/lib/hexapdf/type.rb +1 -0
  39. data/lib/hexapdf/version.rb +1 -1
  40. data/test/data/pdfa/mismatching_glyph_widths_cidfont_type2.pdf +0 -0
  41. data/test/hexapdf/content/test_smart_text_extractor.rb +129 -0
  42. data/test/hexapdf/digital_signature/common.rb +19 -5
  43. data/test/hexapdf/digital_signature/signing/test_signed_data_creator.rb +29 -4
  44. data/test/hexapdf/digital_signature/test_signatures.rb +3 -3
  45. data/test/hexapdf/encryption/test_security_handler.rb +7 -5
  46. data/test/hexapdf/filter/test_brotli_decode.rb +34 -0
  47. data/test/hexapdf/font/true_type/table/test_directory.rb +5 -3
  48. data/test/hexapdf/font/true_type/test_builder.rb +9 -0
  49. data/test/hexapdf/font/true_type/test_font.rb +17 -3
  50. data/test/hexapdf/font/true_type/test_subsetter.rb +4 -3
  51. data/test/hexapdf/task/test_pdfa.rb +72 -0
  52. data/test/hexapdf/test_document.rb +13 -0
  53. data/test/hexapdf/test_parser.rb +55 -3
  54. data/test/hexapdf/test_revision.rb +27 -6
  55. data/test/hexapdf/type/acro_form/test_field.rb +5 -0
  56. data/test/hexapdf/type/acro_form/test_form.rb +6 -0
  57. data/test/hexapdf/type/acro_form/test_text_field.rb +7 -1
  58. data/test/hexapdf/type/annotations/test_widget.rb +11 -0
  59. data/test/hexapdf/type/test_page.rb +8 -0
  60. data/test/test_helper.rb +6 -0
  61. metadata +41 -4
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexapdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-12-08 00:00:00.000000000 Z
10
+ date: 2026-04-13 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: cmdparse
@@ -77,6 +77,20 @@ dependencies:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
79
  version: 3.1.2
80
+ - !ruby/object:Gem::Dependency
81
+ name: brotli
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '0.7'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '0.7'
80
94
  - !ruby/object:Gem::Dependency
81
95
  name: kramdown
82
96
  requirement: !ruby/object:Gem::Requirement
@@ -97,14 +111,28 @@ dependencies:
97
111
  requirements:
98
112
  - - "~>"
99
113
  - !ruby/object:Gem::Version
100
- version: '5.16'
114
+ version: '6.0'
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '6.0'
122
+ - !ruby/object:Gem::Dependency
123
+ name: minitest-mock
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '5.27'
101
129
  type: :development
102
130
  prerelease: false
103
131
  version_requirements: !ruby/object:Gem::Requirement
104
132
  requirements:
105
133
  - - "~>"
106
134
  - !ruby/object:Gem::Version
107
- version: '5.16'
135
+ version: '5.27'
108
136
  - !ruby/object:Gem::Dependency
109
137
  name: reline
110
138
  requirement: !ruby/object:Gem::Requirement
@@ -320,6 +348,8 @@ files:
320
348
  - examples/029-composer_fallback_fonts.rb
321
349
  - examples/030-pdfa.rb
322
350
  - examples/031-acro_form_java_script.rb
351
+ - examples/032-acro_form_list_and_fill.rb
352
+ - examples/033-text_extraction.rb
323
353
  - examples/emoji-smile.png
324
354
  - examples/emoji-wink.png
325
355
  - examples/machupicchu.jpg
@@ -327,6 +357,7 @@ files:
327
357
  - lib/hexapdf/cli.rb
328
358
  - lib/hexapdf/cli/batch.rb
329
359
  - lib/hexapdf/cli/command.rb
360
+ - lib/hexapdf/cli/debug_info.rb
330
361
  - lib/hexapdf/cli/files.rb
331
362
  - lib/hexapdf/cli/fonts.rb
332
363
  - lib/hexapdf/cli/form.rb
@@ -355,6 +386,7 @@ files:
355
386
  - lib/hexapdf/content/operator.rb
356
387
  - lib/hexapdf/content/parser.rb
357
388
  - lib/hexapdf/content/processor.rb
389
+ - lib/hexapdf/content/smart_text_extractor.rb
358
390
  - lib/hexapdf/content/transformation_matrix.rb
359
391
  - lib/hexapdf/data_dir.rb
360
392
  - lib/hexapdf/dictionary.rb
@@ -393,6 +425,7 @@ files:
393
425
  - lib/hexapdf/filter.rb
394
426
  - lib/hexapdf/filter/ascii85_decode.rb
395
427
  - lib/hexapdf/filter/ascii_hex_decode.rb
428
+ - lib/hexapdf/filter/brotli_decode.rb
396
429
  - lib/hexapdf/filter/crypt.rb
397
430
  - lib/hexapdf/filter/encryption.rb
398
431
  - lib/hexapdf/filter/flate_decode.rb
@@ -527,6 +560,7 @@ files:
527
560
  - lib/hexapdf/type/catalog.rb
528
561
  - lib/hexapdf/type/cid_font.rb
529
562
  - lib/hexapdf/type/cmap.rb
563
+ - lib/hexapdf/type/document_security_store.rb
530
564
  - lib/hexapdf/type/embedded_file.rb
531
565
  - lib/hexapdf/type/file_specification.rb
532
566
  - lib/hexapdf/type/font.rb
@@ -626,6 +660,7 @@ files:
626
660
  - test/data/images/truecolour-srgb-8bit.png
627
661
  - test/data/images/ycck.jpg
628
662
  - test/data/minimal.pdf
663
+ - test/data/pdfa/mismatching_glyph_widths_cidfont_type2.pdf
629
664
  - test/data/standard-security-handler/README
630
665
  - test/data/standard-security-handler/bothpwd-aes-128bit-V4.pdf
631
666
  - test/data/standard-security-handler/bothpwd-aes-256bit-V5-R5.pdf
@@ -663,6 +698,7 @@ files:
663
698
  - test/hexapdf/content/test_operator.rb
664
699
  - test/hexapdf/content/test_parser.rb
665
700
  - test/hexapdf/content/test_processor.rb
701
+ - test/hexapdf/content/test_smart_text_extractor.rb
666
702
  - test/hexapdf/content/test_transformation_matrix.rb
667
703
  - test/hexapdf/digital_signature/common.rb
668
704
  - test/hexapdf/digital_signature/signing/test_default_handler.rb
@@ -696,6 +732,7 @@ files:
696
732
  - test/hexapdf/filter/common.rb
697
733
  - test/hexapdf/filter/test_ascii85_decode.rb
698
734
  - test/hexapdf/filter/test_ascii_hex_decode.rb
735
+ - test/hexapdf/filter/test_brotli_decode.rb
699
736
  - test/hexapdf/filter/test_crypt.rb
700
737
  - test/hexapdf/filter/test_encryption.rb
701
738
  - test/hexapdf/filter/test_flate_decode.rb