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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pdfrb/annotation/base.rb +2 -2
  3. data/lib/pdfrb/appearance/generator.rb +1 -1
  4. data/lib/pdfrb/cli/images.rb +1 -1
  5. data/lib/pdfrb/cli.rb +3 -3
  6. data/lib/pdfrb/color/default_profile.rb +1 -1
  7. data/lib/pdfrb/conformance/ltv.rb +1 -1
  8. data/lib/pdfrb/conformance/pades.rb +4 -4
  9. data/lib/pdfrb/conformance/pdf_2_af.rb +2 -2
  10. data/lib/pdfrb/conformance/pdf_a.rb +1 -1
  11. data/lib/pdfrb/conformance/pdf_x.rb +3 -3
  12. data/lib/pdfrb/conformance/tagged_pdf.rb +1 -1
  13. data/lib/pdfrb/content/canvas.rb +1 -1
  14. data/lib/pdfrb/content/hidden_text_detector.rb +1 -1
  15. data/lib/pdfrb/content/shading/base.rb +1 -1
  16. data/lib/pdfrb/content/tiling_pattern.rb +1 -1
  17. data/lib/pdfrb/digital_signature/signing.rb +2 -2
  18. data/lib/pdfrb/document/annotations.rb +10 -10
  19. data/lib/pdfrb/document/associated_files.rb +2 -2
  20. data/lib/pdfrb/document/colors.rb +1 -1
  21. data/lib/pdfrb/document/destinations.rb +4 -4
  22. data/lib/pdfrb/document/encryption.rb +1 -1
  23. data/lib/pdfrb/document/files.rb +5 -5
  24. data/lib/pdfrb/document/fonts/subsetting.rb +87 -0
  25. data/lib/pdfrb/document/fonts.rb +10 -80
  26. data/lib/pdfrb/document/form.rb +9 -9
  27. data/lib/pdfrb/document/form_xobject.rb +1 -1
  28. data/lib/pdfrb/document/graphics_state.rb +1 -1
  29. data/lib/pdfrb/document/images.rb +1 -6
  30. data/lib/pdfrb/document/info.rb +1 -1
  31. data/lib/pdfrb/document/layers.rb +1 -1
  32. data/lib/pdfrb/document/metadata.rb +1 -1
  33. data/lib/pdfrb/document/outline.rb +8 -8
  34. data/lib/pdfrb/document/output_intents.rb +3 -3
  35. data/lib/pdfrb/document/pages.rb +19 -8
  36. data/lib/pdfrb/document/pdf_a.rb +1 -1
  37. data/lib/pdfrb/document/portfolio.rb +3 -3
  38. data/lib/pdfrb/document/shadings.rb +2 -9
  39. data/lib/pdfrb/document/stamps.rb +2 -2
  40. data/lib/pdfrb/document/structure.rb +9 -9
  41. data/lib/pdfrb/document.rb +10 -3
  42. data/lib/pdfrb/encryption/security_handler.rb +1 -2
  43. data/lib/pdfrb/font/cff/subsetter.rb +0 -0
  44. data/lib/pdfrb/font/sfnt.rb +73 -0
  45. data/lib/pdfrb/font/true_type/subsetter.rb +1 -57
  46. data/lib/pdfrb/font/true_type/wrapper.rb +3 -3
  47. data/lib/pdfrb/font.rb +1 -0
  48. data/lib/pdfrb/font_loader/true_type.rb +2 -2
  49. data/lib/pdfrb/font_loader/type3.rb +1 -1
  50. data/lib/pdfrb/importer.rb +3 -3
  51. data/lib/pdfrb/linearization/writer.rb +1 -1
  52. data/lib/pdfrb/model/object.rb +7 -0
  53. data/lib/pdfrb/model/type/action_hide.rb +1 -1
  54. data/lib/pdfrb/model/type/action_sound.rb +2 -2
  55. data/lib/pdfrb/model/type/add_action_catalog.rb +1 -1
  56. data/lib/pdfrb/model/type/add_action_form_field.rb +1 -1
  57. data/lib/pdfrb/model/type/add_action_page_object.rb +1 -1
  58. data/lib/pdfrb/model/type/add_action_screen_annotation.rb +1 -1
  59. data/lib/pdfrb/model/type/add_action_widget_annotation.rb +1 -1
  60. data/lib/pdfrb/model/type/alternate_image.rb +2 -2
  61. data/lib/pdfrb/model/type/bead.rb +4 -4
  62. data/lib/pdfrb/model/type/catalog.rb +1 -1
  63. data/lib/pdfrb/model/type/color_space.rb +5 -31
  64. data/lib/pdfrb/model/type/crypt_filter.rb +6 -6
  65. data/lib/pdfrb/model/type/d_part.rb +4 -4
  66. data/lib/pdfrb/model/type/destination.rb +2 -18
  67. data/lib/pdfrb/model/type/document_security_store.rb +1 -1
  68. data/lib/pdfrb/model/type/dss.rb +1 -1
  69. data/lib/pdfrb/model/type/font_multiple_master.rb +3 -12
  70. data/lib/pdfrb/model/type/function_stitching.rb +1 -1
  71. data/lib/pdfrb/model/type/generic_appearance.rb +1 -1
  72. data/lib/pdfrb/model/type/misc_extras.rb +2 -7
  73. data/lib/pdfrb/model/type/name_map.rb +33 -0
  74. data/lib/pdfrb/model/type/opt_content_ext.rb +2 -2
  75. data/lib/pdfrb/model/type/optional_content_membership.rb +2 -2
  76. data/lib/pdfrb/model/type/page.rb +5 -7
  77. data/lib/pdfrb/model/type/page_tree_node.rb +2 -2
  78. data/lib/pdfrb/model/type/pattern.rb +2 -18
  79. data/lib/pdfrb/model/type/rich_media_configuration.rb +1 -1
  80. data/lib/pdfrb/model/type/shading.rb +2 -18
  81. data/lib/pdfrb/model/type/signature_extras.rb +6 -21
  82. data/lib/pdfrb/model/type/soft_mask.rb +1 -13
  83. data/lib/pdfrb/model/type/struct_elem.rb +2 -2
  84. data/lib/pdfrb/model/type/struct_tree_root.rb +2 -2
  85. data/lib/pdfrb/model/type/structure_attributes.rb +5 -18
  86. data/lib/pdfrb/model/type/thread.rb +3 -3
  87. data/lib/pdfrb/model/type/three_d_stream.rb +1 -1
  88. data/lib/pdfrb/model/type/viewport.rb +1 -1
  89. data/lib/pdfrb/model/type/vri.rb +1 -1
  90. data/lib/pdfrb/model/type/web_capture_command.rb +1 -1
  91. data/lib/pdfrb/model/type/web_capture_image_set.rb +1 -1
  92. data/lib/pdfrb/model/type/web_capture_page_set.rb +2 -2
  93. data/lib/pdfrb/model/type/xobject_form.rb +1 -13
  94. data/lib/pdfrb/model/type.rb +2 -0
  95. data/lib/pdfrb/task/extract_images.rb +1 -2
  96. data/lib/pdfrb/task/extract_text.rb +1 -1
  97. data/lib/pdfrb/task/merge.rb +3 -3
  98. data/lib/pdfrb/task/thumbnail.rb +1 -1
  99. data/lib/pdfrb/version.rb +1 -1
  100. data/lib/pdfrb/writer.rb +4 -5
  101. data/lib/pdfrb/xmp.rb +2 -2
  102. 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 = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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 = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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 = ocfgs.is_a?(Pdfrb::Model::Reference) ? document.object(ocfgs) : ocfgs
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 = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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] = Pdfrb::Model::Reference.new(new_stream.oid, 0)
26
+ value[:Contents] = new_stream.ref
27
27
  new_stream
