Methods

Class/Module Index [+]

Quicksearch

Origami::PDF::LinearParser

Create a new PDF linear Parser.

Public Instance Methods

parse(stream) click to toggle source
# File lib/origami/parsers/pdf/linear.rb, line 34
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

      xrefstm = pdf.get_object_by_offset(trailer.startxref) || 
        (pdf.get_object_by_offset(trailer.XRefStm) if trailer.has_field? :XRefStm)

      if not xrefstm.nil?
        warn "Found a XRefStream for this revision at #{xrefstm.reference}"
        pdf.revisions.last.xrefstm = xrefstm
      end

    rescue SystemExit
      raise
    rescue Exception => e
      error "Cannot read : " + (@data.peek(10) + "...").inspect
      error "Stopped on exception : " + e.message

      break
    end

  end

  parse_finalize(pdf)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.