def create_stamp(user_defined_name="", &block)
raise Prawn::Errors::InvalidName if user_defined_name.empty?
if stamp_dictionary_registry[user_defined_name]
raise Prawn::Errors::NameTaken
end
stamp_dictionary = ref!(:Type => :XObject,
:Subtype => :Form,
:BBox => [0, 0, page_dimensions[2], page_dimensions[3]])
stamp_dictionary_name = "Stamp#{next_stamp_dictionary_id}"
stamp_dictionary_registry[user_defined_name] =
{ :stamp_dictionary_name => stamp_dictionary_name,
:stamp_dictionary => stamp_dictionary}
@active_stamp_stream = ""
@active_stamp_dictionary = stamp_dictionary
yield if block_given?
stamp_dictionary.data[:Length] = @active_stamp_stream.length + 1
stamp_dictionary << @active_stamp_stream
@active_stamp_stream = nil
@active_stamp_dictionary = nil
end