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
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -96,6 +96,170 @@ module HexaPDF
|
|
96
96
|
# See: PDF1.7 s8.6
|
97
97
|
module ColorSpace
|
98
98
|
|
99
|
+
# Mapping of CSS Color Module Level 3 names to RGB values.
|
100
|
+
#
|
101
|
+
# Visual listing of all colors:
|
102
|
+
#
|
103
|
+
# #>pdf-big
|
104
|
+
# canvas.font("Helvetica", size: 8)
|
105
|
+
# map = HexaPDF::Content::ColorSpace::CSS_COLOR_NAMES
|
106
|
+
# map.each_slice(38).each_with_index do |slice, col|
|
107
|
+
# x = 10 + col * 100
|
108
|
+
# slice.each_with_index do |(name, rgb), row|
|
109
|
+
# canvas.fill_color(rgb).rectangle(x, 380 - row * 10, 10, 10).fill
|
110
|
+
# canvas.fill_color("black").text(name, at: [x + 15, 380 - row * 10 + 2])
|
111
|
+
# end
|
112
|
+
# end
|
113
|
+
CSS_COLOR_NAMES = {
|
114
|
+
"aliceblue" => [240, 248, 255],
|
115
|
+
"antiquewhite" => [250, 235, 215],
|
116
|
+
"aqua" => [0, 255, 255],
|
117
|
+
"aquamarine" => [127, 255, 212],
|
118
|
+
"azure" => [240, 255, 255],
|
119
|
+
"beige" => [245, 245, 220],
|
120
|
+
"bisque" => [255, 228, 196],
|
121
|
+
"black" => [0, 0, 0],
|
122
|
+
"blanchedalmond" => [255, 235, 205],
|
123
|
+
"blue" => [0, 0, 255],
|
124
|
+
"blueviolet" => [138, 43, 226],
|
125
|
+
"brown" => [165, 42, 42],
|
126
|
+
"burlywood" => [222, 184, 135],
|
127
|
+
"cadetblue" => [95, 158, 160],
|
128
|
+
"chartreuse" => [127, 255, 0],
|
129
|
+
"chocolate" => [210, 105, 30],
|
130
|
+
"coral" => [255, 127, 80],
|
131
|
+
"cornflowerblue" => [100, 149, 237],
|
132
|
+
"cornsilk" => [255, 248, 220],
|
133
|
+
"crimson" => [220, 20, 60],
|
134
|
+
"cyan" => [0, 255, 255],
|
135
|
+
"darkblue" => [0, 0, 139],
|
136
|
+
"darkcyan" => [0, 139, 139],
|
137
|
+
"darkgoldenrod" => [184, 134, 11],
|
138
|
+
"darkgray" => [169, 169, 169],
|
139
|
+
"darkgreen" => [0, 100, 0],
|
140
|
+
"darkgrey" => [169, 169, 169],
|
141
|
+
"darkkhaki" => [189, 183, 107],
|
142
|
+
"darkmagenta" => [139, 0, 139],
|
143
|
+
"darkolivegreen" => [85, 107, 47],
|
144
|
+
"darkorange" => [255, 140, 0],
|
145
|
+
"darkorchid" => [153, 50, 204],
|
146
|
+
"darkred" => [139, 0, 0],
|
147
|
+
"darksalmon" => [233, 150, 122],
|
148
|
+
"darkseagreen" => [143, 188, 143],
|
149
|
+
"darkslateblue" => [72, 61, 139],
|
150
|
+
"darkslategray" => [47, 79, 79],
|
151
|
+
"darkslategrey" => [47, 79, 79],
|
152
|
+
"darkturquoise" => [0, 206, 209],
|
153
|
+
"darkviolet" => [148, 0, 211],
|
154
|
+
"deeppink" => [255, 20, 147],
|
155
|
+
"deepskyblue" => [0, 191, 255],
|
156
|
+
"dimgray" => [105, 105, 105],
|
157
|
+
"dimgrey" => [105, 105, 105],
|
158
|
+
"dodgerblue" => [30, 144, 255],
|
159
|
+
"firebrick" => [178, 34, 34],
|
160
|
+
"floralwhite" => [255, 250, 240],
|
161
|
+
"forestgreen" => [34, 139, 34],
|
162
|
+
"fuchsia" => [255, 0, 255],
|
163
|
+
"gainsboro" => [220, 220, 220],
|
164
|
+
"ghostwhite" => [248, 248, 255],
|
165
|
+
"gold" => [255, 215, 0],
|
166
|
+
"goldenrod" => [218, 165, 32],
|
167
|
+
"gray" => [128, 128, 128],
|
168
|
+
"green" => [0, 128, 0],
|
169
|
+
"greenyellow" => [173, 255, 47],
|
170
|
+
"grey" => [128, 128, 128],
|
171
|
+
"honeydew" => [240, 255, 240],
|
172
|
+
"hotpink" => [255, 105, 180],
|
173
|
+
"indianred" => [205, 92, 92],
|
174
|
+
"indigo" => [75, 0, 130],
|
175
|
+
"ivory" => [255, 255, 240],
|
176
|
+
"khaki" => [240, 230, 140],
|
177
|
+
"lavender" => [230, 230, 250],
|
178
|
+
"lavenderblush" => [255, 240, 245],
|
179
|
+
"lawngreen" => [124, 252, 0],
|
180
|
+
"lemonchiffon" => [255, 250, 205],
|
181
|
+
"lightblue" => [173, 216, 230],
|
182
|
+
"lightcoral" => [240, 128, 128],
|
183
|
+
"lightcyan" => [224, 255, 255],
|
184
|
+
"lightgoldenrodyellow" => [250, 250, 210],
|
185
|
+
"lightgray" => [211, 211, 211],
|
186
|
+
"lightgreen" => [144, 238, 144],
|
187
|
+
"lightgrey" => [211, 211, 211],
|
188
|
+
"lightpink" => [255, 182, 193],
|
189
|
+
"lightsalmon" => [255, 160, 122],
|
190
|
+
"lightseagreen" => [32, 178, 170],
|
191
|
+
"lightskyblue" => [135, 206, 250],
|
192
|
+
"lightslategray" => [119, 136, 153],
|
193
|
+
"lightslategrey" => [119, 136, 153],
|
194
|
+
"lightsteelblue" => [176, 196, 222],
|
195
|
+
"lightyellow" => [255, 255, 224],
|
196
|
+
"lime" => [0, 255, 0],
|
197
|
+
"limegreen" => [50, 205, 50],
|
198
|
+
"linen" => [250, 240, 230],
|
199
|
+
"magenta" => [255, 0, 255],
|
200
|
+
"maroon" => [128, 0, 0],
|
201
|
+
"mediumaquamarine" => [102, 205, 170],
|
202
|
+
"mediumblue" => [0, 0, 205],
|
203
|
+
"mediumorchid" => [186, 85, 211],
|
204
|
+
"mediumpurple" => [147, 112, 219],
|
205
|
+
"mediumseagreen" => [60, 179, 113],
|
206
|
+
"mediumslateblue" => [123, 104, 238],
|
207
|
+
"mediumspringgreen" => [0, 250, 154],
|
208
|
+
"mediumturquoise" => [72, 209, 204],
|
209
|
+
"mediumvioletred" => [199, 21, 133],
|
210
|
+
"midnightblue" => [25, 25, 112],
|
211
|
+
"mintcream" => [245, 255, 250],
|
212
|
+
"mistyrose" => [255, 228, 225],
|
213
|
+
"moccasin" => [255, 228, 181],
|
214
|
+
"navajowhite" => [255, 222, 173],
|
215
|
+
"navy" => [0, 0, 128],
|
216
|
+
"oldlace" => [253, 245, 230],
|
217
|
+
"olive" => [128, 128, 0],
|
218
|
+
"olivedrab" => [107, 142, 35],
|
219
|
+
"orange" => [255, 165, 0],
|
220
|
+
"orangered" => [255, 69, 0],
|
221
|
+
"orchid" => [218, 112, 214],
|
222
|
+
"palegoldenrod" => [238, 232, 170],
|
223
|
+
"palegreen" => [152, 251, 152],
|
224
|
+
"paleturquoise" => [175, 238, 238],
|
225
|
+
"palevioletred" => [219, 112, 147],
|
226
|
+
"papayawhip" => [255, 239, 213],
|
227
|
+
"peachpuff" => [255, 218, 185],
|
228
|
+
"peru" => [205, 133, 63],
|
229
|
+
"pink" => [255, 192, 203],
|
230
|
+
"plum" => [221, 160, 221],
|
231
|
+
"powderblue" => [176, 224, 230],
|
232
|
+
"purple" => [128, 0, 128],
|
233
|
+
"red" => [255, 0, 0],
|
234
|
+
"rosybrown" => [188, 143, 143],
|
235
|
+
"royalblue" => [65, 105, 225],
|
236
|
+
"saddlebrown" => [139, 69, 19],
|
237
|
+
"salmon" => [250, 128, 114],
|
238
|
+
"sandybrown" => [244, 164, 96],
|
239
|
+
"seagreen" => [46, 139, 87],
|
240
|
+
"seashell" => [255, 245, 238],
|
241
|
+
"sienna" => [160, 82, 45],
|
242
|
+
"silver" => [192, 192, 192],
|
243
|
+
"skyblue" => [135, 206, 235],
|
244
|
+
"slateblue" => [106, 90, 205],
|
245
|
+
"slategray" => [112, 128, 144],
|
246
|
+
"slategrey" => [112, 128, 144],
|
247
|
+
"snow" => [255, 250, 250],
|
248
|
+
"springgreen" => [0, 255, 127],
|
249
|
+
"steelblue" => [70, 130, 180],
|
250
|
+
"tan" => [210, 180, 140],
|
251
|
+
"teal" => [0, 128, 128],
|
252
|
+
"thistle" => [216, 191, 216],
|
253
|
+
"tomato" => [255, 99, 71],
|
254
|
+
"turquoise" => [64, 224, 208],
|
255
|
+
"violet" => [238, 130, 238],
|
256
|
+
"wheat" => [245, 222, 179],
|
257
|
+
"white" => [255, 255, 255],
|
258
|
+
"whitesmoke" => [245, 245, 245],
|
259
|
+
"yellow" => [255, 255, 0],
|
260
|
+
"yellowgreen" => [154, 205, 50],
|
261
|
+
}.freeze
|
262
|
+
|
99
263
|
# :call-seq:
|
100
264
|
# ColorSpace.device_color_from_specification(gray) => color
|
101
265
|
# ColorSpace.device_color_from_specification(r, g, b) => color
|
@@ -111,14 +275,32 @@ module HexaPDF
|
|
111
275
|
# * Three numeric arguments specify an RGB color (see DeviceRGB::Color).
|
112
276
|
# * A string in the format "RRGGBB" where "RR" is the hexadecimal number for the red, "GG"
|
113
277
|
# for the green and "BB" for the blue color value also specifies an RGB color.
|
278
|
+
# * As does a string in the format "RGB" where "RR", "GG" and "BB" would be used as the
|
279
|
+
# hexadecimal numbers for the red, green and blue color values of an RGB color.
|
280
|
+
# * Any other string is treated as a CSS Color Module Level 3 color name, see
|
281
|
+
# https://www.w3.org/TR/css-color-3/#svg-color.
|
114
282
|
# * Four numeric arguments specify a CMYK color (see DeviceCMYK::Color).
|
115
283
|
# * An array is treated as if its items were specified separately as arguments.
|
116
284
|
#
|
117
285
|
# Note that it makes a difference whether integer or float values are used because the given
|
118
|
-
# values are first normalized
|
286
|
+
# values are first normalized (expected range by the PDF specification is 0.0 - 1.0) - see
|
287
|
+
# DeviceGray#color, DeviceRGB#color and DeviceCMYK#color for details.
|
288
|
+
#
|
289
|
+
# For examples see HexaPDF::Content::Canvas#stroke_color.
|
119
290
|
def self.device_color_from_specification(*spec)
|
120
291
|
spec.flatten!
|
121
|
-
|
292
|
+
first_item = spec[0]
|
293
|
+
if spec.length == 1 && first_item.kind_of?(String)
|
294
|
+
spec = if first_item.match?(/\A\h{6}\z/)
|
295
|
+
first_item.scan(/../).map!(&:hex)
|
296
|
+
elsif first_item.match?(/\A\h{3}\z/)
|
297
|
+
first_item.each_char.map {|x| (x*2).hex}
|
298
|
+
elsif CSS_COLOR_NAMES.key?(first_item)
|
299
|
+
CSS_COLOR_NAMES[first_item]
|
300
|
+
else
|
301
|
+
raise ArgumentError, "Given string is neither a hex color nor a color name"
|
302
|
+
end
|
303
|
+
end
|
122
304
|
GlobalConfiguration.constantize('color_space.map', for_components(spec)).new.color(*spec)
|
123
305
|
end
|
124
306
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -40,11 +40,20 @@ module HexaPDF
|
|
40
40
|
module Content
|
41
41
|
module GraphicObject
|
42
42
|
|
43
|
-
# This class describes an elliptical in center parameterization
|
43
|
+
# This class describes an elliptical arc in center parameterization that is approximated using
|
44
44
|
# Bezier curves. It can be used to draw circles, circular arcs, ellipses and elliptical arcs,
|
45
45
|
# all either in clockwise or counterclockwise direction and optionally inclined in respect to
|
46
46
|
# the x-axis.
|
47
47
|
#
|
48
|
+
# This graphic object is registered under the :arc key for use with the
|
49
|
+
# HexaPDF::Content::Canvas class.
|
50
|
+
#
|
51
|
+
# Examples:
|
52
|
+
#
|
53
|
+
# #>pdf-center
|
54
|
+
# arc = canvas.graphic_object(:arc, a: 100, b: 50).stroke
|
55
|
+
# arc.draw(canvas).stroke # or: canvas.draw(arc).stroke
|
56
|
+
#
|
48
57
|
# See: ELL - https://spaceroots.org/documents/ellipse/elliptical-arc.pdf
|
49
58
|
class Arc
|
50
59
|
|
@@ -62,36 +71,111 @@ module HexaPDF
|
|
62
71
|
# The higher the value the better the approximation will be but it will also take longer
|
63
72
|
# to compute. The value should not be lower than 4. Default value is 6 which already
|
64
73
|
# provides a good approximation.
|
74
|
+
#
|
75
|
+
# Examples:
|
76
|
+
#
|
77
|
+
# #>pdf-center
|
78
|
+
# arc = canvas.graphic_object(:arc, cx: -50, a: 40, b: 40)
|
79
|
+
# arc.max_curves = 2
|
80
|
+
# canvas.draw(arc)
|
81
|
+
# arc.max_curves = 10
|
82
|
+
# canvas.draw(arc, cx: 50)
|
83
|
+
# canvas.stroke
|
65
84
|
attr_accessor :max_curves
|
66
85
|
|
67
86
|
# x-coordinate of center point
|
87
|
+
#
|
88
|
+
# Examples:
|
89
|
+
#
|
90
|
+
# #>pdf-center
|
91
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 20)
|
92
|
+
# canvas.draw(arc).stroke
|
93
|
+
# canvas.stroke_color("red").draw(arc, cx: -50).stroke
|
68
94
|
attr_reader :cx
|
69
95
|
|
70
96
|
# y-coordinate of center point
|
97
|
+
#
|
98
|
+
# Examples:
|
99
|
+
#
|
100
|
+
# #>pdf-center
|
101
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 20)
|
102
|
+
# canvas.draw(arc).stroke
|
103
|
+
# canvas.stroke_color("red").draw(arc, cy: 50).stroke
|
71
104
|
attr_reader :cy
|
72
105
|
|
73
|
-
# Length of semi-major axis
|
106
|
+
# Length of semi-major axis which (without altering the #inclination) is parallel to the
|
107
|
+
# x-axis
|
108
|
+
#
|
109
|
+
# Examples:
|
110
|
+
#
|
111
|
+
# #>pdf-center
|
112
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
113
|
+
# canvas.draw(arc).stroke
|
114
|
+
# canvas.stroke_color("red").draw(arc, a: 60).stroke
|
74
115
|
attr_reader :a
|
75
116
|
|
76
|
-
# Length of semi-minor axis
|
117
|
+
# Length of semi-minor axis which (without altering the #inclination) is parallel to the
|
118
|
+
# y-axis
|
119
|
+
#
|
120
|
+
# Examples:
|
121
|
+
#
|
122
|
+
# #>pdf-center
|
123
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
124
|
+
# canvas.draw(arc).stroke
|
125
|
+
# canvas.stroke_color("red").draw(arc, b: 60).stroke
|
77
126
|
attr_reader :b
|
78
127
|
|
79
|
-
# Start angle in degrees
|
128
|
+
# Start angle of the arc in degrees
|
129
|
+
#
|
130
|
+
# Examples:
|
131
|
+
#
|
132
|
+
# #>pdf-center
|
133
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
134
|
+
# canvas.draw(arc, start_angle: 45).stroke
|
80
135
|
attr_reader :start_angle
|
81
136
|
|
82
|
-
# End angle in degrees
|
137
|
+
# End angle of the arc in degrees
|
138
|
+
#
|
139
|
+
# Examples:
|
140
|
+
#
|
141
|
+
# #>pdf-center
|
142
|
+
# arc = canvas.graphic_object(:arc, a: 30, b: 30)
|
143
|
+
# canvas.draw(arc, end_angle: 160).stroke
|
83
144
|
attr_reader :end_angle
|
84
145
|
|
85
|
-
# Inclination in degrees of semi-major axis
|
146
|
+
# Inclination in degrees of the semi-major axis with respect to the x-axis
|
147
|
+
#
|
148
|
+
# Examples:
|
149
|
+
#
|
150
|
+
# #>pdf-center
|
151
|
+
# arc = canvas.graphic_object(:arc, a: 60, b: 30)
|
152
|
+
# canvas.draw(arc, inclination: 45).stroke
|
86
153
|
attr_reader :inclination
|
87
154
|
|
88
155
|
# Direction of arc - if +true+ in clockwise direction, else in counterclockwise direction
|
156
|
+
#
|
157
|
+
# This is needed when filling paths using the nonzero winding number rule to achieve
|
158
|
+
# different effects.
|
159
|
+
#
|
160
|
+
# Examples:
|
161
|
+
#
|
162
|
+
# #>pdf-center
|
163
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 40)
|
164
|
+
# canvas.draw(arc, cx: -50).draw(arc, cx: 50).
|
165
|
+
# draw(arc, cx: -50, b: 80).
|
166
|
+
# draw(arc, cx: 50, b: 80, clockwise: true).
|
167
|
+
# fill(:nonzero)
|
89
168
|
attr_reader :clockwise
|
90
169
|
|
91
170
|
# Creates an elliptical arc with default values (a counterclockwise unit circle at the
|
92
171
|
# origin).
|
172
|
+
#
|
173
|
+
# Examples:
|
174
|
+
#
|
175
|
+
# #>pdf-center
|
176
|
+
# canvas.draw(:arc).stroke
|
93
177
|
def initialize
|
94
|
-
@max_curves =
|
178
|
+
@max_curves = nil
|
95
179
|
@cx = @cy = 0
|
96
180
|
@a = @b = 1
|
97
181
|
@start_angle = 0
|
@@ -135,11 +219,25 @@ module HexaPDF
|
|
135
219
|
end
|
136
220
|
|
137
221
|
# Returns the start point of the elliptical arc.
|
222
|
+
#
|
223
|
+
# Examples:
|
224
|
+
#
|
225
|
+
# #>pdf-center
|
226
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 30, start_angle: 60)
|
227
|
+
# canvas.draw(arc).stroke
|
228
|
+
# canvas.fill_color("red").circle(*arc.start_point, 2).fill
|
138
229
|
def start_point
|
139
230
|
evaluate(@start_eta)
|
140
231
|
end
|
141
232
|
|
142
233
|
# Returns the end point of the elliptical arc.
|
234
|
+
#
|
235
|
+
# Examples:
|
236
|
+
#
|
237
|
+
# #>pdf-center
|
238
|
+
# arc = canvas.graphic_object(:arc, a: 40, b: 30, end_angle: 245)
|
239
|
+
# canvas.draw(arc).stroke
|
240
|
+
# canvas.fill_color("red").circle(*arc.end_point, 2).fill
|
143
241
|
def end_point
|
144
242
|
evaluate(@end_eta)
|
145
243
|
end
|
@@ -157,10 +255,10 @@ module HexaPDF
|
|
157
255
|
# move the current point to the start point of the arc. Otherwise it is assumed that the
|
158
256
|
# current point already coincides with the start point
|
159
257
|
#
|
160
|
-
# The #max_curves value is set to the value of the configuration
|
161
|
-
# 'graphic_object.arc.max_curves' before drawing.
|
258
|
+
# The #max_curves value, if not already changed, is set to the value of the configuration
|
259
|
+
# option 'graphic_object.arc.max_curves' before drawing.
|
162
260
|
def draw(canvas, move_to_start: true)
|
163
|
-
@max_curves
|
261
|
+
@max_curves ||= canvas.context.document.config['graphic_object.arc.max_curves']
|
164
262
|
canvas.move_to(*start_point) if move_to_start
|
165
263
|
curves.each {|x, y, hash| canvas.curve_to(x, y, **hash) }
|
166
264
|
end
|
@@ -183,7 +281,8 @@ module HexaPDF
|
|
183
281
|
result = []
|
184
282
|
|
185
283
|
# Number of curves to use, maximal segment angle is 2*PI/max_curves
|
186
|
-
|
284
|
+
max_curves = @max_curves || 6
|
285
|
+
n = [max_curves, ((@end_eta - @start_eta).abs / (2 * Math::PI / max_curves)).ceil].min
|
187
286
|
d_eta = (@end_eta - @start_eta) / n
|
188
287
|
|
189
288
|
alpha = Math.sin(d_eta) * (Math.sqrt(4 + 3 * Math.tan(d_eta / 2)**2) - 1) / 3
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/content.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/data_dir.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/dictionary.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -233,11 +233,16 @@ module HexaPDF
|
|
233
233
|
|
234
234
|
# Converts the string into UTF-8 encoding, assuming it is a binary string. Otherwise +nil+ is
|
235
235
|
# returned.
|
236
|
-
def self.convert(str, _type,
|
236
|
+
def self.convert(str, _type, document)
|
237
237
|
return unless str.kind_of?(String) && str.encoding == Encoding::BINARY
|
238
238
|
|
239
239
|
if str.getbyte(0) == 254 && str.getbyte(1) == 255
|
240
|
-
str[2..-1].force_encoding(Encoding::UTF_16BE)
|
240
|
+
str = str[2..-1].force_encoding(Encoding::UTF_16BE)
|
241
|
+
if str.valid_encoding?
|
242
|
+
str.encode!(Encoding::UTF_8)
|
243
|
+
else
|
244
|
+
document.configuration['document.on_invalid_string'].call(str)
|
245
|
+
end
|
241
246
|
else
|
242
247
|
Utils::PDFDocEncoding.convert_to_utf8(str)
|
243
248
|
end
|
@@ -349,9 +354,30 @@ module HexaPDF
|
|
349
354
|
|
350
355
|
end
|
351
356
|
|
357
|
+
# Converter module for fields of type Integer.
|
358
|
+
module IntegerConverter
|
359
|
+
|
360
|
+
# This converter is usable if the +type+ is Integer.
|
361
|
+
def self.usable_for?(type)
|
362
|
+
type == Integer
|
363
|
+
end
|
364
|
+
|
365
|
+
# :nodoc:
|
366
|
+
def self.additional_types
|
367
|
+
end
|
368
|
+
|
369
|
+
# Converts a Float value into an Integer if the float is equal to its integer value. Otherwise
|
370
|
+
# returns +nil+
|
371
|
+
def self.convert(data, _type, _document)
|
372
|
+
return unless data.kind_of?(Float) && data == data.to_i
|
373
|
+
data.to_i
|
374
|
+
end
|
375
|
+
|
376
|
+
end
|
377
|
+
|
352
378
|
Field.converters.replace([FileSpecificationConverter, DictionaryConverter, ArrayConverter,
|
353
379
|
StringConverter, PDFByteStringConverter, DateConverter,
|
354
|
-
RectangleConverter])
|
380
|
+
RectangleConverter, IntegerConverter])
|
355
381
|
|
356
382
|
end
|
357
383
|
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -116,9 +116,9 @@ module HexaPDF
|
|
116
116
|
end
|
117
117
|
|
118
118
|
@document.pages.each do |page|
|
119
|
-
page
|
119
|
+
page.each_annotation do |annot|
|
120
120
|
next unless annot[:Subtype] == :FileAttachment
|
121
|
-
spec =
|
121
|
+
spec = annot[:FS]
|
122
122
|
yield(spec) unless seen.key?(spec)
|
123
123
|
seen[spec] = true
|
124
124
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
data/lib/hexapdf/document.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# This file is part of HexaPDF.
|
5
5
|
#
|
6
6
|
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
-
# Copyright (C) 2014-
|
7
|
+
# Copyright (C) 2014-2021 Thomas Leitner
|
8
8
|
#
|
9
9
|
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
10
|
# under the terms of the GNU Affero General Public License version 3 as
|