Module: Pdfrb::Source::ObjectStreamReader
- Defined in:
- lib/pdfrb/source/object_stream_reader.rb
Overview
Object streams (s7.5.7). Decodes the /Type /ObjStm stream and yields (oid, value) pairs.
Class Method Summary collapse
-
.read(stream_object, document) ⇒ Object
Returns an Array of (oid, value) pairs in declaration order.
Class Method Details
.read(stream_object, document) ⇒ Object
Returns an Array of (oid, value) pairs in declaration order.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/pdfrb/source/object_stream_reader.rb', line 11 def read(stream_object, document) decoded = stream_object.decoded_stream dict = stream_object n = dict[:N] first = dict[:First] || 0 raise Pdfrb::ParseError, "ObjStm missing /N or /First" if n.nil? || first.nil? # Header: N pairs of "oid offset" separated by whitespace. header = decoded.byteslice(0, first) pairs = header.split(/\s+/).each_slice(2).to_a raise Pdfrb::ParseError, "ObjStm header mismatch" unless pairs.length == n body_io = StringIO.new(decoded.byteslice(first..).to_s.b) tokenizer = Tokenizer.new(body_io) parser = Parser.new(tokenizer, document: document) pairs.each_with_index.map do |(oid_s, _off_s), _i| [oid_s.to_i, parser.parse_value] end end |