lib/origami/pdf.rb in origami-1.2.6 vs lib/origami/pdf.rb in origami-1.2.7

- old
+ new

@@ -562,20 +562,20 @@ return no else raise TypeError, "Invalid parameter type : #{no.class}" end - set = indirect_objects_table - # # Search through accessible indirect objects. # - if set.include?(target) - set[target] - elsif use_xrefstm == true - # Look into XRef streams. + @revisions.each do |rev| + return rev.body[target] if rev.body.include?(target) + end + # Look into XRef streams. + if use_xrefstm == true + if @revisions.last.has_xrefstm? xrefstm = @revisions.last.xrefstm done = [] while xrefstm.is_a?(XRefStream) and not done.include?(xrefstm) @@ -603,12 +603,16 @@ end # # Lastly search directly into Object streams (might be very slow). # - stream = set.values.find_all{|obj| obj.is_a?(ObjectStream)}.find do |objstm| objstm.include?(target.refno) end - stream && stream.extract(target.refno) + @revisions.each do |rev| + streams = rev.objects.find_all{|obj| obj.is_a?(ObjectStream) and obj.include?(target.refno)} + return streams.first.extract(target.refno) unless streams.empty? + end + + nil end end alias :[] :get_object @@ -1014,13 +1018,9 @@ max[0] = max[0].to_s max end - def indirect_objects_table #:nodoc: - @revisions.inject({}) do |set, rev| set.merge(rev.body) end - end - def indirect_objects_by_rev #:nodoc: @revisions.inject([]) do |set,rev| objset = rev.objects set.concat(objset.zip(::Array.new(objset.length, rev))) end