hexapdf 0.15.8 → 0.17.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hexapdf/cli/batch.rb +1 -1
- data/lib/hexapdf/cli/command.rb +10 -1
- data/lib/hexapdf/cli/files.rb +1 -1
- data/lib/hexapdf/cli/fonts.rb +145 -0
- data/lib/hexapdf/cli/form.rb +27 -26
- data/lib/hexapdf/cli/image2pdf.rb +1 -1
- data/lib/hexapdf/cli/images.rb +1 -10
- data/lib/hexapdf/cli/info.rb +1 -1
- data/lib/hexapdf/cli/inspect.rb +1 -1
- data/lib/hexapdf/cli/merge.rb +1 -1
- data/lib/hexapdf/cli/modify.rb +1 -1
- data/lib/hexapdf/cli/optimize.rb +1 -1
- data/lib/hexapdf/cli/split.rb +1 -1
- data/lib/hexapdf/cli/watermark.rb +1 -1
- data/lib/hexapdf/cli.rb +3 -1
- data/lib/hexapdf/composer.rb +1 -1
- data/lib/hexapdf/configuration.rb +11 -2
- data/lib/hexapdf/content/canvas.rb +658 -167
- data/lib/hexapdf/content/color_space.rb +185 -3
- data/lib/hexapdf/content/graphic_object/arc.rb +111 -12
- data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +1 -1
- data/lib/hexapdf/content/graphic_object/geom2d.rb +1 -1
- data/lib/hexapdf/content/graphic_object/solid_arc.rb +1 -1
- data/lib/hexapdf/content/graphic_object.rb +1 -1
- data/lib/hexapdf/content/graphics_state.rb +1 -1
- data/lib/hexapdf/content/operator.rb +1 -1
- data/lib/hexapdf/content/parser.rb +1 -1
- data/lib/hexapdf/content/processor.rb +1 -1
- data/lib/hexapdf/content/transformation_matrix.rb +1 -1
- data/lib/hexapdf/content.rb +1 -1
- data/lib/hexapdf/data_dir.rb +1 -1
- data/lib/hexapdf/dictionary.rb +1 -1
- data/lib/hexapdf/dictionary_fields.rb +30 -4
- data/lib/hexapdf/document/files.rb +3 -3
- data/lib/hexapdf/document/fonts.rb +1 -1
- data/lib/hexapdf/document/images.rb +1 -1
- data/lib/hexapdf/document/pages.rb +1 -1
- data/lib/hexapdf/document.rb +1 -1
- data/lib/hexapdf/encryption/aes.rb +1 -1
- data/lib/hexapdf/encryption/arc4.rb +1 -1
- data/lib/hexapdf/encryption/fast_aes.rb +1 -1
- data/lib/hexapdf/encryption/fast_arc4.rb +1 -1
- data/lib/hexapdf/encryption/identity.rb +1 -1
- data/lib/hexapdf/encryption/ruby_aes.rb +1 -1
- data/lib/hexapdf/encryption/ruby_arc4.rb +1 -1
- data/lib/hexapdf/encryption/security_handler.rb +1 -1
- data/lib/hexapdf/encryption/standard_security_handler.rb +1 -1
- data/lib/hexapdf/encryption.rb +1 -1
- data/lib/hexapdf/error.rb +1 -1
- data/lib/hexapdf/filter/ascii85_decode.rb +1 -1
- data/lib/hexapdf/filter/ascii_hex_decode.rb +1 -1
- data/lib/hexapdf/filter/crypt.rb +1 -1
- data/lib/hexapdf/filter/encryption.rb +1 -1
- data/lib/hexapdf/filter/flate_decode.rb +1 -1
- data/lib/hexapdf/filter/lzw_decode.rb +1 -1
- data/lib/hexapdf/filter/pass_through.rb +1 -1
- data/lib/hexapdf/filter/predictor.rb +1 -1
- data/lib/hexapdf/filter/run_length_decode.rb +1 -1
- data/lib/hexapdf/filter.rb +1 -1
- data/lib/hexapdf/font/cmap/parser.rb +1 -1
- data/lib/hexapdf/font/cmap/writer.rb +1 -1
- data/lib/hexapdf/font/cmap.rb +1 -1
- data/lib/hexapdf/font/encoding/base.rb +1 -1
- data/lib/hexapdf/font/encoding/difference_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/glyph_list.rb +1 -1
- data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/standard_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/symbol_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +1 -1
- data/lib/hexapdf/font/encoding.rb +1 -1
- data/lib/hexapdf/font/invalid_glyph.rb +1 -1
- data/lib/hexapdf/font/true_type/builder.rb +1 -1
- data/lib/hexapdf/font/true_type/font.rb +1 -1
- data/lib/hexapdf/font/true_type/optimizer.rb +1 -1
- data/lib/hexapdf/font/true_type/subsetter.rb +1 -1
- data/lib/hexapdf/font/true_type/table/cmap.rb +1 -1
- data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +1 -1
- data/lib/hexapdf/font/true_type/table/directory.rb +1 -1
- data/lib/hexapdf/font/true_type/table/glyf.rb +1 -1
- data/lib/hexapdf/font/true_type/table/head.rb +1 -1
- data/lib/hexapdf/font/true_type/table/hhea.rb +1 -1
- data/lib/hexapdf/font/true_type/table/hmtx.rb +1 -1
- data/lib/hexapdf/font/true_type/table/kern.rb +1 -1
- data/lib/hexapdf/font/true_type/table/loca.rb +1 -1
- data/lib/hexapdf/font/true_type/table/maxp.rb +1 -1
- data/lib/hexapdf/font/true_type/table/name.rb +1 -1
- data/lib/hexapdf/font/true_type/table/os2.rb +1 -1
- data/lib/hexapdf/font/true_type/table/post.rb +1 -1
- data/lib/hexapdf/font/true_type/table.rb +1 -1
- data/lib/hexapdf/font/true_type.rb +1 -1
- data/lib/hexapdf/font/true_type_wrapper.rb +1 -1
- data/lib/hexapdf/font/type1/afm_parser.rb +1 -1
- data/lib/hexapdf/font/type1/character_metrics.rb +1 -1
- data/lib/hexapdf/font/type1/font.rb +1 -1
- data/lib/hexapdf/font/type1/font_metrics.rb +1 -1
- data/lib/hexapdf/font/type1/pfb_parser.rb +1 -1
- data/lib/hexapdf/font/type1.rb +1 -1
- data/lib/hexapdf/font/type1_wrapper.rb +1 -1
- data/lib/hexapdf/font_loader/from_configuration.rb +1 -1
- data/lib/hexapdf/font_loader/from_file.rb +1 -1
- data/lib/hexapdf/font_loader/standard14.rb +1 -1
- data/lib/hexapdf/font_loader.rb +1 -1
- data/lib/hexapdf/image_loader/jpeg.rb +1 -1
- data/lib/hexapdf/image_loader/pdf.rb +1 -1
- data/lib/hexapdf/image_loader/png.rb +1 -1
- data/lib/hexapdf/image_loader.rb +1 -1
- data/lib/hexapdf/importer.rb +1 -1
- data/lib/hexapdf/layout/box.rb +4 -2
- data/lib/hexapdf/layout/frame.rb +1 -1
- data/lib/hexapdf/layout/image_box.rb +1 -1
- data/lib/hexapdf/layout/inline_box.rb +1 -1
- data/lib/hexapdf/layout/line.rb +1 -1
- data/lib/hexapdf/layout/numeric_refinements.rb +1 -1
- data/lib/hexapdf/layout/style.rb +40 -2
- data/lib/hexapdf/layout/text_box.rb +1 -1
- data/lib/hexapdf/layout/text_fragment.rb +1 -1
- data/lib/hexapdf/layout/text_layouter.rb +1 -1
- data/lib/hexapdf/layout/text_shaper.rb +1 -1
- data/lib/hexapdf/layout/width_from_polygon.rb +2 -2
- data/lib/hexapdf/layout.rb +1 -1
- data/lib/hexapdf/name_tree_node.rb +1 -1
- data/lib/hexapdf/number_tree_node.rb +1 -1
- data/lib/hexapdf/object.rb +1 -1
- data/lib/hexapdf/parser.rb +2 -2
- data/lib/hexapdf/pdf_array.rb +1 -1
- data/lib/hexapdf/rectangle.rb +1 -1
- data/lib/hexapdf/reference.rb +1 -1
- data/lib/hexapdf/revision.rb +1 -1
- data/lib/hexapdf/revisions.rb +1 -1
- data/lib/hexapdf/serializer.rb +1 -1
- data/lib/hexapdf/stream.rb +1 -1
- data/lib/hexapdf/task/dereference.rb +1 -1
- data/lib/hexapdf/task/optimize.rb +1 -1
- data/lib/hexapdf/task.rb +1 -1
- data/lib/hexapdf/tokenizer.rb +1 -1
- data/lib/hexapdf/type/acro_form/appearance_generator.rb +14 -7
- data/lib/hexapdf/type/acro_form/button_field.rb +53 -28
- data/lib/hexapdf/type/acro_form/choice_field.rb +1 -1
- data/lib/hexapdf/type/acro_form/field.rb +21 -2
- data/lib/hexapdf/type/acro_form/form.rb +48 -29
- data/lib/hexapdf/type/acro_form/text_field.rb +2 -2
- data/lib/hexapdf/type/acro_form/variable_text_field.rb +17 -9
- data/lib/hexapdf/type/acro_form.rb +1 -1
- data/lib/hexapdf/type/action.rb +1 -1
- data/lib/hexapdf/type/actions/go_to.rb +1 -1
- data/lib/hexapdf/type/actions/go_to_r.rb +1 -1
- data/lib/hexapdf/type/actions/launch.rb +1 -1
- data/lib/hexapdf/type/actions/uri.rb +1 -1
- data/lib/hexapdf/type/actions.rb +1 -1
- data/lib/hexapdf/type/annotation.rb +1 -1
- data/lib/hexapdf/type/annotations/link.rb +1 -1
- data/lib/hexapdf/type/annotations/markup_annotation.rb +1 -1
- data/lib/hexapdf/type/annotations/text.rb +1 -1
- data/lib/hexapdf/type/annotations/widget.rb +2 -2
- data/lib/hexapdf/type/annotations.rb +1 -1
- data/lib/hexapdf/type/catalog.rb +1 -1
- data/lib/hexapdf/type/cid_font.rb +1 -1
- data/lib/hexapdf/type/embedded_file.rb +1 -1
- data/lib/hexapdf/type/file_specification.rb +1 -1
- data/lib/hexapdf/type/font.rb +1 -1
- data/lib/hexapdf/type/font_descriptor.rb +1 -1
- data/lib/hexapdf/type/font_simple.rb +1 -1
- data/lib/hexapdf/type/font_true_type.rb +1 -1
- data/lib/hexapdf/type/font_type0.rb +1 -1
- data/lib/hexapdf/type/font_type1.rb +1 -1
- data/lib/hexapdf/type/font_type3.rb +1 -1
- data/lib/hexapdf/type/form.rb +1 -1
- data/lib/hexapdf/type/graphics_state_parameter.rb +1 -1
- data/lib/hexapdf/type/icon_fit.rb +1 -1
- data/lib/hexapdf/type/image.rb +1 -1
- data/lib/hexapdf/type/info.rb +1 -1
- data/lib/hexapdf/type/names.rb +1 -1
- data/lib/hexapdf/type/object_stream.rb +1 -1
- data/lib/hexapdf/type/page.rb +15 -1
- data/lib/hexapdf/type/page_tree_node.rb +1 -1
- data/lib/hexapdf/type/resources.rb +1 -1
- data/lib/hexapdf/type/trailer.rb +1 -1
- data/lib/hexapdf/type/viewer_preferences.rb +1 -1
- data/lib/hexapdf/type/xref_stream.rb +1 -1
- data/lib/hexapdf/type.rb +1 -1
- data/lib/hexapdf/utils/bit_field.rb +1 -1
- data/lib/hexapdf/utils/bit_stream.rb +1 -1
- data/lib/hexapdf/utils/graphics_helpers.rb +1 -1
- data/lib/hexapdf/utils/lru_cache.rb +1 -1
- data/lib/hexapdf/utils/math_helpers.rb +1 -1
- data/lib/hexapdf/utils/object_hash.rb +1 -1
- data/lib/hexapdf/utils/pdf_doc_encoding.rb +1 -1
- data/lib/hexapdf/utils/sorted_tree_node.rb +1 -1
- data/lib/hexapdf/version.rb +2 -2
- data/lib/hexapdf/writer.rb +1 -1
- data/lib/hexapdf/xref_section.rb +1 -1
- data/lib/hexapdf.rb +1 -1
- metadata +5 -264
- data/CHANGELOG.md +0 -954
- data/LICENSE +0 -29
- data/README.md +0 -120
- data/Rakefile +0 -108
- data/agpl-3.0.txt +0 -661
- data/examples/001-hello_world.rb +0 -16
- data/examples/002-graphics.rb +0 -275
- data/examples/003-arcs.rb +0 -50
- data/examples/004-optimizing.rb +0 -23
- data/examples/005-merging.rb +0 -27
- data/examples/006-standard_pdf_fonts.rb +0 -73
- data/examples/007-truetype.rb +0 -42
- data/examples/008-show_char_bboxes.rb +0 -55
- data/examples/009-text_layouter_alignment.rb +0 -47
- data/examples/010-text_layouter_inline_boxes.rb +0 -64
- data/examples/011-text_layouter_line_wrapping.rb +0 -57
- data/examples/012-text_layouter_styling.rb +0 -122
- data/examples/013-text_layouter_shapes.rb +0 -176
- data/examples/014-text_in_polygon.rb +0 -60
- data/examples/015-boxes.rb +0 -76
- data/examples/016-frame_automatic_box_placement.rb +0 -90
- data/examples/017-frame_text_flow.rb +0 -60
- data/examples/018-composer.rb +0 -44
- data/examples/019-acro_form.rb +0 -88
- data/examples/emoji-smile.png +0 -0
- data/examples/emoji-wink.png +0 -0
- data/examples/machupicchu.jpg +0 -0
- 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 +0 -44
- data/test/data/standard-security-handler/README +0 -9
- data/test/data/standard-security-handler/bothpwd-aes-128bit-V4.pdf +0 -44
- data/test/data/standard-security-handler/bothpwd-aes-256bit-V5.pdf +0 -0
- data/test/data/standard-security-handler/bothpwd-arc4-128bit-V2.pdf +0 -43
- data/test/data/standard-security-handler/bothpwd-arc4-128bit-V4.pdf +0 -43
- data/test/data/standard-security-handler/bothpwd-arc4-40bit-V1.pdf +0 -0
- data/test/data/standard-security-handler/nopwd-aes-128bit-V4.pdf +0 -43
- data/test/data/standard-security-handler/nopwd-aes-256bit-V5.pdf +0 -0
- data/test/data/standard-security-handler/nopwd-arc4-128bit-V2.pdf +0 -43
- data/test/data/standard-security-handler/nopwd-arc4-128bit-V4.pdf +0 -43
- data/test/data/standard-security-handler/nopwd-arc4-40bit-V1.pdf +0 -43
- data/test/data/standard-security-handler/ownerpwd-aes-128bit-V4.pdf +0 -0
- data/test/data/standard-security-handler/ownerpwd-aes-256bit-V5.pdf +0 -43
- data/test/data/standard-security-handler/ownerpwd-arc4-128bit-V2.pdf +0 -43
- data/test/data/standard-security-handler/ownerpwd-arc4-128bit-V4.pdf +0 -43
- data/test/data/standard-security-handler/ownerpwd-arc4-40bit-V1.pdf +0 -43
- data/test/data/standard-security-handler/userpwd-aes-128bit-V4.pdf +0 -43
- data/test/data/standard-security-handler/userpwd-aes-256bit-V5.pdf +0 -43
- 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 +0 -43
- data/test/hexapdf/common_tokenizer_tests.rb +0 -236
- data/test/hexapdf/content/common.rb +0 -39
- data/test/hexapdf/content/graphic_object/test_arc.rb +0 -93
- data/test/hexapdf/content/graphic_object/test_endpoint_arc.rb +0 -90
- data/test/hexapdf/content/graphic_object/test_geom2d.rb +0 -79
- data/test/hexapdf/content/graphic_object/test_solid_arc.rb +0 -86
- data/test/hexapdf/content/test_canvas.rb +0 -1216
- data/test/hexapdf/content/test_color_space.rb +0 -164
- data/test/hexapdf/content/test_graphics_state.rb +0 -151
- data/test/hexapdf/content/test_operator.rb +0 -619
- data/test/hexapdf/content/test_parser.rb +0 -99
- data/test/hexapdf/content/test_processor.rb +0 -163
- data/test/hexapdf/content/test_transformation_matrix.rb +0 -64
- data/test/hexapdf/document/test_files.rb +0 -72
- data/test/hexapdf/document/test_fonts.rb +0 -60
- data/test/hexapdf/document/test_images.rb +0 -72
- data/test/hexapdf/document/test_pages.rb +0 -130
- data/test/hexapdf/encryption/common.rb +0 -87
- data/test/hexapdf/encryption/test_aes.rb +0 -129
- data/test/hexapdf/encryption/test_arc4.rb +0 -39
- data/test/hexapdf/encryption/test_fast_aes.rb +0 -17
- data/test/hexapdf/encryption/test_fast_arc4.rb +0 -12
- data/test/hexapdf/encryption/test_identity.rb +0 -21
- data/test/hexapdf/encryption/test_ruby_aes.rb +0 -23
- data/test/hexapdf/encryption/test_ruby_arc4.rb +0 -20
- data/test/hexapdf/encryption/test_security_handler.rb +0 -380
- data/test/hexapdf/encryption/test_standard_security_handler.rb +0 -322
- data/test/hexapdf/filter/common.rb +0 -53
- data/test/hexapdf/filter/test_ascii85_decode.rb +0 -59
- data/test/hexapdf/filter/test_ascii_hex_decode.rb +0 -38
- data/test/hexapdf/filter/test_crypt.rb +0 -21
- data/test/hexapdf/filter/test_encryption.rb +0 -24
- data/test/hexapdf/filter/test_flate_decode.rb +0 -44
- data/test/hexapdf/filter/test_lzw_decode.rb +0 -52
- data/test/hexapdf/filter/test_predictor.rb +0 -219
- data/test/hexapdf/filter/test_run_length_decode.rb +0 -32
- data/test/hexapdf/font/cmap/test_parser.rb +0 -102
- data/test/hexapdf/font/cmap/test_writer.rb +0 -66
- data/test/hexapdf/font/encoding/test_base.rb +0 -45
- data/test/hexapdf/font/encoding/test_difference_encoding.rb +0 -29
- data/test/hexapdf/font/encoding/test_glyph_list.rb +0 -59
- data/test/hexapdf/font/encoding/test_zapf_dingbats_encoding.rb +0 -16
- data/test/hexapdf/font/test_cmap.rb +0 -104
- data/test/hexapdf/font/test_encoding.rb +0 -27
- data/test/hexapdf/font/test_invalid_glyph.rb +0 -34
- data/test/hexapdf/font/test_true_type_wrapper.rb +0 -186
- data/test/hexapdf/font/test_type1_wrapper.rb +0 -107
- data/test/hexapdf/font/true_type/common.rb +0 -17
- data/test/hexapdf/font/true_type/table/common.rb +0 -27
- data/test/hexapdf/font/true_type/table/test_cmap.rb +0 -47
- data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +0 -141
- data/test/hexapdf/font/true_type/table/test_directory.rb +0 -30
- data/test/hexapdf/font/true_type/table/test_glyf.rb +0 -58
- data/test/hexapdf/font/true_type/table/test_head.rb +0 -56
- data/test/hexapdf/font/true_type/table/test_hhea.rb +0 -26
- data/test/hexapdf/font/true_type/table/test_hmtx.rb +0 -30
- data/test/hexapdf/font/true_type/table/test_kern.rb +0 -61
- data/test/hexapdf/font/true_type/table/test_loca.rb +0 -33
- data/test/hexapdf/font/true_type/table/test_maxp.rb +0 -50
- data/test/hexapdf/font/true_type/table/test_name.rb +0 -76
- data/test/hexapdf/font/true_type/table/test_os2.rb +0 -55
- data/test/hexapdf/font/true_type/table/test_post.rb +0 -78
- data/test/hexapdf/font/true_type/test_builder.rb +0 -42
- data/test/hexapdf/font/true_type/test_font.rb +0 -116
- data/test/hexapdf/font/true_type/test_optimizer.rb +0 -26
- data/test/hexapdf/font/true_type/test_subsetter.rb +0 -73
- data/test/hexapdf/font/true_type/test_table.rb +0 -48
- data/test/hexapdf/font/type1/common.rb +0 -6
- data/test/hexapdf/font/type1/test_afm_parser.rb +0 -65
- data/test/hexapdf/font/type1/test_font.rb +0 -104
- data/test/hexapdf/font/type1/test_font_metrics.rb +0 -22
- data/test/hexapdf/font/type1/test_pfb_parser.rb +0 -37
- data/test/hexapdf/font_loader/test_from_configuration.rb +0 -43
- data/test/hexapdf/font_loader/test_from_file.rb +0 -36
- data/test/hexapdf/font_loader/test_standard14.rb +0 -33
- data/test/hexapdf/image_loader/test_jpeg.rb +0 -93
- data/test/hexapdf/image_loader/test_pdf.rb +0 -47
- data/test/hexapdf/image_loader/test_png.rb +0 -259
- data/test/hexapdf/layout/test_box.rb +0 -152
- data/test/hexapdf/layout/test_frame.rb +0 -350
- data/test/hexapdf/layout/test_image_box.rb +0 -73
- data/test/hexapdf/layout/test_inline_box.rb +0 -71
- data/test/hexapdf/layout/test_line.rb +0 -206
- data/test/hexapdf/layout/test_style.rb +0 -779
- data/test/hexapdf/layout/test_text_box.rb +0 -140
- data/test/hexapdf/layout/test_text_fragment.rb +0 -375
- data/test/hexapdf/layout/test_text_layouter.rb +0 -758
- data/test/hexapdf/layout/test_text_shaper.rb +0 -62
- data/test/hexapdf/layout/test_width_from_polygon.rb +0 -108
- data/test/hexapdf/task/test_dereference.rb +0 -51
- data/test/hexapdf/task/test_optimize.rb +0 -162
- data/test/hexapdf/test_composer.rb +0 -258
- data/test/hexapdf/test_configuration.rb +0 -93
- data/test/hexapdf/test_data_dir.rb +0 -32
- data/test/hexapdf/test_dictionary.rb +0 -340
- data/test/hexapdf/test_dictionary_fields.rb +0 -245
- data/test/hexapdf/test_document.rb +0 -641
- data/test/hexapdf/test_filter.rb +0 -100
- data/test/hexapdf/test_importer.rb +0 -106
- data/test/hexapdf/test_object.rb +0 -258
- data/test/hexapdf/test_parser.rb +0 -637
- data/test/hexapdf/test_pdf_array.rb +0 -169
- data/test/hexapdf/test_rectangle.rb +0 -73
- data/test/hexapdf/test_reference.rb +0 -50
- data/test/hexapdf/test_revision.rb +0 -188
- data/test/hexapdf/test_revisions.rb +0 -196
- data/test/hexapdf/test_serializer.rb +0 -195
- data/test/hexapdf/test_stream.rb +0 -274
- data/test/hexapdf/test_tokenizer.rb +0 -80
- data/test/hexapdf/test_type.rb +0 -18
- data/test/hexapdf/test_writer.rb +0 -140
- data/test/hexapdf/test_xref_section.rb +0 -61
- data/test/hexapdf/type/acro_form/test_appearance_generator.rb +0 -794
- data/test/hexapdf/type/acro_form/test_button_field.rb +0 -302
- data/test/hexapdf/type/acro_form/test_choice_field.rb +0 -220
- data/test/hexapdf/type/acro_form/test_field.rb +0 -247
- data/test/hexapdf/type/acro_form/test_form.rb +0 -353
- data/test/hexapdf/type/acro_form/test_signature_field.rb +0 -38
- data/test/hexapdf/type/acro_form/test_text_field.rb +0 -195
- data/test/hexapdf/type/acro_form/test_variable_text_field.rb +0 -77
- data/test/hexapdf/type/actions/test_launch.rb +0 -24
- data/test/hexapdf/type/actions/test_uri.rb +0 -23
- data/test/hexapdf/type/annotations/test_markup_annotation.rb +0 -22
- data/test/hexapdf/type/annotations/test_text.rb +0 -34
- data/test/hexapdf/type/annotations/test_widget.rb +0 -225
- data/test/hexapdf/type/test_annotation.rb +0 -97
- data/test/hexapdf/type/test_catalog.rb +0 -48
- data/test/hexapdf/type/test_cid_font.rb +0 -61
- data/test/hexapdf/type/test_file_specification.rb +0 -141
- data/test/hexapdf/type/test_font.rb +0 -67
- data/test/hexapdf/type/test_font_descriptor.rb +0 -61
- data/test/hexapdf/type/test_font_simple.rb +0 -176
- data/test/hexapdf/type/test_font_true_type.rb +0 -31
- data/test/hexapdf/type/test_font_type0.rb +0 -120
- data/test/hexapdf/type/test_font_type1.rb +0 -142
- data/test/hexapdf/type/test_font_type3.rb +0 -26
- data/test/hexapdf/type/test_form.rb +0 -120
- data/test/hexapdf/type/test_image.rb +0 -261
- data/test/hexapdf/type/test_info.rb +0 -9
- data/test/hexapdf/type/test_object_stream.rb +0 -117
- data/test/hexapdf/type/test_page.rb +0 -587
- data/test/hexapdf/type/test_page_tree_node.rb +0 -315
- data/test/hexapdf/type/test_resources.rb +0 -209
- data/test/hexapdf/type/test_trailer.rb +0 -116
- data/test/hexapdf/type/test_xref_stream.rb +0 -143
- data/test/hexapdf/utils/test_bit_field.rb +0 -63
- data/test/hexapdf/utils/test_bit_stream.rb +0 -69
- data/test/hexapdf/utils/test_graphics_helpers.rb +0 -37
- data/test/hexapdf/utils/test_lru_cache.rb +0 -22
- data/test/hexapdf/utils/test_object_hash.rb +0 -120
- data/test/hexapdf/utils/test_pdf_doc_encoding.rb +0 -18
- data/test/hexapdf/utils/test_sorted_tree_node.rb +0 -239
- 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
|