hexapdf 0.24.1 → 0.24.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Rakefile +1 -1
- data/lib/hexapdf/importer.rb +2 -0
- data/lib/hexapdf/layout/box.rb +6 -1
- data/lib/hexapdf/layout/image_box.rb +2 -1
- data/lib/hexapdf/type/page.rb +5 -0
- data/lib/hexapdf/type/page_tree_node.rb +1 -1
- data/lib/hexapdf/version.rb +1 -1
- data/test/hexapdf/test_importer.rb +1 -0
- data/test/hexapdf/test_writer.rb +3 -3
- data/test/hexapdf/type/test_page.rb +10 -1
- data/test/hexapdf/type/test_page_tree_node.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d651940209b634c4f8c95924479f46dca2b49a458b731cd6bfba5ad95151c70d
|
4
|
+
data.tar.gz: aebe4ea9b21414b68483557f0f4cda0ea02ba17ae39bd58166c0864890c56691
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d5fc26a440b93e140ae1cf761b969c9cb8c7b708db52674b3b8f785babfd4552f6682b536cae682570309d3f4b40fc8d26e8a9c933de271b7cd347a49334c07
|
7
|
+
data.tar.gz: 61b7303d84de7bd0851e6f60de62e8e25a5c772ad97837c2ab03962f220a06caae03cb05c668b233eb8fc0273e3232a9be6965d31ad9add1bf6c9ee979cb828e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 0.24.2 - 2022-08-31
|
2
|
+
|
3
|
+
### Fixed
|
4
|
+
|
5
|
+
* [HexaPDF::Importer] to detect loops in a fully-loaded document
|
6
|
+
* HexaPDF::Type::PageTreeNode#perform_validation to only do the validation for
|
7
|
+
the document's root page tree node
|
8
|
+
* HexaPDF::Type::Page#perform_validation to only do the validation if the page
|
9
|
+
is part of the document's page tree
|
10
|
+
* Box layouting to take small floating point differences into account
|
11
|
+
|
12
|
+
|
1
13
|
## 0.24.1 - 2022-08-11
|
2
14
|
|
3
15
|
### Added
|
data/Rakefile
CHANGED
@@ -47,7 +47,7 @@ namespace :dev do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
task :test_all do
|
50
|
-
versions = `rbenv versions --bare | grep -i 2.[67]
|
50
|
+
versions = `rbenv versions --bare | grep -i ^2.[67]\\\\\\|^3.`.split("\n")
|
51
51
|
versions.each do |version|
|
52
52
|
sh "eval \"$(rbenv init -)\"; rbenv shell #{version} && ruby -v && rake test"
|
53
53
|
end
|
data/lib/hexapdf/importer.rb
CHANGED
@@ -117,6 +117,8 @@ module HexaPDF
|
|
117
117
|
when HexaPDF::Object
|
118
118
|
if object.type == :Catalog || object.type == :Pages
|
119
119
|
@mapper[object.data] = nil
|
120
|
+
elsif (mapped_object = @mapper[object.data]) && !mapped_object.null?
|
121
|
+
mapped_object
|
120
122
|
else
|
121
123
|
obj = object.dup
|
122
124
|
@mapper[object.data] = NullableWeakRef.new(obj)
|
data/lib/hexapdf/layout/box.rb
CHANGED
@@ -34,6 +34,7 @@
|
|
34
34
|
# commercial licenses are available at <https://gettalong.at/hexapdf/>.
|
35
35
|
#++
|
36
36
|
require 'hexapdf/layout/style'
|
37
|
+
require 'geom2d/utils'
|
37
38
|
|
38
39
|
module HexaPDF
|
39
40
|
module Layout
|
@@ -76,6 +77,8 @@ module HexaPDF
|
|
76
77
|
# which should just draw the content.
|
77
78
|
class Box
|
78
79
|
|
80
|
+
include Geom2D::Utils
|
81
|
+
|
79
82
|
# Creates a new Box object, using the provided block as drawing block (see ::new).
|
80
83
|
#
|
81
84
|
# If +content_box+ is +true+, the width and height are taken to mean the content width and
|
@@ -183,7 +186,9 @@ module HexaPDF
|
|
183
186
|
def split(available_width, available_height, frame)
|
184
187
|
if @fit_successful
|
185
188
|
[self, nil]
|
186
|
-
elsif (style.position != :flow &&
|
189
|
+
elsif (style.position != :flow &&
|
190
|
+
(float_compare(@width, available_width) > 0 ||
|
191
|
+
float_compare(@height, available_height) > 0)) ||
|
187
192
|
content_height == 0 || content_width == 0
|
188
193
|
[nil, self]
|
189
194
|
else
|
@@ -98,7 +98,8 @@ module HexaPDF
|
|
98
98
|
@height = image_height * ratio + rh
|
99
99
|
end
|
100
100
|
|
101
|
-
@width <=
|
101
|
+
@fit_successful = float_compare(@width, available_width) <= 0 &&
|
102
|
+
float_compare(@height, available_height) <= 0
|
102
103
|
end
|
103
104
|
|
104
105
|
private
|
data/lib/hexapdf/type/page.rb
CHANGED
@@ -564,6 +564,11 @@ module HexaPDF
|
|
564
564
|
|
565
565
|
# Ensures that the required inheritable fields are set.
|
566
566
|
def perform_validation(&block)
|
567
|
+
root_node = document.catalog.pages
|
568
|
+
parent_node = self[:Parent]
|
569
|
+
parent_node = parent_node[:Parent] while parent_node && parent_node != root_node
|
570
|
+
return unless parent_node
|
571
|
+
|
567
572
|
super
|
568
573
|
REQUIRED_INHERITABLE_FIELDS.each do |name|
|
569
574
|
next if self[name]
|
data/lib/hexapdf/version.rb
CHANGED
@@ -26,6 +26,7 @@ describe HexaPDF::Importer do
|
|
26
26
|
@obj = @source.add({hash: @hash, array: ["one", "two"],
|
27
27
|
ref: HexaPDF::Reference.new(obj.oid, obj.gen),
|
28
28
|
others: [:symbol, 5, 5.5, nil, true, false]})
|
29
|
+
@obj[:MySelf] = @obj
|
29
30
|
@source.pages.add
|
30
31
|
@source.pages.root[:Rotate] = 90
|
31
32
|
@dest = HexaPDF::Document.new
|
data/test/hexapdf/test_writer.rb
CHANGED
@@ -40,7 +40,7 @@ describe HexaPDF::Writer do
|
|
40
40
|
219
|
41
41
|
%%EOF
|
42
42
|
3 0 obj
|
43
|
-
<</Producer(HexaPDF version 0.24.
|
43
|
+
<</Producer(HexaPDF version 0.24.2)>>
|
44
44
|
endobj
|
45
45
|
xref
|
46
46
|
3 1
|
@@ -72,7 +72,7 @@ describe HexaPDF::Writer do
|
|
72
72
|
141
|
73
73
|
%%EOF
|
74
74
|
6 0 obj
|
75
|
-
<</Producer(HexaPDF version 0.24.
|
75
|
+
<</Producer(HexaPDF version 0.24.2)>>
|
76
76
|
endobj
|
77
77
|
2 0 obj
|
78
78
|
<</Length 10>>stream
|
@@ -206,7 +206,7 @@ describe HexaPDF::Writer do
|
|
206
206
|
<</Type/Page/MediaBox[0 0 595 842]/Parent 2 0 R/Resources<<>>>>
|
207
207
|
endobj
|
208
208
|
5 0 obj
|
209
|
-
<</Producer(HexaPDF version 0.24.
|
209
|
+
<</Producer(HexaPDF version 0.24.2)>>
|
210
210
|
endobj
|
211
211
|
4 0 obj
|
212
212
|
<</Root 1 0 R/Info 5 0 R/Size 6/Type/XRef/W[1 1 2]/Index[0 6]/Filter/FlateDecode/DecodeParms<</Columns 4/Predictor 12>>/Length 33>>stream
|
@@ -71,8 +71,17 @@ describe HexaPDF::Type::Page do
|
|
71
71
|
end
|
72
72
|
|
73
73
|
describe "validation" do
|
74
|
+
it "only does validation if the page is in the document's page tree" do
|
75
|
+
page = @doc.add({Type: :Page})
|
76
|
+
assert(page.validate)
|
77
|
+
page[:Parent] = @doc.add({Type: :Pages, Kids: [page]})
|
78
|
+
assert(page.validate)
|
79
|
+
page[:Parent] = @doc.catalog.pages
|
80
|
+
refute(page.validate)
|
81
|
+
end
|
82
|
+
|
74
83
|
it "fails if a required inheritable field is not set" do
|
75
|
-
root = @doc.add({Type: :Pages})
|
84
|
+
root = @doc.catalog[:Pages] = @doc.add({Type: :Pages})
|
76
85
|
page = @doc.add({Type: :Page, Parent: root})
|
77
86
|
message = ''
|
78
87
|
refute(page.validate {|m, _| message = m })
|
@@ -7,7 +7,7 @@ require 'hexapdf/type/page_tree_node'
|
|
7
7
|
describe HexaPDF::Type::PageTreeNode do
|
8
8
|
before do
|
9
9
|
@doc = HexaPDF::Document.new
|
10
|
-
@root = @doc.add({Type: :Pages})
|
10
|
+
@root = @doc.catalog[:Pages] = @doc.add({Type: :Pages})
|
11
11
|
end
|
12
12
|
|
13
13
|
# Defines the following page tree:
|
@@ -283,6 +283,12 @@ describe HexaPDF::Type::PageTreeNode do
|
|
283
283
|
end
|
284
284
|
|
285
285
|
describe "validation" do
|
286
|
+
it "only does validation on the document's root node" do
|
287
|
+
@doc.catalog.delete(:Pages)
|
288
|
+
assert(@root.validate)
|
289
|
+
assert_equal(0, @root.page_count)
|
290
|
+
end
|
291
|
+
|
286
292
|
it "corrects faulty /Count entries" do
|
287
293
|
define_multilevel_page_tree
|
288
294
|
root_count = @root.page_count
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hexapdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.24.
|
4
|
+
version: 0.24.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Leitner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cmdparse
|