Prawn::Table::Cell::Text

A Cell that contains text. Has some limited options to set font family, size, and style.

Constants

TextOptions

Attributes

font[W]
text_color[W]

Public Class Methods

new(pdf, point, options={}) click to toggle source
# File lib/prawn/table/cell/text.rb, line 27
def initialize(pdf, point, options={})
  @text_options = {}
  super
end

Public Instance Methods

draw_content() click to toggle source

Draws the text content into its bounding box.

# File lib/prawn/table/cell/text.rb, line 65
def draw_content
  with_font do 
    @pdf.move_down((@pdf.font.line_gap + @pdf.font.descender)/2)
    with_text_color do
      text_box(:width => content_width + FPTolerance, 
               :height => content_height + FPTolerance,
               :at => [0, @pdf.cursor]).render
    end
  end
end
font() click to toggle source

Returns the font that will be used to draw this cell.

# File lib/prawn/table/cell/text.rb, line 34
def font
  with_font { @pdf.font }
end
font_style=(style) click to toggle source

Sets the style of the font in use. Equivalent to the Text::Box style option, but we already have a style method.

# File lib/prawn/table/cell/text.rb, line 41
def font_style=(style)
  @text_options[:style] = style
end
natural_content_height() click to toggle source

Returns the natural height of this block of text, wrapped to the preset width.

# File lib/prawn/table/cell/text.rb, line 55
def natural_content_height
  with_font do
    b = text_box(:width => content_width + FPTolerance)
    b.render(:dry_run => true)
    b.height + b.line_gap
  end
end
natural_content_width() click to toggle source

Returns the width of this text with no wrapping. This will be far off from the final width if the text is long.

# File lib/prawn/table/cell/text.rb, line 48
def natural_content_width
  [styled_width_of(@content), @pdf.bounds.width].min
end
set_width_constraints() click to toggle source
# File lib/prawn/table/cell/text.rb, line 76
def set_width_constraints
  # Sets a reasonable minimum width. If the cell has any content, make
  # sure we have enough width to be at least one character wide. This is
  # a bit of a hack, but it should work well enough.
  min_content_width = [natural_content_width, styled_width_of("M")].min
  @min_width ||= padding_left + padding_right + min_content_width
  super
end

Protected Instance Methods

styled_width_of(text) click to toggle source

Returns the width of text under the given text options.

# File lib/prawn/table/cell/text.rb, line 122
def styled_width_of(text)
  with_font do
    options = {}
    options[:size] = @text_options[:size] if @text_options[:size]

    @pdf.font.compute_width_of(text, options)
  end
end
text_box(extra_options={}) click to toggle source
# File lib/prawn/table/cell/text.rb, line 106
def text_box(extra_options={})
  if @text_options[:inline_format]
    options = @text_options.dup
    options.delete(:inline_format)

    array = ::Prawn::Text::Formatted::Parser.to_array(@content)
    ::Prawn::Text::Formatted::Box.new(array,
      options.merge(extra_options).merge(:document => @pdf))
  else
    ::Prawn::Text::Box.new(@content, @text_options.merge(extra_options).
       merge(:document => @pdf))
  end
end
with_font() click to toggle source
# File lib/prawn/table/cell/text.rb, line 87
def with_font
  @pdf.save_font do
    options = {}
    options[:style] = @text_options[:style] if @text_options[:style]

    @pdf.font(@font || @pdf.font.name, options)

    yield
  end
end
with_text_color() click to toggle source
# File lib/prawn/table/cell/text.rb, line 98
def with_text_color
  old_color = @pdf.fill_color || '000000'
  @pdf.fill_color(@text_color) if @text_color
  yield
ensure
  @pdf.fill_color(old_color)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.