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