Class: Prawn::FlexibleTable::Cell
- Inherits:
-
Object
- Object
- Prawn::FlexibleTable::Cell
- Defined in:
- lib/prawn/flexible-table/cell.rb
Overview
A cell is a special-purpose bounding box designed to flow text within a bordered area. This is used by Prawn’s Document::FlexibleTable implementation but can also be used standalone for drawing text boxes via Document#f_cell
Direct Known Subclasses
Instance Attribute Summary collapse
-
#align ⇒ Object
Returns the value of attribute align.
-
#background_color ⇒ Object
Returns the value of attribute background_color.
-
#border_color ⇒ Object
Returns the value of attribute border_color.
-
#border_style ⇒ Object
Returns the value of attribute border_style.
-
#border_width ⇒ Object
Returns the value of attribute border_width.
-
#borders ⇒ Object
writeonly
Sets the attribute borders.
-
#colspan ⇒ Object
Returns the value of attribute colspan.
-
#document ⇒ Object
Returns the value of attribute document.
-
#font_size ⇒ Object
Returns the value of attribute font_size.
-
#font_style ⇒ Object
Returns the value of attribute font_style.
-
#height ⇒ Object
The height of the cell in PDF points.
-
#horizontal_padding ⇒ Object
Returns the value of attribute horizontal_padding.
-
#point ⇒ Object
Returns the value of attribute point.
-
#rowspan ⇒ Object
Returns the value of attribute rowspan.
-
#text_color ⇒ Object
Returns the value of attribute text_color.
-
#vertical_padding ⇒ Object
Returns the value of attribute vertical_padding.
-
#width ⇒ Object
The width of the cell in PDF points.
Instance Method Summary collapse
-
#draw ⇒ Object
Draws the cell onto the PDF document.
-
#initialize(options = {}) ⇒ Cell
constructor
Creates a new cell object.
-
#text_area_height ⇒ Object
The height of the text area excluding the vertical padding.
-
#text_area_width ⇒ Object
The width of the text area excluding the horizonal padding.
-
#to_s ⇒ Object
Returns the cell’s text as a string.
Constructor Details
#initialize(options = {}) ⇒ Cell
Creates a new cell object. Generally used indirectly via Document#f_cell
Of the available options listed below, :point
, :width
, and :text
must be provided. If you are not using the Document#f_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.
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 |
# File 'lib/prawn/flexible-table/cell.rb', line 31 def initialize(={}) @point = [:point] @document = [:document] @text = [:text].to_s @text_color = [:text_color] @width = [:width] @height = [:height] @borders = [:borders] @border_width = [:border_width] || 1 @border_style = [:border_style] || :all @border_color = [:border_color] @background_color = [:background_color] @align = [:align] || :left @font_size = [:font_size] @font_style = [:font_style] @horizontal_padding = [:horizontal_padding] || 0 @vertical_padding = [:vertical_padding] || 0 if [:padding] @horizontal_padding = @vertical_padding = [:padding] end @rowspan = [:rowspan] || 1 @colspan = [:colspan] || 1 end |
Instance Attribute Details
#align ⇒ Object
Returns the value of attribute align.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def align @align end |
#background_color ⇒ Object
Returns the value of attribute background_color.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def background_color @background_color end |
#border_color ⇒ Object
Returns the value of attribute border_color.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def border_color @border_color end |
#border_style ⇒ Object
Returns the value of attribute border_style.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def border_style @border_style end |
#border_width ⇒ Object
Returns the value of attribute border_width.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def border_width @border_width end |
#borders=(value) ⇒ Object
Sets the attribute borders
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def borders=(value) @borders = value end |
#colspan ⇒ Object
Returns the value of attribute colspan.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def colspan @colspan end |
#document ⇒ Object
Returns the value of attribute document.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def document @document end |
#font_size ⇒ Object
Returns the value of attribute font_size.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def font_size @font_size end |
#font_style ⇒ Object
Returns the value of attribute font_style.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def font_style @font_style end |
#height ⇒ Object
The height of the cell in PDF points
81 82 83 |
# File 'lib/prawn/flexible-table/cell.rb', line 81 def height @height || text_area_height + 2*@vertical_padding end |
#horizontal_padding ⇒ Object
Returns the value of attribute horizontal_padding.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def horizontal_padding @horizontal_padding end |
#point ⇒ Object
Returns the value of attribute point.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def point @point end |
#rowspan ⇒ Object
Returns the value of attribute rowspan.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def rowspan @rowspan end |
#text_color ⇒ Object
Returns the value of attribute text_color.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def text_color @text_color end |
#vertical_padding ⇒ Object
Returns the value of attribute vertical_padding.
58 59 60 |
# File 'lib/prawn/flexible-table/cell.rb', line 58 def vertical_padding @vertical_padding end |
#width ⇒ Object
The width of the cell in PDF points
76 77 78 |
# File 'lib/prawn/flexible-table/cell.rb', line 76 def width @width || (@document.width_of(@text, :size => @font_size)) + 2*@horizontal_padding end |
Instance Method Details
#draw ⇒ Object
Draws the cell onto the PDF document
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/prawn/flexible-table/cell.rb', line 99 def draw rel_point = @point if @background_color @document.mask(:fill_color) do @document.fill_color @background_color h = borders.include?(:bottom) ? height - border_width : height + border_width / 2.0 @document.fill_rectangle [rel_point[0] + border_width / 2.0, rel_point[1] - border_width / 2.0 ], width - border_width, h end 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 [rel_point[0], rel_point[1] + (@border_width / 2.0)], [rel_point[0], rel_point[1] - height - @border_width / 2.0 ] end if borders.include?(:right) @document.stroke_line( [rel_point[0] + width, rel_point[1] + (@border_width / 2.0)], [rel_point[0] + width, rel_point[1] - height - @border_width / 2.0] ) end if borders.include?(:top) @document.stroke_line( [ rel_point[0] + @border_width / 2.0, rel_point[1] ], [ rel_point[0] - @border_width / 2.0 + width, rel_point[1] ]) end if borders.include?(:bottom) @document.stroke_line [rel_point[0], rel_point[1] - height ], [rel_point[0] + width, rel_point[1] - height] end end end borders end @document.bounding_box( [@point[0] + @horizontal_padding, @point[1] - @vertical_padding], :width => text_area_width, :height => height - @vertical_padding) do @document.move_down((@document.font.line_gap - @document.font.descender)/2) = {:align => @align, :final_gap => false} [:size] = @font_size if @font_size [:style] = @font_style if @font_style @document.mask(:fill_color) do @document.fill_color @text_color if @text_color @document.text @text, end end end |
#text_area_height ⇒ Object
The height of the text area excluding the vertical padding
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/prawn/flexible-table/cell.rb', line 86 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 |
#text_area_width ⇒ Object
The width of the text area excluding the horizonal padding
71 72 73 |
# File 'lib/prawn/flexible-table/cell.rb', line 71 def text_area_width width - 2*@horizontal_padding end |
#to_s ⇒ Object
Returns the cell’s text as a string.
66 67 68 |
# File 'lib/prawn/flexible-table/cell.rb', line 66 def to_s @text end |