CAM-PDFTaxforms
view release on metacpan or search on metacpan
lib/CAM/PDFTaxforms.pm view on Meta::CPAN
# Fix autoscale fonts
$stringwidth = 0;
my $lines = 0;
for my $line (split /\n/xmso, $text) # trailing null strings omitted
{
$lines++;
my $w = $self->getStringWidth($fontmetrics, $line);
$stringwidth = $w if ($w && $w > $stringwidth);
}
$lines ||= 1;
# Initial guess
$fontsize = ($dy - 2 * $border) / ($lines * 1.5);
my $fontwidth = $fontsize * $stringwidth;
my $maxwidth = $dx - 2 * $border;
$fontsize *= $maxwidth / $fontwidth if ($fontwidth > $maxwidth);
$da =~ s/ \/$fontname\s+0\s+Tf\b /\/$fontname $fontsize Tf/gxms;
}
if ($fontsize)
{
# This formula is TOTALLY empirical. It's probably wrong.
# #JWT:CHGD. TO NEXT: $ty = $border + 2 + (9 - $fontsize) * 0.4;
lib/CAM/PDFTaxforms.pm view on Meta::CPAN
# escape characters
$text = $self->writeString($text);
if ($flags{Multiline})
{
# TODO: wrap the field with wrapString()??
# Shawn Dawson of Silent Solutions pointed out that this does not auto-wrap the input text
my $linebreaks = $text =~ s/ \\n /\) Tj T* \(/gxms;
# Total guess work:
# line height is either 150% of fontsize or thrice
# the corner offset
$tl = $fontsize ? $fontsize * 1.5 : $ty * 3;
# Bottom aligned
#$ty += $linebreaks * $tl;
# Top aligned
$ty = $dy - $border - $tl;
warn 'Justified text not supported for multiline fields' if ($flags{Justify} ne 'left');
$tl .= ' TL';
( run in 1.347 second using v1.01-cache-2.11-cpan-748bfb374f4 )