Module: PDF::Core::Text
- Defined in:
- lib/pdf/core/text.rb
Overview
:nodoc:
Constant Summary collapse
- VALID_OPTIONS =
These should be used as a base. Extensions may build on this list
[:kerning, :size, :style]
- MODES =
{ :fill => 0, :stroke => 1, :fill_stroke => 2, :invisible => 3, :fill_clip => 4, :stroke_clip => 5, :fill_stroke_clip => 6, :clip => 7 }
Instance Attribute Summary collapse
-
#skip_encoding ⇒ Object
readonly
Returns the value of attribute skip_encoding.
Instance Method Summary collapse
- #add_text_content(text, x, y, options) ⇒ Object
-
#character_spacing(amount = nil) ⇒ Object
Increases or decreases the space between characters.
-
#default_kerning(boolean) ⇒ Object
(also: #default_kerning=)
Call with a boolean to set the document-wide kerning setting.
-
#default_kerning? ⇒ Boolean
Retrieve the current default kerning setting.
-
#default_leading(number = nil) ⇒ Object
(also: #default_leading=)
Call with no argument to retrieve the current default leading.
-
#fallback_fonts(fallback_fonts = nil) ⇒ Object
(also: #fallback_fonts=)
Call with no argument to retrieve the current fallback fonts.
- #forget_text_rendering_mode! ⇒ Object
-
#process_text_options(options) ⇒ Object
Low level call to set the current font style and extract text options from an options hash.
-
#text_direction(direction = nil) ⇒ Object
(also: #text_direction=)
Call with no argument to retrieve the current text direction.
-
#text_rendering_mode(mode = nil) ⇒ Object
Call with no argument to retrieve the current text rendering mode.
-
#word_spacing(amount = nil) ⇒ Object
Increases or decreases the space between words.
Instance Attribute Details
#skip_encoding ⇒ Object (readonly)
Returns the value of attribute skip_encoding.
19 20 21 |
# File 'lib/pdf/core/text.rb', line 19 def skip_encoding @skip_encoding end |
Instance Method Details
#add_text_content(text, x, y, options) ⇒ Object
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/pdf/core/text.rb', line 232 def add_text_content(text, x, y, ) chunks = font.encode_text(text,) add_content "\nBT" if [:rotate] rad = [:rotate].to_f * Math::PI / 180 arr = [ Math.cos(rad), Math.sin(rad), -Math.sin(rad), Math.cos(rad), x, y ] add_content "%.3f %.3f %.3f %.3f %.3f %.3f Tm" % arr else add_content "#{x} #{y} Td" end chunks.each do |(subset, string)| font.add_to_current_page(subset) add_content "/#{font.identifier_for(subset)} #{font_size} Tf" operation = [:kerning] && string.is_a?(Array) ? "TJ" : "Tj" add_content PDF::Core::PdfObject(string, true) << " " << operation end add_content "ET\n" end |
#character_spacing(amount = nil) ⇒ Object
Increases or decreases the space between characters. For horizontal text, a positive value will increase the space. For veritical text, a positive value will decrease the space.
200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/pdf/core/text.rb', line 200 def character_spacing(amount=nil) return defined?(@character_spacing) && @character_spacing || 0 if amount.nil? original_character_spacing = character_spacing if original_character_spacing == amount yield else @character_spacing = amount add_content "\n%.3f Tc" % amount yield add_content "\n%.3f Tc" % original_character_spacing @character_spacing = original_character_spacing end end |
#default_kerning(boolean) ⇒ Object Also known as: default_kerning=
Call with a boolean to set the document-wide kerning setting. This can be overridden using the :kerning text option when drawing text or a text box.
pdf.default_kerning = false
pdf.text("hello world") # text is not kerned
pdf.text("hello world", :kerning => true) # text is kerned
55 56 57 |
# File 'lib/pdf/core/text.rb', line 55 def default_kerning(boolean) @default_kerning = boolean end |
#default_kerning? ⇒ Boolean
Retrieve the current default kerning setting.
Defaults to true
42 43 44 45 |
# File 'lib/pdf/core/text.rb', line 42 def default_kerning? return true if !defined?(@default_kerning) @default_kerning end |
#default_leading(number = nil) ⇒ Object Also known as: default_leading=
Call with no argument to retrieve the current default leading.
Call with a number to set the document-wide text leading. This can be overridden using the :leading text option when drawing text or a text box.
pdf.default_leading = 7
pdf.text("hello world") # a leading of 7 is used
pdf.text("hello world", :leading => 0) # a leading of 0 is used
Defaults to 0
73 74 75 76 77 78 79 |
# File 'lib/pdf/core/text.rb', line 73 def default_leading(number=nil) if number.nil? defined?(@default_leading) && @default_leading || 0 else @default_leading = number end end |
#fallback_fonts(fallback_fonts = nil) ⇒ Object Also known as: fallback_fonts=
Call with no argument to retrieve the current fallback fonts.
Call with an array of font names. Each name must be the name of an AFM font or the name that was used to register a family of TTF fonts (see Prawn::Document#font_families). If present, then each glyph will be rendered using the first font that includes the glyph, starting with the current font and then moving through :fallback_fonts from left to right.
Call with an empty array to turn off fallback fonts
file = “#Prawn::DATADIR/fonts/gkai00mp.ttf” font_families = {
:normal => { :file => file, :font => "Kai" }
} file = “#Prawn::DATADIR/fonts/Action Man.dfont” font_families[“Action Man”] = {
:normal => { :file => file, :font => "ActionMan" },
} fallback_fonts [“Times-Roman”, “Kai”] font “Action Man” text “hello ƒ 你好” > hello prints in Action Man > ƒ prints in Times-Roman > 你好 prints in Kai
fallback_fonts [] # clears document-wide fallback fonts
Side effects:
-
Increased overhead when fallback fonts are declared as each glyph is checked to see whether it exists in the current font
145 146 147 148 149 150 151 |
# File 'lib/pdf/core/text.rb', line 145 def fallback_fonts(fallback_fonts=nil) if fallback_fonts.nil? defined?(@fallback_fonts) && @fallback_fonts || [] else @fallback_fonts = fallback_fonts end end |
#forget_text_rendering_mode! ⇒ Object
192 193 194 |
# File 'lib/pdf/core/text.rb', line 192 def forget_text_rendering_mode! @text_rendering_mode = :unknown end |
#process_text_options(options) ⇒ Object
Low level call to set the current font style and extract text options from an options hash. Should be called from within a save_font block
24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/pdf/core/text.rb', line 24 def () if [:style] raise "Bad font family" unless font.family font(font.family, :style => [:style]) end # must compare against false to keep kerning on as default unless [:kerning] == false [:kerning] = font.has_kerning_data? end [:size] ||= font_size end |
#text_direction(direction = nil) ⇒ Object Also known as: text_direction=
Call with no argument to retrieve the current text direction.
Call with a symbol to set the document-wide text direction. This can be overridden using the :direction text option when drawing text or a text box.
pdf.text_direction = :rtl
pdf.text("hello world") # prints "dlrow olleh"
pdf.text("hello world", :direction => :ltr) # prints "hello world"
Valid directions are:
-
:ltr - left-to-right (default)
-
:rtl - right-to-left
Side effects:
-
When printing left-to-right, the default text alignment is :left
-
When printing right-to-left, the default text alignment is :right
103 104 105 106 107 108 109 |
# File 'lib/pdf/core/text.rb', line 103 def text_direction(direction=nil) if direction.nil? defined?(@text_direction) && @text_direction || :ltr else @text_direction = direction end end |
#text_rendering_mode(mode = nil) ⇒ Object
Call with no argument to retrieve the current text rendering mode.
Call with a symbol and block to temporarily change the current text rendering mode.
pdf.text_rendering_mode(:stroke) do
pdf.text("Outlined Text")
end
Valid modes are:
-
:fill - fill text (default)
-
:stroke - stroke text
-
:fill_stroke - fill, then stroke text
-
:invisible - invisible text
-
:fill_clip - fill text then add to path for clipping
-
:stroke_clip - stroke text then add to path for clipping
-
:fill_stroke_clip - fill then stroke text, then add to path for clipping
-
:clip - add text to path for clipping
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/pdf/core/text.rb', line 174 def text_rendering_mode(mode=nil) return (defined?(@text_rendering_mode) && @text_rendering_mode || :fill) if mode.nil? unless MODES.key?(mode) raise ArgumentError, "mode must be between one of #{MODES.keys.join(', ')} (#{mode})" end original_mode = self.text_rendering_mode if original_mode == mode yield else @text_rendering_mode = mode add_content "\n#{MODES[mode]} Tr" yield add_content "\n#{MODES[original_mode]} Tr" @text_rendering_mode = original_mode end end |
#word_spacing(amount = nil) ⇒ Object
Increases or decreases the space between words. For horizontal text, a positive value will increase the space. For veritical text, a positive value will decrease the space.
218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/pdf/core/text.rb', line 218 def word_spacing(amount=nil) return defined?(@word_spacing) && @word_spacing || 0 if amount.nil? original_word_spacing = word_spacing if original_word_spacing == amount yield else @word_spacing = amount add_content "\n%.3f Tw" % amount yield add_content "\n%.3f Tw" % original_word_spacing @word_spacing = original_word_spacing end end |