class Prawn::Table::Cell
A cell is a special-purpose bounding box designed to flow text within a bordered area. This is used by Prawn's Document::Table implementation but can also be used standalone for drawing text boxes via Prawn::Document#cell
Attributes
Public Class Methods
Creates a new cell object. Generally used indirectly via Prawn::Document#cell
Of the available options listed below, :point
,
:width
, and :text
must be provided. If you are
not using the Prawn::Document#cell shortcut,
the :document
must also be provided.
:point
-
Absolute [x,y] coordinate of the top-left corner of the cell.
:document
-
The Prawn::Document object to render on.
:text
-
The text to be flowed within the cell
:text_color
-
The color of the text to be displayed
:width
-
The width in PDF points of the cell.
:height
-
The height in PDF points of the cell.
:horizontal_padding
-
The horizontal padding in PDF points
:vertical_padding
-
The vertical padding in PDF points
:padding
-
Overrides both horizontal and vertical padding
:align
-
One of
:left
,:right
,:center
:borders
-
An array of sides which should have a border. Any of
:top
,:left
,:right
,:bottom
:border_width
-
The border line width. Defaults to 1.
:border_style
-
One of
:all
,:no_top
,:no_bottom
,:sides
,:none
,:bottom_only
. Defaults to :all. :border_color
-
The color of the cell border.
:font_size
-
The font size for the cell text.
:font_style
-
The font style for the cell text.
# File lib/prawn/table/cell.rb, line 56 def initialize(options={}) @point = options[:point] @document = options[:document] @text = options[:text].to_s @text_color = options[:text_color] @width = options[:width] @height = options[:height] @borders = options[:borders] @border_width = options[:border_width] || 1 @border_style = options[:border_style] || :all @border_color = options[:border_color] @background_color = options[:background_color] @align = options[:align] || :left @font_size = options[:font_size] @font_style = options[:font_style] @horizontal_padding = options[:horizontal_padding] || 0 @vertical_padding = options[:vertical_padding] || 0 if options[:padding] @horizontal_padding = @vertical_padding = options[:padding] end end
Public Instance Methods
Draws the cell onto the PDF document
# File lib/prawn/table/cell.rb, line 127 def draw margin = @border_width / 2.0 if @background_color old_color = @document.fill_color || "000000" @document.fill_color(@background_color) h = borders.include?(:bottom) ? height - ( 2 * margin ) : height + margin @document.fill_rectangle [x, y ], width, h @document.fill_color(old_color) end if @border_width > 0 @document.mask(:line_width) do @document.line_width = @border_width @document.mask(:stroke_color) do @document.stroke_color @border_color if @border_color if borders.include?(:left) @document.stroke_line [x, y + margin], [x, y - height - margin ] end if borders.include?(:right) @document.stroke_line( [x + width, y + margin], [x + width, y - height - margin] ) end if borders.include?(:top) @document.stroke_line( [ x, y ], [ x + width, y ]) end if borders.include?(:bottom) @document.stroke_line [x, y - height ], [x + width, y - height] end end end borders end @document.bounding_box( [x + @horizontal_padding, y - @vertical_padding], :width => text_area_width, :height => height - @vertical_padding) do @document.move_down((@document.font.line_gap + @document.font.descender) / 2) options = {:align => @align, :final_gap => false} options[:size] = @font_size if @font_size options[:style] = @font_style if @font_style old_color = @document.fill_color || "000000" @document.fill_color @text_color if @text_color @document.text @text, options @document.fill_color old_color end end
The height of the cell in PDF points
# File lib/prawn/table/cell.rb, line 107 def height @height || text_area_height + 2*@vertical_padding end
The height of the text area excluding the vertical padding
# File lib/prawn/table/cell.rb, line 113 def text_area_height text_height = 0 if @font_size @document.font_size(@font_size) do text_height = @document.height_of(@text, :width => text_area_width) end else text_height = @document.height_of(@text, :width => text_area_width) end text_height end
The width of the text area excluding the horizonal padding
# File lib/prawn/table/cell.rb, line 95 def text_area_width width - 2*@horizontal_padding end
Returns the cell's text as a string.
# File lib/prawn/table/cell.rb, line 89 def to_s @text end
The width of the cell in PDF points
# File lib/prawn/table/cell.rb, line 101 def width @width || (@document.width_of(@text, :size => @font_size)) + 2*@horizontal_padding end
Private Instance Methods
x-position of the cell
# File lib/prawn/table/cell.rb, line 198 def x @point[0] end
y-position of the cell
# File lib/prawn/table/cell.rb, line 203 def y @point[1] end