pdfrb 0.8.4 → 0.8.6

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 (93) 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/compare/comparator.rb +2 -4
  8. data/lib/pdfrb/conformance/ltv.rb +1 -1
  9. data/lib/pdfrb/conformance/pades.rb +4 -4
  10. data/lib/pdfrb/conformance/pdf_2_af.rb +2 -2
  11. data/lib/pdfrb/conformance/pdf_a.rb +10 -20
  12. data/lib/pdfrb/conformance/pdf_x.rb +6 -16
  13. data/lib/pdfrb/conformance/tagged_pdf.rb +1 -1
  14. data/lib/pdfrb/content/canvas.rb +25 -33
  15. data/lib/pdfrb/content/hidden_text_detector.rb +2 -3
  16. data/lib/pdfrb/content/shading/base.rb +1 -1
  17. data/lib/pdfrb/content/tiling_pattern.rb +1 -1
  18. data/lib/pdfrb/digital_signature/signing.rb +2 -2
  19. data/lib/pdfrb/document/annotations.rb +10 -10
  20. data/lib/pdfrb/document/associated_files.rb +2 -2
  21. data/lib/pdfrb/document/colors.rb +1 -1
  22. data/lib/pdfrb/document/destinations.rb +4 -4
  23. data/lib/pdfrb/document/encryption.rb +1 -1
  24. data/lib/pdfrb/document/files.rb +5 -5
  25. data/lib/pdfrb/document/fonts/subsetting.rb +87 -0
  26. data/lib/pdfrb/document/fonts.rb +10 -80
  27. data/lib/pdfrb/document/form.rb +9 -9
  28. data/lib/pdfrb/document/form_xobject.rb +1 -1
  29. data/lib/pdfrb/document/graphics_state.rb +1 -1
  30. data/lib/pdfrb/document/images.rb +1 -6
  31. data/lib/pdfrb/document/info.rb +1 -1
  32. data/lib/pdfrb/document/layers.rb +1 -1
  33. data/lib/pdfrb/document/metadata.rb +1 -1
  34. data/lib/pdfrb/document/outline.rb +8 -8
  35. data/lib/pdfrb/document/output_intents.rb +3 -3
  36. data/lib/pdfrb/document/pages.rb +19 -8
  37. data/lib/pdfrb/document/pdf_a.rb +1 -1
  38. data/lib/pdfrb/document/portfolio.rb +3 -3
  39. data/lib/pdfrb/document/shadings.rb +2 -9
  40. data/lib/pdfrb/document/stamps.rb +2 -2
  41. data/lib/pdfrb/document/structure.rb +9 -9
  42. data/lib/pdfrb/document.rb +19 -2
  43. data/lib/pdfrb/encryption/security_handler.rb +1 -2
  44. data/lib/pdfrb/font/cff/subsetter.rb +0 -0
  45. data/lib/pdfrb/font/sfnt.rb +73 -0
  46. data/lib/pdfrb/font/true_type/subsetter.rb +1 -57
  47. data/lib/pdfrb/font/true_type/wrapper.rb +3 -3
  48. data/lib/pdfrb/font.rb +1 -0
  49. data/lib/pdfrb/font_loader/true_type.rb +2 -2
  50. data/lib/pdfrb/font_loader/type3.rb +1 -1
  51. data/lib/pdfrb/importer.rb +3 -3
  52. data/lib/pdfrb/linearization/writer.rb +1 -1
  53. data/lib/pdfrb/model/object.rb +7 -0
  54. data/lib/pdfrb/model/type/action_hide.rb +1 -1
  55. data/lib/pdfrb/model/type/action_sound.rb +2 -2
  56. data/lib/pdfrb/model/type/add_action_catalog.rb +1 -1
  57. data/lib/pdfrb/model/type/add_action_form_field.rb +1 -1
  58. data/lib/pdfrb/model/type/add_action_page_object.rb +1 -1
  59. data/lib/pdfrb/model/type/add_action_screen_annotation.rb +1 -1
  60. data/lib/pdfrb/model/type/add_action_widget_annotation.rb +1 -1
  61. data/lib/pdfrb/model/type/alternate_image.rb +2 -2
  62. data/lib/pdfrb/model/type/bead.rb +4 -4
  63. data/lib/pdfrb/model/type/catalog.rb +1 -1
  64. data/lib/pdfrb/model/type/d_part.rb +4 -4
  65. data/lib/pdfrb/model/type/document_security_store.rb +1 -1
  66. data/lib/pdfrb/model/type/dss.rb +1 -1
  67. data/lib/pdfrb/model/type/function_stitching.rb +1 -1
  68. data/lib/pdfrb/model/type/generic_appearance.rb +1 -1
  69. data/lib/pdfrb/model/type/opt_content_ext.rb +2 -2
  70. data/lib/pdfrb/model/type/optional_content_membership.rb +2 -2
  71. data/lib/pdfrb/model/type/page.rb +5 -7
  72. data/lib/pdfrb/model/type/page_tree_node.rb +2 -2
  73. data/lib/pdfrb/model/type/rich_media_configuration.rb +1 -1
  74. data/lib/pdfrb/model/type/struct_elem.rb +2 -2
  75. data/lib/pdfrb/model/type/struct_tree_root.rb +2 -2
  76. data/lib/pdfrb/model/type/thread.rb +3 -3
  77. data/lib/pdfrb/model/type/three_d_stream.rb +1 -1
  78. data/lib/pdfrb/model/type/viewport.rb +1 -1
  79. data/lib/pdfrb/model/type/vri.rb +1 -1
  80. data/lib/pdfrb/model/type/web_capture_command.rb +1 -1
  81. data/lib/pdfrb/model/type/web_capture_image_set.rb +1 -1
  82. data/lib/pdfrb/model/type/web_capture_page_set.rb +2 -2
  83. data/lib/pdfrb/pdf_version.rb +23 -0
  84. data/lib/pdfrb/task/extract_images.rb +1 -2
  85. data/lib/pdfrb/task/extract_text.rb +1 -1
  86. data/lib/pdfrb/task/merge.rb +3 -3
  87. data/lib/pdfrb/task/optimize.rb +2 -6
  88. data/lib/pdfrb/task/thumbnail.rb +1 -1
  89. data/lib/pdfrb/version.rb +1 -1
  90. data/lib/pdfrb/writer.rb +7 -15
  91. data/lib/pdfrb/xmp.rb +2 -2
  92. data/lib/pdfrb.rb +1 -0
  93. metadata +5 -2
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pdfrb
4
+ # PDF header version comparisons (ISO 32000-2, s7.2). Version strings
5
+ # are dot-separated numerics ("1.4", "2.0"); comparison is
6
+ # numeric-per-component, never lexical ("1.10" > "1.9").
7
+ module PdfVersion
8
+ module_function
9
+
10
+ # @return [Integer] -1, 0, or 1 as +a+ is earlier, equal, or later
11
+ # than +b+.
12
+ def compare(a, b)
13
+ aa = a.to_s.split(".").map(&:to_i)
14
+ bb = b.to_s.split(".").map(&:to_i)
15
+ (aa <=> bb) || 0
16
+ end
17
+
18
+ # @return [Boolean] whether +version+ meets or exceeds +minimum+.
19
+ def at_least?(version, minimum)
20
+ compare(version, minimum) >= 0
21
+ end
22
+ end
23
+ end
@@ -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
@@ -55,9 +55,7 @@ module Pdfrb
55
55
  # {duplicate_oid => canonical_oid} that was applied.
