### Home Classes Methods

### In Files

- lib/prawn/text/formatted/box.rb

### Parent

Object

### Methods

- ::extensions
- ::inherited
- ::new
- #available_width
- #everything_printed?
- #height
- #line_gap
- #nothing_printed?
- #render
- #valid_options

### Class/Module Index

Quicksearch

- Prawn
- Prawn::Configurable
- Prawn::Document
- Prawn::Document::BoundingBox
- Prawn::Document::ColumnBox
- Prawn::Document::GraphicsState
- Prawn::Document::Grid
- Prawn::Document::GridBox
- Prawn::Document::Internals
- Prawn::Document::Security
- Prawn::Document::Snapshot
- Prawn::Encoding
- Prawn::Errors
- Prawn::Font
- Prawn::Font::AFM
- Prawn::Font::DFont
- Prawn::Font::TTF
- Prawn::FontMetricCache
- Prawn::Graphics
- Prawn::Graphics::CapStyle
- Prawn::Graphics::Color
- Prawn::Graphics::Dash
- Prawn::Graphics::JoinStyle
- Prawn::Graphics::Patterns
- Prawn::Graphics::Transformation
- Prawn::Graphics::Transparency
- Prawn::ImageHandler
- Prawn::Images
- Prawn::Images::Image
- Prawn::Images::JPG
- Prawn::Images::PNG
- Prawn::Measurements
- Prawn::SoftMask
- Prawn::Stamp
- Prawn::SynchronizedCache
- Prawn::Table
- Prawn::Table::Cell
- Prawn::Table::Cell::Image
- Prawn::Table::Cell::InTable
- Prawn::Table::Cell::SpanDummy
- Prawn::Table::Cell::Subtable
- Prawn::Table::Cell::Text
- Prawn::Table::Cells
- Prawn::Table::ColumnWidthCalculator
- Prawn::Text
- Prawn::Text::Box
- Prawn::Text::Formatted
- Prawn::Text::Formatted::Box
- Prawn::Text::Formatted::Fragment
- Prawn::Text::Formatted::Parser
- Prawn::ThreadLocalCache
- PDF
- PDF::Core
- PDF::Core::Reference
- PDF::Core::Stream
- Arcfour
- Numeric

No matching classes.

# Prawn::Text::Formatted::Box

Generally, one would use the Prawn::Text::Formatted#formatted_text_box convenience method. However, using Text::Formatted::Box.new in conjunction with render(:dry_run => true) enables one to do look-ahead calculations prior to placing text on the page, or to determine how much vertical space was consumed by the printed text

### Attributes

ascender[R]

The height of the ascender of the last line printed

at[R]

The upper left corner of the text box

descender[R]

The height of the descender of the last line printed

leading[R]

The leading used during printing

line_height[R]

The line height of the last line printed

text[R]

The text that was successfully printed (or, if `dry_run` was used, the text that would have been successfully printed)

### Public Class Methods

extensions() click to toggle source

Example (see Prawn::Text::Core::Formatted::Wrap for what is required of the wrap method if you want to override the default wrapping algorithm):

    module MyWrap

      def wrap(array)
        initialize_wrap([{ :text => 'all your base are belong to us' }])
        @line_wrap.wrap_line(:document => @document,
                             :kerning => @kerning,
                             :width => 10000,
                             :arranger => @arranger)
        fragment = @arranger.retrieve_fragment
        format_and_draw_fragment(fragment, 0, @line_wrap.width, 0)
        []
      end

    end

    Prawn::Text::Formatted::Box.extensions << MyWrap

    box = Prawn::Text::Formatted::Box.new('hello world')
    box.render('why can't I print anything other than' +
               '"all your base are belong to us"?')

    # File lib/prawn/text/formatted/box.rb, line 323
    def self.extensions
      @extensions ||= []
    end

inherited(base) click to toggle source

@private

    # File lib/prawn/text/formatted/box.rb, line 328
    def self.inherited(base)
      extensions.each { |e| base.extensions << e }
    end

new(formatted_text, options={}) click to toggle source

