Module: Prawn

Extended by:
Prawn
Included in:
Prawn
Defined in:
lib/prawn/stamp.rb,
lib/prawn/core.rb,
lib/prawn/font.rb,
lib/prawn/text.rb,
lib/prawn/errors.rb,
lib/prawn/images.rb,
lib/prawn/outline.rb,
lib/prawn/document.rb,
lib/prawn/encoding.rb,
lib/prawn/font/afm.rb,
lib/prawn/font/ttf.rb,
lib/prawn/graphics.rb,
lib/prawn/repeater.rb,
lib/prawn/text/box.rb,
lib/prawn/core/page.rb,
lib/prawn/core/text.rb,
lib/prawn/name_tree.rb,
lib/prawn/reference.rb,
lib/prawn/font/dfont.rb,
lib/prawn/images/jpg.rb,
lib/prawn/images/png.rb,
lib/prawn/pdf_object.rb,
lib/prawn/byte_string.rb,
lib/prawn/measurements.rb,
lib/prawn/document/span.rb,
lib/prawn/graphics/dash.rb,
lib/prawn/graphics/color.rb,
lib/prawn/literal_string.rb,
lib/prawn/core/object_store.rb,
lib/prawn/document/snapshot.rb,
lib/prawn/document/internals.rb,
lib/prawn/graphics/cap_style.rb,
lib/prawn/document/column_box.rb,
lib/prawn/graphics/join_style.rb,
lib/prawn/document/annotations.rb,
lib/prawn/document/bounding_box.rb,
lib/prawn/document/destinations.rb,
lib/prawn/graphics/transparency.rb,
lib/prawn/document/page_geometry.rb,
lib/prawn/document/graphics_state.rb,
lib/prawn/graphics/transformation.rb

Overview

transformation.rb: Implements rotate, translate, skew, scale and a generic

transformation_matrix

Copyright January 2010, Michael Witrant. All Rights Reserved.

This is free software. Please see the LICENSE and COPYING files for details.

Defined Under Namespace

Modules: Configurable, Core, Encoding, Errors, Graphics, Images, Measurements, NameTree, Stamp, Text Classes: ByteString, Document, Font, LiteralString, Outline, OutlineItem, OutlineRoot, Reference, Repeater

Constant Summary collapse

BASEDIR =

The base source directory for Prawn as installed on the system

File.expand_path(File.join(dir, '..', '..'))
VERSION =
"0.8.4"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#debugObject

Whe set to true, Prawn will verify hash options to ensure only valid keys are used. Off by default.

Example:

>> Prawn::Document.new(:tomato => "Juicy")
Prawn::Errors::UnknownOption: 
Detected unknown option(s): [:tomato]
Accepted options are: [:page_size, :page_layout, :left_margin, ...]


47
48
49
# File 'lib/prawn/core.rb', line 47

def debug
  @debug
end

Class Method Details

.PdfObject(obj, in_content_stream = false) ⇒ Object

Serializes Ruby objects to their PDF equivalents. Most primitive objects will work as expected, but please note that Name objects are represented by Ruby Symbol objects and Dictionary objects are represented by Ruby hashes (keyed by symbols)

Examples:

   PdfObject(true)      #=> "true"
   PdfObject(false)     #=> "false" 
   PdfObject(1.2124)    #=> "1.2124"
   PdfObject("foo bar") #=> "(foo bar)"  
   PdfObject(:Symbol)   #=> "/Symbol"
   PdfObject(["foo",:bar, [1,2]]) #=> "[foo /bar [1 2]]"


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/prawn/pdf_object.rb', line 31

def PdfObject(obj, in_content_stream = false)
  case(obj)        
  when NilClass   then "null" 
  when TrueClass  then "true"
  when FalseClass then "false"
  when Numeric    then String(obj)
  when Array
    "[" << obj.map { |e| PdfObject(e, in_content_stream) }.join(' ') << "]"
  when Prawn::LiteralString
    obj = obj.gsub(/[\\\n\(\)]/) { |m| "\\#{m}" }
    "(#{obj})"
  when Time
    obj = obj.strftime("D:%Y%m%d%H%M%S%z").chop.chop + "'00'"
    obj = obj.gsub(/[\\\n\(\)]/) { |m| "\\#{m}" }
    "(#{obj})"
  when Prawn::ByteString
    "<" << obj.unpack("H*").first << ">"
  when String
    obj = "\xFE\xFF" + obj.unpack("U*").pack("n*") unless in_content_stream
    "<" << obj.unpack("H*").first << ">"
   when Symbol                                                         
     if (obj = obj.to_s) =~ /\s/
       raise Prawn::Errors::FailedObjectConversion, 
         "A PDF Name cannot contain whitespace"  
     else
       "/" << obj   
     end 
  when Hash           
    output = "<< "
    obj.each do |k,v|  
      unless String === k || Symbol === k
        raise Prawn::Errors::FailedObjectConversion, 
          "A PDF Dictionary must be keyed by names"
      end                          
      output << PdfObject(k.to_sym, in_content_stream) << " " << 
                PdfObject(v, in_content_stream) << "\n"
    end  
    output << ">>"  
  when Prawn::Reference
    obj.to_s      
  when Prawn::NameTree::Node
    PdfObject(obj.to_hash)
  when Prawn::NameTree::Value
    PdfObject(obj.name) + " " + PdfObject(obj.value)
  when Prawn::OutlineRoot, Prawn::OutlineItem
    PdfObject(obj.to_hash)
  else
    raise Prawn::Errors::FailedObjectConversion, 
      "This object cannot be serialized to PDF"
  end     
end

.Reference(*args, &block) ⇒ Object

:nodoc:



88
89
90
# File 'lib/prawn/reference.rb', line 88

def Reference(*args, &block) #:nodoc:
  Reference.new(*args, &block)
end

Instance Method Details

#verify_options(accepted, actual) ⇒ Object

:nodoc:



49
50
51
52
53
54
55
56
57
# File 'lib/prawn/core.rb', line 49

def verify_options(accepted, actual) #:nodoc:
  return unless debug || $DEBUG
  unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
    raise Prawn::Errors::UnknownOption,
      "\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" <<
      "Accepted options are: #{accepted.inspect}"
  end
  yield if block_given?
end