28
28
  else
29
- ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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.is_a?(Pdfrb::Model::Reference) ?
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 = annotations.is_a?(Pdfrb::Model::Reference) ?
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 = entry.is_a?(Pdfrb::Model::Reference) ? document.object(entry) : entry
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 = kids.is_a?(Pdfrb::Model::Reference) ? document.object(kids) : kids
35
+ arr = document.resolve(kids)
36
36
  return unless arr.is_a?(Array)
37
37
 
38
38
  arr.each do |kid_ref|
39
- obj = kid_ref.is_a?(Pdfrb::Model::Reference) ? document.object(kid_ref) : kid_ref
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
- def [](name)
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
@@ -23,7 +23,7 @@ module Pdfrb
23
23
 
24
24
  arr = instances.is_a?(Pdfrb::Model::PdfArray) ? instances.to_a : instances
25
25
  arr.each do |ref|
26
- obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
26
+ obj = document.resolve(ref)
27
27
  yield obj if obj
28
28
  end
29
29
  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
- def [](name)
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
- def [](component)
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
- def [](signature_hash)
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
- def [](developer)
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 = kids.is_a?(Pdfrb::Model::Reference) ? document.object(kids) : kids
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 = kid.is_a?(Pdfrb::Model::Reference) ? document.object(kid) : kid
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 = children.is_a?(Pdfrb::Model::Reference) ? document.object(children) : children
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 = kid_ref.is_a?(Pdfrb::Model::Reference) ? document.object(kid_ref) : kid_ref
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
- def [](custom_name)
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
- def [](class_name)
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
- ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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 = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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
- ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
43
+ document.resolve(ref)
44
44
  end
