pdfrb 0.8.3 → 0.8.5
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/lib/pdfrb/annotation/base.rb +2 -2
- data/lib/pdfrb/appearance/generator.rb +1 -1
- data/lib/pdfrb/cli/images.rb +1 -1
- data/lib/pdfrb/cli.rb +3 -3
- data/lib/pdfrb/color/default_profile.rb +1 -1
- data/lib/pdfrb/conformance/ltv.rb +1 -1
- data/lib/pdfrb/conformance/pades.rb +4 -4
- data/lib/pdfrb/conformance/pdf_2_af.rb +2 -2
- data/lib/pdfrb/conformance/pdf_a.rb +1 -1
- data/lib/pdfrb/conformance/pdf_x.rb +3 -3
- data/lib/pdfrb/conformance/tagged_pdf.rb +1 -1
- data/lib/pdfrb/content/canvas.rb +1 -1
- data/lib/pdfrb/content/hidden_text_detector.rb +1 -1
- data/lib/pdfrb/content/shading/base.rb +1 -1
- data/lib/pdfrb/content/tiling_pattern.rb +1 -1
- data/lib/pdfrb/digital_signature/signing.rb +2 -2
- data/lib/pdfrb/document/annotations.rb +10 -10
- data/lib/pdfrb/document/associated_files.rb +2 -2
- data/lib/pdfrb/document/colors.rb +1 -1
- data/lib/pdfrb/document/destinations.rb +4 -4
- data/lib/pdfrb/document/encryption.rb +1 -1
- data/lib/pdfrb/document/files.rb +5 -5
- data/lib/pdfrb/document/fonts/subsetting.rb +87 -0
- data/lib/pdfrb/document/fonts.rb +10 -80
- data/lib/pdfrb/document/form.rb +9 -9
- data/lib/pdfrb/document/form_xobject.rb +1 -1
- data/lib/pdfrb/document/graphics_state.rb +1 -1
- data/lib/pdfrb/document/images.rb +1 -6
- data/lib/pdfrb/document/info.rb +1 -1
- data/lib/pdfrb/document/layers.rb +1 -1
- data/lib/pdfrb/document/metadata.rb +1 -1
- data/lib/pdfrb/document/outline.rb +8 -8
- data/lib/pdfrb/document/output_intents.rb +3 -3
- data/lib/pdfrb/document/pages.rb +19 -8
- data/lib/pdfrb/document/pdf_a.rb +1 -1
- data/lib/pdfrb/document/portfolio.rb +3 -3
- data/lib/pdfrb/document/shadings.rb +2 -9
- data/lib/pdfrb/document/stamps.rb +2 -2
- data/lib/pdfrb/document/structure.rb +9 -9
- data/lib/pdfrb/document.rb +10 -3
- data/lib/pdfrb/encryption/security_handler.rb +1 -2
- data/lib/pdfrb/font/cff/subsetter.rb +0 -0
- data/lib/pdfrb/font/sfnt.rb +73 -0
- data/lib/pdfrb/font/true_type/subsetter.rb +1 -57
- data/lib/pdfrb/font/true_type/wrapper.rb +3 -3
- data/lib/pdfrb/font.rb +1 -0
- data/lib/pdfrb/font_loader/true_type.rb +2 -2
- data/lib/pdfrb/font_loader/type3.rb +1 -1
- data/lib/pdfrb/importer.rb +3 -3
- data/lib/pdfrb/linearization/writer.rb +1 -1
- data/lib/pdfrb/model/object.rb +7 -0
- data/lib/pdfrb/model/type/action_hide.rb +1 -1
- data/lib/pdfrb/model/type/action_sound.rb +2 -2
- data/lib/pdfrb/model/type/add_action_catalog.rb +1 -1
- data/lib/pdfrb/model/type/add_action_form_field.rb +1 -1
- data/lib/pdfrb/model/type/add_action_page_object.rb +1 -1
- data/lib/pdfrb/model/type/add_action_screen_annotation.rb +1 -1
- data/lib/pdfrb/model/type/add_action_widget_annotation.rb +1 -1
- data/lib/pdfrb/model/type/alternate_image.rb +2 -2
- data/lib/pdfrb/model/type/bead.rb +4 -4
- data/lib/pdfrb/model/type/catalog.rb +1 -1
- data/lib/pdfrb/model/type/color_space.rb +5 -31
- data/lib/pdfrb/model/type/crypt_filter.rb +6 -6
- data/lib/pdfrb/model/type/d_part.rb +4 -4
- data/lib/pdfrb/model/type/destination.rb +2 -18
- data/lib/pdfrb/model/type/document_security_store.rb +1 -1
- data/lib/pdfrb/model/type/dss.rb +1 -1
- data/lib/pdfrb/model/type/font_multiple_master.rb +3 -12
- data/lib/pdfrb/model/type/function_stitching.rb +1 -1
- data/lib/pdfrb/model/type/generic_appearance.rb +1 -1
- data/lib/pdfrb/model/type/misc_extras.rb +2 -7
- data/lib/pdfrb/model/type/name_map.rb +33 -0
- data/lib/pdfrb/model/type/opt_content_ext.rb +2 -2
- data/lib/pdfrb/model/type/optional_content_membership.rb +2 -2
- data/lib/pdfrb/model/type/page.rb +5 -7
- data/lib/pdfrb/model/type/page_tree_node.rb +2 -2
- data/lib/pdfrb/model/type/pattern.rb +2 -18
- data/lib/pdfrb/model/type/rich_media_configuration.rb +1 -1
- data/lib/pdfrb/model/type/shading.rb +2 -18
- data/lib/pdfrb/model/type/signature_extras.rb +6 -21
- data/lib/pdfrb/model/type/soft_mask.rb +1 -13
- data/lib/pdfrb/model/type/struct_elem.rb +2 -2
- data/lib/pdfrb/model/type/struct_tree_root.rb +2 -2
- data/lib/pdfrb/model/type/structure_attributes.rb +5 -18
- data/lib/pdfrb/model/type/thread.rb +3 -3
- data/lib/pdfrb/model/type/three_d_stream.rb +1 -1
- data/lib/pdfrb/model/type/viewport.rb +1 -1
- data/lib/pdfrb/model/type/vri.rb +1 -1
- data/lib/pdfrb/model/type/web_capture_command.rb +1 -1
- data/lib/pdfrb/model/type/web_capture_image_set.rb +1 -1
- data/lib/pdfrb/model/type/web_capture_page_set.rb +2 -2
- data/lib/pdfrb/model/type/xobject_form.rb +1 -13
- data/lib/pdfrb/model/type.rb +2 -0
- data/lib/pdfrb/task/extract_images.rb +1 -2
- data/lib/pdfrb/task/extract_text.rb +1 -1
- data/lib/pdfrb/task/merge.rb +3 -3
- data/lib/pdfrb/task/thumbnail.rb +1 -1
- data/lib/pdfrb/version.rb +1 -1
- data/lib/pdfrb/writer.rb +4 -5
- data/lib/pdfrb/xmp.rb +2 -2
- metadata +5 -2
|
@@ -22,7 +22,7 @@ module Pdfrb
|
|
|
22
22
|
|
|
23
23
|
arr = ocgs.is_a?(Pdfrb::Model::PdfArray) ? ocgs.to_a : ocgs
|
|
24
24
|
arr.each do |ref|
|
|
25
|
-
obj =
|
|
25
|
+
obj = document.resolve(ref)
|
|
26
26
|
yield obj if obj
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -90,7 +90,7 @@ module Pdfrb
|
|
|
90
90
|
|
|
91
91
|
arr = ocgs.is_a?(Pdfrb::Model::PdfArray) ? ocgs.to_a : ocgs
|
|
92
92
|
arr.each do |ref|
|
|
93
|
-
obj =
|
|
93
|
+
obj = document.resolve(ref)
|
|
94
94
|
yield obj if obj
|
|
95
95
|
end
|
|
96
96
|
end
|
|
@@ -33,11 +33,11 @@ module Pdfrb
|
|
|
33
33
|
return enum_for(:each_ocg) unless block_given?
|
|
34
34
|
return unless ocfgs && document
|
|
35
35
|
|
|
36
|
-
arr =
|
|
36
|
+
arr = document.resolve(ocfgs)
|
|
37
37
|
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
38
38
|
|
|
39
39
|
arr.each do |ref|
|
|
40
|
-
obj =
|
|
40
|
+
obj = document.resolve(ref)
|
|
41
41
|
yield obj if obj
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -23,10 +23,10 @@ module Pdfrb
|
|
|
23
23
|
if ref.nil?
|
|
24
24
|
new_stream = document.add({}, type: Pdfrb::Model::Cos::Stream)
|
|
25
25
|
new_stream.stream = ""
|
|
26
|
-
value[:Contents] =
|
|
26
|
+
value[:Contents] = new_stream.ref
|
|
27
27
|
new_stream
|
|
28
28
|
else
|
|
29
|
-
|
|
29
|
+
document.resolve(ref)
|
|
30
30
|
end
|
|
31
31
|
Pdfrb::Content::Canvas.new(stream, document: document)
|
|
32
32
|
end
|
|
@@ -40,8 +40,7 @@ module Pdfrb
|
|
|
40
40
|
|
|
41
41
|
streams = contents.is_a?(::Array) ? contents : [contents]
|
|
42
42
|
streams.each_with_object(+"".b) do |ref_or_stream, buf|
|
|
43
|
-
stream = ref_or_stream
|
|
44
|
-
document&.object(ref_or_stream) : ref_or_stream
|
|
43
|
+
stream = document&.resolve(ref_or_stream)
|
|
45
44
|
next unless stream.is_a?(Pdfrb::Model::Cos::Stream)
|
|
46
45
|
|
|
47
46
|
buf << stream.decoded_stream
|
|
@@ -182,12 +181,11 @@ module Pdfrb
|
|
|
182
181
|
return enum_for(:each_annotation) unless block_given?
|
|
183
182
|
return unless annotations && document
|
|
184
183
|
|
|
185
|
-
arr =
|
|
186
|
-
document.object(annotations) : annotations
|
|
184
|
+
arr = document.resolve(annotations)
|
|
187
185
|
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
188
186
|
|
|
189
187
|
arr.each do |entry|
|
|
190
|
-
obj =
|
|
188
|
+
obj = document.resolve(entry)
|
|
191
189
|
yield obj if obj
|
|
192
190
|
end
|
|
193
191
|
end
|
|
@@ -32,11 +32,11 @@ module Pdfrb
|
|
|
32
32
|
return enum_for(:each_child) unless block_given?
|
|
33
33
|
return unless kids && document
|
|
34
34
|
|
|
35
|
-
arr =
|
|
35
|
+
arr = document.resolve(kids)
|
|
36
36
|
return unless arr.is_a?(Array)
|
|
37
37
|
|
|
38
38
|
arr.each do |kid_ref|
|
|
39
|
-
obj =
|
|
39
|
+
obj = document.resolve(kid_ref)
|
|
40
40
|
yield obj if obj
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -16,25 +16,9 @@ module Pdfrb
|
|
|
16
16
|
# to patterns.
|
|
17
17
|
class PatternMap < Pdfrb::Model::Cos::Dictionary
|
|
18
18
|
arlington_object "PatternMap"
|
|
19
|
+
include NameMap
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
value[name.to_sym] || value[name.to_s]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def add(name, pattern)
|
|
25
|
-
value[name.to_sym] = pattern
|
|
26
|
-
name.to_sym
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def each_pattern(&)
|
|
30
|
-
return enum_for(:each_pattern) unless block_given?
|
|
31
|
-
|
|
32
|
-
value.each(&)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def names
|
|
36
|
-
value.keys
|
|
37
|
-
end
|
|
21
|
+
alias each_pattern each_entry
|
|
38
22
|
end
|
|
39
23
|
end
|
|
40
24
|
end
|
|
@@ -116,25 +116,9 @@ module Pdfrb
|
|
|
116
116
|
# to shadings.
|
|
117
117
|
class ShadingMap < Pdfrb::Model::Cos::Dictionary
|
|
118
118
|
arlington_object "ShadingMap"
|
|
119
|
+
include NameMap
|
|
119
120
|
|
|
120
|
-
|
|
121
|
-
value[name.to_sym] || value[name.to_s]
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def add(name, shading)
|
|
125
|
-
value[name.to_sym] = shading
|
|
126
|
-
name.to_sym
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def each_shading(&)
|
|
130
|
-
return enum_for(:each_shading) unless block_given?
|
|
131
|
-
|
|
132
|
-
value.each(&)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def names
|
|
136
|
-
value.keys
|
|
137
|
-
end
|
|
121
|
+
alias each_shading each_entry
|
|
138
122
|
end
|
|
139
123
|
end
|
|
140
124
|
end
|
|
@@ -24,14 +24,9 @@ module Pdfrb
|
|
|
24
24
|
# keyed by DN component (CN, O, C, ...).
|
|
25
25
|
class SubjectDN < Pdfrb::Model::Cos::Dictionary
|
|
26
26
|
arlington_object "SubjectDN"
|
|
27
|
+
include NameMap
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
value[component.to_sym] || value[component.to_s]
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def components
|
|
33
|
-
value.keys
|
|
34
|
-
end
|
|
29
|
+
alias components names
|
|
35
30
|
end
|
|
36
31
|
|
|
37
32
|
# Document timestamp signature (s12.8.1, /DocTimeStamp): an
|
|
@@ -88,14 +83,9 @@ module Pdfrb
|
|
|
88
83
|
# validation data for one signature.
|
|
89
84
|
class VRIMap < Pdfrb::Model::Cos::Dictionary
|
|
90
85
|
arlington_object "VRIMap"
|
|
86
|
+
include NameMap
|
|
91
87
|
|
|
92
|
-
|
|
93
|
-
value[signature_hash.to_sym] || value[signature_hash.to_s]
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def signature_hashes
|
|
97
|
-
value.keys
|
|
98
|
-
end
|
|
88
|
+
alias signature_hashes names
|
|
99
89
|
end
|
|
100
90
|
|
|
101
91
|
# Associated-file embedded-file parameters (PDF 2.0 App Note
|
|
@@ -165,14 +155,9 @@ module Pdfrb
|
|
|
165
155
|
# developer names to their DevExtensions entries.
|
|
166
156
|
class Extensions < Pdfrb::Model::Cos::Dictionary
|
|
167
157
|
arlington_object "Extensions"
|
|
158
|
+
include NameMap
|
|
168
159
|
|
|
169
|
-
|
|
170
|
-
value[developer.to_sym] || value[developer.to_s]
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
def developers
|
|
174
|
-
value.keys
|
|
175
|
-
end
|
|
160
|
+
alias developers names
|
|
176
161
|
end
|
|
177
162
|
|
|
178
163
|
# GTS Procedural Steps group (prepress): identifies a
|
|
@@ -38,19 +38,7 @@ module Pdfrb
|
|
|
38
38
|
# ExtGState dictionaries.
|
|
39
39
|
class GraphicsStateParameterMap < Pdfrb::Model::Cos::Dictionary
|
|
40
40
|
arlington_object "GraphicsStateParameterMap"
|
|
41
|
-
|
|
42
|
-
def [](name)
|
|
43
|
-
value[name.to_sym] || value[name.to_s]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def add(name, parameters)
|
|
47
|
-
value[name.to_sym] = parameters
|
|
48
|
-
name.to_sym
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def names
|
|
52
|
-
value.keys
|
|
53
|
-
end
|
|
41
|
+
include NameMap
|
|
54
42
|
end
|
|
55
43
|
|
|
56
44
|
# Transparency group /Group dictionary (s11.2.4.5): isolation
|
|
@@ -76,11 +76,11 @@ module Pdfrb
|
|
|
76
76
|
return enum_for(:each_child) unless block_given?
|
|
77
77
|
return unless kids && document
|
|
78
78
|
|
|
79
|
-
arr =
|
|
79
|
+
arr = document.resolve(kids)
|
|
80
80
|
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
81
81
|
|
|
82
82
|
arr.each do |kid|
|
|
83
|
-
obj =
|
|
83
|
+
obj = document.resolve(kid)
|
|
84
84
|
yield obj if obj
|
|
85
85
|
end
|
|
86
86
|
end
|
|
@@ -21,11 +21,11 @@ module Pdfrb
|
|
|
21
21
|
return enum_for(:each_child) unless block_given?
|
|
22
22
|
return unless children && document
|
|
23
23
|
|
|
24
|
-
arr =
|
|
24
|
+
arr = document.resolve(children)
|
|
25
25
|
return unless arr.is_a?(Array) || arr.is_a?(Pdfrb::Model::PdfArray)
|
|
26
26
|
|
|
27
27
|
arr.each do |kid_ref|
|
|
28
|
-
obj =
|
|
28
|
+
obj = document.resolve(kid_ref)
|
|
29
29
|
yield obj if obj
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -45,24 +45,16 @@ module Pdfrb
|
|
|
45
45
|
# names mapped to standard structure types.
|
|
46
46
|
class RoleMap < Pdfrb::Model::Cos::Dictionary
|
|
47
47
|
arlington_object "RoleMap"
|
|
48
|
+
include NameMap
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
value[custom_name.to_sym] || value[custom_name.to_s]
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def custom_names
|
|
54
|
-
value.keys
|
|
55
|
-
end
|
|
50
|
+
alias custom_names names
|
|
56
51
|
end
|
|
57
52
|
|
|
58
53
|
# Namespaced role map (s14.7.3, /RoleMapNS): per-namespace role
|
|
59
54
|
# maps keyed by namespace URI.
|
|
60
55
|
class RoleMapNS < Pdfrb::Model::Cos::Dictionary
|
|
61
56
|
arlington_object "RoleMapNS"
|
|
62
|
-
|
|
63
|
-
def [](namespace)
|
|
64
|
-
value[namespace.to_sym] || value[namespace.to_s]
|
|
65
|
-
end
|
|
57
|
+
include NameMap
|
|
66
58
|
end
|
|
67
59
|
|
|
68
60
|
# Style dictionary (s14.9.2, /Styles entries): number-of-style
|
|
@@ -77,14 +69,9 @@ module Pdfrb
|
|
|
77
69
|
# attribute-owner dictionaries shared by structure elements.
|
|
78
70
|
class ClassMap < Pdfrb::Model::Cos::Dictionary
|
|
79
71
|
arlington_object "ClassMap"
|
|
72
|
+
include NameMap
|
|
80
73
|
|
|
81
|
-
|
|
82
|
-
value[class_name.to_sym] || value[class_name.to_s]
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def class_names
|
|
86
|
-
value.keys
|
|
87
|
-
end
|
|
74
|
+
alias class_names names
|
|
88
75
|
end
|
|
89
76
|
|
|
90
77
|
# Reference structure element kid (s14.8.2.4, /Reference):
|
|
@@ -21,7 +21,7 @@ module Pdfrb
|
|
|
21
21
|
ref = value[:F]
|
|
22
22
|
return nil unless ref && document
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
document.resolve(ref)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# /I — optional DocInfo dict with article metadata.
|
|
@@ -29,7 +29,7 @@ module Pdfrb
|
|
|
29
29
|
ref = value[:I]
|
|
30
30
|
return nil unless ref && document
|
|
31
31
|
|
|
32
|
-
resolved =
|
|
32
|
+
resolved = document.resolve(ref)
|
|
33
33
|
return nil unless resolved
|
|
34
34
|
|
|
35
35
|
Pdfrb::Model::Type::Info.new(resolved.value) if resolved.value.is_a?(::Hash)
|
|
@@ -40,7 +40,7 @@ module Pdfrb
|
|
|
40
40
|
ref = value[:Metadata]
|
|
41
41
|
return nil unless ref && document
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
document.resolve(ref)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
end
|
data/lib/pdfrb/model/type/vri.rb
CHANGED
|
@@ -36,7 +36,7 @@ module Pdfrb
|
|
|
36
36
|
ref = value[:S]
|
|
37
37
|
return nil unless ref && document
|
|
38
38
|
|
|
39
|
-
resolved =
|
|
39
|
+
resolved = document.resolve(ref)
|
|
40
40
|
return nil unless resolved
|
|
41
41
|
|
|
42
42
|
Pdfrb::Model::Type::WebCaptureCommandSettings.new(resolved.value)
|
|
@@ -32,7 +32,7 @@ module Pdfrb
|
|
|
32
32
|
|
|
33
33
|
arr = refs.is_a?(Pdfrb::Model::PdfArray) ? refs.value : refs
|
|
34
34
|
arr = [arr] unless arr.is_a?(::Array)
|
|
35
|
-
arr.filter_map { |r|
|
|
35
|
+
arr.filter_map { |r| document.resolve(r) }
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# /CT — optional content type (RFC 2045).
|
|
@@ -31,7 +31,7 @@ module Pdfrb
|
|
|
31
31
|
|
|
32
32
|
arr = refs.is_a?(Pdfrb::Model::PdfArray) ? refs.value : refs
|
|
33
33
|
arr = [arr] unless arr.is_a?(::Array)
|
|
34
|
-
arr.filter_map { |r|
|
|
34
|
+
arr.filter_map { |r| document.resolve(r) }
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# /CT — optional content type.
|
|
@@ -64,7 +64,7 @@ module Pdfrb
|
|
|
64
64
|
arr = refs.is_a?(Pdfrb::Model::PdfArray) ? refs.value : refs
|
|
65
65
|
arr = [arr] unless arr.is_a?(::Array)
|
|
66
66
|
arr.filter_map do |r|
|
|
67
|
-
resolved =
|
|
67
|
+
resolved = document.resolve(r)
|
|
68
68
|
next nil unless resolved && resolved.value.is_a?(::Hash)
|
|
69
69
|
|
|
70
70
|
Pdfrb::Model::Type::WebCaptureCommand.new(resolved.value)
|
|
@@ -89,19 +89,7 @@ module Pdfrb
|
|
|
89
89
|
# Resources /XObject dictionary (s7.8.3): name -> XObject.
|
|
90
90
|
class XObjectMap < Pdfrb::Model::Cos::Dictionary
|
|
91
91
|
arlington_object "XObjectMap"
|
|
92
|
-
|
|
93
|
-
def [](name)
|
|
94
|
-
value[name.to_sym] || value[name.to_s]
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def add(name, xobject)
|
|
98
|
-
value[name.to_sym] = xobject
|
|
99
|
-
name.to_sym
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def names
|
|
103
|
-
value.keys
|
|
104
|
-
end
|
|
92
|
+
include NameMap
|
|
105
93
|
end
|
|
106
94
|
end
|
|
107
95
|
end
|
data/lib/pdfrb/model/type.rb
CHANGED
|
@@ -15,8 +15,7 @@ module Pdfrb
|
|
|
15
15
|
document.pages.each_with_index do |page, idx|
|
|
16
16
|
xobjects = xobject_map(page, document)
|
|
17
17
|
xobjects&.each do |name, ref|
|
|
18
|
-
stream =
|
|
19
|
-
document.object(ref) : ref
|
|
18
|
+
stream = document.resolve(ref)
|
|
20
19
|
next unless stream.is_a?(Pdfrb::Model::Cos::Stream)
|
|
21
20
|
next unless stream.value[:Subtype] == :Image
|
|
22
21
|
|
|
@@ -148,7 +148,7 @@ module Pdfrb
|
|
|
148
148
|
return nil unless fonts.is_a?(::Hash)
|
|
149
149
|
|
|
150
150
|
entry = fonts[name] || fonts[name.to_sym] || fonts[name.to_s]
|
|
151
|
-
|
|
151
|
+
@document.resolve(entry)
|
|
152
152
|
end
|
|
153
153
|
end
|
|
154
154
|
private_constant :FontResolver
|
data/lib/pdfrb/task/merge.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Pdfrb
|
|
|
20
20
|
new_value[:Parent] = parent_ref(target)
|
|
21
21
|
new_page = target.add(new_value, type: Pdfrb::Model::Type::Page)
|
|
22
22
|
kids = pages_root(target).value[:Kids]
|
|
23
|
-
kids <<
|
|
23
|
+
kids << new_page.ref
|
|
24
24
|
pages_root(target).value[:Count] = (pages_root(target).value[:Count] || 0) + 1
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -30,7 +30,7 @@ module Pdfrb
|
|
|
30
30
|
ref = target.catalog.value[:Pages] || begin
|
|
31
31
|
root = target.add({ Type: :Pages, Kids: [], Count: 0 },
|
|
32
32
|
type: Pdfrb::Model::Type::PageTreeNode)
|
|
33
|
-
target.catalog.value[:Pages] =
|
|
33
|
+
target.catalog.value[:Pages] = root.ref
|
|
34
34
|
target.catalog.value[:Pages]
|
|
35
35
|
end
|
|
36
36
|
target.object(ref)
|
|
@@ -39,7 +39,7 @@ module Pdfrb
|
|
|
39
39
|
|
|
40
40
|
def parent_ref(target)
|
|
41
41
|
root = pages_root(target)
|
|
42
|
-
|
|
42
|
+
root.ref
|
|
43
43
|
end
|
|
44
44
|
private_class_method :parent_ref
|
|
45
45
|
end
|
data/lib/pdfrb/task/thumbnail.rb
CHANGED
data/lib/pdfrb/version.rb
CHANGED
data/lib/pdfrb/writer.rb
CHANGED
|
@@ -46,8 +46,7 @@ module Pdfrb
|
|
|
46
46
|
encrypt_ref = trailer[:Encrypt]
|
|
47
47
|
return {} unless encrypt_ref
|
|
48
48
|
|
|
49
|
-
encrypt_dict =
|
|
50
|
-
document.object(encrypt_ref) : encrypt_ref
|
|
49
|
+
encrypt_dict = document.resolve(encrypt_ref)
|
|
51
50
|
return {} unless encrypt_dict
|
|
52
51
|
|
|
53
52
|
handler = Pdfrb::Encryption::StandardSecurityHandler.new(
|
|
@@ -288,7 +287,7 @@ module Pdfrb
|
|
|
288
287
|
def write_trailer(xref_pos, prev: nil)
|
|
289
288
|
root = document.catalog
|
|
290
289
|
root_ref = root && root.is_a?(Pdfrb::Model::Object) && root.indirect? ?
|
|
291
|
-
|
|
290
|
+
root.ref : nil
|
|
292
291
|
size = [(@xref_offsets.keys.max || 0) + 1, document.next_oid || 1].max
|
|
293
292
|
|
|
294
293
|
existing = document.trailer || {}
|
|
@@ -334,7 +333,7 @@ module Pdfrb
|
|
|
334
333
|
return if inherited.nil?
|
|
335
334
|
|
|
336
335
|
Array(root.value[:Kids]).each do |kid_ref|
|
|
337
|
-
page =
|
|
336
|
+
page = document.resolve(kid_ref)
|
|
338
337
|
next unless page.is_a?(Pdfrb::Model::Cos::Dictionary)
|
|
339
338
|
next if page.value.key?(:Resources)
|
|
340
339
|
|
|
@@ -369,7 +368,7 @@ module Pdfrb
|
|
|
369
368
|
root = document.catalog
|
|
370
369
|
return nil unless root && root.indirect?
|
|
371
370
|
|
|
372
|
-
|
|
371
|
+
root.ref
|
|
373
372
|
end
|
|
374
373
|
|
|
375
374
|
def trailer_hash_for_stream
|
data/lib/pdfrb/xmp.rb
CHANGED
|
@@ -43,7 +43,7 @@ Pdfrb::Document.prepend(Module.new do
|
|
|
43
43
|
)
|
|
44
44
|
stream.stream = xmp_data
|
|
45
45
|
catalog.value[:Metadata] =
|
|
46
|
-
|
|
46
|
+
stream.ref
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def sync_pdfa_metadata!
|
|
@@ -61,6 +61,6 @@ Pdfrb::Document.prepend(Module.new do
|
|
|
61
61
|
)
|
|
62
62
|
stream.stream = xmp_data
|
|
63
63
|
catalog.value[:Metadata] =
|
|
64
|
-
|
|
64
|
+
stream.ref
|
|
65
65
|
end
|
|
66
66
|
end)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pdfrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-08-
|
|
11
|
+
date: 2026-08-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: benchmark
|
|
@@ -865,6 +865,7 @@ files:
|
|
|
865
865
|
- lib/pdfrb/document/encryption.rb
|
|
866
866
|
- lib/pdfrb/document/files.rb
|
|
867
867
|
- lib/pdfrb/document/fonts.rb
|
|
868
|
+
- lib/pdfrb/document/fonts/subsetting.rb
|
|
868
869
|
- lib/pdfrb/document/form.rb
|
|
869
870
|
- lib/pdfrb/document/form_xobject.rb
|
|
870
871
|
- lib/pdfrb/document/graphics_state.rb
|
|
@@ -924,6 +925,7 @@ files:
|
|
|
924
925
|
- lib/pdfrb/font/encoding/zapf_dingbats_encoding.rb
|
|
925
926
|
- lib/pdfrb/font/glyph_list.rb
|
|
926
927
|
- lib/pdfrb/font/metrics_helper.rb
|
|
928
|
+
- lib/pdfrb/font/sfnt.rb
|
|
927
929
|
- lib/pdfrb/font/true_type.rb
|
|
928
930
|
- lib/pdfrb/font/true_type/cmap.rb
|
|
929
931
|
- lib/pdfrb/font/true_type/file.rb
|
|
@@ -1143,6 +1145,7 @@ files:
|
|
|
1143
1145
|
- lib/pdfrb/model/type/misc_helpers.rb
|
|
1144
1146
|
- lib/pdfrb/model/type/movie.rb
|
|
1145
1147
|
- lib/pdfrb/model/type/movie_annotation.rb
|
|
1148
|
+
- lib/pdfrb/model/type/name_map.rb
|
|
1146
1149
|
- lib/pdfrb/model/type/names.rb
|
|
1147
1150
|
- lib/pdfrb/model/type/namespace.rb
|
|
1148
1151
|
- lib/pdfrb/model/type/object_reference.rb
|