class Prawn::Font

Provides font information and helper functions.

Attributes

family[R]

The current font family

name[R]

The current font name

options[R]

The options hash used to initialize the font

Public Class Methods

font_format(src, options) click to toggle source
# File lib/prawn/font.rb, line 305
def self.font_format(src, options)
  return options.fetch(:format, 'ttf') if src.respond_to? :read

  case src.to_s
  when /\.ttf$/i   then return 'ttf'
  when /\.dfont$/i then return 'dfont'
  when /\.ttc$/i   then return 'ttc'
  else return 'afm'
  end
end
load(document, src, options = {}) click to toggle source

Shortcut interface for constructing a font object. Filenames of the form *.ttf will call Font::TTF.new, *.dfont Font::DFont.new, *.ttc goes to Font::TTC.new, and anything else will be passed through to Font::AFM.new()

# File lib/prawn/font.rb, line 296
def self.load(document, src, options = {})
  case font_format(src, options)
  when 'ttf'   then TTF.new(document, src, options)
  when 'dfont' then DFont.new(document, src, options)
  when 'ttc'   then TTC.new(document, src, options)
  else AFM.new(document, src, options)
  end
end

Public Instance Methods

add_to_current_page(subset) click to toggle source

Registers the given subset of the current font with the current PDF page. This is safe to call multiple times for a given font and subset, as it will only add the font the first time it is called.

# File lib/prawn/font.rb, line 379
def add_to_current_page(subset)
  @references[subset] ||= register(subset)
  @document.state.page.fonts.merge!(
    identifier_for(subset) => @references[subset]
  )
end
ascender() click to toggle source

The size of the font ascender in PDF points

# File lib/prawn/font.rb, line 330
def ascender
  @ascender / 1000.0 * size
end
descender() click to toggle source

The size of the font descender in PDF points

# File lib/prawn/font.rb, line 336
def descender
  -@descender / 1000.0 * size
end
height() click to toggle source

Gets height of current font in PDF points at current font size

# File lib/prawn/font.rb, line 371
def height
  height_at(size)
end
height_at(size) click to toggle source

Gets height of current font in PDF points at the given font size

# File lib/prawn/font.rb, line 364
def height_at(size)
  @normalized_height ||= (@ascender - @descender + @line_gap) / 1000.0
  @normalized_height * size
end
line_gap() click to toggle source

The size of the recommended gap between lines of text in PDF points

# File lib/prawn/font.rb, line 342
def line_gap
  @line_gap / 1000.0 * size
end
normalize_encoding(_string) click to toggle source

Normalizes the encoding of the string to an encoding supported by the font. The string is expected to be UTF-8 going in. It will be re-encoded and the new string will be returned. For an in-place (destructive) version, see normalize_encoding!.

# File lib/prawn/font.rb, line 350
def normalize_encoding(_string)
  raise NotImplementedError,
    'subclasses of Prawn::Font must implement #normalize_encoding'
end
normalize_encoding!(str) click to toggle source

Destructive version of normalize_encoding; normalizes the encoding of a string in place.

# File lib/prawn/font.rb, line 358
def normalize_encoding!(str)
  str.replace(normalize_encoding(str))
end

Private Instance Methods

generate_unique_id() click to toggle source

generate a font identifier that hasn't been used on the current page yet

# File lib/prawn/font.rb, line 414
def generate_unique_id
  key = nil
  font_count = @document.font_registry.size + 1
  loop do
    key = :"F#{font_count}"
    break if key_is_unique?(key)
    font_count += 1
  end
  key
end
key_is_unique?(test_key) click to toggle source
# File lib/prawn/font.rb, line 425
def key_is_unique?(test_key)
  !@document.state.page.fonts.keys.any? do |key|
    key.to_s.start_with?("#{test_key}.")
  end
end
size() click to toggle source
# File lib/prawn/font.rb, line 431
def size
  @document.font_size
end