Class: HexaPDF::Type::FontSimple
- Inherits:
-
Font
- Object
- Object
- Dictionary
- Font
- HexaPDF::Type::FontSimple
- Defined in:
- lib/hexapdf/type/font_simple.rb
Overview
Represents a simple PDF font.
A simple font has only single-byte character codes and only supports horizontal metrics.
See: PDF1.7 s9.6
Direct Known Subclasses
Constant Summary
Constants included from DictionaryFields
DictionaryFields::Boolean, DictionaryFields::PDFByteString, DictionaryFields::PDFDate
Instance Attribute Summary
Attributes inherited from Object
#data, #document, #must_be_indirect
Instance Method Summary collapse
-
#decode(string) ⇒ Object
Decodes the given string into an array of character codes.
-
#encoding ⇒ Object
Returns the encoding object used for this font.
-
#symbolic? ⇒ Boolean
Returns
true
if the font is a symbolic font,false
if it is not, andnil
if it is not known. -
#to_utf8(code) ⇒ Object
Returns the UTF-8 string for the given character code, or calls the configuration option ‘font.on_missing_unicode_mapping’ if no mapping was found.
-
#width(code) ⇒ Object
Returns the unscaled width of the given code point in glyph units, or 0 if the width for the code point is missing.
-
#word_spacing_applicable? ⇒ Boolean
Returns whether word spacing is applicable when using this font.
-
#writing_mode ⇒ Object
Returns the writing mode which is always :horizontal for simple fonts like Type1.
Methods inherited from Font
#bounding_box, #embedded?, #font_file, #font_wrapper, #font_wrapper=, #must_be_indirect?
Methods inherited from Dictionary
#[], #[]=, define_field, define_type, #delete, #each, each_field, #empty?, field, #key?, #to_h, type, #type
Methods inherited from Object
#<=>, #==, #cache, #cached?, #clear_cache, deep_copy, #deep_copy, #document?, #eql?, #gen, #gen=, #hash, #indirect?, #initialize, #inspect, #must_be_indirect?, #null?, #oid, #oid=, #type, #validate, #value, #value=
Constructor Details
This class inherits a constructor from HexaPDF::Object
Instance Method Details
#decode(string) ⇒ Object
Decodes the given string into an array of character codes.
84 85 86 |
# File 'lib/hexapdf/type/font_simple.rb', line 84 def decode(string) string.bytes end |
#encoding ⇒ Object
Returns the encoding object used for this font.
Note that the encoding is cached internally when accessed the first time.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/hexapdf/type/font_simple.rb', line 59 def encoding cache(:encoding) do case (val = self[:Encoding]) when Symbol encoding = HexaPDF::Font::Encoding.for_name(val) encoding = encoding_from_font if encoding.nil? encoding when HexaPDF::Dictionary encoding = val[:BaseEncoding] && HexaPDF::Font::Encoding.for_name(val[:BaseEncoding]) encoding ||= if || symbolic? encoding_from_font else HexaPDF::Font::Encoding.for_name(:StandardEncoding) end encoding = difference_encoding(encoding, val[:Differences]) if val.key?(:Differences) encoding when nil encoding_from_font else raise HexaPDF::Error, "Unknown value for font's encoding: #{self[:Encoding]}" end end end |
#symbolic? ⇒ Boolean
Returns true
if the font is a symbolic font, false
if it is not, and nil
if it is not known.
117 118 119 |
# File 'lib/hexapdf/type/font_simple.rb', line 117 def symbolic? self[:FontDescriptor]&.flagged?(:symbolic) end |
#to_utf8(code) ⇒ Object
Returns the UTF-8 string for the given character code, or calls the configuration option ‘font.on_missing_unicode_mapping’ if no mapping was found.
90 91 92 |
# File 'lib/hexapdf/type/font_simple.rb', line 90 def to_utf8(code) to_unicode_cmap&.to_unicode(code) || encoding.unicode(code) || missing_unicode_mapping(code) end |
#width(code) ⇒ Object
Returns the unscaled width of the given code point in glyph units, or 0 if the width for the code point is missing.
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/hexapdf/type/font_simple.rb', line 96 def width(code) widths = self[:Widths] first_char = self[:FirstChar] last_char = self[:LastChar] if widths && code >= first_char && code <= last_char widths[code - first_char] elsif widths && key?(:FontDescriptor) self[:FontDescriptor][:MissingWidth] else 0 end end |
#word_spacing_applicable? ⇒ Boolean
Returns whether word spacing is applicable when using this font.
Always returns true
for simple fonts.
See: PDF1.7 s9.3.3
126 127 128 |
# File 'lib/hexapdf/type/font_simple.rb', line 126 def word_spacing_applicable? true end |
#writing_mode ⇒ Object
Returns the writing mode which is always :horizontal for simple fonts like Type1.
111 112 113 |
# File 'lib/hexapdf/type/font_simple.rb', line 111 def writing_mode :horizontal end |