hexapdf 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +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
|