45
45
  end
46
46
  end
@@ -39,7 +39,7 @@ module Pdfrb
39
39
 
40
40
  arr = views.is_a?(Pdfrb::Model::PdfArray) ? views.to_a : views
41
41
  arr.each do |ref|
42
- obj = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
42
+ obj = document.resolve(ref)
43
43
  yield obj if obj
44
44
  end
45
45
  end
@@ -31,7 +31,7 @@ module Pdfrb
31
31
  ref = value[:Measure]
32
32
  return nil unless ref && document
33
33
 
34
- ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
34
+ document.resolve(ref)
35
35
  end
36
36
  end
37
37
  end
@@ -53,7 +53,7 @@ module Pdfrb
53
53
  ref = value[:TS]
54
54
  return nil unless ref && document
55
55
 
56
- ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
56
+ document.resolve(ref)
57
57
  end
58
58
 
59
59
  private
@@ -36,7 +36,7 @@ module Pdfrb
36
36
  ref = value[:S]
37
37
  return nil unless ref && document
38
38
 
39
- resolved = ref.is_a?(Pdfrb::Model::Reference) ? document.object(ref) : ref
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| r.is_a?(Pdfrb::Model::Reference) ? document.object(r) : 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| r.is_a?(Pdfrb::Model::Reference) ? document.object(r) : 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 = r.is_a?(Pdfrb::Model::Reference) ? document.object(r) : r
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
@@ -40,6 +40,8 @@ module Pdfrb
40
40
  end
41
41
  end
42
42
 
43
+ autoload :NameMap, "pdfrb/model/type/name_map"
44
+
43
45
  # Base semantic types.
44
46
  autoload :FileTrailer, "pdfrb/model/type/file_trailer"
45
47
  autoload :Catalog, "pdfrb/model/type/catalog"
@@ -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 = ref.is_a?(Pdfrb::Model::Reference) ?
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
- entry.is_a?(Pdfrb::Model::Reference) ? @document.object(entry) : entry
151
+ @document.resolve(entry)
152
152
  end
153
153
  end
154
154
  private_constant :FontResolver
@@ -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 << Pdfrb::Model::Reference.new(new_page.oid, new_page.gen)
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] = Pdfrb::Model::Reference.new(root.oid, 0)
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
- Pdfrb::Model::Reference.new(root.oid, root.gen)
42
+ root.ref
43
43
  end
44
44
  private_class_method :parent_ref
45
45
  end
@@ -29,7 +29,7 @@ module Pdfrb
29
29
  thumb = build_thumbnail(document, page, dpi: dpi, max_width: max_width)
30
30
  next unless thumb
31
31
 
32
- page.value[:Thumb] = Pdfrb::Model::Reference.new(thumb.oid, thumb.gen)
32
+ page.value[:Thumb] = thumb.ref
33
33
  count += 1
34
34
  end
35
35
  count
data/lib/pdfrb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pdfrb
4
- VERSION = "0.8.3"
4
+ VERSION = "0.8.5"
5
5
  end
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 = encrypt_ref.is_a?(Pdfrb::Model::Reference) ?
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
- Pdfrb::Model::Reference.new(root.oid, root.gen) : nil
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 = kid_ref.is_a?(Pdfrb::Model::Reference) ? document.object(kid_ref) : kid_ref
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
- Pdfrb::Model::Reference.new(root.oid, root.gen)
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
- Pdfrb::Model::Reference.new(stream.oid, stream.gen)
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
- Pdfrb::Model::Reference.new(stream.oid, stream.gen)
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.3
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-28 00:00:00.000000000 Z
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