class Prawn::Font
Provides font information and helper functions.
Attributes
The current font family
The current font name
The options hash used to initialize the font
Public Class Methods
# 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
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
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
The size of the font ascender in PDF
points
# File lib/prawn/font.rb, line 330 def ascender @ascender / 1000.0 * size end
The size of the font descender in PDF
points
# File lib/prawn/font.rb, line 336 def descender -@descender / 1000.0 * size end
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
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
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
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
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 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
# 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
# File lib/prawn/font.rb, line 431 def size @document.font_size end