[[Raku PDF Project]](https://pdf-raku.github.io) / [[PDF-Font-Loader]](https://pdf-raku.github.io/PDF-Font-Loader-raku/) [![Build Status](https://travis-ci.org/pdf-raku/PDF-Font-Loader-raku.svg?branch=master)](https://travis-ci.org/pdf-raku/PDF-Font-Loader-raku) NAME ==== PDF::Font::Loader SYNPOSIS ======== # load a font from a file use PDF::Font::Loader :load-font; my $deja = PDF::Font::Loader.load-font: :file; my $deja = load-font( :file ); # find/load system fonts; requires fontconfig use PDF::Font::Loader :load-font, :find-font; $deja = load-font( :family, :slant ); my Str $file = find-font( :family, :slant ); my $deja-vu = load-font: :$file; # use the font to add text to a PDF use PDF::Lite; my PDF::Lite $pdf .= new; $pdf.add-page.text: { .font = $deja; .text-position = [10, 600]; .say: 'Hello, world'; } $pdf.save-as: "/tmp/example.pdf"; DESCRIPTION =========== This module provdes font loading and handling for [PDF::Lite](https://pdf-raku.github.io/PDF-Lite-raku), [PDF::API6](https://pdf-raku.github.io/PDF-API6) and other PDF modules. METHODS ======= ### load-font A class level method to create a new font object. #### `PDF::Font::Loader.load-font(Str :$file, Bool :$subset, :$enc, $lang);` Loads a font file. parameters: * `:$file` Font file to load. Currently supported formats are: * Open-Type (`.otf`) * True-Type (`.ttf`) * Postscript (`.pfb`, or `.pfa`) * CFF (`.cff`) * `:$subset` Whether to subset the font for compaction. The font is reduced to the set of characters that have been actually been encoded. This can greatly reduce the output size of the generated PDF file. Currently implemented for TrueType fonts only. * `:$enc` Selects the encoding mode: common modes are `win`, `mac` and `identity-h`. * `mac` Macintosh platform single byte encoding * `win` Windows platform single byte encoding * `identity-h` a degenerative two byte encoding mode `win` is used as the default encoding for fonts with no more than 255 glyphs. `identity-h` is used otherwise. It is recommended that you set a single byte encoding such as `:enc` or `:enc` when it known that no more that 255 distinct characters will actually be used from the font within the PDF. #### `PDF::Font::Loader.load-font(Str :$family, Str :$weight, Str :$stretch, Str :$slant, Bool :$subset, Str :$enc, Str :$lang);` my $vera = PDF::Font::Loader.load-font: :family; my $deja = PDF::Font::Loader.load-font: :family, :weight, :stretch :slant); Loads a font by a fontconfig name and attributes. Note: Requires fontconfig to be installed on the system. parameters: * `:$family` Family name of an installed system font to load. * `:$weight` Font weight, one of: `thin`, `extralight`, `light`, `book`, `regular`, `medium`, `semibold`, `bold`, `extrabold`, `black` or a number in the range `100` .. `900`. * `:$stretch` Font stretch, one of: `normal`, `ultracondensed`, `extracondensed`, `condensed`, or `expanded` * `:$slant` Font slat, one of: `normal`, `oblique`, or `italic` * `:$lang` A RFC-3066-style language tag. `fontconfig` will select only fonts whose character set matches the preferred lang. See also [I18N::LangTags](https://modules.raku.org/dist/I18N::LangTags:cpan:UFOBAT). ### find-font use PDF::Font::Loader :Weight # thin|extralight|light|book|regular|medium|semibold|bold|extrabold|black|100..900 :Stretch # normal|[ultra|extra]?[condensed|expanded] :Slant # normal|oblique|italic ; find-font(Str :$family, # e.g. :family Weight :$weight, Stretch :$stretch, Slant :$slant, Str :$lang, # e.g. :lang ); Locates a matching font-file. Doesn't actually load it. my $file = PDF::Font::Loader.find-font: :family, :weight, :width, :slant, :lang; say $file; # /usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-BoldOblique.ttf my $font = PDF::Font::Loader.load-font: :$file; INSTALL ======= - PDF::Font::Loader depends on Font::FreeType which further depends on the [freetype](https://www.freetype.org/download.html) library, so you must install that prior to installing this module. - Installation of the [fontconfig](https://www.freedesktop.org/wiki/Software/fontconfig/) library and command-line tools is strongly recommended.