See Prawn::Text#text_box for valid options

    # File lib/prawn/text/formatted/box.rb, line 138
    def initialize(formatted_text, options={})
      @inked             = false
      Prawn.verify_options(valid_options, options)
      options            = options.dup

      self.class.extensions.reverse_each { |e| extend e }

      @overflow          = options[:overflow] || :truncate

      self.original_text = formatted_text
      @text              = nil

      @document          = options[:document]
      @direction         = options[:direction] || @document.text_direction
      @fallback_fonts    = options[:fallback_fonts] ||
                           @document.fallback_fonts
      @at                = (options[:at] ||
                           [@document.bounds.left, @document.bounds.top]).dup
      @width             = options[:width] ||
                           @document.bounds.right - @at[0]
      @height            = options[:height] || default_height
      @align             = options[:align] ||
                           (@direction == :rtl ? :right : :left)
      @vertical_align    = options[:valign] || :top
      @leading           = options[:leading] || @document.default_leading
      @character_spacing = options[:character_spacing] ||
                           @document.character_spacing
      @mode              = options[:mode] || @document.text_rendering_mode
      @rotate            = options[:rotate] || 0
      @rotate_around     = options[:rotate_around] || :upper_left
      @single_line       = options[:single_line]
      @skip_encoding     = options[:skip_encoding] || @document.skip_encoding
      @draw_text_callback = options[:draw_text_callback]

      # if the text rendering mode is :unknown, force it back to :fill
      if @mode == :unknown
        @mode = :fill
      end

      if @overflow == :expand
        # if set to expand, then we simply set the bottom
        # as the bottom of the document bounds, since that
        # is the maximum we should expand to
        @height = default_height
        @overflow = :truncate
      end
      @min_font_size = options[:min_font_size] || 5
      if options[:kerning].nil? then
        options[:kerning] = @document.default_kerning?
      end
      @options = { :kerning => options[:kerning],
        :size    => options[:size],
        :style   => options[:style] }

      super(formatted_text, options)
    end

### Public Instance Methods

available_width() click to toggle source

The width available at this point in the box

    # File lib/prawn/text/formatted/box.rb, line 239
    def available_width
      @width
    end

everything_printed?() click to toggle source

True iff everything printed (or, if `dry_run` was used, everything would have been successfully printed)

    # File lib/prawn/text/formatted/box.rb, line 117
    def everything_printed?
      @everything_printed
    end

height() click to toggle source

The height actually used during the previous `render`

    # File lib/prawn/text/formatted/box.rb, line 245
    def height
      return 0 if @baseline_y.nil? || @descender.nil?
      (@baseline_y - @descender).abs
    end

line_gap() click to toggle source

    # File lib/prawn/text/formatted/box.rb, line 132
    def line_gap
      line_height - (ascender + descender)
    end

nothing_printed?() click to toggle source

True iff nothing printed (or, if `dry_run` was used, nothing would have been successfully printed)

    # File lib/prawn/text/formatted/box.rb, line 111
    def nothing_printed?
      @nothing_printed
    end

render(flags={}) click to toggle source

Render text to the document based on the settings defined in initialize.

In order to facilitate look-ahead calculations, `render` accepts a `:dry_run => true` option. If provided, then everything is executed as if rendering, with the exception that nothing is drawn on the page. Useful for look-ahead computations of height, unprinted text, etc.

Returns any text that did not print under the current settings

    # File lib/prawn/text/formatted/box.rb, line 205
    def render(flags={})
      unprinted_text = []

      @document.save_font do
        @document.character_spacing(@character_spacing) do
          @document.text_rendering_mode(@mode) do
            process_options

            if @skip_encoding
              text = original_text
            else
              text = normalize_encoding
            end

            @document.font_size(@font_size) do
              shrink_to_fit(text) if @overflow == :shrink_to_fit
              process_vertical_alignment(text)
              @inked = true unless flags[:dry_run]
              if @rotate != 0 && @inked
                unprinted_text = render_rotated(text)
              else
                unprinted_text = wrap(text)
              end
              @inked = false
            end
          end
        end
      end

      unprinted_text
    end

valid_options() click to toggle source

    # File lib/prawn/text/formatted/box.rb, line 332
    def valid_options
      PDF::Core::Text::VALID_OPTIONS + [:at, :height, :width,
                                          :align, :valign,
                                          :rotate, :rotate_around,
                                          :overflow, :min_font_size,
                                          :leading, :character_spacing,
                                          :mode, :single_line,
                                          :skip_encoding,
                                          :document,
                                          :direction,
                                          :fallback_fonts,
                                          :draw_text_callback]
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.