Sha256: 95147d570745c69bd940aacba7d5e7c820ab58bdfedcb11a68caa16363fad548

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

# ## TrueType Fonts
#
# This example displays all glyphs of a TrueType font and shows that using a
# TrueType font with HexaPDF is very similar to using one of the standard PDF
# fonts.
#
# Before a TrueType font can be used, HexaPDF needs to be made aware of it. This
# is done by setting the configuration option 'font.map'.
#
# Once that is done the [HexaPDF::Content::Canvas#font] method can be used as
# usual.
#
# Usage:
# : `ruby truetype.pdf [FONT_FILE]`
#

require 'hexapdf'

doc = HexaPDF::Document.new
doc.config['font.on_missing_glyph'] = ->(n,f) { f.missing_glyph_id }
doc.config['font.map'] = {
  'myfont' => {none: ARGV.shift || File.join(__dir__, '../test/data/fonts/Ubuntu-Title.ttf')}
}

wrapper = doc.fonts.load('myfont')
max_gid = wrapper.wrapped_font[:maxp].num_glyphs

255.times do |page|
  break unless page * 256 < wrapper.wrapped_font[:maxp].num_glyphs
  canvas = doc.pages.add.canvas
  canvas.font("Helvetica", size: 10)
  canvas.text("Font: #{wrapper.wrapped_font.full_name}", at: [50, 825])

  canvas.font("myfont", size: 15)
  16.times do |y|
    canvas.move_text_cursor(offset: [50, 800 - y * 50], absolute: true)
    canvas.show_glyphs((0..15).map do |i|
      gid = page * 256 + y * 16 + i
      glyph = wrapper.glyph(gid)
      gid > max_gid ? [] : [glyph, -(2000 - glyph.width)]
    end.flatten!)
  end
end

doc.write("truetype.pdf", optimize: true)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hexapdf-0.3.0 examples/truetype.rb
hexapdf-0.2.0 examples/truetype.rb