The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use lib '../lib';
use PDF::API2;
use PDF::API2::Util;

my $sx=33;
my $sy=45;
my $fx=20;

foreach $fn (qw(
    Times-Roman
    Times-Italic
    Times-Bold
    Times-BoldItalic
    Courier
    Courier-Oblique
    Courier-Bold
    Courier-BoldOblique
    Helvetica
    Helvetica-Oblique
    Helvetica-Bold
    Helvetica-BoldOblique
    Symbol
    ZapfDingbats
    bankgothic
    georgia
    georgiaitalic
    georgiabold
    georgiabolditalic
    trebuchet
    trebuchetbold
    trebuchetbolditalic
    trebuchetitalic
    verdana
    verdanaitalic
    verdanabold
    verdanabolditalic
    wingdings
    webdings
)) {

    $pdf=PDF::API2->new;
    initNameTable();

    $f1=$pdf->corefont('Helvetica');

    print STDERR "\n$fn\n";


    my $fn1=$pdf->corefont($fn,-encode => 'latin1');

    my @fonts=($fn1,$fn1->automap());

    foreach my $fnt (@fonts) {

        foreach my $k ({-slant=>0.750},{-oblique=>12},{-bold=>4},{-caps=>1}) {

            my $font=$pdf->synfont($fnt, %{$k});

            my $page = $pdf->page;
            $page->mediabox(595,842);

            my $gfx=$page->gfx;

            my $txt=$page->text;
                $txt->font($font,$fx);

            my $txt2=$page->text;

                $txt2->translate(50,800);
                $txt2->font($f1,20);
                $txt2->text("font='".$font->fontname." / ".$font->name."'");

                $txt2->font($f1,5);
                $txt2->hspace(80);

            my $u=$font->underlineposition*$fx/1000;

            foreach $x (0..15) {
                print STDERR ".";
                foreach $y (0..15) {
                    $txt->translate(50+($sx*$x),50+($sy*$y));
                    $txt->text(chr($y*16+$x));

                    my $wx=$font->width(chr($y*16+$x))*$fx;

                    $gfx->strokecolor('lightblue');
                    $gfx->move(50+($sx*$x),50+($sy*$y)+$fx);
                    $gfx->line(50+($sx*$x),50+($sy*$y)+$u);
                    $gfx->line(50+($sx*$x)+$wx,50+($sy*$y)+$u);
                    $gfx->line(50+($sx*$x)+$wx,50+($sy*$y)+$fx);
                    $gfx->close;
                    $gfx->stroke;

                    $gfx->strokecolor('gray');
                    $gfx->move(50+($sx*$x),50+($sy*$y));
                    $gfx->line(50+($sx*$x)+$wx,50+($sy*$y));
                    $gfx->stroke;

                    $txt2->translate(50+($sx*$x)-2,50+($sy*$y)-6);
                    $txt2->text_right($y*16+$x);
                    $txt2->translate(50+($sx*$x)-2,50+($sy*$y)-11);
                    $txt2->text_right(sprintf('U=0x%04X',$font->uniByEnc($y*16+$x)));
                    $txt2->translate(50+($sx*$x)-2,50+($sy*$y)-16);
                    $txt2->text_right($font->glyphByEnc($y*16+$x));
                    $txt2->translate(50+($sx*$x)-2,50+($sy*$y)-21);
                    $txt2->text_right(sprintf('wx=%i',$font->wxByEnc($y*16+$x)));
                }
            }

            print STDERR "\n";
        }
    }
    
    $pdf->saveas("$0.$fn.pdf");
    $pdf->end();
    last;
}
exit;

__END__