def walk_resources(resources)
return unless resources.respond_to?(:[])
resources = resolve_references(resources)
if resources[:ProcSet]
callback(:resource_procset, resources[:ProcSet])
end
if resources[:XObject]
@xref.object(resources[:XObject]).each do |name, val|
callback(:resource_xobject, [name, @xref.object(val)])
end
end
if resources[:ExtGState]
@xref.object(resources[:ExtGState]).each do |name, val|
callback(:resource_extgstate, [name, @xref.object(val)])
end
end
if resources[:ColorSpace]
@xref.object(resources[:ColorSpace]).each do |name, val|
callback(:resource_colorspace, [name, @xref.object(val)])
end
end
if resources[:Pattern]
@xref.object(resources[:Pattern]).each do |name, val|
callback(:resource_pattern, [name, @xref.object(val)])
end
end
if resources[:Font]
@xref.object(resources[:Font]).each do |label, desc|
desc = @xref.object(desc)
@fonts[label] = PDF::Reader::Font.new
@fonts[label].label = label
@fonts[label].subtype = desc[:Subtype] if desc[:Subtype]
@fonts[label].basefont = desc[:BaseFont] if desc[:BaseFont]
@fonts[label].encoding = PDF::Reader::Encoding.new(@xref.object(desc[:Encoding]))
@fonts[label].descendantfonts = desc[:DescendantFonts] if desc[:DescendantFonts]
if desc[:ToUnicode]
begin
@fonts[label].tounicode = PDF::Reader::CMap.new(desc[:ToUnicode])
rescue
end
end
callback(:resource_font, [label, @fonts[label]])
end
end
end