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