class Origami::PDF::LinearParser
Public Instance Methods
parse(stream)
click to toggle source
Calls superclass method
# File lib/origami/parsers/pdf/linear.rb, line 32 def parse(stream) super pdf = parse_initialize # # Parse each revision # revision = 0 until @data.eos? do begin pdf.add_new_revision unless revision.zero? revision = revision + 1 info "...Parsing revision #{pdf.revisions.size}..." loop do break if (object = parse_object).nil? pdf.insert(object) end pdf.revisions.last.xreftable = parse_xreftable trailer = parse_trailer pdf.revisions.last.trailer = trailer locate_xref_stream(pdf, pdf.revisions.last) rescue error "Cannot read : " + (@data.peek(10) + "...").inspect error "Stopped on exception : " + $!.message break end end pdf.loaded! parse_finalize(pdf) end
Private Instance Methods
locate_xref_stream(pdf, revision)
click to toggle source
# File lib/origami/parsers/pdf/linear.rb, line 74 def locate_xref_stream(pdf, revision) trailer = revision.trailer # Try to match the location of the last startxref / XRefStm with an XRefStream. if trailer.startxref != 0 xrefstm = pdf.get_object_by_offset(trailer.startxref) else xrefstm = pdf.get_object_by_offset(trailer[:XRefStm]) end if xrefstm.is_a?(XRefStream) warn "Found a XRefStream for this revision at #{xrefstm.reference}" revision.xrefstm = xrefstm end end