The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Win32::Font::NameToFile - Return the name of a TrueType font file from a description

SYNOPSIS

        use Win32::Font::NameToFile qw(get_ttf_abs_path get_ttf_filename get_ttf_matching);
        use GD;
        use GD::Text::Wrap;

        #
        #       using a simple, absolute path font description
        #
        my $img = GD::image->new();
        my $gdtext = GD::Text::Wrap->new($img);
        $gdtext->set_font(get_ttf_abs_path('Palatino Linotype Bold Italic'), 12);
        #
        #       using a simple font description with point size
        #
        $gdtext->font_path("$ENV{SYSTEMROOT}\\Fonts");
        $gdtext->set_font(get_ttf_filename('Palatino Linotype Bold Italic 12');
        #
        #       using a font description from a Perl/Tk Tk::Font object
        #
        my $img = GD::image->new();
        my $gdtext = GD::Text::Wrap->new($img);
        $gdtext->set_font(get_ttf_abs_path($tkfont));
        #
        #       using a partial font description
        #
        $gdtext->font_path("$ENV{SYSTEMROOT}\\Fonts");
        my @fonts = get_ttf_matching('Palatino');
        $gdtext->set_font($fonts[1], 12)
                if @fonts;

DESCRIPTION

Returns filenames for a TrueType font on Win32 platforms, using either a descriptive name, or a Perl/Tk Font object.

If the name string does not end with a number, then returns a scalar string for either the absolute path (for get_abs_path()), or only the filename without any file qualifier (for get_filename()).

Otherwise, for descriptive text names that end with a number, or for Perl/Tk Tk::Font objects, returns a list of the absolute path (for get_abs_path()), or the filename without any file qualifier (for get_filename()), and the point size of the font (useful to simplify calls to GD::Text::set_font()).

Note that all methods are static (i.e., class) methods, and are exported.

METHODS

get_ttf_abs_path( font-description | Tk::Font object )

Returns the full path to the font file, as described above.

get_ttf_filename( font-description | Tk::Font object )

Returns the font filename, with any file qualifier removed, as described above.

get_ttf_bold( font-description | Tk::Font object )
get_ttf_italic( font-description | Tk::Font object )
get_ttf_bold_italic( font-description | Tk::Font object )

Returns true (as the absolute filename) if there is a version of the font that is bold, italic, or both.

@allfonts = get_ttf_list()

Returns a list of all available font descriptions. NOTE: the returned descriptions have been normalized to all lower case.

%allfonts = get_ttf_map()

Returns a list of all available (font description, filename) pairs (suitable for storing in a hash). NOTE: the returned descriptions have been normalized to all lower case, and the filenames are all upper case, and do not include the full path prefix.

%fonts = get_ttf_matching($string)

Returns a list of all available (font description, filename) pairs (suitable for storing in a hash) that begin with $string. NOTE: the returned descriptions have been normalized to all lower case, and the filenames are all upper case, and do not include the full path prefix.

NOTES

  • The font registry information is read once when the module is loaded, and the information is stored in a package variable. Therefore, any changes to the font registry after the package is loaded will not be reflected by the module until the application is restarted.

  • Descriptive font naming can vary significantly, though in most cases the name is followed by the weight (if any) and then the slant (if any). As ever, YMMV.

  • This module treats "Oblique" slant the same as italic.

  • In order to normalize lookups, font names are stored internally in all lower case, and the file names are stored in all upper case.

  • Some fonts do not have explicit fontfiles for their bold or italic versions, but are manipulated by other packages (e.g., Perl/Tk) to implement the weight or slant programmatically.

  • Some fonts are hidden files, and thus may not show up in either the registry, or in the values return by this module.

  • When using Perl/Tk Font objects, be aware that the returned size value depends on the -size value supplied when the font was created. If a positive -size was specified, then the size is in pixels; if negative, the size is in points. This module detects and negates the latter -size's when returning the results. Alas, there is no simple/perfect method for deriving points from pixels, so caution is advised.

  • The test suite assumes the usual Arial font types are available.

PREREQUISITES

Win32::TieRegistry

AUTHOR and COPYRIGHT

Copyright(C) 2006, Dean Arnold, Presicient Corp., USA. All rights reserved.

mailto:darnold@presicient.com

You may use this software under the same terms as Perl itself. See the Perl Artistic license for details.