Sha256: 222ebaaffe65a29486a50a73983ecc16a68eafebd1ea023b5c0cd6e0f0afae30

Contents?: true

Size: 2 KB

Versions: 16

Compression:

Stored size: 2 KB

Contents

# encoding: utf-8

# annotations.rb : Implements low-level annotation support for PDF
#
# Copyright November 2008, Jamis Buck. All Rights Reserved.
#
# This is free software. Please see the LICENSE and COPYING files for details.
#
module Prawn
  module Core 
    
    # Provides very low-level support for annotations. 
    #
    module Annotations #:nodoc:
      
      # Adds a new annotation (section 8.4 in PDF spec) to the current page.
      # +options+ must be a Hash describing the annotation.
      #
      def annotate(options)
        state.page.dictionary.data[:Annots] ||= []
        options = sanitize_annotation_hash(options)
        state.page.dictionary.data[:Annots] << ref!(options)
        return options
      end

      # A convenience method for creating Text annotations. +rect+ must be an array
      # of four numbers, describing the bounds of the annotation. +contents+ should
      # be a string, to be shown when the annotation is activated.
      #
      def text_annotation(rect, contents, options={})
        options = options.merge(:Subtype => :Text, :Rect => rect, :Contents => contents)
        annotate(options)
      end

      # A convenience method for creating Link annotations. +rect+ must be an array
      # of four numbers, describing the bounds of the annotation. The +options+ hash
      # should include either :Dest (describing the target destination, usually as a
      # string that has been recorded in the document's Dests tree), or :A (describing
      # an action to perform on clicking the link), or :PA (for describing a URL to
      # link to).
      #
      def link_annotation(rect, options={})
        options = options.merge(:Subtype => :Link, :Rect => rect)
        annotate(options)
      end

      private

      def sanitize_annotation_hash(options)
        options = options.merge(:Type => :Annot)

        if options[:Dest].is_a?(String)
          options[:Dest] = Prawn::Core::LiteralString.new(options[:Dest])
        end

        options
      end
      
    end
  end
end

Version data entries

16 entries across 16 versions & 6 rubygems

Version Path
prawn-1.0.0.rc2 lib/prawn/core/annotations.rb
nurettin-prawn-1.0.0.rc1 lib/prawn/core/annotations.rb
prawn-1.0.0.rc1 lib/prawn/core/annotations.rb
prawn-0.12.0 lib/prawn/core/annotations.rb
prawn-0.11.1 lib/prawn/core/annotations.rb
davebenvenuti-prawn-0.11.1.pre lib/prawn/core/annotations.rb
piglop-prawn-0.10.2.3 lib/prawn/core/annotations.rb
piglop-prawn-0.10.2.2 lib/prawn/core/annotations.rb
piglop-prawn-0.10.2.1 lib/prawn/core/annotations.rb
prawn-0.11.1.pre lib/prawn/core/annotations.rb
goodwill-prawn-edge-0.10.0 lib/prawn/core/annotations.rb
alphasights-prawn-0.10.4 lib/prawn/core/annotations.rb
alphasights-prawn-0.10.3 lib/prawn/core/annotations.rb
alphasights-prawn-0.10.2 lib/prawn/core/annotations.rb
alphasights-prawn-0.10.1 lib/prawn/core/annotations.rb
alphasights-prawn-0.10.0 lib/prawn/core/annotations.rb