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
Returns the value of attribute ascent.
-
#avg_width ⇒ Object
readonly
Returns the value of attribute avg_width.
-
#cap_height ⇒ Object
readonly
Returns the value of attribute cap_height.
-
#descent ⇒ Object
readonly
Returns the value of attribute descent.
-
#font_bounding_box ⇒ Object
readonly
Returns the value of attribute font_bounding_box.
-
#font_family ⇒ Object
readonly
Returns the value of attribute font_family.
-
#font_flags ⇒ Object
readonly
Returns the value of attribute font_flags.
-
#font_name ⇒ Object
readonly
Returns the value of attribute font_name.
-
#font_stretch ⇒ Object
readonly
Returns the value of attribute font_stretch.
-
#font_weight ⇒ Object
readonly
Returns the value of attribute font_weight.
-
#italic_angle ⇒ Object
readonly
Returns the value of attribute italic_angle.
-
#leading ⇒ Object
readonly
Returns the value of attribute leading.
-
#max_width ⇒ Object
readonly
Returns the value of attribute max_width.
-
#missing_width ⇒ Object
readonly
Returns the value of attribute missing_width.
-
#stem_v ⇒ Object
readonly
Returns the value of attribute stem_v.
-
#x_height ⇒ Object
readonly
Returns the value of attribute x_height.
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.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/pdf/reader/font_descriptor.rb', line 15 def initialize(ohash, fd_hash) @ascent = ohash.object(fd_hash[:Ascent]) || 0 @descent = ohash.object(fd_hash[:Descent]) || 0 @missing_width = ohash.object(fd_hash[:MissingWidth]) || 0 @font_bounding_box = ohash.object(fd_hash[:FontBBox]) || [0,0,0,0] @avg_width = ohash.object(fd_hash[:AvgWidth]) || 0 @cap_height = ohash.object(fd_hash[:CapHeight]) || 0 @font_flags = ohash.object(fd_hash[:Flags]) || 0 @italic_angle = ohash.object(fd_hash[:ItalicAngle]) @font_name = ohash.object(fd_hash[:FontName]).to_s @leading = ohash.object(fd_hash[:Leading]) || 0 @max_width = ohash.object(fd_hash[:MaxWidth]) || 0 @stem_v = ohash.object(fd_hash[:StemV]) @x_height = ohash.object(fd_hash[:XHeight]) @font_stretch = ohash.object(fd_hash[:FontStretch]) || :Normal @font_weight = ohash.object(fd_hash[:FontWeight]) || 400 @font_family = ohash.object(fd_hash[:FontFamily]) # 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.object(fd_hash[:FontFile2]) #TODO handle FontFile and FontFile3 @is_ttf = true if @font_program_stream end |
Instance Attribute Details
#ascent ⇒ Object (readonly)
Returns the value of attribute ascent.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def ascent @ascent end |
#avg_width ⇒ Object (readonly)
Returns the value of attribute avg_width.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def avg_width @avg_width end |
#cap_height ⇒ Object (readonly)
Returns the value of attribute cap_height.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def cap_height @cap_height end |
#descent ⇒ Object (readonly)
Returns the value of attribute descent.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def descent @descent end |
#font_bounding_box ⇒ Object (readonly)
Returns the value of attribute font_bounding_box.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_bounding_box @font_bounding_box end |
#font_family ⇒ Object (readonly)
Returns the value of attribute font_family.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_family @font_family end |
#font_flags ⇒ Object (readonly)
Returns the value of attribute font_flags.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_flags @font_flags end |
#font_name ⇒ Object (readonly)
Returns the value of attribute font_name.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_name @font_name end |
#font_stretch ⇒ Object (readonly)
Returns the value of attribute font_stretch.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_stretch @font_stretch end |
#font_weight ⇒ Object (readonly)
Returns the value of attribute font_weight.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def font_weight @font_weight end |
#italic_angle ⇒ Object (readonly)
Returns the value of attribute italic_angle.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def italic_angle @italic_angle end |
#leading ⇒ Object (readonly)
Returns the value of attribute leading.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def leading @leading end |
#max_width ⇒ Object (readonly)
Returns the value of attribute max_width.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def max_width @max_width end |
#missing_width ⇒ Object (readonly)
Returns the value of attribute missing_width.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def missing_width @missing_width end |
#stem_v ⇒ Object (readonly)
Returns the value of attribute stem_v.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 def stem_v @stem_v end |
#x_height ⇒ Object (readonly)
Returns the value of attribute x_height.
10 11 12 |
# File 'lib/pdf/reader/font_descriptor.rb', line 10 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)
64 65 66 67 68 69 70 71 |
# File 'lib/pdf/reader/font_descriptor.rb', line 64 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
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pdf/reader/font_descriptor.rb', line 47 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 puts "Char Code: #{char_code} -- Advance Width: #{char_metric.advance_width}" > 0 return char_metric.advance_width end end end |