56
56
  def dedup_streams!(document)
57
57
  canonical_for = {}
58
- document.each_indirect_object do |obj|
59
- next unless obj.is_a?(Pdfrb::Model::Cos::Stream)
60
- next unless obj.indirect?
58
+ document.each_indirect_of(Pdfrb::Model::Cos::Stream) do |obj|
61
59
  next if obj.value[:Type] == :ObjStm
62
60
 
63
61
  key = stream_dedup_key(obj)
@@ -65,9 +63,7 @@ module Pdfrb
65
63
  end
66
64
 
67
65
  replacements = {}
68
- document.each_indirect_object do |obj|
69
- next unless obj.is_a?(Pdfrb::Model::Cos::Stream)
70
- next unless obj.indirect?
66
+ document.each_indirect_of(Pdfrb::Model::Cos::Stream) do |obj|
71
67
  next if obj.value[:Type] == :ObjStm
72
68
 
73
69
  key = stream_dedup_key(obj)
@@ -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.4"
4
+ VERSION = "0.8.6"
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
@@ -393,26 +392,19 @@ module Pdfrb
393
392
  return current unless catalog
394
393
 
395
394
  v = current
396
- if (catalog.value[:AF] || catalog.value[:Collection]) && compare_versions(v, "2.0").negative?
395
+ if (catalog.value[:AF] || catalog.value[:Collection]) && Pdfrb::PdfVersion.compare(v, "2.0").negative?
397
396
  v = "2.0"
398
397
  end
399
- if catalog.value[:OCProperties] && compare_versions(v, "1.5").negative?
398
+ if catalog.value[:OCProperties] && Pdfrb::PdfVersion.compare(v, "1.5").negative?
400
399
  v = "1.5"
401
400
  end
402
401
  document.version = v
403
402
  v
404
403
  end
405
404
 
406
- def compare_versions(a, b)
407
- aa = a.to_s.split(".").map(&:to_i)
408
- bb = b.to_s.split(".").map(&:to_i)
409
- (aa <=> bb) || 0
410
- end
411
-
412
405
  def compress_content_streams
413
406
  require "zlib"
414
- document.each_indirect_object do |obj|
415
- next unless obj.is_a?(Pdfrb::Model::Cos::Stream)
407
+ document.each_indirect_of(Pdfrb::Model::Cos::Stream) do |obj|
416
408
  next if obj.value[:Filter]
417
409
  next unless obj.stream
418
410
  next if obj.value[:Type] == :Metadata
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)
data/lib/pdfrb.rb CHANGED
@@ -18,6 +18,7 @@ module Pdfrb
18
18
  autoload :Configuration, "pdfrb/configuration"
19
19
  autoload :DataDir, "pdfrb/data_dir"
20
20
  autoload :PdfConstants, "pdfrb/pdf_constants"
21
+ autoload :PdfVersion, "pdfrb/pdf_version"
21
22
 
22
23
  autoload :Source, "pdfrb/source"
23
24
  autoload :Model, "pdfrb/model"
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
4
+ version: 0.8.6
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-29 00:00:00.000000000 Z
11
+ date: 2026-08-30 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
@@ -1259,6 +1261,7 @@ files:
1259
1261
  - lib/pdfrb/model/type/xobject_image.rb
1260
1262
  - lib/pdfrb/model/type/xref_stream.rb
1261
1263
  - lib/pdfrb/pdf_constants.rb
1264
+ - lib/pdfrb/pdf_version.rb
1262
1265
  - lib/pdfrb/serializer.rb
1263
1266
  - lib/pdfrb/source.rb
1264
1267
  - lib/pdfrb/source/header_reader.rb