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
- #avg_width ⇒ Object readonly
- #cap_height ⇒ Object readonly
- #descent ⇒ Object readonly
- #font_bounding_box ⇒ Object readonly
- #font_family ⇒ Object readonly
- #font_flags ⇒ Object readonly
- #font_name ⇒ Object readonly
- #font_stretch ⇒ Object readonly
- #font_weight ⇒ Object readonly
- #italic_angle ⇒ Object readonly
- #leading ⇒ Object readonly
- #max_width ⇒ Object readonly
- #missing_width ⇒ Object readonly
- #stem_v ⇒ Object readonly
- #x_height ⇒ Object readonly
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).
- #glyph_width(char_code) ⇒ Object
-
#initialize(ohash, fd_hash) ⇒ FontDescriptor
constructor
A new instance of FontDescriptor.
Constructor Details
#initialize(ohash, fd_hash) ⇒ FontDescriptor
Returns a new instance of FontDescriptor.
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)
31 32 33 |
# File 'lib/pdf/reader/font_descriptor.rb', line 31 def ascent @ascent end |
#avg_width ⇒ Object (readonly)
40 41 42 |
# File 'lib/pdf/reader/font_descriptor.rb', line 40 def avg_width @avg_width end |
#cap_height ⇒ Object (readonly)
28 29 30 |
# File 'lib/pdf/reader/font_descriptor.rb', line 28 def cap_height @cap_height end |
#descent ⇒ Object (readonly)
34 35 36 |
# File 'lib/pdf/reader/font_descriptor.rb', line 34 def descent @descent end |
#font_bounding_box ⇒ Object (readonly)
25 26 27 |
# File 'lib/pdf/reader/font_descriptor.rb', line 25 def font_bounding_box @font_bounding_box end |
#font_family ⇒ Object (readonly)
16 17 18 |
# File 'lib/pdf/reader/font_descriptor.rb', line 16 def font_family @font_family end |
#font_flags ⇒ Object (readonly)
58 59 60 |
# File 'lib/pdf/reader/font_descriptor.rb', line 58 def font_flags @font_flags end |
#font_name ⇒ Object (readonly)
13 14 15 |
# File 'lib/pdf/reader/font_descriptor.rb', line 13 def font_name @font_name end |
#font_stretch ⇒ Object (readonly)
19 20 21 |
# File 'lib/pdf/reader/font_descriptor.rb', line 19 def font_stretch @font_stretch end |
#font_weight ⇒ Object (readonly)
22 23 24 |
# File 'lib/pdf/reader/font_descriptor.rb', line 22 def font_weight @font_weight end |
#italic_angle ⇒ Object (readonly)
49 50 51 |
# File 'lib/pdf/reader/font_descriptor.rb', line 49 def italic_angle @italic_angle end |
#leading ⇒ Object (readonly)
37 38 39 |
# File 'lib/pdf/reader/font_descriptor.rb', line 37 def leading @leading end |
#max_width ⇒ Object (readonly)
43 44 45 |
# File 'lib/pdf/reader/font_descriptor.rb', line 43 def max_width @max_width end |
#missing_width ⇒ Object (readonly)
46 47 48 |
# File 'lib/pdf/reader/font_descriptor.rb', line 46 def missing_width @missing_width end |
#stem_v ⇒ Object (readonly)
52 53 54 |
# File 'lib/pdf/reader/font_descriptor.rb', line 52 def stem_v @stem_v end |
#x_height ⇒ Object (readonly)
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)
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
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 |