hexapdf 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/CONTRIBUTERS +2 -1
- data/LICENSE +1 -1
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/examples/019-column_box.rb +57 -0
- data/lib/hexapdf.rb +4 -1
- data/lib/hexapdf/cli.rb +4 -1
- data/lib/hexapdf/cli/batch.rb +4 -1
- data/lib/hexapdf/cli/command.rb +4 -1
- data/lib/hexapdf/cli/files.rb +4 -1
- data/lib/hexapdf/cli/images.rb +4 -1
- data/lib/hexapdf/cli/info.rb +4 -1
- data/lib/hexapdf/cli/inspect.rb +4 -1
- data/lib/hexapdf/cli/merge.rb +4 -1
- data/lib/hexapdf/cli/modify.rb +4 -1
- data/lib/hexapdf/cli/optimize.rb +4 -1
- data/lib/hexapdf/cli/split.rb +5 -2
- data/lib/hexapdf/composer.rb +4 -1
- data/lib/hexapdf/configuration.rb +4 -1
- data/lib/hexapdf/content.rb +4 -1
- data/lib/hexapdf/content/canvas.rb +4 -1
- data/lib/hexapdf/content/color_space.rb +4 -1
- data/lib/hexapdf/content/graphic_object.rb +4 -1
- data/lib/hexapdf/content/graphic_object/arc.rb +4 -1
- data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +4 -1
- data/lib/hexapdf/content/graphic_object/geom2d.rb +4 -1
- data/lib/hexapdf/content/graphic_object/solid_arc.rb +4 -1
- data/lib/hexapdf/content/graphics_state.rb +4 -1
- data/lib/hexapdf/content/operator.rb +4 -1
- data/lib/hexapdf/content/parser.rb +4 -1
- data/lib/hexapdf/content/processor.rb +4 -1
- data/lib/hexapdf/content/transformation_matrix.rb +4 -1
- data/lib/hexapdf/data_dir.rb +4 -1
- data/lib/hexapdf/dictionary.rb +4 -1
- data/lib/hexapdf/dictionary_fields.rb +4 -1
- data/lib/hexapdf/document.rb +4 -1
- data/lib/hexapdf/document/files.rb +4 -1
- data/lib/hexapdf/document/fonts.rb +4 -1
- data/lib/hexapdf/document/images.rb +4 -1
- data/lib/hexapdf/document/pages.rb +4 -1
- data/lib/hexapdf/encryption.rb +4 -1
- data/lib/hexapdf/encryption/aes.rb +4 -1
- data/lib/hexapdf/encryption/arc4.rb +4 -1
- data/lib/hexapdf/encryption/fast_aes.rb +4 -1
- data/lib/hexapdf/encryption/fast_arc4.rb +4 -1
- data/lib/hexapdf/encryption/identity.rb +4 -1
- data/lib/hexapdf/encryption/ruby_aes.rb +4 -1
- data/lib/hexapdf/encryption/ruby_arc4.rb +4 -1
- data/lib/hexapdf/encryption/security_handler.rb +4 -1
- data/lib/hexapdf/encryption/standard_security_handler.rb +4 -1
- data/lib/hexapdf/error.rb +4 -1
- data/lib/hexapdf/filter.rb +4 -1
- data/lib/hexapdf/filter/ascii85_decode.rb +4 -1
- data/lib/hexapdf/filter/ascii_hex_decode.rb +4 -1
- data/lib/hexapdf/filter/dct_decode.rb +4 -1
- data/lib/hexapdf/filter/encryption.rb +4 -1
- data/lib/hexapdf/filter/flate_decode.rb +4 -1
- data/lib/hexapdf/filter/jpx_decode.rb +4 -1
- data/lib/hexapdf/filter/lzw_decode.rb +4 -1
- data/lib/hexapdf/filter/predictor.rb +4 -1
- data/lib/hexapdf/filter/run_length_decode.rb +4 -1
- data/lib/hexapdf/font/cmap.rb +4 -1
- data/lib/hexapdf/font/cmap/parser.rb +4 -1
- data/lib/hexapdf/font/cmap/writer.rb +5 -2
- data/lib/hexapdf/font/encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/base.rb +4 -1
- data/lib/hexapdf/font/encoding/difference_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/glyph_list.rb +4 -1
- data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/standard_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/symbol_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +4 -1
- data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +4 -1
- data/lib/hexapdf/font/invalid_glyph.rb +4 -1
- data/lib/hexapdf/font/true_type.rb +4 -1
- data/lib/hexapdf/font/true_type/builder.rb +4 -1
- data/lib/hexapdf/font/true_type/font.rb +4 -1
- data/lib/hexapdf/font/true_type/optimizer.rb +4 -1
- data/lib/hexapdf/font/true_type/subsetter.rb +4 -1
- data/lib/hexapdf/font/true_type/table.rb +4 -1
- data/lib/hexapdf/font/true_type/table/cmap.rb +4 -1
- data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +4 -1
- data/lib/hexapdf/font/true_type/table/directory.rb +4 -1
- data/lib/hexapdf/font/true_type/table/glyf.rb +4 -1
- data/lib/hexapdf/font/true_type/table/head.rb +4 -1
- data/lib/hexapdf/font/true_type/table/hhea.rb +4 -1
- data/lib/hexapdf/font/true_type/table/hmtx.rb +4 -1
- data/lib/hexapdf/font/true_type/table/kern.rb +4 -1
- data/lib/hexapdf/font/true_type/table/loca.rb +4 -1
- data/lib/hexapdf/font/true_type/table/maxp.rb +4 -1
- data/lib/hexapdf/font/true_type/table/name.rb +4 -1
- data/lib/hexapdf/font/true_type/table/os2.rb +4 -1
- data/lib/hexapdf/font/true_type/table/post.rb +4 -1
- data/lib/hexapdf/font/true_type_wrapper.rb +4 -1
- data/lib/hexapdf/font/type1.rb +4 -1
- data/lib/hexapdf/font/type1/afm_parser.rb +4 -1
- data/lib/hexapdf/font/type1/character_metrics.rb +4 -1
- data/lib/hexapdf/font/type1/font.rb +4 -1
- data/lib/hexapdf/font/type1/font_metrics.rb +4 -1
- data/lib/hexapdf/font/type1/pfb_parser.rb +4 -1
- data/lib/hexapdf/font/type1_wrapper.rb +4 -1
- data/lib/hexapdf/font_loader.rb +4 -1
- data/lib/hexapdf/font_loader/from_configuration.rb +4 -1
- data/lib/hexapdf/font_loader/from_file.rb +4 -1
- data/lib/hexapdf/font_loader/standard14.rb +4 -1
- data/lib/hexapdf/image_loader.rb +4 -1
- data/lib/hexapdf/image_loader/jpeg.rb +4 -1
- data/lib/hexapdf/image_loader/pdf.rb +4 -1
- data/lib/hexapdf/image_loader/png.rb +4 -1
- data/lib/hexapdf/importer.rb +4 -1
- data/lib/hexapdf/layout.rb +4 -1
- data/lib/hexapdf/layout/box.rb +4 -1
- data/lib/hexapdf/layout/column_box.rb +161 -0
- data/lib/hexapdf/layout/frame.rb +4 -1
- data/lib/hexapdf/layout/image_box.rb +4 -1
- data/lib/hexapdf/layout/inline_box.rb +4 -1
- data/lib/hexapdf/layout/line.rb +4 -1
- data/lib/hexapdf/layout/numeric_refinements.rb +4 -1
- data/lib/hexapdf/layout/style.rb +4 -1
- data/lib/hexapdf/layout/text_box.rb +4 -1
- data/lib/hexapdf/layout/text_fragment.rb +4 -1
- data/lib/hexapdf/layout/text_layouter.rb +4 -1
- data/lib/hexapdf/layout/text_shaper.rb +4 -1
- data/lib/hexapdf/layout/width_from_polygon.rb +4 -1
- data/lib/hexapdf/name_tree_node.rb +4 -1
- data/lib/hexapdf/number_tree_node.rb +4 -1
- data/lib/hexapdf/object.rb +4 -1
- data/lib/hexapdf/parser.rb +4 -1
- data/lib/hexapdf/rectangle.rb +4 -1
- data/lib/hexapdf/reference.rb +4 -1
- data/lib/hexapdf/revision.rb +4 -1
- data/lib/hexapdf/revisions.rb +4 -1
- data/lib/hexapdf/serializer.rb +9 -2
- data/lib/hexapdf/stream.rb +4 -1
- data/lib/hexapdf/task.rb +4 -1
- data/lib/hexapdf/task/dereference.rb +4 -1
- data/lib/hexapdf/task/optimize.rb +4 -1
- data/lib/hexapdf/tokenizer.rb +4 -1
- data/lib/hexapdf/type.rb +4 -1
- data/lib/hexapdf/type/action.rb +4 -1
- data/lib/hexapdf/type/actions.rb +4 -1
- data/lib/hexapdf/type/actions/go_to.rb +4 -1
- data/lib/hexapdf/type/actions/go_to_r.rb +4 -1
- data/lib/hexapdf/type/actions/launch.rb +4 -1
- data/lib/hexapdf/type/actions/uri.rb +4 -1
- data/lib/hexapdf/type/annotation.rb +4 -1
- data/lib/hexapdf/type/annotations.rb +4 -1
- data/lib/hexapdf/type/annotations/link.rb +4 -1
- data/lib/hexapdf/type/annotations/markup_annotation.rb +4 -1
- data/lib/hexapdf/type/annotations/text.rb +4 -1
- data/lib/hexapdf/type/catalog.rb +4 -1
- data/lib/hexapdf/type/cid_font.rb +4 -1
- data/lib/hexapdf/type/embedded_file.rb +4 -1
- data/lib/hexapdf/type/file_specification.rb +4 -1
- data/lib/hexapdf/type/font.rb +4 -1
- data/lib/hexapdf/type/font_descriptor.rb +4 -1
- data/lib/hexapdf/type/font_simple.rb +4 -1
- data/lib/hexapdf/type/font_true_type.rb +4 -1
- data/lib/hexapdf/type/font_type0.rb +4 -1
- data/lib/hexapdf/type/font_type1.rb +4 -1
- data/lib/hexapdf/type/font_type3.rb +4 -1
- data/lib/hexapdf/type/form.rb +4 -1
- data/lib/hexapdf/type/graphics_state_parameter.rb +4 -1
- data/lib/hexapdf/type/image.rb +4 -1
- data/lib/hexapdf/type/info.rb +4 -1
- data/lib/hexapdf/type/names.rb +4 -1
- data/lib/hexapdf/type/object_stream.rb +4 -1
- data/lib/hexapdf/type/page.rb +4 -1
- data/lib/hexapdf/type/page_tree_node.rb +4 -1
- data/lib/hexapdf/type/resources.rb +4 -1
- data/lib/hexapdf/type/trailer.rb +4 -1
- data/lib/hexapdf/type/viewer_preferences.rb +4 -1
- data/lib/hexapdf/type/xref_stream.rb +4 -1
- data/lib/hexapdf/utils/bit_field.rb +4 -1
- data/lib/hexapdf/utils/bit_stream.rb +4 -1
- data/lib/hexapdf/utils/graphics_helpers.rb +4 -1
- data/lib/hexapdf/utils/lru_cache.rb +4 -1
- data/lib/hexapdf/utils/math_helpers.rb +4 -1
- data/lib/hexapdf/utils/object_hash.rb +4 -1
- data/lib/hexapdf/utils/pdf_doc_encoding.rb +4 -1
- data/lib/hexapdf/utils/sorted_tree_node.rb +4 -1
- data/lib/hexapdf/version.rb +5 -2
- data/lib/hexapdf/writer.rb +4 -1
- data/lib/hexapdf/xref_section.rb +4 -1
- data/test/hexapdf/font/cmap/test_writer.rb +9 -1
- data/test/hexapdf/test_serializer.rb +6 -0
- data/test/hexapdf/test_writer.rb +2 -2
- metadata +4 -2
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/true_type/table'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/true_type'
|
data/lib/hexapdf/font/type1.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
module HexaPDF
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/type1/font_metrics'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
module HexaPDF
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'forwardable'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/type1/character_metrics'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/encoding'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/type1'
|
data/lib/hexapdf/font_loader.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
module HexaPDF
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/true_type_wrapper'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/font/true_type_wrapper'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/data_dir'
|
data/lib/hexapdf/image_loader.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
module HexaPDF
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/error'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/error'
|
@@ -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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/error'
|
data/lib/hexapdf/importer.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
require 'hexapdf/error'
|
data/lib/hexapdf/layout.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
|
34
37
|
module HexaPDF
|
data/lib/hexapdf/layout/box.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-2019 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
|
@@ -29,6 +29,9 @@
|
|
29
29
|
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
30
|
# License, a covered work must retain the producer line in every PDF that
|
31
31
|
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
32
35
|
#++
|
33
36
|
require 'hexapdf/layout/style'
|
34
37
|
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# -*- encoding: utf-8; frozen_string_literal: true -*-
|
2
|
+
#
|
3
|
+
#--
|
4
|
+
# This file is part of HexaPDF.
|
5
|
+
#
|
6
|
+
# HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
|
7
|
+
# Copyright (C) 2014-2019 Thomas Leitner
|
8
|
+
#
|
9
|
+
# HexaPDF is free software: you can redistribute it and/or modify it
|
10
|
+
# under the terms of the GNU Affero General Public License version 3 as
|
11
|
+
# published by the Free Software Foundation with the addition of the
|
12
|
+
# following permission added to Section 15 as permitted in Section 7(a):
|
13
|
+
# FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
|
14
|
+
# THOMAS LEITNER, THOMAS LEITNER DISCLAIMS THE WARRANTY OF NON
|
15
|
+
# INFRINGEMENT OF THIRD PARTY RIGHTS.
|
16
|
+
#
|
17
|
+
# HexaPDF is distributed in the hope that it will be useful, but WITHOUT
|
18
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
19
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
|
20
|
+
# License for more details.
|
21
|
+
#
|
22
|
+
# You should have received a copy of the GNU Affero General Public License
|
23
|
+
# along with HexaPDF. If not, see <http://www.gnu.org/licenses/>.
|
24
|
+
#
|
25
|
+
# The interactive user interfaces in modified source and object code
|
26
|
+
# versions of HexaPDF must display Appropriate Legal Notices, as required
|
27
|
+
# under Section 5 of the GNU Affero General Public License version 3.
|
28
|
+
#
|
29
|
+
# In accordance with Section 7(b) of the GNU Affero General Public
|
30
|
+
# License, a covered work must retain the producer line in every PDF that
|
31
|
+
# is created or manipulated using HexaPDF.
|
32
|
+
#
|
33
|
+
# If the GNU Affero General Public License doesn't fit your need,
|
34
|
+
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
35
|
+
#++
|
36
|
+
require 'hexapdf/layout/box'
|
37
|
+
|
38
|
+
module HexaPDF
|
39
|
+
module Layout
|
40
|
+
|
41
|
+
# A ColumnBox arranges boxes in one or more columns.
|
42
|
+
#
|
43
|
+
# The number of columns as well as the size of the gap between the columns can be modified.
|
44
|
+
class ColumnBox < Box
|
45
|
+
|
46
|
+
# The child boxes of this ColumnBox.
|
47
|
+
attr_reader :children
|
48
|
+
|
49
|
+
# The number of columns.
|
50
|
+
# TODO: allow array with column widths later like [100, :*, :*]; same for gaps
|
51
|
+
attr_reader :columns
|
52
|
+
|
53
|
+
# The size of the gap between the columns.
|
54
|
+
attr_reader :gap
|
55
|
+
|
56
|
+
# Creates a new ColumnBox object for the given +children+ boxes.
|
57
|
+
def initialize(children = [], columns = 2, gap: 36, **kwargs)
|
58
|
+
super(kwargs, &:unused_draw_block)
|
59
|
+
@children = children
|
60
|
+
@columns = columns
|
61
|
+
@gap = gap
|
62
|
+
end
|
63
|
+
|
64
|
+
# Fits the column box into the available space.
|
65
|
+
def fit(available_width, available_height, frame)
|
66
|
+
last_height_difference = 1_000_000
|
67
|
+
height = if style.position == :flow
|
68
|
+
frame.height
|
69
|
+
else
|
70
|
+
(@initial_height > 0 ? @initial_height : available_height) - reserved_height
|
71
|
+
end
|
72
|
+
while true
|
73
|
+
@frames = []
|
74
|
+
if style.position == :flow
|
75
|
+
column_width = (frame.width - gap * (@columns - 1)).to_f / @columns
|
76
|
+
@columns.times do |col_nr|
|
77
|
+
left = (column_width + gap) * col_nr + frame.left
|
78
|
+
bottom = frame.bottom
|
79
|
+
rect = Geom2D::Polygon([left, bottom],
|
80
|
+
[left + column_width, bottom],
|
81
|
+
[left + column_width, bottom + height],
|
82
|
+
[left, bottom + height])
|
83
|
+
shape = Geom2D::Algorithms::PolygonOperation.run(frame.shape, rect, :intersection)
|
84
|
+
col_frame = Frame.new(left, bottom, column_width, height)
|
85
|
+
col_frame.shape = shape
|
86
|
+
@frames << col_frame
|
87
|
+
end
|
88
|
+
@frame_index = 0
|
89
|
+
@results = @children.map {|child_box| fit_box(child_box) }
|
90
|
+
@width = frame.width
|
91
|
+
@height = frame.height - @frames.min_by(&:y).y
|
92
|
+
else
|
93
|
+
width = (@initial_width > 0 ? @initial_width : available_width) - reserved_width
|
94
|
+
column_width = (width - gap * (@columns - 1)).to_f / @columns
|
95
|
+
@columns.times do |col_nr|
|
96
|
+
@frames << Frame.new((column_width + gap) * col_nr, 0, column_width, height)
|
97
|
+
end
|
98
|
+
@frame_index = 0
|
99
|
+
@results = @children.map {|child_box| fit_box(child_box) }
|
100
|
+
@width = width
|
101
|
+
@height = height - @frames.min_by(&:y).y
|
102
|
+
end
|
103
|
+
min_y, max_y = @frames.minmax_by(&:y).map(&:y)
|
104
|
+
p [height, @frames.map(&:y), last_height_difference, min_y, max_y]
|
105
|
+
# TOOD: @result.any?(&:empty?) only for the first run!!!! if the first run fails, we
|
106
|
+
# cannot balance the columns because there is too much content.
|
107
|
+
# TODO: another break condition is if the @results didn't change since the last run
|
108
|
+
break if max_y != height && (@results.any?(&:empty?) ||
|
109
|
+
max_y - min_y >= last_height_difference ||
|
110
|
+
max_y - min_y < 0.5)
|
111
|
+
last_height_difference = max_y - min_y
|
112
|
+
height -= last_height_difference / 2.0
|
113
|
+
p [height]
|
114
|
+
end
|
115
|
+
@results.all? {|res| res.length == 1 }
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def fit_box(box)
|
121
|
+
cur_frame = @frames[@frame_index]
|
122
|
+
fitted_boxes = []
|
123
|
+
while true && cur_frame
|
124
|
+
result = cur_frame.fit(box)
|
125
|
+
if result.success?
|
126
|
+
cur_frame.remove_area(result.mask)
|
127
|
+
fitted_boxes << result
|
128
|
+
break
|
129
|
+
elsif cur_frame.full?
|
130
|
+
@frame_index += 1
|
131
|
+
break if @frame_index == @frames.length
|
132
|
+
cur_frame = @frames[@frame_index]
|
133
|
+
else
|
134
|
+
draw_box, box = cur_frame.split(result)
|
135
|
+
if draw_box
|
136
|
+
cur_frame.remove_area(result.mask)
|
137
|
+
fitted_boxes << result
|
138
|
+
elsif !cur_frame.find_next_region
|
139
|
+
@frame_index += 1
|
140
|
+
break if @frame_index == @frames.length
|
141
|
+
cur_frame = @frames[@frame_index]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
fitted_boxes
|
146
|
+
end
|
147
|
+
|
148
|
+
# Draws the child boxes onto the canvas at position [x, y].
|
149
|
+
def draw_content(canvas, x, y)
|
150
|
+
x = y = 0 if style.position == :flow
|
151
|
+
@results.each do |result_boxes|
|
152
|
+
result_boxes.each do |result|
|
153
|
+
result.box.draw(canvas, x + result.x, y + result.y)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
end
|