Class: PDF::Reader::FontDescriptor
- Inherits:
-
Object
- Object
- PDF::Reader::FontDescriptor
- Defined in:
- lib/pdf/reader/font_descriptor.rb
Overview
Font descriptors are outlined in Section 9.8, PDF 32000-1:2008, pp 281-288
Instance Attribute Summary collapse
-
#ascent ⇒ Object
readonly
: Numeric.
-
#avg_width ⇒ Object
readonly
: Numeric.
-
#cap_height ⇒ Object
readonly
: Numeric.
-
#descent ⇒ Object
readonly
: Numeric.
-
#font_bounding_box ⇒ Object
readonly
: Array.
-
#font_family ⇒ Object
readonly
: String?.
-
#font_flags ⇒ Object
readonly
: Integer.
-
#font_name ⇒ Object
readonly
: String.
-
#font_stretch ⇒ Object
readonly
: Symbol.
-
#font_weight ⇒ Object
readonly
: Numeric.
-
#italic_angle ⇒ Object
readonly
: Numeric?.
-
#leading ⇒ Object
readonly
: Numeric.
-
#max_width ⇒ Object
readonly
: Numeric.
-
#missing_width ⇒ Object
readonly
: Numeric.
-
#stem_v ⇒ Object
readonly
: Numeric?.
-
#x_height ⇒ Object
readonly
: Numeric?.
Instance Method Summary collapse
-
#glyph_to_pdf_scale_factor ⇒ Object
PDF states that a glyph is 1000 units wide, true type doesn’t enforce any behavior, but uses units/em to define how wide the ‘M’ is (the widest letter) : () -> Numeric.
-
#glyph_width(char_code) ⇒ Object
: (Integer) -> Numeric.
-
#initialize(ohash, fd_hash) ⇒ FontDescriptor
constructor
: (PDF::Reader::ObjectHash, Hash[untyped, untyped]) -> void.
Constructor Details
#initialize(ohash, fd_hash) ⇒ FontDescriptor
: (PDF::Reader::ObjectHash, Hash[untyped, untyped]) -> void
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/pdf/reader/font_descriptor.rb', line 61 def initialize(ohash, fd_hash) # TODO change these to typed derefs @ascent = ohash.deref_number(fd_hash[:Ascent]) || 0 #: Numeric @descent = ohash.deref_number(fd_hash[:Descent]) || 0 #: Numeric @missing_width = ohash.deref_number(fd_hash[:MissingWidth]) || 0 #: Numeric @font_bounding_box = ohash.deref_array_of_numbers( fd_hash[:FontBBox] ) || [0,0,0,0] #: Array[Numeric] @avg_width = ohash.deref_number(fd_hash[:AvgWidth]) || 0 #: Numeric @cap_height = ohash.deref_number(fd_hash[:CapHeight]) || 0 #: Numeric @font_flags = ohash.deref_integer(fd_hash[:Flags]) || 0 #: Integer @italic_angle = ohash.deref_number(fd_hash[:ItalicAngle]) #: Numeric? @font_name = ohash.deref_name(fd_hash[:FontName]).to_s #: String @leading = ohash.deref_number(fd_hash[:Leading]) || 0 #: Numeric @max_width = ohash.deref_number(fd_hash[:MaxWidth]) || 0 #: Numeric @stem_v = ohash.deref_number(fd_hash[:StemV]) #: Numeric? @x_height = ohash.deref_number(fd_hash[:XHeight]) #: Numeric? @font_stretch = ohash.deref_name(fd_hash[:FontStretch]) || :Normal #: Symbol @font_weight = ohash.deref_number(fd_hash[:FontWeight]) || 400 #: Numeric @font_family = ohash.deref_string(fd_hash[:FontFamily]) #: String? # A FontDescriptor may have an embedded font program in FontFile # (Type 1 Font Program), FontFile2 (TrueType font program), or # FontFile3 (Other font program as defined by Subtype entry) # Subtype entries: # 1) Type1C: Type 1 Font Program in Compact Font Format # 2) CIDFontType0C: Type 0 Font Program in Compact Font Format # 3) OpenType: OpenType Font Program # see Section 9.9, PDF 32000-1:2008, pp 288-292 @font_program_stream = ohash.deref_stream(fd_hash[:FontFile2]) #: PDF::Reader::Stream? #TODO handle FontFile and FontFile3 @ttf_program_stream = nil #: TTFunk::File? @is_ttf = @font_program_stream ? true : false #: bool @glyph_to_pdf_sf = nil #: Numeric? end |
Instance Attribute Details
#ascent ⇒ Object (readonly)
: Numeric
31 32 33 |
# File 'lib/pdf/reader/font_descriptor.rb', line 31 def ascent @ascent end |
#avg_width ⇒ Object (readonly)
: Numeric
40 41 42 |
# File 'lib/pdf/reader/font_descriptor.rb', line 40 def avg_width @avg_width end |
#cap_height ⇒ Object (readonly)
: Numeric
28 29 30 |
# File 'lib/pdf/reader/font_descriptor.rb', line 28 def cap_height @cap_height end |
#descent ⇒ Object (readonly)
: Numeric
34 35 36 |
# File 'lib/pdf/reader/font_descriptor.rb', line 34 def descent @descent end |
#font_bounding_box ⇒ Object (readonly)
: Array
25 26 27 |
# File 'lib/pdf/reader/font_descriptor.rb', line 25 def font_bounding_box @font_bounding_box end |
#font_family ⇒ Object (readonly)
: String?
16 17 18 |
# File 'lib/pdf/reader/font_descriptor.rb', line 16 def font_family @font_family end |
#font_flags ⇒ Object (readonly)
: Integer
58 59 60 |
# File 'lib/pdf/reader/font_descriptor.rb', line 58 def font_flags @font_flags end |
#font_name ⇒ Object (readonly)
: String
13 14 15 |
# File 'lib/pdf/reader/font_descriptor.rb', line 13 def font_name @font_name end |
#font_stretch ⇒ Object (readonly)
: Symbol
19 20 21 |
# File 'lib/pdf/reader/font_descriptor.rb', line 19 def font_stretch @font_stretch end |
#font_weight ⇒ Object (readonly)
: Numeric
22 23 24 |
# File 'lib/pdf/reader/font_descriptor.rb', line 22 def font_weight @font_weight end |
#italic_angle ⇒ Object (readonly)
: Numeric?
49 50 51 |
# File 'lib/pdf/reader/font_descriptor.rb', line 49 def italic_angle @italic_angle end |
#leading ⇒ Object (readonly)
: Numeric
37 38 39 |
# File 'lib/pdf/reader/font_descriptor.rb', line 37 def leading @leading end |
#max_width ⇒ Object (readonly)
: Numeric
43 44 45 |
# File 'lib/pdf/reader/font_descriptor.rb', line 43 def max_width @max_width end |
#missing_width ⇒ Object (readonly)
: Numeric
46 47 48 |
# File 'lib/pdf/reader/font_descriptor.rb', line 46 def missing_width @missing_width end |
#stem_v ⇒ Object (readonly)
: Numeric?
52 53 54 |
# File 'lib/pdf/reader/font_descriptor.rb', line 52 def stem_v @stem_v end |
#x_height ⇒ Object (readonly)
: Numeric?
55 56 57 |
# File 'lib/pdf/reader/font_descriptor.rb', line 55 def x_height @x_height end |
Instance Method Details
#glyph_to_pdf_scale_factor ⇒ Object
PDF states that a glyph is 1000 units wide, true type doesn’t enforce any behavior, but uses units/em to define how wide the ‘M’ is (the widest letter) : () -> Numeric
118 119 120 121 122 123 124 125 |
# File 'lib/pdf/reader/font_descriptor.rb', line 118 def glyph_to_pdf_scale_factor if @is_ttf @glyph_to_pdf_sf ||= (1.0 / ttf_program_stream.header.units_per_em) * 1000.0 else @glyph_to_pdf_sf ||= 1.0 end @glyph_to_pdf_sf end |
#glyph_width(char_code) ⇒ Object
: (Integer) -> Numeric
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/pdf/reader/font_descriptor.rb', line 99 def glyph_width(char_code) if @is_ttf if ttf_program_stream.cmap.unicode.length > 0 glyph_id = ttf_program_stream.cmap.unicode.first[char_code] else glyph_id = char_code end char_metric = ttf_program_stream.horizontal_metrics.metrics[glyph_id] if char_metric char_metric.advance_width else 0 end end end |