Object
Class representing an AcroForm Forms Data Format file.
# File lib/origami/extensions/fdf.rb, line 132 def <<(object) object.set_indirect(true) if object.no.zero? maxno = 1 while get_object(maxno) do maxno = maxno.succ end object.generation = 0 object.no = maxno end @revisions.first.body[object.reference] = object object.reference end def Catalog get_object(@trailer.Root) end def save(filename) bin = "" bin << @header.to_s lastno, brange = 0, 0 xrefs = [ XRef.new(0, XRef::LASTFREE, XRef::FREE) ] xrefsection = XRef::Section.new @revisions.first.body.values.sort.each { |obj| if (obj.no - lastno).abs > 1 xrefsection << XRef::Subsection.new(brange, xrefs) brange = obj.no xrefs.clear end xrefs << XRef.new(bin.size, obj.generation, XRef::USED) lastno = obj.no bin << obj.to_s } xrefsection << XRef::Subsection.new(brange, xrefs) @xreftable = xrefsection @trailer ||= Trailer.new @trailer.Size = rev.body.size + 1 @trailer.startxref = bin.size bin << @xreftable.to_s bin << @trailer.to_s fd = File.open(filename, "w").binmode fd << bin fd.close show_entries end alias saveas save private def rebuildxrefs #:nodoc: startxref = @header.to_s.size @revisions.first.body.values.each { |object| startxref += object.to_s.size } @xreftable = buildxrefs(@revisions.first.body) @trailer ||= Trailer.new @trailer.Size = @revisions.first.body.size + 1 @trailer.startxref = startxref self end def buildxrefs(objects) #:nodoc: lastno = 0 brange = 0 xrefs = [ XRef.new(0, XRef::LASTFREE, XRef::FREE) ] xrefsection = XRef::Section.new objects.sort.each { |object| if (object.no - lastno).abs > 1 xrefsection << XRef::Subsection.new(brange, xrefs) brange = object.no xrefs.clear end xrefs << XRef.new(get_object_offset(object.no, object.generation), object.generation, XRef::USED) lastno = object.no } xrefsection << XRef::Subsection.new(brange, xrefs) xrefsection end def get_object_offset(no,generation) #:nodoc: bodyoffset = @header.to_s.size objectoffset = bodyoffset @revisions.first.body.values.each { |object| if object.no == no and object.generation == generation then return objectoffset else objectoffset += object.to_s.size end } nil end end
# File lib/origami/extensions/fdf.rb, line 149 def Catalog get_object(@trailer.Root) end
# File lib/origami/extensions/fdf.rb, line 113 def append_subobj(root, objset) if objset.find{ |o| o.object_id == root.object_id }.nil? objset << root if root.is_a?(Array) or root.is_a?(Dictionary) root.each { |subobj| append_subobj(subobj, objset) unless subobj.is_a?(Reference) } end end end
# File lib/origami/extensions/fdf.rb, line 112 def objects def append_subobj(root, objset) if objset.find{ |o| o.object_id == root.object_id }.nil? objset << root if root.is_a?(Array) or root.is_a?(Dictionary) root.each { |subobj| append_subobj(subobj, objset) unless subobj.is_a?(Reference) } end end end objset = [] @revisions.first.body.values.each do |object| unless object.is_a?(Reference) append_subobj(object, objset) end end objset end
# File lib/origami/extensions/fdf.rb, line 153 def save(filename) bin = "" bin << @header.to_s lastno, brange = 0, 0 xrefs = [ XRef.new(0, XRef::LASTFREE, XRef::FREE) ] xrefsection = XRef::Section.new @revisions.first.body.values.sort.each { |obj| if (obj.no - lastno).abs > 1 xrefsection << XRef::Subsection.new(brange, xrefs) brange = obj.no xrefs.clear end xrefs << XRef.new(bin.size, obj.generation, XRef::USED) lastno = obj.no bin << obj.to_s } xrefsection << XRef::Subsection.new(brange, xrefs) @xreftable = xrefsection @trailer ||= Trailer.new @trailer.Size = rev.body.size + 1 @trailer.startxref = bin.size bin << @xreftable.to_s bin << @trailer.to_s fd = File.open(filename, "w").binmode fd << bin fd.close show_entries end
Generated with the Darkfish Rdoc Generator 2.